함수는 왜 "호출한다"고 표현할까?

12 hours ago 1

  • 프로그래밍에서 함수를 "호출한다" 는 표현의 기원은, 도서관에서 책을 "청구"하거나 "부르는" 개념과 유사함
  • 초기 컴퓨팅에서는 서브루틴을 라이브러리에서 소환, 호출하는 방식이 주를 이룬 경향이 있음
  • Fortran II가 CALL 명령어를 도입하면서 "to call 함수"라는 표현을 빠르게 대중화함
  • 이후 Algol 및 JOVIAL 등의 언어도 이를 받아들여 "call"이라는 명사를 사용하게 됨
  • "call"의 의미는 런타임 제어 이전, 중, 이후로 점차 확대되어 정착됨

왜 프로그래머는 함수를 "호출(call)"한다고 말하는가?

  • StackExchange에서 "함수를 호출(call)한다"는 표현의 기원에 대해 질문이 있었음
  • 여러 비유가 있지만, 실제로는 "call"이 소환(summon)하거나 불러온다는 의미에서 유래함
    • 도서관에서 책을 "청구"하는 것처럼, 서브루틴을 "청구"해 사용하는 것에서 시작
    • "call number"가 도서관에서 책의 위치를 나타내는 표식임

도서관 용어에서의 "call"의 역사

  • OED에 따르면 Melvil Dewey가 1876년에 도서관 과학 용어로 "call number"를 처음 사용함
    • "call number"는 책의 위치나 청구 요청에 쓰이는 표기임
  • 1888년의 Library Journal에서도 "call blank", "call slip", "call number" 등의 용어가 일상적으로 사용됨
  • Joudrey & Taylor의 해설에 따르면, "call number"는 닫힌 서가에서 자료를 부르는 행위에서 나온 명칭임
    • Cutter number 같은 체계는 분류를 위해 도입됨

컴퓨터 과학에서의 "call" 사용 초기

  • John W. Mauchly의 1947년 논문에서는 서브루틴 라이브러리에서 서브루틴을 "called in"하여 사용하는 사례가 등장함
    • 기록된 번호로 빠르게 참조해 사용한다는 맥락
  • MANIAC II 어셈블리 루틴(1956) 역시, 각 서브루틴에 "call number"를 부여하고 이를 통해 필요할 때 불러오는 개념이 적용됨
    • 실제 어셈블리어에서는 "transfer control"로 지칭했음
  • 이 시기에는 런타임에서의 "호출"보다는, 컴파일 또는 링크 시점에 코드 조각을 불러오는 개념이 강조됨

프로그래밍 언어에서 "CALL" 명령의 등장

  • Fortran II(1958) 가 CALL 및 RETURN 명령어를 도입
    • "호출(call for)"이라는 동작으로 서브루틴에 실행 제어를 넘김
    • CALL 명령어가 실제로 "호출"하는 구문적 행위를 가리킴
  • 점차 런타임에서 "control을 transfer"하는 것과, 링크/어셈블 시점의 "호출" 행위가 모호하게 섞이기 시작함

1960년대 "call"의 의미 확장 및 정착

  • Sarbacher(1959) 의 사전에서는 "call in"을 메인 루틴에서 서브루틴으로의 제어 이동으로 정의
    • "call number"와 "call word"로 식별자, 호출 코드까지 설명함
  • JOVIAL(1960) 에서는 "procedure call", "calls" 등이 공식적으로 명사로 사용됨
    • 이후 호출 시점(site), 인수(argument), 파라미터 등 다층 의미와 함께 사용됨
  • Algol(1959~1960) 도 "procedure call", "called procedure", "during the call" 등 호출 시점을 다양하게 표현함
    • Peter Naur의 Algol 60 리포트에서도 "call for"와 "during the call"이라는 시간적 의미 구분 등장
  • Burroughs Algebraic Compiler(1961) 에서, 동사형 "to call"이 명확히 처음 나타남
  • Corbató 등(1963) 이후로 현대적 용법인 "to call a subroutine"이 일반화됨

결론

  • Fortran II의 "CALL X" 명령이 함수/서브루틴 호출에 "call" 표현을 자리잡게 함
    • 이전의 도서관적 개념(번호로 부름)에서 착안했으나, 프로그래밍 언어에서 새로운 의미 확장
  • 이후 Algol, JOVIAL 등 다양한 언어가 "call", "call site" 등 용어를 받아들임
  • 1961년 무렵부터 "to call X"라는 표현이 공식적인 프로그램 문서와 커뮤니티에서 정착되기 시작함

Read Entire Article