[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]- [ 펼치기 · 접기 ]
- ||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colkeepall><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품 기술 기계어 · 어셈블리어 · 바이오스 · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 함수형 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속 연구 및 기타 논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영체제(멀티태스킹 · 프로세스 스케줄링 · 데드락 · 식사하는 철학자 문제 · 뮤텍스 · 세마포어 · 인터럽트) · 데이터베이스 · 컴퓨터 언어 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 어휘 분석 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 마크업 언어 · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크(네트워크 포트) · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템)
인공어 Constructed Language | ||
{{{#!wiki style="margin:0 -10px -5px; min-height:calc(1.5em + 5px)" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin:-5px -1px -11px;" | <colbgcolor=#f5f5f5,#2d2f34><colcolor=#212529,#e0e0e0> 공학 언어 | 수식 · 화학식 · 명제 논리 · 술어 논리 · 컴퓨터 언어 · 로지반 · 링코스 · 이쓰쿠일 · 도기 보나 · 보아보무 |
국제 보조어 | 솔레솔 · 볼라퓌크 · 에스페란토 · 이도 · 인테르링구에 · 베이식 잉글리시 · 인테르링구아 · 국제 수화 · 코타바 · 노시로어 · 링구아 프랑카 노바 |
예술어 | 가밀라스어 · 나비어 · 도트락어 · 발리리아어 · 신어· 에녹어 · 앵글리시 · 요정어(퀘냐 · 신다린) · 클링온어 · 상헬리어 · 킬리키어 · 칼라니어 | |
기타 | 모스 부호 | }}}}}}}}} |
1. 개요
computer language형식 언어의 부분집합으로, 컴퓨터가 읽고 이해할 수 있는 형태와 수준의 정칙성을 가진 인공어를 말한다. 흔히 프로그래밍 언어를 떠올리지만, 프로그래밍 언어가 컴퓨터 언어의 전부는 아니다.
2. 유사 개념과의 차이
- 프로그래밍 언어와의 차이: 가장 많이 혼동되는 개념이지만 두 개념은 100% 같지 않으며, 정확히는 프로그래밍 언어가 컴퓨터 언어의 부분집합이다. 프로그래밍 언어는 일반적으로 실행[e] 가능한 더 저수준의 언어(기계어 등)로 컴파일되거나 그러한 언어로 컴파일되는 또다른 언어 위에서 해석 가능한 추상화된 명령의 집합이며, 결국 값(value)과 이들의 평가(evalutation), 바인드 환경(environment), 결과적으로 실행(execution)[e]이라는 개념이 존재한다. 예를 들어 단순한 값들의 재귀적 나열인 JSON은 일반적인 semantic 아래에서 '실행'[e]할 수 없기 때문에 프로그래밍 언어가 아닌 것.[4]
- 기계어와의 차이: 대부분의 경우 단순한 번역 차이나 잘못된 개념의 이해로 인해 발생하는 문제로, 정의상 실행[e] 가능한 모든 프로그래밍 언어는 해당 언어 집합에서 기계어 집합으로 가는 컴파일러라는 함수가 존재하므로 자명하게 기계어도 컴퓨터 언어의 부분집합이 된다. '컴퓨터 언어 == 기계어'라는 오해가 발생하는 이유는 흔히 일반인들에게 설명할 때 '컴퓨터와 대화하기 위해서는 기계어를 사용한다' 등의 비유를 사용하기 때문. 여기서의 '기계'(machine)란 구체적으로 CPU와 명령어 집합을 의미하고, '대화'나 '이해'란 대부분 수행(execution)[e]을 의미한다. 반대로 컴퓨터 언어의 정의에서의 컴퓨터란 임의의 튜링 기계를 뜻하고, 다시 말해 0이나 1 그 이상의 추상적인 수학적 개념에 가까우며, 현실적으로는 보통 구문 분석기 구현체만을 말한다.
- 형식 언어와의 차이: 튜링 기계에 기반한 모든 보편적인 컴퓨터는 항상 모든 재귀 열거(recursively enumerable) 언어를 파싱할 수 있으니 적당히 동치라고 볼 수 있지만 현실적으로는 조금 차이가 있다. 이를테면 아무도 람다 대수의 SKI combinator를 컴퓨터 언어라고 하지 않는 것처럼. 실제로도 대부분의 컴퓨터 언어는 문맥 자유(context-free) 문법이나 문맥 인식(context-aware) 문법까지가 사실상의 한계이기 때문에 컴퓨터 언어를 형식 언어의 부분집합이라 하는 편이 현실적이다.
- 포맷과의 차이: Really depends on why a human might want to read it. 여기서의 모호함은 정의상 파일 포맷은 컴퓨터 언어가 맞지만, 고정관념상 그렇다고 느끼지 않기 때문이다. 일반적인 인식상 바이너리를 언어로 느끼지 않기 때문인데, 정작 형식 언어를 기술하는 배커스-나우르 표기법은 바이너리 포맷을 기술할 때도 정확히 동일하게 사용될 수 있다. 이는 바이너리 포맷 파서가 대부분 유한 상태 기계에 기반(또는 이를 부분집합으로 가짐)하기 때문이다. 때문에 정의의 엄밀함과는 무관하게 대부분의 바이너리 파일 형식은 컴퓨터 언어의 일종으로 의미있게 취급하지 않으며, 텍스트 형태더라도 데이터 직렬화 형식이나 도메인 특화 언어와 구분히 모호해져 경우에 따라 다르거나 양쪽 모두로 해석하기도 한다.
3. 종류
- 프로그래밍 언어
- 기계어
- 난해한 프로그래밍 언어
- 셰이딩 언어
- 증명보조기 - 주로 타입 시스템을 가지고 있고 메모리 위에서 실행 가능한 형태이기 때문에 엄밀히는 별도의 컴퓨터 언어 종류가 아니라 프로그래밍 언어의 부분집합이다.
- 시각적 프로그래밍 언어
- 마크업 언어 - 흔히 프로그래밍 언어가 아닌 컴퓨터 언어를 전부 마크업 언어로 생각하는 오해가 있지만, 마크업 언어는 근본적으로 출판 문서의 형식을 지정하기 위해 발달한 분야이다. 시간이 지남에 따라 데이터 직렬화 언어와도 혼동되기도 하고 정의가 느슨해져 조판 언어 등을 포함하는 크게 세 카테고리로 늘어나기도 했으나 근본적으로는 문서에 초점이 맞춰져 있다. 예를 들어 도표를 그리는 데 사용하는 mermaid는 대부분의 경우 마크다운 내부에 임베딩되어 사용되지만 오해와 다르게 마크업 언어가 아니라 그래프 기술 언어(graph description language)라는 도메인 특화 언어의 하위 분류 중 하나이다.
- 쿼리 언어
- 스타일시트 언어
- 하드웨어 기술 언어(Hardware Description Language) - VHDL이나 Verilog 등의 기판 설계 언어로, 주로 전기전자공학과 수업 및 실무에서 사용된다.
- 데이터 직렬화 언어
- 도메인 특화 언어 - 국소적인 영역의 문제만을 풀기 위해 설계된 컴퓨터 언어의 종류. 정의가 몹시 까다로운 편이기 때문에 타 분류와 헷갈리기 쉽고, 독립적인 분류(classification)보다는 유형(kind)에 가깝기 때문에 세부적으로 도메인 특화 프로그래밍 언어(DSPL), 도메인 특화 쿼리 언어(DSQL) 등 온갖 하위 분류가 존재한다.
[e] 여기서의 실행(execution)은 프로그래밍 언어가 다른 컴퓨터 언어에 비해 가지는 차이점을 설명하기 위한 용도로 쓰인 것으로, 주로 람다 대수에서의 함수 적용(application)과 비슷한 의미로 쓰였다. 하지만 맥락상 '범용적인 기계어로 번역되거나 범용적인 기계어로 번역되는 임의의 해석 공간 위에서 실행 가능할 것'과 같은 현실적인 의미도 다소 내포하고 있다.[e] [e] [4] 물론 JSON의 보편적 semantic에서만 그렇다는 것이지 추가적인 해석 방법을 정의한다면 얼마든지 JSON도 프로그래밍 언어가 될 수 있다. 난해한 프로그래밍 언어인 ajson등이 그러한 증명 예시(proof-of-concept). 다만 정의상 가능하다는 것일 뿐 이렇게 하는 것이 큰 의미가 없기 때문에 일반적으로 프로그래밍 언어와 다른 컴퓨터 언어는 문법 수준에서 구분해도 무방하다.[e] [e]