맨위로가기

고급 프로그래밍 언어

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

고급 프로그래밍 언어는 기계어보다 높은 수준의 추상화를 제공하며, 변수, 객체, 함수 등의 개념을 사용하여 프로그램의 사용성에 중점을 둔다. 이러한 언어는 프로그래머가 기계의 세부 사항에서 분리될 수 있도록 하며, C, 자바 등이 대표적이다. 고급 언어는 인간이 이해하기 쉽고, 프로세서에 의존하지 않으며, 저수준의 메모리 및 IO 제어를 직접 다루지 않아 편리하다. 하지만 추상화로 인해 성능 저하가 발생할 수 있는데, 이를 '추상화 페널티'라고 한다. 고급 언어는 인터프리터 방식 또는 컴파일 방식으로 실행되며, 소스 대 소스 번역을 통해 다른 저급 언어로 변환되기도 한다. 또한, 고급 언어를 직접 실행하는 고급 언어 컴퓨터 아키텍처도 존재하며, 컴파일러와 인터프리터를 통해 하드웨어와 고급 언어 사이의 시맨틱 갭을 줄이려는 노력이 이루어지고 있다.

더 읽어볼만한 페이지

  • 프로그래밍 언어 분류 - 하드웨어 기술 언어
    하드웨어 기술 언어(HDL)는 전자 시스템의 구조와 동작을 텍스트 기반으로 표현하는 언어로, 디지털 회로 설계의 핵심 도구로 사용되며, 시뮬레이션 및 디버깅을 통해 설계 검증을 수행한다.
  • 프로그래밍 언어 분류 - 시각적 프로그래밍 언어
    시각적 프로그래밍 언어는 프로그램 구성을 위해 그래픽 또는 아이콘 요소를 사용하는 프로그래밍 언어로서, 프로그래밍 입문자의 접근성을 높이고 프로그래머를 지원하며, 구문 오류 감소, 의미 명확화, 동작 연구 지원 등의 기능을 제공한다.
  • 고급 프로그래밍 언어 - Tcl
    Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다.
  • 고급 프로그래밍 언어 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
고급 프로그래밍 언어
개요
어셈블리 언어 프로그램이 기계 코드로 컴파일되는 모습.
어셈블리 언어 프로그램이 기계 코드로 컴파일되는 모습.
종류명령형
고안자그레이스 호퍼
존 바커스
코라도 뵈엠
김중수
설계 시기1950년대
특징
추상화 수준높음
사용 편의성쉬움
이식성높음
메모리 관리자동 또는 수동
에러 처리예외 처리, 오류 코드
역사
배경기계어의 복잡성 극복
개발 동기생산성 향상 및 유지보수 용이성
발전 과정컴파일러 및 인터프리터 기술 발전
장점 및 단점
장점생산성 향상
유지보수 용이
코드 재사용성 증가
다양한 라이브러리 및 프레임워크 활용 가능
단점실행 속도 저하 가능성
메모리 사용량 증가 가능성
저수준 제어의 어려움
예시
주요 언어C 언어
C++
자바
파이썬
C#
JavaScript
PHP
Go
Swift
Kotlin
활용 분야
응용 소프트웨어워드 프로세서
스프레드시트
웹 브라우저
시스템 소프트웨어운영 체제
컴파일러
데이터베이스 관리 시스템
웹 개발웹 서버
웹 프레임워크
웹 애플리케이션
모바일 앱 개발iOS 앱
안드로이드 앱
게임 개발게임 엔진
게임 로직
데이터 과학데이터 분석
머신 러닝
인공지능
프로그래밍 패러다임
종류명령형 프로그래밍
객체 지향 프로그래밍
함수형 프로그래밍
선언형 프로그래밍
개발 환경
통합 개발 환경 (IDE)Visual Studio
Eclipse
IntelliJ IDEA
Xcode
Android Studio
디버깅
디버깅 방법중단점 설정
변수 값 추적
단계별 실행
관련 용어
컴파일러고수준 언어를 기계어로 번역
인터프리터고수준 언어를 한 줄씩 실행
소스 코드사람이 읽을 수 있는 형태의 코드
객체 코드컴파일된 기계어 코드
실행 파일실행 가능한 형태의 파일
기타
참고 문헌컴퓨터 과학
프로그래밍 언어론

