고수준 언어에서 프로그램 실행까지

솜주먹·2022년 8월 3일
0
post-custom-banner

📢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++, 포트란, 코볼....

    특징

    1. 컴파일은 오래 걸릴 수 있다 (엄청 긴 코드를 5시간에 걸쳐 컴파일 했는데
      변수 이름에 오타가 나서 에러가 발생 될 수 있다)
    2. 하지만 컴파일이 된 프로그램이라면? 굉장히 빠르게 실행이 가능 (번역과 실행이 따로 돌기에)
    3. 운영체제(OS) 이식성이 낮다 (OS마다 실행할 수 있는 기계어가 다른 경우가 있는데 다른 OS에서 실행 파일을 실행하려면 이전 실행파일은 실행되지 않음)

📖 인터프리터[2] 언어

  • 소스 코드를 한 줄씩 번역과 실행을 동시에 진행 (번역은 인터프리터를 통해 수행)
  • 대표적인 예시로 Python, R, JavaScript...

    특징

    1. 줄 단위로 번역과 실행을 하기 때문에 느리다
    2. 디버깅이 쉽다 (오류 나면 해당 코드 밑으로는 번역 및 실행이 안되기 때문)
    3. 운영체제 이식성이 좋다 (OS마다 호환되는 인터프리터만 준비되어 있다면 바로 실행 가능)

❓ 그럼 JAVA는? 얘는 좀 이상해서 하이브리드 언어라고 불림

  • 자바의 작동 원리
    ⓐ Java 컴파일러에 의해 번역(.class파일)
    ⓑ .class파일은 자바 가상 머신(JVM)이 실행시킬 수 있는 자바 바이트 코드 파일
    ⓒ JVM의 인터프리터를 이용하여 한줄 씩 실행

📌 프로그램 실행까지

📖 컴파일 아키텍처

  • 보통 세 개의 기본적인 요소로 구성
    1. 프론트엔드(front end) : 프로그램 텍스트를 해석해서 구문이 올바른지, 사용한 프로그래밍 언어의 규약대로 작성되었는지 확인하고 어떤 중간 형태로 만듬(중간 표현)
    2. 최적화기(optimizer)[3] : 프로그램 코드의 원래 의미를 유지시키면서 여러 가지 방법으로 프로그램을 향상시킴
    3. 백엔드(back end) : 중간 표현을 해당 플랫폼에 맞는 어셈블리 언어나 기계어로 변환

📌 고수준 프로그래밍 언어 비교

📖 포트란

  • 수식 변환기(FORmula TRANslator)라는 뜻으로, 이름 그대로 수식을 계산하는데 특화
  • 컴퓨터 공학에서는 죽은 언어로 인식하고 있지만 계산수학에서는 아직도 C와 더불어 활발하게 쓰임(기상데이터 처리 등)

📖 코볼

  • 미 해군이 개발에 참여하는 등 일반 업무에서 사용할 목적으로 만듬
  • 그래서 보고서 작성이나 회계 계산 등을 잘 지원하며 문법도 일반 영어 문장과 매우 흡사하다
  • 하지만 코더 입장에서는 안좋음
  • z=x+y;을 예시로 코볼에서는 MOVE X TO Z. ADD Y TO Z.라고 쓴다 (오히려 어셈블리어랑 비슷..)

💖 참조

CSE 전공노트
wonin의 공부노트


❓ 주석

  1. 컴파일러 : 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 프로그램
  2. 인터프리터 : 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경
  3. 최적화기 : 이건 상용 컴파일러에 추가되는 것 => 컴파일의 원리상 필수는 아닌데 해당 언어의 성능이나 자원 소모를 결정짓는 중요한 요소이긴함
post-custom-banner

0개의 댓글