📢Notice
- 개발자를 꿈꾸는 뉴비입니다.
- 틀린 부분이 있으면 지적 부탁드립니다.
📌 프로그래밍 언어
📖 기계어
- 컴퓨터가 사용하는 언어
- 좀 더 구체적으로 보면 CPU가 명령을 처리할 때 사용하는 언어
📖 어셈블리어
- 기계어에서 숫자를 의미 있는 단어로 바꿔서 사람들이 이해하기 쉽게 만든 언어
📖 고급 언어
- 사람이 이해하기 편하도록 만든 프로그래밍 언어
✍ 기계어 -> 어셈블리어 변환 예시
기계어(6-2) -> 16진 코드(6-3) -> 기호코드(6-4) -> 어셈블리 코드(6-5)
💬 정리 :
location: 메인메모리의 주소
000이 명령어라면 ->004를 LDA하라 -> 004번지 가서 데이터를 load하라
001이 명령어라면 ->005를 ADD하라 -> FFE9인 데이터 -> 음수인걸 알 수 있다.
002이 명령어라면 -> 006을 STA하라 -> 006 번지에 저장하라
003이 명령어라면 -> HLT -> 컴퓨터종료
📌 고급 언어 종류
📖 컴파일[1] 언어
- 작성한 소스 코드 전체를 컴퓨터가 알아먹는 기계어로 번역한 뒤 한번에 실행함
- 즉, 번역과 실행이 완전 따로 이루어짐
- 대표적인 예시로 C(중급 언어라고 부르기도함), C++, 포트란, 코볼....
특징
- 컴파일은 오래 걸릴 수 있다 (엄청 긴 코드를 5시간에 걸쳐 컴파일 했는데
변수 이름에 오타가 나서 에러가 발생 될 수 있다)
- 하지만 컴파일이 된 프로그램이라면? 굉장히 빠르게 실행이 가능 (번역과 실행이 따로 돌기에)
- 운영체제(OS) 이식성이 낮다 (OS마다 실행할 수 있는 기계어가 다른 경우가 있는데 다른 OS에서 실행 파일을 실행하려면 이전 실행파일은 실행되지 않음)
📖 인터프리터[2] 언어
- 소스 코드를 한 줄씩 번역과 실행을 동시에 진행 (번역은 인터프리터를 통해 수행)
- 대표적인 예시로 Python, R, JavaScript...
특징
- 줄 단위로 번역과 실행을 하기 때문에 느리다
- 디버깅이 쉽다 (오류 나면 해당 코드 밑으로는 번역 및 실행이 안되기 때문)
- 운영체제 이식성이 좋다 (OS마다 호환되는 인터프리터만 준비되어 있다면 바로 실행 가능)
❓ 그럼 JAVA는? 얘는 좀 이상해서 하이브리드 언어라고 불림
- 자바의 작동 원리
ⓐ Java 컴파일러에 의해 번역(.class파일)
ⓑ .class파일은 자바 가상 머신(JVM)이 실행시킬 수 있는 자바 바이트 코드 파일
ⓒ JVM의 인터프리터를 이용하여 한줄 씩 실행
📌 프로그램 실행까지
📖 컴파일 아키텍처
- 보통 세 개의 기본적인 요소로 구성
- 프론트엔드(front end) : 프로그램 텍스트를 해석해서 구문이 올바른지, 사용한 프로그래밍 언어의 규약대로 작성되었는지 확인하고 어떤 중간 형태로 만듬(중간 표현)
- 최적화기(optimizer)[3] : 프로그램 코드의 원래 의미를 유지시키면서 여러 가지 방법으로 프로그램을 향상시킴
- 백엔드(back end) : 중간 표현을 해당 플랫폼에 맞는
어셈블리 언어나 기계어로 변환
📌 고수준 프로그래밍 언어 비교
📖 포트란
- 수식 변환기(FORmula TRANslator)라는 뜻으로, 이름 그대로 수식을 계산하는데 특화
- 컴퓨터 공학에서는 죽은 언어로 인식하고 있지만 계산수학에서는 아직도 C와 더불어 활발하게 쓰임(기상데이터 처리 등)
📖 코볼
- 미 해군이 개발에 참여하는 등 일반 업무에서 사용할 목적으로 만듬
- 그래서 보고서 작성이나 회계 계산 등을 잘 지원하며 문법도 일반 영어 문장과 매우 흡사하다
- 하지만 코더 입장에서는 안좋음
- z=x+y;을 예시로 코볼에서는 MOVE X TO Z. ADD Y TO Z.라고 쓴다
(오히려 어셈블리어랑 비슷..)
💖 참조
CSE 전공노트
wonin의 공부노트
❓ 주석
- 컴파일러 : 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 프로그램
- 인터프리터 : 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경
- 최적화기 : 이건 상용 컴파일러에 추가되는 것 => 컴파일의 원리상 필수는 아닌데 해당 언어의 성능이나 자원 소모를 결정짓는 중요한 요소이긴함