http___en.wikipedia.org_wiki_Interpreted_language_5.xml
1.1 2.1 2.2 3.1 4.1 5.1 5.2 5.3 6.1 7.1 7.2 7.3 7.4 8.1 9.1 9.2 10.1 10.2 10.3 10.4 11.1 12.1 12.2 12.3 12.4 12.5 13.1 13.2 14.1 15.1 16.1 17.1 18.1 19.1 20.1 21.1 22.1 23.1 24.1 25.1 26.1 27.1 28.1 29.1 30.1 31.1 32.1 33.1 34.1 35.1 36.1 37.1 38.1 39.1 40.1 41.1 42.1 43.1
Интерпретатор (софтуер) В компютърните науки интерпретатор е компютърна програма, която извършва последователен анализ на командите от изходния код, непосредствено ги превежда на машинен език и изпълнява. По своята същност интерпретаторът е транслатор (на английски: translator - преводач). Съдържание Интерпретатор в сравнение с компилатор и свързващ редактор(linker)[редактиране | edit source] Програмите обикновено се пишат на език от високо ниво, който трябва да бъде превърнат в машинен език, за да могат да бъдат изпълнени от процесора. Това превръщане се извършва от компилатор или от интерпретатор. За да може програмата да се изпълнява компилаторът превежда изходния код само веднъж, докато интерпретаторът извършва превода при всяко нейно стартиране. Цикъл на разработка[редактиране | edit source] По време на разработката на софтуер се извършват чести и множество промени на изходния код. Когато се използва компилатор, при всяка промяна в кода, преди програмата да може да бъде изпълнена, трябва да се изчака компилатора да транслира всички файлове с изходен код и да свърже един с друг получените файлове с двоичен код. Колкото е по-голям обемът на съответната програма толкова е по-дълго и времето за изчакване. В противовес, при използване на интерпретатор времето за изчакване е много по-малко, тъй като интерпретаторът обикновено има нужда да преведе само кода, който е променен, което изисква значително по-малко време преди промените да бъдат тествани. Гъвкавост[редактиране | edit source] Компилаторът преобразува изходния код в двоични инструкции за определена процесорна архитектура, като по този начин се намалява мобилността. Превръщането се прави само веднъж, в средата на разработчика, и след това получените файлове с машинни инструкции могат да бъдат разпространявани на потребителски компютри с необходимата процесорна архитектура, където да бъдат изпълнени без допълнителна транслация. Интерпретируемите програми могат да бъдат разпространявани като изходен код. За целта трябва да бъде преведена на конкретната потребителска машина, което отнема повече време, но прави програмното разпространение независимо от компютърната архитектура. Независимостта обаче зависи от наличието на съответната машина на подходящ интерпретатор. При това ако трябва интерпретатора да съпровожда изходната програма, цялостния процес на инсталация се усложнява в сравнение с използването на един общ изпълним файл. Ефективност[редактиране | edit source] Основният недостатък на интерпретаторите е, че когато дадена програма се интерпретира обикновено работи по-бавно от колкото би работила ако е била компилирана. Разликите в скоростта могат да варират от незабележими до значителни размери. Най-общо стартирането на програма, използвайки интерпретатор отнема повече време в сравнение с това необходимо за изпълнението на вече компилиран код. Но тази разлика може да бъде и в противоположна посока, ако се разглежда общото време необходимо за процеса на компилиране и стартиране на програмата. Това е от особено значение в процеса на създаване и тестване на кода на програмата, когато цикълът редактиране-интерпретиране-дебъгване често може да бъде значително по кратък от този на редактиране-компилиране-стартиране-дебъгване. Интерпретирането на кода е по-бавно от директното стартиране на вече компилиран код, защото интерпретаторът трябва да анализира всеки израз в програмата всеки път когато се изпълнява и чак след това да извърши необходимата операция, докато при стартиране на компилиран код само се изпълняват операциите в логическа последователност зададена при компилирането. Също така и достъпът до променливите при използване на интерпретатор е по-бавен поради непрекъснатото адресиране на идентификаторите по време на изпълнение, за разлика от това по време на компилация. Списък на някои интерпретируеми езици[редактиране | edit source] - APL: J - ASP - BASIC: thinBasic - ECMAScript: ActionScript, E4X, JavaScript, JScript - Системи за математическа обработка: GNU Octave, IDL, Mathematica, MATLAB - Euphoria - Forth - Game Maker Language - Lava - Madness Script - Perl - PHP - PostScript - Python - Lisp: Logo, Scheme - MUMPS - REXX - Ruby: JRuby - Seed7 - Smalltalk: Bistro, Dolphin Smalltalk, F-Script, Little Smalltalk, Squeak, VisualAge, VisualWorks - Скриптови езици: WebDNA - Spreadsheet: Microsoft Excel - S: R - Tcl: XOTcl - XMLmosaic Външни препратки[редактиране | edit source] - IBM Card Interpreters страница на Columbia University - Theoretical Foundations For Practical 'Totally Functional Programming' (Глава 7) Докторска дисертация третираща проблема за формализация на това какво е интерпретатор - Анимация изясняваща концептуалните разлики между интерпретатор и компилатор
1.1 2.1 2.2 3.1 3.2 4.1 4.2 4.3 5.1 5.2 6.1 6.2 6.3 7.1 7.2 7.3 8.1 9.1 10.1 10.2 10.3 11.1 11.2 11.3 11.4 12.1 13.1 14.1 15.1 16.1 17.1 18.1 19.1 19.2 20.1 21.1 22.1 23.1 24.1 25.1 26.1 26.2 27.1 28.1 29.1 30.1 31.1 32.1 34.1 35.1 36.1 37.1 38.1 39.1 40.1 41.1 42.1 43.1 44.1 45.1 46.1 47.1 48.1 49.1 50.1 51.1 52.1 53.1 54.1 55.1 57.1 58.1 59.1 60.1 61.1 62.1 62.2 63.1 64.1 65.1 66.1 67.1 68.1 69.1 70.1 71.1
Interpreted language An interpreted language is a programming language for which most of its implementations execute instructions directly, without previously compiling a program into machine-language instructions. The interpreter executes the program directly, translating each statement into a sequence of one or more subroutines already compiled into machine code. The terms interpreted language and compiled language are not well defined because, in theory, any programming language can be either interpreted or compiled. In modern programing language implementation it is increasingly popular for a platform to provide both options. Interpreted languages can also be contrasted with machine languages. Functionally, both execution and interpretation mean the same thing — fetching the next instruction/statement from the program and executing it. Although interpreted bytecode is additionally identical to machine code in form and has an assembler representation, the term "interpreted" is practically reserved for "software processed" languages (by virtual machine or emulator) on top of the native (i.e. hardware) processor. In principle programs in many languages may be compiled or interpreted, emulated or executed natively, so this designation is applied solely based on common implementation practice, rather than representing an essential property of a language. Akin to processor microcoding, many interpreters internally rely on just-in-time compilation. Avoiding compilation, interpreted programs are easier to evolve during both development and execution (where they can morph themselves). On the other hand, since compilation implies translation into more machine-friendly format, interpreted programs run more slowly and less efficiently (i.e. waste considerably more energy). This is especially true for higher-level scripting languages, whose statements are complex to analyze compared to machine instruction. Many languages have been implemented using both compilers and interpreters, including BASIC, C, Lisp, Pascal, and Python. Java and C# are compiled into bytecode, the virtual machine-friendly interpreted language. Lisp implementations can freely mix interpreted and compiled code. Contents Historical background of interpreted/compiled[edit] In the early days of computing, language design was heavily influenced by the decision to use compiling or interpreting as a mode of execution. For example, some compiled languages require that programs must explicitly state the data-type of a variable at the time it is declared or first used while some interpreted languages take advantage of the dynamic aspects of interpreting to make such declarations unnecessary. For example, Smalltalk (1980), which was designed to be interpreted at run-time, allows generic objects to dynamically interact with each other. Initially, interpreted languages were compiled line-by-line; that is, each line was compiled as it was about to be executed, and if a loop or subroutine caused certain lines to be executed multiple times, they would be recompiled every time. This has become much less common. Most so-called interpreted languages use an intermediate representation, which combines compiling and interpreting. In this case, a compiler may output some form of bytecode or threaded code, which is then executed by a bytecode interpreter. Examples include: - Java - Python - Ruby (similarly, it uses an abstract syntax tree as intermediate representation) - Forth The intermediate representation can be compiled once and for all (as in Java), each time before execution (as in Perl or Ruby), or each time a change in the source is detected before execution (as in Python). Advantages of interpreting a language[edit] Interpreting a language gives implementations some additional flexibility over compiled implementations. Features that are often easier to implement in interpreters than in compilers include (but are not limited to): - platform independence (Java's byte code, for example) - reflection and reflective use of the evaluator (e.g. a first-order eval function) - dynamic typing - smaller executable program size (since implementations have flexibility to choose the instruction code) - dynamic scoping Disadvantages of interpreted languages[edit] The main disadvantage of interpreting is a much slower speed of program execution compared to direct machine code execution on the host CPU. A technique used to improve performance is just-in-time compilation which converts frequently executed sequences of interpreted instruction to host machine code. List of frequently used interpreted languages[edit] - APL A vector oriented language using an unusual character set - J An APL variant in which tacit definition provides some of the benefits of compiling - BASIC (although the original version, Dartmouth BASIC, was compiled, as are many modern BASICs) - ECMAScript - ActionScript (version 3.0 is not interpreted, that's why eval() function was removed) - JavaScript (first named Mocha, then LiveScript) - JScript - Equation manipulation and solving systems - Euphoria Interpreted or compiled. - Forth (traditionally threaded interpreted) - Game Maker Language - Lava - Madness Script - Perl - PHP - PostScript - Python - Lisp - MUMPS (traditionally interpreted, modern versions compiled) - REXX - Ruby - JRuby (A Java implementation of Ruby) - Seed7 Interpreted or compiled. - Smalltalk (pure object-orientation, originally from Xerox PARC, often supports debugging across machines.) - Scripting languages - Spreadsheets - Excel stores formulas, interprets them from a tokenized format - Tcl - VBScript - PowerShell - XMLmosaic An xml contained C# like programming language interpreted by a console application written in Visual Basic .NET Languages usually compiled to a bytecode[edit] Many interpreted languages are first compiled to bytecode, which is normally interpreted by virtual machine exploiting some just-in-time compilation of bytecode to native code. However, sometimes, bytecode can also be compiled to a native binary using an AOT compiler) or executed natively, by hardware processor. - Java (is compiled into Java bytecode to be interpreted by JVM) - Lua - .NET Framework languages (translated to bytecode, called CIL). - Pike - Python - Squeak Smalltalk - Visual FoxPro - Lisp - AppleScript