Bytecode (also called portable code or p-code) is an instruction set designed for efficient execution by a software interpreter. Unlike human-readable and before while not on in the default version, had options like HHVM. For older versions of PHP: Although PHP opcodes are generated each time the program is launched, and are always interpreted and not just-in-time compiled. Tcl, mawk and Forth (however, Forth is seldom compiled via bytecodes in this way, and its virtual machine is more generic instead). The implementation of Perl and Ruby 1.8 instead work by walking an abstract syntax tree representation derived from the source code.
More recently, the authors of V8
- Byte Code Engineering Library
- C to Java virtual machine compilers
- CLISP implementation of Common Lisp used to compile only to bytecode for many years; however, now it also supports compiling to native code with the help of GNU lightning
- CMUCL and Scieneer Common Lisp implementations of Common Lisp can compile either to native code or to bytecode, which is far more compact
- Common Intermediate Language executed by Common Language Runtime, used by .NET languages such as C#
- Dalvik bytecode, designed for the Android platform, is executed by the Dalvik virtual machine
- Dis bytecode, designed for the Inferno (operating system), is executed by the Dis virtual machine
- EiffelStudio for the Eiffel programming language
- EM, the Amsterdam Compiler Kit virtual machine used as an intermediate compiling language and as a modern bytecode language
- Emacs is a text editor with most of its functions implemented by Emacs Lisp, its built-in dialect of Lisp. These features are compiled into bytecode. This architecture allows users to customize the editor with a high level language, which after compiling into bytecode yields reasonable performance.
- Embeddable Common Lisp implementation of Common Lisp can compile to bytecode or C code
- Common Lisp provides a <code>disassemble</code> function which prints to the standard output the underlying code of a specified function. The result is implementation-dependent and may or may not resolve to bytecode. Its inspection can be utilized for debugging and optimization purposes. Steel Bank Common Lisp, for instance, produces:
:<syntaxhighlight lang="lisp">
(disassemble '(lambda (x) (print x)))
; disassembly for (LAMBDA (X))
; 2436F6DF: 850500000F22 TEST EAX, [#x220F0000] ; no-arg-parsing entry point
; E5: 8BD6 MOV EDX, ESI
; E7: 8B05A8F63624 MOV EAX, [#x2436F6A8] ; #<FDEFINITION object for PRINT>
; ED: B904000000 MOV ECX, 4
; F2: FF7504 PUSH DWORD PTR [EBP+4]
; F5: FF6005 JMP DWORD PTR [EAX+5]
; F8: CC0A BREAK 10 ; error trap
; FA: 02 BYTE #X02
; FB: 18 BYTE #X18 ; INVALID-ARG-COUNT-ERROR
; FC: 4F BYTE #X4F ; ECX
</syntaxhighlight>
- Ericsson implementation of Erlang uses BEAM bytecodes
- Ethereum's Virtual Machine (EVM) is the runtime environment, using its own bytecode, for transaction execution in Ethereum (smart contracts).
- Icon
</references>
