명령형 언어(imperative)
함수언어
논리언어
객체지향 언어: 명령형에 객체지향을 더 얹은 형태로 다른 카테고리는 아님
HTML: 하이퍼-텍스트-마크업-랭귀지
마크업-> 마크로 둘러싸인(tag로 둘러싼) 언어: 브라우저에 그림
프로그램을 어케 실행시킬 것인가.
3가지 방법
컴파일러
퓨어 인터프리터
하이브리드
처음:기계어로 프로그래밍함 ->불편
-> high level언어: 사람의 언어와 유사하게 -> 컴파일러가 필요해짐
그림1.3 컴파일러가 하는일을 보여줌
번역의 과정
sentence 단위 .과;
단어를 구분(lexical) lexem(어휘)
문법적으로 맞는가(systaxt analyzer)
번역해주기 전 중간코드를 만듬(intermedia code)
이 중간코드로 code optimization(빠르게 실행하는 방법 탐색)
-> 기계어로 번역함.
-인터프리터 방식(Pure interpretation)
하이레벨 프로그램을 기계어로 바꾸지 않고 그대로 실행
컴파일러말고 하이레벨 코드를 읽어들이는 다른 소프트웨어를 사용(인터프리터).
프로그램은 인터프리터 상에서 돌고, 인터프리터는 cpu위에서 돈다.
인터프리터=virtual machine ex)JVM
-인터프리터를 두는 것의 이득?
Pure interpretation has the advantage of allowing easy implementation of
many source-level debugging operations, because all run-time error messages can refer to source- level units
byte code와 기계어의 차이점
기계어는 cpu에 따라 달라짐. 하지만 byte code는 기계로부터 독립적이 될 수 있다. (jvm에 맞추면 되므로)
JIT(just intime implementation)
자바에서는 성능 향상을 위해 cpu에 맞는 byte code를 만들고 jvm에서 돌림.
####1.7.4 프리프로세서
자주 쓰는 코드,언어의 확장
확장 c-> c언어로 전처리
컴파일을 돌리기 전에 특정언어로 바꾸는 것(전처리기)
개발 툴들
UNIX,리눅스
VScode,
그림2.1 족보
포트란(fortran)-> 계산 용도, 최초의 highlevle 언어
Algol
Cobol-> db를 다루는 일이 많아짐. 비즈니스 분야로 용도가 확장.
Lisp->
C,pascal-> 현대 언어의 기반, algol이 모태
smalltalk 80->객체 지향 언어의 효시
c++,java-> 객체지향 언어
python-> pascal계열에서 파생.
90s 웹 언어들
Ada->
포트란 이전의 하이레벨 언어에 대한 시도가 있었다.
컴퓨터 역사의 전환점
하이레벨 언어의 탄생-> fortran