프로그래밍 언어, 근본적인 특징을 파악하라!
'Ur-language' 개념을 통해 프로그래밍 언어를 ALGOL, Lisp, ML, Self, Forth, APL, Prolog 7가지 범주로 분류
각 Ur-language의 핵심 특징과 대표 언어를 소개하며, 새로운 언어 학습 시 유사한 Ur-language를 먼저 학습할 것을 권장
Ruby가 ALGOL 계열이 아닌 Self 계열 언어라는 지적과 함께, C++의 템플릿 메타 프로그래밍을 새로운 Ur-language로 볼 수 있다는 의견 제시
SQL을 Prolog 대신 스크립팅 언어에 포함해야 한다는 의견과, jq와 같은 스트림 처리 언어를 새로운 Ur-language로 추가해야 한다는 주장 제기
ALGOL 계열 언어의 특징과 역사
기사에서는 ALGOL을 가장 오래된 Ur-language로 정의하며, 순차적 할당, 조건문, 루프를 기반으로 하는 언어라고 설명한다. Fortran, C, Java, JavaScript 등 널리 사용되는 언어들이 이 계열에 속한다. 댓글에서는 Ruby가 ALGOL 계열이 아닌 Self 계열 언어라는 지적이 있었으며, 이는 Ruby의 객체 지향적 특성(Object-Oriented Characteristics)과 Smalltalk의 영향을 강조하는 것으로 해석된다.
Lisp의 독특한 문법과 매크로 시스템
Lisp는 괄호로 둘러싸인 접두사 표현식을 사용하며, 매크로 시스템(Macro System)을 통해 언어의 의미를 재정의할 수 있다는 특징을 가진다. 댓글에서는 Lisp의 수학적 배경과 초기 구현의 어려움, 그리고 AI 연구에서의 역할을 언급한다. 특히, Lisp 머신(Lisp Machines)의 등장이 IDE(Integrated Development Environments) 발전에 기여했다는 점이 주목할 만하다.
ML 계열 언어의 함수형 프로그래밍
ML 계열 언어는 함수를 일급 시민으로 취급하고, Hindley-Milner 타입 시스템을 사용하며, 재귀를 통해 반복을 수행한다. 댓글에서는 ML 계열 언어의 예시로 Haskell, OCaml 등을 언급하며, OCaml이 Self의 개념을 통합하려는 시도를 했다는 점을 지적한다. 이러한 특징은 ML 언어가 함수형 프로그래밍(Functional Programming)의 핵심 개념을 잘 보여주는 예시이다.
Self의 객체 지향 프로그래밍과 JavaScript
Self는 객체 간의 메시지 전달을 통해 동작하며, 클래스 대신 객체를 사용한다. 댓글에서는 Ruby가 Self의 영향을 받았다는 점을 강조하며, JavaScript가 Self의 classless object system에서 파생되었다는 점을 언급한다. 이러한 특징은 객체 지향 프로그래밍(Object-Oriented Programming)의 다양한 형태를 이해하는 데 중요한 시사점을 제공한다.
SQL과 Prolog의 관계
기사에서는 SQL을 Prolog 계열 언어로 분류하지만, 댓글에서는 SQL을 스크립팅 언어에 포함해야 한다는 의견이 제시된다. 이는 SQL의 선언적 특성(Declarative Nature)과 Prolog의 논리 프로그래밍 방식의 차이점을 강조하는 것으로 보인다. 또한, SQL이 경력에 가장 큰 도움이 되는 언어라는 점을 강조하며, SQL 학습의 중요성을 강조한다.
새로운 Ur-language의 등장: jq
댓글에서는 jq와 같은 스트림 처리 언어를 새로운 Ur-language로 추가해야 한다는 주장이 제기된다. jq는 여러 값을 생성하는 표현식을 사용하며, 데이터 변환(Data Munging)에 특화된 기능을 제공한다. 특히, jq의 함수형 프로그래밍(Functional Programming) 스타일과 간결한 문법은 데이터 처리 분야에서 새로운 가능성을 제시한다.