2. 특징

고급 프로그래밍 언어는 기계어보다 높은 수준의 추상화를 제공한다. 이는 레지스터, 메모리 주소, 호출 스택 대신 변수, 배열, 객체, 복잡한 수식, 부울 표현식, 서브루틴, 함수, 루프, 스레드, 잠금 등 추상적인 컴퓨터 과학 개념을 사용하여 프로그램의 최적 효율성보다 사용성에 중점을 둔다는 것을 의미한다.

고급 언어는 어셈블리어와 달리 기계의 기본 연산 코드로 직접 변환되는 언어 요소가 거의 없으며, 문자열 처리 루틴, 객체 지향 언어 기능 및 파일 입/출력과 같은 다른 기능도 있을 수 있다. 고급 프로그래밍 언어는 프로그래머가 기계로부터 분리될 수 있도록 돕는다. 즉, 저급 언어와 달리 고급 프로그래밍은 프로그래머의 지침을 증폭시키고 프로그래머가 알지 못하는 사이에 많은 데이터 이동을 백그라운드에서 트리거할 수 있다. 지침 실행 책임과 권한은 프로그래머에서 기계로 넘어간다.

대표적인 고급 프로그래밍 언어로는 C 언어나 자바가 있다.

고급 언어는 저급 언어에 비해 다음과 같은 특징을 가진다.


  • 인간이 이해하기 쉽다.
  • 프로세서에 의존하는 처리를 작성할 필요가 없다.
  • 메모리 제어, 입출력(IO) 제어 등 저수준 조작을 의식하지 않아도 된다.

2. 1. 추상화 페널티

고급 프로그래밍 언어는 특정 하드웨어의 성능을 최적화하거나 활용할 수 없기 때문에 "추상화 페널티"를 갖는다. 이는 특정 저수준 아키텍처 리소스를 활용하지 않기 때문이다.[6][7][8] 고급 프로그래밍은 더 일반적인 데이터 구조 및 연산, 런타임 해석, 중간 코드 파일과 같은 기능을 나타내며, 이는 종종 불필요한 연산 실행, 더 높은 메모리 소비, 더 큰 바이너리 프로그램 크기를 초래한다.[6][7][8]

그러나 현대 마이크로프로세서 아키텍처의 복잡성이 증가함에 따라, 잘 설계된 고급 언어 컴파일러는 대부분의 저수준 프로그래머가 직접 제작할 수 있는 것과 유사한 효율성의 코드를 생성하는 경우가 많다. 더 높은 추상화 수준은 특정 설정에서 저수준 프로그램보다 더 나은 전체 결과를 제공하는 더 강력한 기법을 가능하게 할 수 있다.[9]

3. 실행 방식

현대 고급 프로그래밍 언어는 일반적으로 다음 세 가지 방식 중 하나로 실행된다.[6][7][8]


  • 인터프리터 방식: 인터프리터는 컴파일 과정 없이 코드를 실행한다.
  • 컴파일 방식: 컴파일된 코드는 실행 전에 실행 가능한 형태로 변환된다. 기계어 생성과 중간 표현 방식이 있다.
  • 소스 대 소스 번역 (트랜스컴파일): 코드를 저급 프로그래밍 언어 형태로 변환한다.


