Knowledge

Interpreter (computing)

Source 📝

1937:
stack or a tree walk, a template interpreter maintains a large array of bytecode (or any efficient intermediate representation) mapped directly to corresponding native machine instructions that can be executed on the host hardware as key value pairs (or in more efficient designs, direct addresses to the native instructions), known as a "Template". When the particular code segment is executed the interpreter simply loads or jumps to the opcode mapping in the template and directly runs it on the hardware. Due to its design, the template interpreter very strongly resembles a just-in-time compiler rather than a traditional interpreter, however it is technically not a JIT due to the fact that it merely translates code from the language into native calls one opcode at a time rather than creating optimized sequences of CPU executable instructions from the entire code segment. Due to the interpreter's simple design of simply passing calls directly to the hardware rather than implementing them directly, it is much faster than every other type, even bytecode interpreters, and to an extent less prone to bugs, but as a tradeoff is more difficult to maintain due to the interpreter having to support translation to multiple different architectures instead of a platform independent virtual machine/stack. To date, the only template interpreter implementations of widely known languages to exist are the interpreter within Java's official reference implementation, the Sun HotSpot Java Virtual Machine, and the Ignition Interpreter in the Google V8 javascript execution engine.
2202:
Advanced instrumentation and tracing approaches provide insights into interpreter implementations and processor resource utilization during execution through evaluations of interpreters tailored for the MIPS instruction set and programming languages such as Tcl, Perl, and Java. Performance characteristics are influenced by interpreter complexity, as demonstrated by comparisons with compiled code. It is clear that interpreter performance is more dependent on the nuances and resource needs of the interpreter than it is on the particular application that is being interpreted.
31: 2016:-like language is implemented using closures in the interpreter language or implemented "manually" with a data structure explicitly storing the environment. The more features implemented by the same feature in the host language, the less control the programmer of the interpreter has; for example, a different behavior for dealing with number overflows cannot be realized if the arithmetic operations are delegated to corresponding operations in the host language. 3903: 1868:. In this approach, each sentence needs to be parsed just once. As an advantage over bytecode, the AST keeps the global program structure and relations between statements (which is lost in a bytecode representation), and when compressed provides a more compact representation. Thus, using AST has been proposed as a better intermediate format for just-in-time compilers than bytecode. Also, it allows the system to perform better analysis during runtime. 826:. The difference in speeds could be tiny or great; often an order of magnitude and sometimes more. It generally takes longer to run a program under an interpreter than to run the compiled code but it can take less time to interpret it than the total time required to compile and run it. This is especially important when prototyping and testing code when an edit-interpret-debug cycle can often be much shorter than an edit-compile-run-debug cycle. 3913: 2245:: While some types of sandboxes rely on operating system protections, an interpreter or virtual machine is often used. The actual hardware architecture and the originally intended hardware architecture may or may not be the same. This may seem pointless, except that sandboxes are not compelled to actually execute all the instructions the source code it is processing. In particular, it can refuse to execute code that violates any 762:(or not translate it at all), thus requiring much less time before the changes can be tested. Effects are evident upon saving the source code and reloading the program. Compiled code is generally less readily debugged as editing, compiling, and linking are sequential processes that have to be conducted in the proper sequence with a proper set of commands. For this reason, many compilers also have an executive aid, known as a 3923: 2004:). A language may also be defined by an interpreter in which the semantics of the host language is given. The definition of a language by a self-interpreter is not well-founded (it cannot define a language), but a self-interpreter tells a reader about the expressiveness and elegance of a language. It also enables the interpreter to interpret its source code, the first step towards reflective interpreting. 633: 853:) allow interpreted and compiled code to call each other and to share variables. This means that once a routine has been tested and debugged under the interpreter it can be compiled and thus benefit from faster execution while other routines are being developed. Many interpreters do not execute the source code as it stands but convert it into some more compact internal form. Many 745:), although some programmers prefer to use an editor of their choice and run the compiler, linker and other tools manually. Historically, compilers predate interpreters because hardware at that time could not support both the interpreter and interpreted code and the typical batch environment of the time limited the advantages of interpretation. 730:(.exe files or .dll files or a library, see picture) is typically relocatable when run under a general operating system, much like the object code modules are but with the difference that this relocation is done dynamically at run time, i.e. when the program is loaded for execution. On the other hand, compiled and linked programs for small 1837:
functions they point to, or fetches the first instruction and jumps to it, and every instruction sequence ends with a fetch and jump to the next instruction. Unlike bytecode there is no effective limit on the number of different instructions other than available memory and address space. The classic example of threaded code is the
719:
how a compiler works. However, a compiled program still runs much faster, under most circumstances, in part because compilers are designed to optimize code, and may be given ample time for this. This is especially true for simpler high-level languages without (many) dynamic data structures, checks, or
1836:
Threaded code interpreters are similar to bytecode interpreters but instead of bytes they use pointers. Each "instruction" is a word that points to a function or an instruction sequence, possibly followed by a parameter. The threaded code interpreter either loops fetching instructions and calling the
1772:
Interpretation cannot be used as the sole method of execution: even though an interpreter can itself be interpreted and so on, a directly executed program is needed somewhere at the bottom of the stack because the code being interpreted is not, by definition, the same as the machine code that the CPU
718:
of this conversion work every time a statement or function is executed. However, in an efficient interpreter, much of the translation work (including analysis of types, and similar) is factored out and done only the first time a program, module, function, or even statement, is run, thus quite akin to
688:) may have similar machine code blocks implementing functions of the high-level language stored, and executed when a function's entry in a look up table points to that code. However, an interpreter written in a high-level language typically uses another approach, such as generating and then walking a 761:
all of the binary code files together before the program can be executed. The larger the program, the longer the wait. By contrast, a programmer using an interpreter does a lot less waiting, as the interpreter usually just needs to translate the code being worked on to an intermediate representation
680:
is used to combine (pre-made) library files with the object file(s) of the application to form a single executable file. The object files that are used to generate an executable file are thus often produced at different times, and sometimes even by different languages (capable of generating the same
766:
and program. The Makefile lists compiler and linker command lines and program source code files, but might take a simple command line menu input (e.g. "Make 3") which selects the third group (set) of instructions then issues the commands to the compiler, and linker feeding the specified source code
2201:
Interpreters, such as those written in Java, Perl, and Tcl, are now necessary for a wide range of computational tasks, including binary emulation and internet applications. Interpreter performance is still a worry despite their adaptability, particularly on systems with limited hardware resources.
541:
Interpreters were used as early as 1952 to ease programming within the limitations of computers at the time (e.g. a shortage of program storage space, or no native support for floating point numbers). Interpreters were also used to translate between low-level machine languages, allowing code to be
1936:
Making the distinction between compilers and interpreters yet again even more vague is a special interpreter design known as a template interpreter. Rather than implement the execution of code by virtue of a large switch statement containing every possible bytecode, while operating on a software
790:
An interpreted program can be distributed as source code. It needs to be translated in each final machine, which takes more time but makes the program distribution independent of the machine's architecture. However, the portability of interpreted source code is dependent on the target machine
791:
actually having a suitable interpreter. If the interpreter needs to be supplied along with the source, the overall installation process is more complex than delivery of a monolithic executable, since the interpreter itself is part of what needs to be installed.
1871:
However, for interpreters, an AST causes more overhead than a bytecode interpreter, because of nodes related to syntax performing no useful work, of a less sequential representation (requiring traversal of more pointers) and of overhead visiting the tree.
1800:, which is a highly compressed and optimized representation of the Lisp source, but is not machine code (and therefore not tied to any particular hardware). This "compiled" code is then interpreted by a bytecode interpreter (itself written in 1863:
In the spectrum between interpreting and compiling, another approach is to transform the source code into an optimized abstract syntax tree (AST), then execute the program following this tree structure, or use it to generate native code
516:
While interpretation and compilation are the two main means by which programming languages are implemented, they are not mutually exclusive, as most interpreting systems also perform some translation work, just like compilers. The terms
1812:. In a bytecode interpreter each instruction starts with a byte, and therefore bytecode interpreters have up to 256 instructions, although not all may be used. Some bytecodes may take multiple bytes, and may be arbitrarily complicated. 1891:
at runtime. This confers the efficiency of running native code, at the cost of startup time and increased memory use when the bytecode or AST is first compiled. The earliest published JIT compiler is generally attributed to work on
2097:
Microcode is a very commonly used technique "that imposes an interpreter between the hardware and the architectural level of a computer". As such, the microcode is a layer of hardware-level instructions that implement higher-level
876:
interpreter, achieve even higher levels of program compaction by using a bit-oriented rather than a byte-oriented program memory structure, where commands tokens occupy perhaps 5 bits, nominally "16-bit" constants are stored in a
2524: 1904:
is a complementary technique in which the interpreter profiles the running program and compiles its most frequently executed parts into native code. The latter technique is a few decades old, appearing in languages such as
2007:
An important design dimension in the implementation of a self-interpreter is whether a feature of the interpreted language is implemented with the same feature in the interpreter's host language. An example is whether a
2153:
so that instructions can be designed and altered more freely. It also facilitates the building of complex multi-step instructions, while reducing the complexity of computer circuits. Writing microcode is often called
2035:
language allows writing of its own interpreter. Lisp is such a language, because Lisp programs are lists of symbols and other lists. XSLT is such a language, because XSLT programs are written in XML. A sub-domain of
837:
analysis is known as "interpretive overhead". Access to variables is also slower in an interpreter because the mapping of identifiers to storage locations must be done repeatedly at run-time rather than at
1886:
Further blurring the distinction between interpreters, bytecode interpreters and compilation is just-in-time (JIT) compilation, a technique in which the intermediate representation is compiled to native
675:
with names and tags to make executable blocks (or modules) identifiable and relocatable. Compiled programs will typically use building blocks (functions) kept in a library of such object code modules. A
783:. This conversion is made just once, on the developer's environment, and after that the same binary can be distributed to the user's machines where it can be executed without further translation. A 757:, programmers make frequent changes to source code. When using a compiler, each time a change is made to the source code, they must wait for the compiler to translate the altered source files and 714:
A compiler can thus make almost all the conversions from source code semantics to the machine level once and for all (i.e. until the program has to be changed) while an interpreter has to do
2189:
Even a non microcoding computer processor itself can be considered to be a parsing immediate execution interpreter that is written in a general purpose hardware description language such as
695:
Thus, both compilers and interpreters generally turn source code (text files) into tokens, both may (or may not) generate a parse tree, and both may generate immediate instructions (for a
833:
in the program each time it is executed and then perform the desired action, whereas the compiled code just performs the action within a fixed context determined by the compilation. This
2515:
KĂŒhnel, Claus (1987) . "4. Kleincomputer - Eigenschaften und Möglichkeiten" [4. Microcomputer - Properties and possibilities]. In Erlekampf, Rainer; Mönk, Hans-Joachim (eds.).
1970:
exists for the language to be interpreted, creating a self-interpreter requires the implementation of the language in a host language (which may be another programming language or
562:
function could be implemented in machine code. The result was a working Lisp interpreter which could be used to run Lisp programs, or more properly, "evaluate Lisp expressions".
881:
requiring 3, 6, 10, or 18 bits, and address operands include a "bit offset". Many BASIC interpreters can store and read back their own tokenized internal representation.
667:
While compilers (and assemblers) generally produce machine code directly executable by computer hardware, they can often (optionally) produce an intermediate form called
2557: 2334:
Although this scheme (combining strategy 2 and 3) was used to implement certain BASIC interpreters already in the 1970s, such as the efficient BASIC interpreter of the
493:, may also combine two and three types. Interpreters of various types have also been constructed for many languages traditionally associated with compilation, such as 2529: 1792:
There is a spectrum of possibilities between interpreting and compiling, depending on the amount of analysis performed before the program is executed. For example,
2499: 600:
Interpreters have a wide variety of instructions which are specialized to perform different tasks, but you will commonly find interpreter instructions for basic
2780: 2908: 2402: 846: 741:
Historically, most interpreter systems have had a self-contained editor built in. This is becoming more common also for compilers (then often called an
2047:
Clive Gifford introduced a measure quality of self-interpreter (the eigenratio), the limit of the ratio between computer time spent running a stack of
558:'s paper, "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I", and realized (to McCarthy's surprise) that the Lisp 2067: 542:
written for machines that were still under construction and tested on computers that already existed. The first interpreted high-level language was
2392:, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today..." 3952: 703:, or by other means). The basic difference is that a compiler system, including a (built in or separate) linker, generates a stand-alone 352: 2946: 2744: 582:) contains the data the programmer wants to mutate, and information on how to mutate the data. For example, an interpreter might read 2483:
Theodore H. Romer, Dennis Lee, Geoffrey M. Voelker, Alec Wolman, Wayne A. Wong, Jean-Loup Baer, Brian N. Bershad, and Henry M. Levy,
2027:
have elegant self-interpreters. Much research on self-interpreters (particularly reflective interpreters) has been conducted in the
2149:
data or other input into sequences of detailed circuit-level operations. It separates the machine instructions from the underlying
806:
exist. Delivery of intermediate code, such as bytecode, has a similar effect to obfuscation, but bytecode could be decoded with a
473:
is an example of the third type. Source programs are compiled ahead of time and stored as machine independent code, which is then
2181:
and so on, which is a relatively simple way to achieve software compatibility between different products in a processor family.
787:
can generate binary code for the user machine even if it has a different processor than the machine where the code is compiled.
3656: 3628: 1808:, which is implemented not in hardware, but in the bytecode interpreter. Such compiling interpreters are sometimes also called 3681: 2484: 2219:
since each operator executed in command language is usually an invocation of a complex routine such as an editor or compiler.
617: 3532: 2441: 17: 3686: 2965: 2460: 2496: 3198: 1897: 834: 742: 555: 547: 3947: 3838: 3666: 3203: 2830: 2539: 2363: 2239:. This is often used when the intended architecture is unavailable, or among other uses, for running multiple copies. 2794: 822:
The main disadvantage of interpreters is that an interpreted program typically runs more slowly than if it had been
3926: 3027: 794:
The fact that interpreted code can easily be read and copied by humans can be of concern from the point of view of
186: 3314: 526: 345: 2723: 2225:
can easily be implemented in an interpreted language. This relates to the origins of interpretation in Lisp and
578:, and a list of these commands in the order a programmer wishes to execute them. Each command (also known as an 3605: 3567: 3231: 2939: 2446: 858: 579: 530: 525:" signify that the canonical implementation of that language is an interpreter or a compiler, respectively. A 3747: 3724: 3454: 3444: 2562: 2080: 2028: 1912:
Just-in-time compilation has gained mainstream attention amongst language implementers in recent years, with
458: 230: 3828: 3416: 3324: 3236: 3012: 2997: 2300: 2131: 2076: 1838: 830: 279: 779:
converts source code into binary instruction for a specific processor's architecture, thus making it less
3916: 3651: 3156: 2242: 1893: 850: 594: 543: 490: 466: 454: 415: 87: 1818:- that do not necessarily ever need to pass through a compiling phase - dictate appropriate algorithmic 3888: 3537: 2911:(Chapter 7 especially) Doctoral dissertation tackling the problem of formalising what is an interpreter 2009: 1956: 754: 338: 240: 3906: 3833: 3808: 3671: 3319: 2932: 2255:
for running computer software written for obsolete and unavailable hardware on more modern equipment.
2020: 2013: 1978:
and new versions of the interpreter can be developed in the language itself. It was in this way that
1975: 1760:. Example data type definitions for the latter, and a toy interpreter for syntax trees obtained from 829:
Interpreting code is slower than running the compiled code because the interpreter must analyze each
605: 442: 203: 174: 103: 35: 1845:
systems: the source language is compiled into "F code" (a bytecode), which is then interpreted by a
849:
when using an interpreter and the execution speed when using a compiler. Some systems (such as some
3757: 3590: 3183: 3052: 2871: 2670: 2620: 2380:
is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the
2270: 2139: 2119: 2041: 1960: 1881: 1865: 1801: 1761: 888: 506: 478: 258: 180: 3818: 3752: 3643: 3459: 2321: 2290: 2226: 2111: 2072: 1946: 601: 311: 236: 3883: 3714: 3595: 3362: 3352: 3347: 2866: 2615: 2001: 411: 326: 285: 63: 2145:
Microcode typically resides in special high-speed memory and translates machine instructions,
397:
program. An interpreter generally uses one of the following strategies for program execution:
3853: 3823: 3813: 3709: 3623: 3499: 3439: 3406: 3396: 3286: 3251: 3241: 3178: 3047: 3022: 3017: 2982: 2368: 1997: 1971: 1901: 653: 575: 378: 208: 191: 93: 44: 2193:
to create a system that parses the machine code instructions and immediately executes them.
3613: 3585: 3557: 3552: 3381: 3357: 3309: 3294: 3276: 3266: 3261: 3223: 3173: 3168: 3085: 3031: 1996:
Defining a computer language is usually done in relation to an abstract machine (so-called
1952: 1858: 1757: 878: 780: 518: 382: 264: 30: 1955:
interpreter written in a programming language which can interpret itself; an example is a
8: 3878: 3803: 3719: 3704: 3469: 3256: 3213: 3208: 3105: 3095: 3067: 2917:
explaining the key conceptual difference between interpreters and compilers. Archived at
2280: 2222: 2032: 645: 613: 571: 80: 2902: 3843: 3742: 3618: 3575: 3484: 3426: 3411: 3401: 3193: 2992: 2884: 2641: 2555:
Heyne, R. (1984). "Basic-Compreter fĂŒr U880" [BASIC compreter for U880 (Z80)].
2295: 2107: 758: 727: 700: 677: 657: 474: 386: 2689: 2664: 738:
memory, as there is often no secondary storage and no operating system in this sense.
692:, or by generating and executing intermediate software-defined instructions, or both. 3863: 3793: 3772: 3734: 3542: 3509: 3489: 3188: 3100: 2974: 2826: 2633: 2535: 2275: 2265: 2246: 2166: 2135: 2075:
for Scheme and its dialects. Other examples of languages with a self-interpreter are
685: 609: 522: 446: 2888: 2645: 2600: 2445: prior to 1 November 2008 and incorporated under the "relicensing" terms of the 3696: 3580: 3547: 3342: 3271: 3160: 3146: 3141: 3090: 3077: 3002: 2955: 2876: 2762: 2625: 2212: 1749: 731: 394: 374: 366: 58: 2348:
Bennett, J. M.; Prinz, D. G.; Woods, M. L. (1952). "Interpretative sub-routines".
3767: 3661: 3633: 3527: 3479: 3464: 3449: 3304: 3299: 3246: 3136: 3110: 3062: 3007: 2820: 2503: 2236: 2158:
and the microcode in a particular processor implementation is sometimes called a
2127: 2115: 2037: 1846: 1805: 865: 763: 434: 224: 120: 3873: 3777: 3676: 3522: 3494: 2918: 2783:." Logic Program Synthesis and Transformation. Springer, London, 1993. 214-227. 2232: 2178: 1917: 784: 637: 198: 98: 2914: 2629: 3941: 3762: 3057: 2637: 2596: 2372:, p. 185, McCarthy said: "Steve Russell said, look, why don't I program this 2285: 2216: 2146: 2103: 1913: 1842: 1831: 1815: 720: 696: 2745:"Demystifying the JVM: JVM Variants, Cppinterpreter and TemplateInterpreter" 2376:..., and I said to him, ho, ho, you're confusing theory with practice, this 3858: 3517: 2407: 2389: 2099: 1979: 1888: 1819: 839: 811: 672: 649: 648:
are either directly executed by some kind of interpreter or converted into
153: 73: 2880: 2822:
Encyclopedia of Computer Science and Technology: Volume 28 - Supplement 13
2582: 3848: 3474: 3386: 2174: 2150: 2123: 1990: 1822:
via customized interpreters in similar fashion to bytecode interpreters.
803: 668: 470: 419: 405: 294: 275: 143: 138: 671:. This is basically the same machine specific code but augmented with a 3868: 3798: 3391: 3131: 2987: 2235:. Machine code intended for a hardware architecture can be run using a 2062:
goes to infinity. This value does not depend on the program being run.
1921: 1793: 869: 807: 799: 689: 110: 2909:
Theoretical Foundations For Practical 'Totally Functional Programming'
3373: 3334: 2092: 1906: 795: 735: 482: 158: 27:
Program that executes source code without a separate compilation step
3434: 2924: 2252: 2170: 1967: 1797: 1787: 823: 776: 621: 430: 426: 390: 148: 68: 2403:"Why was the first compiler written before the first interpreter?" 2705: 2436: 2385: 551: 498: 289: 245: 477:
at run-time and executed by an interpreter and/or compiler (for
2335: 2024: 1959:
interpreter written in BASIC. Self-interpreters are related to
1925: 1753: 873: 462: 270: 1974:). By having a first interpreter such as this, the system is 854: 510: 502: 494: 486: 401: 321: 2665:
Surfin' Safari - Blog Archive Â» Announcing SquirrelFish
2857:
Aycock, J. (June 2003). "A brief history of just-in-time".
2190: 862: 684:
A simple interpreter written in a low-level language (e.g.
450: 317: 254: 249: 734:
are typically statically allocated, often hard coded in a
2508: 2461:"Compilers vs. interpreters: explanation and differences" 1987: 1983: 726:
In traditional compilation, the executable output of the
661: 636:
An illustration of the linking process. Object files and
632: 2196: 1804:). The compiled code in this case is machine code for a 2781:
Logimix: A self-applicable partial evaluator for Prolog
616:. Many interpreters are also closely integrated with a 2679:, 2. JIT Compilation Techniques, 2.1 Genesis, p. 98. 2548: 2114:, as well as in more specialized processors such as 1852: 2690:
Efficient implementation of the Smalltalk-80 system
2667:. Webkit.org (2008-06-02). Retrieved on 2013-08-10. 2525:
MilitÀrverlag der Deutschen Demokratischen Republik
2350:
Proceedings of the ACM National Conference, Toronto
2165:More extensive microcoding allows small and simple 2051:self-interpreters and time spent to run a stack of 1730:"internal error: illegal expression kind" 1982:developed the TANGLE interpreter for the language 570:An interpreter usually consists of a set of known 2819:Kent, Allen; Williams, James G. (April 5, 1993). 2497:The Difference Between Compilers and Interpreters 2347: 2068:Structure and Interpretation of Computer Programs 1756:as the compiler and then interpret the resulting 711:the actions described by the high-level program. 389:, without requiring them previously to have been 3939: 2588: 2324:is also an interpreter, of machine instructions. 2110:elements. Microcode is used in general-purpose 627: 868:which can be used to find the instruction in a 640:are assembled into a new library or executable. 2031:, a dialect of Lisp. In general, however, any 2964:Note: This template roughly follows the 2012 2940: 2608:International Journal of Parallel Programming 2601:"A Tree-Based Alternative to Java Byte-Codes" 2485:The Structure and Performance of Interpreters 2435:This article is based on material taken from 1825: 707:program, while an interpreter system instead 447:minicomputer and microcomputer BASIC dialects 346: 2818: 2594: 2211:Interpreters are frequently used to execute 2692:, Proceedings of 11th POPL symposium, 1984. 2521:Micro-electronics for the practical amateur 1875: 533:independent of particular implementations. 2947: 2933: 845:There are various compromises between the 353: 339: 2870: 2619: 2812: 2523:] (in German) (3 ed.). Berlin: 2430: 2428: 2426: 1781: 631: 29: 2700: 2698: 2173:more powerful architectures with wider 1931: 1748:An interpreter might well use the same 14: 3940: 3657:Knowledge representation and reasoning 2856: 2676: 2514: 899:// data types for abstract syntax tree 425:Explicitly execute stored precompiled 3682:Philosophy of artificial intelligence 2928: 2554: 2423: 2197:Understanding Interpreter Performance 2184: 449:would be examples of the first type. 34:W3sDesign Interpreter Design Pattern 3008:Energy consumption (Green computing) 2954: 2695: 2517:Mikroelektronik in der Amateurpraxis 2442:Free On-line Dictionary of Computing 748: 565: 3953:Programming language implementation 3687:Distributed artificial intelligence 2966:ACM Computing Classification System 2792: 1940: 590:it as a request to add five to the 433:and matched with the interpreter's 24: 3199:Integrated development environment 2795:"Eigenratios of Self-Interpreters" 2249:constraints it is operating under. 1764:expressions are shown in the box. 872:. A few interpreters, such as the 469:are examples of the second, while 408:and perform its behavior directly; 304:Notable compilers & toolchains 25: 3964: 3667:Automated planning and scheduling 3204:Software configuration management 2896: 2000:) or as a mathematical function ( 1853:Abstract syntax tree interpreters 3921: 3911: 3902: 3901: 2825:. New York: Marcel Dekker, Inc. 2583:AST intermediate representations 546:. Lisp was first implemented by 481:systems). Some systems, such as 414:source code into some efficient 3912: 3315:Computational complexity theory 2786: 2773: 2755: 2737: 2716: 2682: 2658: 2576: 2205: 770: 3106:Network performance evaluation 2495:Terence Parr, Johannes Luber, 2489: 2477: 2453: 2395: 2362:According to what reported by 2356: 2341: 2328: 2313: 798:. However, various systems of 13: 1: 3470:Multimedia information system 3455:Geographic information system 3445:Enterprise information system 3041:Computer systems organization 2306: 2132:network interface controllers 1928:now including JIT compilers. 1776: 1767: 817: 628:Compilers versus interpreters 485:and contemporary versions of 422:and immediately execute that; 3829:Computational social science 3417:Theoretical computer science 3237:Software development process 3013:Electronic design automation 2998:Very Large Scale Integration 2086: 2073:meta-circular interpretation 1541:"division by zero" 261:target-specific initializer) 7: 3652:Natural language processing 3440:Information storage systems 2905:page at Columbia University 2585:, Lambda the Ultimate forum 2259: 2029:Scheme programming language 612:, making most interpreters 554:computer. Russell had read 416:intermediate representation 88:Intermediate representation 10: 3969: 3568:Human–computer interaction 3538:Intrusion detection system 3450:Social information systems 3435:Database management system 2850: 2763:"JVM template interpreter" 2724:"HotSpot Runtime Overview" 2688:L. Deutsch, A. Schiffman, 2090: 1944: 1879: 1856: 1829: 1826:Threaded code interpreters 1785: 755:software development cycle 536: 381:instructions written in a 3897: 3834:Computational engineering 3809:Computational mathematics 3786: 3733: 3695: 3642: 3604: 3566: 3508: 3425: 3371: 3333: 3285: 3222: 3155: 3119: 3076: 3040: 2973: 2962: 2558:radio-fernsehn-elektronik 2142:, and in other hardware. 2140:graphics processing units 2120:digital signal processors 2102:instructions or internal 2042:domain-specific languages 1986:of the de-facto standard 443:Lisp programming language 3948:Interpreters (computing) 3844:Computational healthcare 3839:Differentiable computing 3758:Graphics processing unit 3184:Domain-specific language 3053:Computational complexity 2534:, Leipzig. p. 222. 2271:Command-line interpreter 2112:central processing units 1951:A self-interpreter is a 1882:Just-in-time compilation 1876:Just-in-time compilation 1163:// interpreter procedure 896: 3819:Computational chemistry 3753:Photograph manipulation 3644:Artificial intelligence 3460:Decision support system 2630:10.1023/A:1018740018601 2449:, version 1.3 or later. 2291:Meta-circular evaluator 2227:artificial intelligence 2019:Some languages such as 1947:Meta-circular evaluator 891:expression interpreter 602:mathematical operations 312:GNU Compiler Collection 237:Common Language Runtime 3884:Educational technology 3715:Reinforcement learning 3465:Process control system 3363:Computational geometry 3353:Algorithmic efficiency 3348:Analysis of algorithms 3003:Systems on Chip (SoCs) 2369:Hackers & Painters 2002:denotational semantics 1961:self-hosting compilers 644:Programs written in a 641: 167:Compilation strategies 38: 3854:Electronic publishing 3824:Computational biology 3814:Computational physics 3710:Unsupervised learning 3624:Distributed computing 3500:Information retrieval 3407:Mathematical analysis 3397:Mathematical software 3287:Theory of computation 3252:Software construction 3242:Requirements analysis 3120:Software organization 3048:Computer architecture 3018:Hardware acceleration 2983:Printed circuit board 2903:IBM Card Interpreters 2881:10.1145/857076.857077 2859:ACM Computing Surveys 2388:machine code, fixing 2071:presents examples of 2058:self-interpreters as 1998:operational semantics 1924:implementations, and 1902:Adaptive optimization 1782:Bytecode interpreters 1547:// doesn't return 857:interpreters replace 635: 192:Compile and go system 33: 3614:Concurrent computing 3586:Ubiquitous computing 3558:Application security 3553:Information security 3382:Discrete mathematics 3358:Randomized algorithm 3310:Computability theory 3295:Model of computation 3267:Software maintenance 3262:Software engineering 3224:Software development 3174:Programming language 3169:Programming paradigm 3086:Network architecture 2301:Read–eval–print loop 1953:programming language 1932:Template Interpreter 1859:Abstract syntax tree 1758:abstract syntax tree 1601:executeIntExpression 1385:executeIntExpression 1349:executeIntExpression 1169:executeIntExpression 879:variable-length code 519:interpreted language 265:Java virtual machine 187:Tracing just-in-time 18:Interpreted language 3889:Document management 3879:Operations research 3804:Enterprise software 3720:Multi-task learning 3705:Supervised learning 3427:Information systems 3257:Software deployment 3214:Software repository 3068:Real-time computing 2712:. 18 November 2021. 2465:IONOS Digital Guide 2320:In this sense, the 2281:Dynamic compilation 2223:Self-modifying code 2124:channel controllers 2106:sequencing in many 652:by a compiler (and 646:high-level language 527:high-level language 81:Optimizing compiler 3672:Search methodology 3619:Parallel computing 3576:Interaction design 3485:Computing platform 3412:Numerical analysis 3402:Information theory 3194:Software framework 3157:Software notations 3096:Network components 2993:Integrated circuit 2779:Bondorf, Anders. " 2726:. Openjdk.java.net 2502:2014-01-06 at the 2296:Partial evaluation 2185:Computer processor 2167:microarchitectures 2136:network processors 2108:digital processing 2040:is the writing of 1991:typesetting system 642: 441:Early versions of 387:scripting language 39: 3935: 3934: 3864:Electronic voting 3794:Quantum Computing 3787:Applied computing 3773:Image compression 3543:Hardware security 3533:Security services 3490:Digital marketing 3277:Open-source model 3189:Modeling language 3101:Network scheduler 2599:(February 1999). 2595:Kistler, Thomas; 2411:. 8 November 2014 2384:in my paper into 2276:Compiled language 2266:BASIC interpreter 2213:command languages 1746: 1745: 847:development speed 749:Development cycle 618:garbage collector 610:memory management 566:General operation 523:compiled language 363: 362: 45:Program execution 16:(Redirected from 3960: 3925: 3924: 3915: 3914: 3905: 3904: 3725:Cross-validation 3697:Machine learning 3581:Social computing 3548:Network security 3343:Algorithm design 3272:Programming team 3232:Control variable 3209:Software library 3147:Software quality 3142:Operating system 3091:Network protocol 2956:Computer science 2949: 2942: 2935: 2926: 2925: 2919:ghostarchive.org 2892: 2874: 2844: 2843: 2841: 2839: 2816: 2810: 2809: 2807: 2805: 2793:Gifford, Clive. 2790: 2784: 2777: 2771: 2770: 2767:ProgrammerSought 2759: 2753: 2752: 2741: 2735: 2734: 2732: 2731: 2720: 2714: 2713: 2702: 2693: 2686: 2680: 2674: 2668: 2662: 2656: 2655: 2653: 2652: 2623: 2605: 2592: 2586: 2580: 2574: 2573: 2566: 2552: 2546: 2545: 2533: 2512: 2506: 2493: 2487: 2481: 2475: 2474: 2472: 2471: 2457: 2451: 2450: 2432: 2421: 2420: 2418: 2416: 2399: 2393: 2360: 2354: 2353: 2345: 2339: 2332: 2326: 2317: 2156:microprogramming 2128:disk controllers 2116:microcontrollers 2057: 1941:Self-interpreter 1750:lexical analyzer 1740: 1737: 1734: 1731: 1728: 1725: 1722: 1719: 1716: 1713: 1710: 1707: 1704: 1701: 1698: 1695: 1692: 1689: 1686: 1683: 1680: 1677: 1674: 1671: 1668: 1665: 1662: 1659: 1656: 1653: 1650: 1647: 1644: 1641: 1638: 1635: 1632: 1629: 1626: 1623: 1620: 1617: 1614: 1611: 1608: 1605: 1602: 1599: 1596: 1593: 1590: 1587: 1584: 1581: 1578: 1575: 1572: 1569: 1566: 1563: 1560: 1557: 1554: 1551: 1548: 1545: 1542: 1539: 1536: 1533: 1530: 1527: 1524: 1521: 1518: 1515: 1512: 1509: 1506: 1503: 1500: 1497: 1494: 1491: 1488: 1485: 1482: 1479: 1476: 1473: 1470: 1467: 1464: 1461: 1458: 1455: 1452: 1449: 1446: 1443: 1440: 1437: 1434: 1431: 1428: 1425: 1422: 1419: 1416: 1413: 1410: 1407: 1404: 1401: 1398: 1395: 1392: 1389: 1386: 1383: 1380: 1377: 1374: 1371: 1368: 1365: 1362: 1359: 1356: 1353: 1350: 1347: 1344: 1341: 1338: 1335: 1332: 1329: 1326: 1323: 1320: 1317: 1314: 1311: 1308: 1305: 1302: 1299: 1296: 1293: 1290: 1287: 1284: 1281: 1278: 1275: 1272: 1269: 1266: 1263: 1260: 1257: 1254: 1251: 1248: 1245: 1242: 1239: 1236: 1233: 1230: 1227: 1224: 1221: 1218: 1215: 1212: 1209: 1206: 1203: 1200: 1197: 1194: 1191: 1188: 1185: 1182: 1179: 1176: 1173: 1170: 1167: 1164: 1161: 1158: 1155: 1152: 1149: 1146: 1143: 1140: 1137: 1134: 1131: 1130:_binaryOperation 1128: 1125: 1122: 1119: 1116: 1113: 1110: 1107: 1104: 1101: 1098: 1095: 1092: 1089: 1086: 1083: 1080: 1077: 1074: 1071: 1068: 1065: 1062: 1059: 1056: 1053: 1050: 1047: 1044: 1041: 1040:_binaryOperation 1038: 1035: 1032: 1029: 1026: 1023: 1020: 1017: 1014: 1011: 1008: 1005: 1002: 999: 996: 993: 990: 987: 984: 981: 978: 975: 972: 969: 966: 963: 960: 957: 954: 951: 948: 945: 942: 939: 936: 933: 930: 927: 924: 921: 918: 915: 912: 909: 906: 903: 900: 884: 883: 732:embedded systems 681:object format). 638:static libraries 593: 585: 395:machine language 375:computer program 367:computer science 355: 348: 341: 217:Notable runtimes 204:Transcompilation 51:General concepts 41: 40: 21: 3968: 3967: 3963: 3962: 3961: 3959: 3958: 3957: 3938: 3937: 3936: 3931: 3922: 3893: 3874:Word processing 3782: 3768:Virtual reality 3729: 3691: 3662:Computer vision 3638: 3634:Multiprocessing 3600: 3562: 3528:Security hacker 3504: 3480:Digital library 3421: 3372:Mathematics of 3367: 3329: 3305:Automata theory 3300:Formal language 3281: 3247:Software design 3218: 3151: 3137:Virtual machine 3115: 3111:Network service 3072: 3063:Embedded system 3036: 2969: 2958: 2953: 2921:on May 9, 2022. 2915:Short animation 2899: 2853: 2848: 2847: 2837: 2835: 2833: 2817: 2813: 2803: 2801: 2791: 2787: 2778: 2774: 2761: 2760: 2756: 2743: 2742: 2738: 2729: 2727: 2722: 2721: 2717: 2704: 2703: 2696: 2687: 2683: 2675: 2671: 2663: 2659: 2650: 2648: 2603: 2593: 2589: 2581: 2577: 2560: 2553: 2549: 2542: 2527: 2513: 2509: 2504:Wayback Machine 2494: 2490: 2482: 2478: 2469: 2467: 2459: 2458: 2454: 2434: 2433: 2424: 2414: 2412: 2401: 2400: 2396: 2361: 2357: 2346: 2342: 2338:, for instance. 2333: 2329: 2318: 2314: 2309: 2262: 2237:virtual machine 2208: 2199: 2187: 2179:execution units 2095: 2089: 2052: 2038:metaprogramming 2033:Turing-complete 1949: 1943: 1934: 1884: 1878: 1861: 1855: 1847:virtual machine 1834: 1828: 1806:virtual machine 1796:is compiled to 1790: 1784: 1779: 1770: 1742: 1741: 1738: 1735: 1732: 1729: 1726: 1723: 1720: 1717: 1714: 1711: 1708: 1705: 1702: 1699: 1696: 1693: 1690: 1687: 1684: 1681: 1678: 1675: 1672: 1669: 1666: 1663: 1660: 1657: 1654: 1651: 1648: 1645: 1642: 1639: 1636: 1633: 1630: 1627: 1624: 1621: 1618: 1615: 1612: 1609: 1606: 1603: 1600: 1597: 1594: 1591: 1588: 1585: 1582: 1579: 1576: 1573: 1570: 1567: 1564: 1561: 1558: 1555: 1552: 1549: 1546: 1543: 1540: 1537: 1534: 1531: 1528: 1525: 1522: 1519: 1516: 1513: 1510: 1507: 1504: 1501: 1498: 1495: 1492: 1489: 1486: 1483: 1480: 1477: 1474: 1471: 1468: 1465: 1462: 1459: 1456: 1453: 1450: 1447: 1444: 1441: 1438: 1435: 1432: 1429: 1426: 1423: 1420: 1417: 1414: 1411: 1408: 1405: 1402: 1399: 1396: 1393: 1390: 1387: 1384: 1381: 1378: 1375: 1372: 1369: 1366: 1363: 1360: 1357: 1354: 1351: 1348: 1345: 1342: 1339: 1336: 1333: 1330: 1327: 1324: 1321: 1318: 1315: 1312: 1309: 1306: 1303: 1300: 1297: 1294: 1291: 1288: 1285: 1282: 1279: 1276: 1273: 1270: 1267: 1264: 1261: 1258: 1255: 1252: 1249: 1246: 1243: 1240: 1237: 1234: 1231: 1228: 1225: 1222: 1219: 1216: 1213: 1210: 1207: 1204: 1201: 1198: 1195: 1192: 1189: 1186: 1183: 1180: 1177: 1174: 1171: 1168: 1165: 1162: 1159: 1156: 1153: 1150: 1147: 1144: 1142:_unaryOperation 1141: 1138: 1135: 1132: 1129: 1126: 1123: 1120: 1117: 1114: 1111: 1108: 1105: 1102: 1099: 1096: 1093: 1090: 1087: 1084: 1081: 1078: 1075: 1072: 1069: 1066: 1063: 1060: 1057: 1054: 1051: 1048: 1045: 1042: 1039: 1036: 1033: 1030: 1027: 1024: 1021: 1018: 1015: 1013:_unaryOperation 1012: 1009: 1006: 1003: 1000: 997: 994: 991: 988: 985: 982: 979: 976: 973: 970: 967: 964: 961: 958: 955: 952: 949: 946: 943: 940: 937: 934: 931: 928: 925: 922: 919: 916: 913: 910: 907: 904: 901: 898: 820: 773: 751: 630: 614:Turing complete 591: 583: 568: 539: 435:virtual machine 359: 239:(CLR) and  225:Android Runtime 121:Virtual machine 28: 23: 22: 15: 12: 11: 5: 3966: 3956: 3955: 3950: 3933: 3932: 3930: 3929: 3919: 3909: 3898: 3895: 3894: 3892: 3891: 3886: 3881: 3876: 3871: 3866: 3861: 3856: 3851: 3846: 3841: 3836: 3831: 3826: 3821: 3816: 3811: 3806: 3801: 3796: 3790: 3788: 3784: 3783: 3781: 3780: 3778:Solid modeling 3775: 3770: 3765: 3760: 3755: 3750: 3745: 3739: 3737: 3731: 3730: 3728: 3727: 3722: 3717: 3712: 3707: 3701: 3699: 3693: 3692: 3690: 3689: 3684: 3679: 3677:Control method 3674: 3669: 3664: 3659: 3654: 3648: 3646: 3640: 3639: 3637: 3636: 3631: 3629:Multithreading 3626: 3621: 3616: 3610: 3608: 3602: 3601: 3599: 3598: 3593: 3588: 3583: 3578: 3572: 3570: 3564: 3563: 3561: 3560: 3555: 3550: 3545: 3540: 3535: 3530: 3525: 3523:Formal methods 3520: 3514: 3512: 3506: 3505: 3503: 3502: 3497: 3495:World Wide Web 3492: 3487: 3482: 3477: 3472: 3467: 3462: 3457: 3452: 3447: 3442: 3437: 3431: 3429: 3423: 3422: 3420: 3419: 3414: 3409: 3404: 3399: 3394: 3389: 3384: 3378: 3376: 3369: 3368: 3366: 3365: 3360: 3355: 3350: 3345: 3339: 3337: 3331: 3330: 3328: 3327: 3322: 3317: 3312: 3307: 3302: 3297: 3291: 3289: 3283: 3282: 3280: 3279: 3274: 3269: 3264: 3259: 3254: 3249: 3244: 3239: 3234: 3228: 3226: 3220: 3219: 3217: 3216: 3211: 3206: 3201: 3196: 3191: 3186: 3181: 3176: 3171: 3165: 3163: 3153: 3152: 3150: 3149: 3144: 3139: 3134: 3129: 3123: 3121: 3117: 3116: 3114: 3113: 3108: 3103: 3098: 3093: 3088: 3082: 3080: 3074: 3073: 3071: 3070: 3065: 3060: 3055: 3050: 3044: 3042: 3038: 3037: 3035: 3034: 3025: 3020: 3015: 3010: 3005: 3000: 2995: 2990: 2985: 2979: 2977: 2971: 2970: 2963: 2960: 2959: 2952: 2951: 2944: 2937: 2929: 2923: 2922: 2912: 2906: 2898: 2897:External links 2895: 2894: 2893: 2872:10.1.1.97.3985 2852: 2849: 2846: 2845: 2831: 2811: 2785: 2772: 2754: 2736: 2715: 2694: 2681: 2669: 2657: 2621:10.1.1.87.2257 2597:Franz, Michael 2587: 2575: 2547: 2540: 2507: 2488: 2476: 2452: 2422: 2394: 2355: 2340: 2327: 2311: 2310: 2308: 2305: 2304: 2303: 2298: 2293: 2288: 2283: 2278: 2273: 2268: 2261: 2258: 2257: 2256: 2250: 2240: 2233:Virtualization 2230: 2220: 2217:glue languages 2207: 2204: 2198: 2195: 2186: 2183: 2091:Main article: 2088: 2085: 1945:Main article: 1942: 1939: 1933: 1930: 1920:, most modern 1918:.NET Framework 1909:in the 1980s. 1880:Main article: 1877: 1874: 1857:Main article: 1854: 1851: 1830:Main article: 1827: 1824: 1816:Control tables 1786:Main article: 1783: 1780: 1778: 1775: 1769: 1766: 1744: 1743: 897: 893: 892: 819: 816: 785:cross compiler 772: 769: 750: 747: 701:quadruple code 629: 626: 567: 564: 538: 535: 529:is ideally an 439: 438: 423: 409: 377:that directly 361: 360: 358: 357: 350: 343: 335: 332: 331: 330: 329: 324: 315: 306: 305: 301: 300: 299: 298: 292: 283: 273: 268: 262: 252: 243: 234: 228: 219: 218: 214: 213: 212: 211: 206: 201: 199:Precompilation 196: 195: 194: 189: 178: 169: 168: 164: 163: 162: 161: 156: 151: 146: 141: 133: 132: 128: 127: 126: 125: 124: 123: 118: 113: 108: 107: 106: 99:Runtime system 91: 85: 84: 83: 78: 77: 76: 61: 53: 52: 48: 47: 26: 9: 6: 4: 3: 2: 3965: 3954: 3951: 3949: 3946: 3945: 3943: 3928: 3920: 3918: 3910: 3908: 3900: 3899: 3896: 3890: 3887: 3885: 3882: 3880: 3877: 3875: 3872: 3870: 3867: 3865: 3862: 3860: 3857: 3855: 3852: 3850: 3847: 3845: 3842: 3840: 3837: 3835: 3832: 3830: 3827: 3825: 3822: 3820: 3817: 3815: 3812: 3810: 3807: 3805: 3802: 3800: 3797: 3795: 3792: 3791: 3789: 3785: 3779: 3776: 3774: 3771: 3769: 3766: 3764: 3763:Mixed reality 3761: 3759: 3756: 3754: 3751: 3749: 3746: 3744: 3741: 3740: 3738: 3736: 3732: 3726: 3723: 3721: 3718: 3716: 3713: 3711: 3708: 3706: 3703: 3702: 3700: 3698: 3694: 3688: 3685: 3683: 3680: 3678: 3675: 3673: 3670: 3668: 3665: 3663: 3660: 3658: 3655: 3653: 3650: 3649: 3647: 3645: 3641: 3635: 3632: 3630: 3627: 3625: 3622: 3620: 3617: 3615: 3612: 3611: 3609: 3607: 3603: 3597: 3596:Accessibility 3594: 3592: 3591:Visualization 3589: 3587: 3584: 3582: 3579: 3577: 3574: 3573: 3571: 3569: 3565: 3559: 3556: 3554: 3551: 3549: 3546: 3544: 3541: 3539: 3536: 3534: 3531: 3529: 3526: 3524: 3521: 3519: 3516: 3515: 3513: 3511: 3507: 3501: 3498: 3496: 3493: 3491: 3488: 3486: 3483: 3481: 3478: 3476: 3473: 3471: 3468: 3466: 3463: 3461: 3458: 3456: 3453: 3451: 3448: 3446: 3443: 3441: 3438: 3436: 3433: 3432: 3430: 3428: 3424: 3418: 3415: 3413: 3410: 3408: 3405: 3403: 3400: 3398: 3395: 3393: 3390: 3388: 3385: 3383: 3380: 3379: 3377: 3375: 3370: 3364: 3361: 3359: 3356: 3354: 3351: 3349: 3346: 3344: 3341: 3340: 3338: 3336: 3332: 3326: 3323: 3321: 3318: 3316: 3313: 3311: 3308: 3306: 3303: 3301: 3298: 3296: 3293: 3292: 3290: 3288: 3284: 3278: 3275: 3273: 3270: 3268: 3265: 3263: 3260: 3258: 3255: 3253: 3250: 3248: 3245: 3243: 3240: 3238: 3235: 3233: 3230: 3229: 3227: 3225: 3221: 3215: 3212: 3210: 3207: 3205: 3202: 3200: 3197: 3195: 3192: 3190: 3187: 3185: 3182: 3180: 3177: 3175: 3172: 3170: 3167: 3166: 3164: 3162: 3158: 3154: 3148: 3145: 3143: 3140: 3138: 3135: 3133: 3130: 3128: 3125: 3124: 3122: 3118: 3112: 3109: 3107: 3104: 3102: 3099: 3097: 3094: 3092: 3089: 3087: 3084: 3083: 3081: 3079: 3075: 3069: 3066: 3064: 3061: 3059: 3058:Dependability 3056: 3054: 3051: 3049: 3046: 3045: 3043: 3039: 3033: 3029: 3026: 3024: 3021: 3019: 3016: 3014: 3011: 3009: 3006: 3004: 3001: 2999: 2996: 2994: 2991: 2989: 2986: 2984: 2981: 2980: 2978: 2976: 2972: 2967: 2961: 2957: 2950: 2945: 2943: 2938: 2936: 2931: 2930: 2927: 2920: 2916: 2913: 2910: 2907: 2904: 2901: 2900: 2890: 2886: 2882: 2878: 2873: 2868: 2865:(2): 97–113. 2864: 2860: 2855: 2854: 2834: 2832:0-8247-2281-7 2828: 2824: 2823: 2815: 2800: 2796: 2789: 2782: 2776: 2768: 2764: 2758: 2750: 2749:metebalci.com 2746: 2740: 2725: 2719: 2711: 2707: 2706:"openjdk/jdk" 2701: 2699: 2691: 2685: 2678: 2673: 2666: 2661: 2647: 2643: 2639: 2635: 2631: 2627: 2622: 2617: 2613: 2609: 2602: 2598: 2591: 2584: 2579: 2572:(3): 150–152. 2571: 2568:(in German). 2567: 2564: 2559: 2551: 2543: 2541:3-327-00357-2 2537: 2531: 2526: 2522: 2518: 2511: 2505: 2501: 2498: 2492: 2486: 2480: 2466: 2462: 2456: 2448: 2444: 2443: 2438: 2431: 2429: 2427: 2410: 2409: 2404: 2398: 2391: 2387: 2383: 2379: 2375: 2371: 2370: 2365: 2359: 2351: 2344: 2337: 2331: 2325: 2323: 2316: 2312: 2302: 2299: 2297: 2294: 2292: 2289: 2287: 2286:Homoiconicity 2284: 2282: 2279: 2277: 2274: 2272: 2269: 2267: 2264: 2263: 2254: 2251: 2248: 2244: 2241: 2238: 2234: 2231: 2228: 2224: 2221: 2218: 2214: 2210: 2209: 2203: 2194: 2192: 2182: 2180: 2176: 2172: 2168: 2163: 2161: 2157: 2152: 2148: 2147:state machine 2143: 2141: 2137: 2133: 2129: 2125: 2121: 2117: 2113: 2109: 2105: 2104:state machine 2101: 2094: 2084: 2082: 2078: 2074: 2070: 2069: 2063: 2061: 2055: 2050: 2045: 2043: 2039: 2034: 2030: 2026: 2022: 2017: 2015: 2011: 2005: 2003: 1999: 1994: 1992: 1989: 1985: 1981: 1977: 1973: 1969: 1964: 1962: 1958: 1954: 1948: 1938: 1929: 1927: 1923: 1919: 1915: 1910: 1908: 1903: 1899: 1898:John McCarthy 1895: 1890: 1883: 1873: 1869: 1867: 1860: 1850: 1848: 1844: 1843:Open Firmware 1841:code used in 1840: 1833: 1832:Threaded code 1823: 1821: 1817: 1813: 1811: 1807: 1803: 1799: 1795: 1789: 1774: 1773:can execute. 1765: 1763: 1759: 1755: 1751: 895: 894: 890: 886: 885: 882: 880: 875: 871: 867: 864: 860: 856: 852: 848: 843: 841: 836: 832: 827: 825: 815: 813: 809: 805: 801: 797: 792: 788: 786: 782: 778: 768: 765: 760: 756: 746: 744: 739: 737: 733: 729: 724: 722: 721:type checking 717: 712: 710: 706: 702: 698: 697:stack machine 693: 691: 687: 682: 679: 674: 670: 665: 663: 659: 655: 651: 647: 639: 634: 625: 623: 619: 615: 611: 607: 603: 598: 596: 589: 581: 577: 573: 563: 561: 557: 556:John McCarthy 553: 549: 548:Steve Russell 545: 534: 532: 528: 524: 520: 514: 512: 508: 504: 500: 496: 492: 488: 484: 480: 476: 472: 468: 464: 460: 456: 452: 448: 444: 436: 432: 428: 424: 421: 417: 413: 410: 407: 403: 400: 399: 398: 396: 392: 388: 384: 380: 376: 372: 368: 356: 351: 349: 344: 342: 337: 336: 334: 333: 328: 325: 323: 319: 316: 313: 310: 309: 308: 307: 303: 302: 296: 293: 291: 287: 284: 281: 277: 274: 272: 269: 266: 263: 260: 256: 253: 251: 247: 244: 242: 238: 235: 232: 229: 226: 223: 222: 221: 220: 216: 215: 210: 209:Recompilation 207: 205: 202: 200: 197: 193: 190: 188: 185: 184: 182: 179: 176: 175:Ahead-of-time 173: 172: 171: 170: 166: 165: 160: 157: 155: 152: 150: 147: 145: 142: 140: 137: 136: 135: 134: 131:Types of code 130: 129: 122: 119: 117: 114: 112: 109: 105: 102: 101: 100: 97: 96: 95: 92: 89: 86: 82: 79: 75: 72: 71: 70: 67: 66: 65: 62: 60: 57: 56: 55: 54: 50: 49: 46: 43: 42: 37: 32: 19: 3859:Cyberwarfare 3518:Cryptography 3126: 2862: 2858: 2836:. Retrieved 2821: 2814: 2802:. Retrieved 2798: 2788: 2775: 2766: 2757: 2748: 2739: 2728:. Retrieved 2718: 2709: 2684: 2672: 2660: 2649:. Retrieved 2614:(1): 21–33. 2611: 2607: 2590: 2578: 2569: 2556: 2550: 2520: 2516: 2510: 2491: 2479: 2468:. Retrieved 2464: 2455: 2440: 2413:. Retrieved 2408:Ars Technica 2406: 2397: 2381: 2377: 2373: 2367: 2358: 2349: 2343: 2330: 2319: 2315: 2206:Applications 2200: 2188: 2164: 2160:microprogram 2159: 2155: 2144: 2100:machine code 2096: 2066: 2064: 2059: 2053: 2048: 2046: 2018: 2006: 1995: 1980:Donald Knuth 1976:bootstrapped 1965: 1950: 1935: 1911: 1889:machine code 1885: 1870: 1866:just-in-time 1862: 1835: 1820:control flow 1814: 1809: 1791: 1771: 1747: 861:with single 844: 840:compile time 828: 821: 812:disassembler 793: 789: 774: 771:Distribution 752: 740: 725: 715: 713: 708: 705:machine code 704: 694: 683: 673:symbol table 666: 664:to execute. 650:machine code 643: 599: 587: 584:ADD Books, 5 569: 559: 540: 515: 440: 370: 364: 181:Just-in-time 154:Machine code 115: 74:Compile time 3869:Video games 3849:Digital art 3606:Concurrency 3475:Data mining 3387:Probability 3127:Interpreter 2804:10 November 2677:Aycock 2003 2561: [ 2528: [ 2437:Interpreter 2364:Paul Graham 2175:word length 2151:electronics 1097:_expression 804:obfuscation 753:During the 669:object code 580:Instruction 531:abstraction 471:UCSD Pascal 420:object code 406:source code 383:programming 371:interpreter 295:Zend Engine 276:Objective-C 144:Object code 139:Source code 116:Interpreter 64:Translation 3942:Categories 3927:Glossaries 3799:E-commerce 3392:Statistics 3335:Algorithms 3132:Middleware 2988:Peripheral 2730:2022-08-06 2651:2020-12-20 2544:. 7469332. 2470:2022-09-16 2415:9 November 2307:References 2243:Sandboxing 1922:JavaScript 1810:compreters 1794:Emacs Lisp 1777:Variations 1768:Regression 1709:rightValue 1688:rightValue 1667:rightValue 1595:rightValue 1559:rightValue 1523:rightValue 1502:rightValue 1478:rightValue 1454:rightValue 1379:rightValue 1205:rightValue 870:jump table 818:Efficiency 808:decompiler 800:encryption 690:parse tree 660:) for the 429:made by a 111:Executable 3748:Rendering 3743:Animation 3374:computing 3325:Semantics 3023:Processor 2867:CiteSeerX 2638:0885-7458 2616:CiteSeerX 2253:Emulators 2229:research. 2093:Microcode 2087:Microcode 2065:The book 1972:assembler 1907:Smalltalk 1900:in 1960. 1724:exception 1553:leftValue 1535:exception 1496:leftValue 1472:leftValue 1448:leftValue 1343:leftValue 1199:leftValue 1118:_constant 1106:_variable 992:_constant 968:_variable 831:statement 796:copyright 736:NOR flash 654:assembler 606:branching 588:interpret 483:Smalltalk 412:Translate 320:and  288:and  278:and  248:and  159:Microcode 94:Execution 3907:Category 3735:Graphics 3510:Security 3179:Compiler 3078:Networks 2975:Hardware 2889:15345671 2646:14330985 2500:Archived 2260:See also 2247:security 2044:(DSLs). 1968:compiler 1798:bytecode 1788:Bytecode 1295:constant 1259:variable 1121:constant 1109:variable 859:keywords 835:run-time 824:compiled 781:portable 777:compiler 764:Makefile 709:performs 686:assembly 622:debugger 595:variable 572:commands 431:compiler 427:bytecode 391:compiled 379:executes 233:(Erlang) 149:Bytecode 69:Compiler 3917:Outline 2851:Sources 2838:Jan 17, 2799:Blogger 2439:at the 2386:IBM 704 2177:, more 2171:emulate 2010:closure 1718:default 767:files. 728:linkers 576:execute 574:it can 552:IBM 704 537:History 499:Fortran 393:into a 290:Node.js 246:CPython 104:Runtime 2887:  2869:  2829:  2710:GitHub 2644:  2636:  2618:  2538:  2336:ABC 80 2215:, and 2081:Pascal 2025:Prolog 1966:If no 1926:Matlab 1916:, the 1754:parser 1703:return 1682:return 1676:kMinus 1661:return 1631:switch 1580:kMinus 1550:return 1493:return 1469:return 1445:return 1415:switch 1403:binary 1367:binary 1280:return 1274:kConst 1265:memory 1241:return 1211:switch 1178:struct 1139:struct 1133:binary 1127:struct 1115:struct 1103:struct 1073:struct 1046:struct 1037:struct 1019:struct 1010:struct 989:struct 980:memory 965:struct 953:kMinus 917:kConst 874:PBASIC 866:tokens 678:linker 658:linker 608:, and 550:on an 521:" or " 475:linked 465:, and 463:MATLAB 459:Python 271:LuaJIT 183:(JIT) 3320:Logic 3161:tools 2885:S2CID 2642:S2CID 2604:(PDF) 2565:] 2532:] 2519:[ 2077:Forth 2012:in a 1957:BASIC 1839:Forth 1655:kPlus 1640:-> 1625:right 1619:unary 1610:-> 1571:kPlus 1487:kMult 1463:kDiff 1424:-> 1409:right 1394:-> 1358:-> 1328:kMult 1319:kDiff 1301:value 1286:-> 1250:-> 1220:-> 1181:_node 1175:const 1145:unary 1094:union 1085:_kind 1076:_node 1064:right 1049:_node 1028:right 1022:_node 1001:value 947:kPlus 935:kMult 929:kDiff 905:_kind 855:BASIC 851:Lisps 592:Books 503:Cobol 495:Algol 487:BASIC 402:Parse 373:is a 369:, an 322:Clang 314:(GCC) 297:(PHP) 280:Swift 267:(JVM) 227:(ART) 177:(AOT) 3159:and 3032:Form 3028:Size 2840:2016 2827:ISBN 2806:2019 2634:ISSN 2570:1984 2536:ISBN 2447:GFDL 2417:2014 2382:eval 2378:eval 2374:eval 2191:VHDL 2079:and 2023:and 2021:Lisp 2014:Lisp 1914:Java 1894:LISP 1752:and 1697:kNot 1694:case 1673:case 1652:case 1643:kind 1589:kNot 1586:case 1577:case 1568:case 1511:kDiv 1508:case 1484:case 1460:case 1439:kSum 1436:case 1427:kind 1373:left 1337:kDiv 1334:case 1325:case 1316:case 1310:kSum 1307:case 1271:case 1235:kVar 1232:case 1223:kind 1088:kind 1082:enum 1055:left 959:kNot 941:kDiv 923:kSum 911:kVar 902:enum 887:Toy 863:byte 802:and 759:link 716:some 656:and 620:and 586:and 560:eval 544:Lisp 509:and 491:Java 489:and 467:Ruby 455:Raku 451:Perl 445:and 404:the 327:MSVC 318:LLVM 255:crt0 250:PyPy 241:Mono 231:BEAM 90:(IR) 59:Code 2877:doi 2626:doi 2390:bug 2366:in 2322:CPU 2169:to 2056:− 1 1988:TeX 1984:WEB 1896:by 1196:int 1166:int 998:int 974:int 810:or 743:IDE 662:CPU 511:C++ 479:JIT 418:or 385:or 365:In 36:UML 3944:: 3030:/ 2883:. 2875:. 2863:35 2861:. 2797:. 2765:. 2747:. 2708:. 2697:^ 2640:. 2632:. 2624:. 2612:27 2610:. 2606:. 2563:de 2530:de 2463:. 2425:^ 2405:. 2162:. 2138:, 2134:, 2130:, 2126:, 2122:, 2118:, 2083:. 1993:. 1963:. 1849:. 1733:); 1628:); 1544:); 1526:== 1517:if 1412:); 1376:); 1160:}; 1070:}; 1034:}; 1007:}; 986:}; 962:}; 842:. 814:. 775:A 723:. 699:, 624:. 604:, 597:. 513:. 505:, 501:, 497:, 461:, 457:, 453:, 286:V8 282:'s 2968:. 2948:e 2941:t 2934:v 2891:. 2879:: 2842:. 2808:. 2769:. 2751:. 2733:. 2654:. 2628:: 2473:. 2419:. 2352:. 2060:N 2054:N 2049:N 1802:C 1762:C 1739:} 1736:} 1727:( 1721:: 1715:} 1712:; 1706:! 1700:: 1691:; 1685:- 1679:: 1670:; 1664:+ 1658:: 1649:{ 1646:) 1637:n 1634:( 1622:. 1616:. 1613:e 1607:n 1604:( 1598:= 1592:: 1583:: 1574:: 1565:} 1562:; 1556:/ 1538:( 1532:) 1529:0 1520:( 1514:: 1505:; 1499:* 1490:: 1481:; 1475:- 1466:: 1457:; 1451:+ 1442:: 1433:{ 1430:) 1421:n 1418:( 1406:. 1400:. 1397:e 1391:n 1388:( 1382:= 1370:. 1364:. 1361:e 1355:n 1352:( 1346:= 1340:: 1331:: 1322:: 1313:: 1304:; 1298:. 1292:. 1289:e 1283:n 1277:: 1268:; 1262:. 1256:. 1253:e 1247:n 1244:* 1238:: 1229:{ 1226:) 1217:n 1214:( 1208:; 1202:, 1193:{ 1190:) 1187:n 1184:* 1172:( 1157:; 1154:e 1151:} 1148:; 1136:; 1124:; 1112:; 1100:{ 1091:; 1079:{ 1067:; 1061:* 1058:, 1052:* 1043:{ 1031:; 1025:* 1016:{ 1004:; 995:{ 983:; 977:* 971:{ 956:, 950:, 944:, 938:, 932:, 926:, 920:, 914:, 908:{ 889:C 517:" 507:C 437:. 354:e 347:t 340:v 259:C 257:( 20:)

Index

Interpreted language

UML
Program execution
Code
Translation
Compiler
Compile time
Optimizing compiler
Intermediate representation
Execution
Runtime system
Runtime
Executable
Interpreter
Virtual machine
Source code
Object code
Bytecode
Machine code
Microcode
Ahead-of-time
Just-in-time
Tracing just-in-time
Compile and go system
Precompilation
Transcompilation
Recompilation
Android Runtime
BEAM

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