Асемблер срещу интерпретатор
По принцип компилаторът е компютърна програма, която чете програма, написана на един език, който се нарича изходен език, и я превежда на друг език, който се нарича целеви език. Традиционно изходният език е език от високо ниво като C++, а целевият език е език от ниско ниво като асемблерния език. Съществуват обаче компилатори, които могат да преобразуват изходна програма, написана на асемблерен език, и да я преобразуват в машинен код или обектен код. Асемблерите са такива инструменти. От друга страна, интерпретаторите са инструменти, които изпълняват инструкции, написани на някакъв език за програмиране. Интерпретаторът може директно да изпълни изходния код на високо ниво или да ги преведе в междинен код и след това да го интерпретира или да изпълни предварително компилиран код.
Какво е асемблер?
Assembler е софтуер или инструмент, който превежда асемблерния език в машинен код. И така, асемблерът е вид компилатор и изходният код е написан на асемблер. Асемблирането е четим от човека език, но обикновено има връзка едно към едно със съответния машинен код. Следователно се казва, че асемблерът извършва изоморфен (преобразуване едно към едно) превод. Усъвършенстваните асемблери предоставят допълнителни функции, които поддържат процесите на разработване на програми и отстраняване на грешки. Например типът асемблер, наречен макро асемблер, осигурява макросъоръжение.
Какво е преводач?
Интерпретаторът е компютърна програма или инструмент, който изпълнява програмни инструкции. Интерпретаторът може или да изпълни изходния код директно, или да преобразува изходния код в междинен код и да го изпълни директно, или да изпълни предварително компилиран код, създаден от компилатор (някои интерпретаторски системи включват компилатор за тази задача). Езици като Perl, Python, MATLAB и Ruby са примери за езици за програмиране, които използват междинен код. UCSD Pascal интерпретира предварително компилиран код. Езици като Java, BASIC и Samlltalk първо компилират изходния код в междинен код, наречен байткод, и след това го интерпретират.
Каква е разликата между асемблер и интерпретатор?
Асемблерът може да се счита за специален тип компилатор, който само превежда асемблерния език в машинен код. Интерпретаторите са инструменти, които изпълняват инструкции, написани на някакъв език. Интерпретаторските системи могат да включват компилатор за предварително компилиране на код преди интерпретация, но интерпретаторът не може да се нарече специален тип компилатор. Асемблерите произвеждат обектен код, който може да трябва да бъде свързан с помощта на програми за свързване, за да работи на машина, но повечето интерпретатори могат сами да завършат изпълнението на програма. Асемблерът обикновено ще направи превод едно към едно, но това не е вярно за повечето интерпретатори. Тъй като асемблерният език има съпоставяне едно към едно с машинния код, асемблер може да се използва за създаване на код, който работи много ефективно за случаи, в които производителността е много важна (например за графични машини, вградени системи с ограничени хардуерни ресурси в сравнение с персонален компютър като микровълнови, перални и др.). От друга страна, преводачите се използват, когато имате нужда от висока преносимост. Например, един и същ байткод на Java може да се изпълнява на различни платформи с помощта на подходящия интерпретатор (JVM).