고급 언어는 특정 컴퓨팅 시스템 아키텍처와 무관하게 설계되어, 인터프리터 또는 JIT 프로그램을 지원하는 모든 시스템에서 실행 가능하다. 설계자가 개선하면 고급 언어도 개선될 수 있다. 스칼라처럼 자바와의 하위 호환성을 유지하는 경우도 있어 전환이 쉽고 코드 수명이 연장된다. 반면 저수준 프로그램은 대규모 수정 없이는 작성된 시스템 아키텍처를 넘어서기 어렵다.

3. 1. 인터프리터 방식

인터프리터 언어는 컴파일 과정 없이 코드를 직접 읽고 실행한다. 인터프리터는 각 프로그램 문을 읽고 프로그램 흐름에 따라 동작을 결정하고 수행한다. 인터프리터와 컴파일러가 결합된 형태의 경우, 프로그래밍 문을 기계어로 컴파일하고 실행한 뒤 기계어는 버리고, 줄을 다시 실행할 때 새로 해석한다. 인터프리터는 다른 두 종류에 비해 가장 단순한 언어 동작 구현체이다.

언어가 엄격하게 '인터프리터' 언어나 '컴파일' 언어인 것은 아니다. 대신, 언어 동작 구현에서 인터프리팅 또는 컴파일을 사용한다. 예를 들어, ALGOL 60과 Fortran은 둘 다 인터프리트되었지만(일반적으로 컴파일되었지만), 자바는 이러한 레이블을 언어가 아닌 구현에 적용하는 것이 어렵다는 것을 보여준다. 자바는 바이트코드로 컴파일된 다음 (Java 가상 머신 (JVM)에서) 인터프리팅하거나 (일반적으로 HotSpot과 같은 JIT 컴파일러로, 다시 JVM에서) 컴파일하여 실행된다. 또한 컴파일, 트랜스컴파일 및 인터프리팅은 컴파일러 아티팩트(바이너리 실행 파일 또는 IL 어셈블리)에 대한 설명으로만 엄격하게 제한되지 않는다.

3. 2. 컴파일 방식

컴파일 언어로 작성된 코드는 실행 가능한 형태로 변환된 다음 실행된다. 컴파일에는 두 종류가 있다.[6][7][8]

  • 기계어 생성: 일부 컴파일러들은 소스 코드를 기계어로 직접 컴파일한다. 이는 컴파일의 원초적인 방식이며, 기계어로 직접적이고 완전하게 변환된 언어는 '순수하게 컴파일된 언어'라고 부른다. (어셈블리어 참고)
  • 중간 표현: 특정 언어로 작성된 코드가 중간 표현으로 컴파일되면, 이 표현은 소스 코드를 다시 읽어들이지 않고도 나중에 실행할 것을 염두에 두고 최적화하거나 저장할 수 있다. 중간 표현이 저장될 때는 바이트 코드와 같은 형태일 수 있다. 그 다음 중간 표현은 실행을 위해 해석되거나 추가적인 컴파일 과정을 거친다.

3. 3. 소스 대 소스 번역 (트랜스컴파일)

특정 언어로 작성된 코드는 저급 프로그래밍 언어 형태로 변환될 수 있으며, 이를 위한 네이티브 코드 컴파일러들이 널리 이용된다. 자바스크립트C 프로그래밍 언어는 이러한 번역기들의 주요 대상이다. 커피스크립트, 치킨 스킴, 에펠 등이 그 예시이다.

4. 고급 언어 컴퓨터 아키텍처

고급 언어 컴퓨터 아키텍처는 컴퓨터 아키텍처 자체가 특정 고급 언어를 대상으로 설계되는 것을 의미한다. 즉, 컴퓨터가 고급 프로그래밍 언어(HLL) 코드를 직접 실행하는 것이다. 예를 들어, 버로스 대형 시스템은 ALGOL 60을 위한 타겟 머신이었다.[12]

고급 프로그래밍 언어와 하드웨어 사이에는 큰 시맨틱 갭이 존재한다. 이 갭을 메우기 위해 컴파일러인터프리터와 같은 프로그래밍 언어 처리 시스템이 사용되며, 이를 효율화하기 위한 다양한 노력이 이루어져 왔다.

