{{위키데이터 속성 추적}}
{{출처 필요|날짜=2013-05-23}}
{{프로그램 실행}}
'''바이트코드'''({{lang|en|bytecode}}, portable code, p-code)는 특정 하드웨어가 아닌 [[가상 컴퓨터]]에서 돌아가는 [[컴퓨터 소프트웨어|실행 프로그램]]을 위한 [[이진법|이진]] 표현법이다. 하드웨어가 아닌 소프트웨어에 의해 처리되기 때문에, 보통 [[기계어]]보다 더 [[추상화 (컴퓨터 과학)|추상적]]이다.

역사적으로 바이트코드는 대부분의 명령 집합이 0개 이상의 [[매개 변수]]를 갖는 1[[바이트]] 크기의 [[명령 코드]](opcode)였기 때문에 바이트코드라 불리게 되었다. 바이트코드는 특정 하드웨어에 대한 의존성을 줄이고, [[인터프리터|인터프리팅]]도 쉬운 결과물을 생성하고자 하는 [[프로그래밍 언어]]에 의해, 출력 코드의 한 형태로 사용된다. [[컴파일러|컴파일]]되어 만들어진 바이트코드는 특정 하드웨어의 기계 코드를 만드는 [[컴파일러]]의 입력으로 사용되거나, 가상 컴퓨터에서 바로 실행된다.

사람이 읽기 쉽도록 쓰인 [[소스 코드]]와 비교하면, 바이트 코드는 덜 추상적이며, 더 간결하고, 더 [[컴퓨터]] 중심적이다. 예를 들어 바이트코드는 변수의 접근 범위(지역변수 또는 전역변수 인지 여부) 등과 같은 의미 분석 단계의 결과를 부호화한다. 그래서 일반적으로 소스 코드를 직접 분석/실행하는 것보다 더 좋은 성능을 보여 준다.

바이트코드 프로그램은 보통 한 번에 하나의 명령어를 읽은 후 실행한다. 이러한 형태의 바이트코드 [[인터프리터]]는 높은 이식성을 갖는다. 또 다른 형태로서 실시간 번역기 또는 저스트 인 타임(just-in-time, JIT) 컴파일러라 불리는 시스템은 실행 중에 필요에 따라서 바이트코드를 기계어로 번역한다. 이 방법은 가상 컴퓨터의 이식성을 없애지만, 바이트코드 자체에 대한 이식성을 잃지는 않는다. 예를 들어, [[자바 (프로그래밍 언어)|자바]]와 [[C 샤프|C#]] 코드는 보통 바이트코드 형태로 컴파일되어 저장되며, 실행 전에 JIT 컴파일러에 의해 기계 코드로 번역된다. 이 번역으로 인해 프로그램 실행 전에 지연시간이 발생하게 되지만, 보통 인터프리터보다는 훨씬 좋은 성능을 보여 준다.

== 예 ==
* [[액션스크립트]]는 플래시 플레이어와 AIR의 일부인 액션스크립트 가상 머신(AVM)에서 실행된다 액션스크립트 코드는 일반적으로 [[컴파일러]]에 의해 바이트코드 포맷으로 변환된다.
* [[어도비 플래시]] 오브젝트
* [[BANCStar 프로그래밍 언어|BANCStar]]
* [[버클리 패킷 필터]]
* [[바이트 코드 엔지니어링 라이브러리]]
* C to [[자바 가상 머신]] 컴파일러
* [[커먼 리스프]]의 [[CLISP]] 구현체
* [[커먼 리스프]]의 [[CMUCL]] 및 Scieneer Common Lisp 구현체는 네이티브 코드나 바이트코드로 컴파일할 수 있다.
* [[공통 언어 런타임]]에 의해 실행되는 [[공통 중간 언어]]
* 달빅 바이트코드: [[안드로이드 (운영 체제)|안드로이드]] 플랫폼용으로 설계되어 [[달빅 (소프트웨어)|달빅]]을 통해 실행된다.
* 디스 바이트코드(Dis bytecode)
* [[에펠스튜디오]]
* EM([[암스테르담 컴파일러 키트]]) 가상 머신
* [[이맥스]]
* [[커먼 리스프]]의 [[임베디드 커먼 리스프]] 구현체는 바이트코드나 C 코드로 컴파일이 가능하다.
* [[얼랭]]의 에릭슨 구현체는 BEAM 바이트코드를 사용한다.
* [[아이콘 (프로그래밍 언어)|아이콘]]<ref>{{웹 인용 |url=http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf |제목=The Implementation of the Icon Programming Language |확인날짜=2017-04-01 |보존url=https://web.archive.org/web/20160305123148/http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf |보존날짜=2016-03-05 |url-status=dead }}</ref>과 [[유니콘 (프로그래밍 언어)|유니콘]]<ref>[http://unicon.sourceforge.net/book/ib.pdf The Implementation of Icon and Unicon a Compendium]</ref> programming languages
* [[인포콤]]
* [[자바 바이트코드]]: [[자바 가상 머신]]에 의해 실행.
** [[오브젝트웹 ASM|ASM]]
** [[바이트 코드 엔지니어링 라이브러리]]
** [[Javassist]]
** [[JMangler]]
* [[도스 명령어 목록|KEYB]]: [[도스]]용 키보드 드라이버
* [[LLVM]]
* [[루아 (프로그래밍 언어)|루아]] 언어는 레지스터 기반 바이트코드 가상 머신을 사용한다.
* [[MATLAB]] 언어의 m-코드<ref>For the details refer to {{웹 인용 |url=http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=6973644.PN.&OS=PN/6973644&RS=PN/6973644 |title=United States Patent 6,973,644 |확인날짜=2017-04-01 |archive-date=2017-03-05 |archive-url=https://web.archive.org/web/20170305001731/http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=6973644.PN.&OS=PN/6973644&RS=PN/6973644 |url-status= }}</ref>
* [[BCPL]] 프로그래밍 언어의 [[O-code]]
* [[OCaml]] 언어는 선택적으로 콤팩트 바이트코드 형태로 컴파일한다.
* [[파스칼 (프로그래밍 언어)|파스칼]]의 [[USCD 파스칼]] 구현체의 [[p-code 머신|p-code]]
* [[패럿 가상 머신]]
* [[픽 운영 체제|픽 베이직]]
* [[R (프로그래밍 언어)|통계 컴퓨팅을 위한 R 환경]]
* 스킴의 [[스킴 48]] 구현체
* [[스몰토크]] 언어의 수많은 구현체의 바이트코드.
* [[:en:Parallax Propeller#Built in Spin byte code interpreter|스핀 인터프리터]]
* [[SQLite]] 데이터베이스 엔진은 SQL 문을 bespoke 바이트코드 포맷으로 변환한다.<ref>{{웹 인용 |url= https://www.sqlite.org/opcode.html |title= The SQLite Bytecode Engine |확인날짜= 2017-04-01 |보존url= https://web.archive.org/web/20170414044139/http://sqlite.org/opcode.html |보존날짜= 2017-04-14 |url-status= dead }}</ref>
* [[SWEET16]]
* [[Tcl]]
* [[비주얼 폭스프로]]
* [[루비 (프로그래밍 언어)|루비]]용 [[YARV]] 및 [[Rubinius]]

== 같이 보기 ==
* [[중간 표현]]
* [[런타임 시스템]]
== 각주 ==
{{각주}}

{{전거 통제}}

[[분류:가상화 소프트웨어]]