Written by JS970
on
on
프로그래밍언어론 2023-03-14 수업정리
Flow
- 컴파일러, 인터프리터, 하이브리드 방식의 Implementation
- FORTRAN(1957)
- LISP(1959)
Implementation
컴파일러 방식
인터프리터 방식
Hybrid 방식
- 서로 다른 ISA를 지원하는 하드웨어에서 작동하는 VM을 통해 인터프리터 방식의 Programming Language구현이 가능하다. 대표적으로 Java의 byte code가 있다. Java에서의 VM은 JVM이 된다.
FORTRAN(1957)
- FORTRAN은 초기 과학 연산 등에 사용되는 공식(FORmula)을 프로그램으로 변환(TRANsform)해주는 언어라는 뜻으로 FORTRAN이라는 이름으로 명명되었다.
- 초기 컴퓨터에 사용되었으며, 따로 효율적인 프로그래밍 기법은 존재하지 않았다.
FORTRAN I
- 첫 번째 FORTRAN이다.
- 여섯 문자의 변수명 설정, formatted I/O, User-defined subroutines등이 지원되었다.
- arithmetic IF(branch), posttest counting DO loop(loop)등 분기문과 반복문을 지원했다.
- 이를 지원하기 위해 statement좌측에 lable이라는 것을 선택적으로 지정할 수 있었다.
- arithmetic IF의 경우 파라미터 값(0, +, -) 에 따라 지정된 레이블로 이동했다.
- 별다른 선언 없이 implicit data type을 사용했다.
- I1 : 정수형
- x1 : 실수형
- target machine의 성능이 뛰어나지 않았기 때문에 매우 최적화된 코드를 사용했다.(18 worker-years optimization part)
- 400 line이상은 컴파일이 되지 않았다고 보면 된다.
- 코드는 Punched Card 를 통해 작성되었다. 아래 사진은 Z(1) = Y + W(1)을 의미하는 statement를 의미하는 Punched Card이다.
Evolutions of FORTRAN
- 이후로도 FORTRAN II, FORTRAN III, FORTRAN IV, FORTRAN 77등 계속해서 후속 버전이 나왔다.
- FORTRAN 90에서는 Private, Public의 Encapsulation이 지원되게 되었다. 또한 Common, Equivalence, Goto등의 문법이 삭제되었다.
- 가장 최근 버전은 FORTRAN 2008 이며, interdependencies가 없다면 parallel loop의 실행이 가능하다.
포트란은 가장 널리 사용된 첫 번째 고급 언어이다. 하지만 튜링 어워드의 첫 번째 수상자인 Alen Perlis는 포트란은 언어가 아니라고 말하는 등 혹평 역시 있었다.
LISP(1959)
John McCarthy에 의해 개발된 list processing language이다. MIT 교수였던 McCarthy는 과제로(...) 언어를 만들어 오라고 시켰으나, 제대로 한 사람이 없어 직접 만들었다고 한다.
- symbolic computation을 통해 AI분야에 널리 사용되었다.
- atoms, lists의 두 개의 데이터 타입을 가진다.
- 함수형 프로그래밍 언어이다.(The only operation is an application)
- 여전히 널리 사용되고 있으며, 현재는 컴퓨터 하드웨어의 발달로 꽤 효율적이다.
List Data Structure
- (A B C D) 는 일반적인 linked list이다.
- LISP에서는 list의 원소로 다시 list가 올 수 있어서 아래와 같은 형태의 generalized list를 생성 가능하다.
- 언어 자체에 괄호가 많아 혼란스러운 면이 있다.
LISP Variants
- Scheme : dynamic scoping을 지원했던 LISP와 달리 static scoping을 지원했다. 크기가 작다.
- Common LISP : static & dynamic scoping을 모두 지원했다. 큰 형태의 데이터 타입을 다룰 수 있다.
- Clojure : JVM위에서 동작 가능하다. .net과 JavaScript로 컴파일 될 수도 있다.
Other Functional Languages
- ML : meta language, 상업용 언어이다.
- Miranda
- Haskell : 위원회의 주관으로 만들었다. 병렬 프로그래밍에 매우 효율적이다. 함수형 프로그래밍 언어의 표준(?) 으로 여겨진다.
- Scala : functional 방식 뿐만 아니라 Object-oriented 방식도 지원한다. JVM 위에서 동작 가능하다. native compilation으로도 동작 가능하다.