과거에는 하드웨어를 고급 프로그래밍 언어에 맞추려는 노력이 있었다. 1961년 배로우스 B5000이 대표적인 예시이며, LISP 머신이나 최근 메인프레임 중에는 COBOL의 명령(MOVE, ADD 등)을 거의 하나의 기계어로 변환하는 아키텍처를 가진 것도 있다. ARM 아키텍처의 Jazelle처럼 중간 표현을 실행할 수 있는 것도 있다. High-level language computer|고급 언어 컴퓨터영어

다른 한편으로는 컴파일러가 생성하는 프로그램이나 인터프리터가 고성능을 낼 수 있도록 하는 노력이 있었다. RISC는 하드웨어를 단순화하고 컴파일러가 고성능 프로그램을 생성하도록 하는 방향이었다. 반면, 컴파일러가 사용하기 쉬운 복잡한 명령을 준비한 TRON 칩과 같은 예도 존재한다.

5. 기타

고급 프로그래밍 언어와 하드웨어 사이에는 큰 시맨틱 갭이 있다. 그 갭을 메우는 것은 컴파일러인터프리터와 같은 프로그래밍 언어 처리계인데, 이를 효율화하기 위해 과거 다양한 노력이 이루어져 왔다.

하드웨어를 고급 프로그래밍 언어 쪽에 맞추려는 노력으로, 1961년의 배로우스 B5000이 있으며, LISP 머신이나 최근 메인프레임에는 COBOL의 1명령(MOVE나 ADD 등)을 거의 하나의 기계어로 변환할 수 있는 아키텍처를 가진 것이나 ARM 아키텍처의 Jazelle처럼 중간 표현을 실행할 수 있는 것 등이 있다. (고수준 언어 머신)

컴파일러가 생성하는 프로그램이나 인터프리터가 고성능이 되도록 하는 노력도 있었다. RISC는 일부러 하드웨어를 단순하게 하고, 컴파일러가 고성능의 프로그램을 생성하도록 하는 방향이었다. 한편, 컴파일러가 사용하기 쉬운 복잡한 명령을 준비한 TRON 칩과 같은 예도 있다.

참조

[1] 웹사이트 HThreads - RD Glossary https://web.archive.[...]
[2] 서적 Introduction to Computers Faber and Faber Limited
[3] 서적 Introduction to Computers Faber and Faber Limited
[4] 간행물 Konrad Zuse's Plankalkül: The First High-Level "non von Neumann" Programming Language http://doi.ieeecompu[...] IEEE Annals of the History of Computing 1997
[5] 문서
[6] 학술지 Meta-Compilation of Language Abstractions. http://lispnyc.org/m[...] 2008-03-17
[7] 웹사이트 The Data Abstraction Penalty (DAP) Benchmark for Small Objects in Java. https://web.archive.[...] 2008-03-17
[8] 서적 Proceedings - 7th International Conference on Reliable Software Technologies - Ada-Europe'2002 Springer
[9] 학술지 High-level languages for small devices: a case study http://www.clip.dia.[...] ACM
[10] 서적 The C Programming Language: 2nd Edition https://books.google[...] Prentice Hall 1988
[11] 서적 The art of assembly language https://books.google[...] No Starch Press 2010
[12] Citation High-Level Language Computer Architecture Elsevier 1975
[13] 웹사이트 高水準言語とは - IT用語辞典 https://e-words.jp/w[...] 2024-03-14
[14] 문서 HThreads - RD Glossary https://web.archive.[...]
[15] 서적 Faber and Faber Limited
[16] 서적 Faber and Faber Limited
[17] 간행물 Konrad Zuse's Plankalkül: The First High-Level "non von Neumann" Programming Language http://doi.ieeecompu[...] IEEE Annals of the History of Computing 1997



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com