Обсуждение:Компилятор
Статья «Компилятор» входит в общий для всех языковых разделов Википедии расширенный список необходимых статей. Её развитие вплоть до статуса избранной является важным направлением работы русского раздела Википедии. |
Эта статья была предложена к переименованию в Компиляция (программирование) Википедия:К переименованию/29 января 2013 года. В результате обсуждения было решено оставить название Компилятор без изменений. Для повторного выставления статьи на переименование нужны веские основания, иначе это может быть расценено как игра с правилами (см. пункт 8). |
Проект «Информационные технологии» (уровень II, важность для проекта высшая)
Эта статья тематически связана с вики-проектом «Информационные технологии», цель которого — создание и улучшение статей по темам, связанным с информационными технологиями. Вы можете её отредактировать, а также присоединиться к проекту, принять участие в его обсуждении и поработать над требуемыми статьями. |
Транслятор или Компилятор?
правитьЕсть дублированная страница — Транслятор. Что будем делать? — NZeemin 05:27, 25 августа 2005 (UTC)
- компиляторы — это всего лишь одна из разновидностей трансляторов (наряду с интерпретаторами и такой промежуточной между компилятором и интерпретатором штуковиной, как JIT (Just-In-Time Compiler). Поэтому текст по идее не должен повторяться. А с другой стороны, невредно указать в статье про компилятор, что это есть одна из разновидностей трансляторов, и аналогично в статье про интерпретатор. А в общей статье про трансляторы — дать классификацию, определения и ссылки. Rombik 19:57, 9 декабря 2005 (UTC)
- Предлагаю также сделать статью "Транслятор(компилятор) vs Интерпретатор", куда поместить их сравнение и логический вывод из результатов всех промежуточных форм (последние - без подробных описаний: только идеи) — Vano 19:55, 3 мая 2007 (UTC)
- Кстати, про дуализм в терминологии тоже постараюсь написать - это важно (как видно :) ) — Vano 19:55, 3 мая 2007 (UTC)
не совсем корректная информация по компилятору
правитьв статье по Компилятору написано:
Компиля́тор — разновидность транслятора, программный модуль или отдельная программа, задачей которой является полный перевод программы, написанной на одном из языков программирования (исходный язык) в программу на другом языке программирования (целевой язык) до начала ее выполнения.
однако это определение подходит именно для Транслятора, тогда как Компилятор это (со страницы по Транслятору):
компилятор принимает на входе исходный код на языке высокого уровня и выдаёт программу на языке ассемблера либо объектный код
— Эта реплика добавлена с IP 80.89.128.178 (о) 04:53, 3 января 2006 (UTC)
что касается интерпретаторов
править«Другой разновидностью трансляторов являются интерпретаторы, осуществляющие анализ и перевод текста программы в машинный код пошагово, непосредственно перед выполнением, и сразу же исполняющие получившийся машинный код.» Как мне кажется, интерпретатор это не разновидность транслятора. Интерпретатор непосредственно выполняет программу на основе ее исходного текста. Не происходит полного перевода исходного текста на язык машинных кодов (как это происходит в трансляторах), а выполняется пошагово и сразу же, как указано выше, в определении.
Поэтому интерпретатор не обладает основным свойством транслятора, и я думаю, что не правильно было бы считать его разновидностью. — Эта реплика добавлена с IP 85.30.196.33 (о) 13:01, 25 января 2006 (UTC)
Все-таки транслятор
правитьобычно под транслятором понимается компилятор или интерпретатор. То есть множество трансляторов есть объединение множества компиляторов и интерпретаторов. — Эта реплика добавлена участником D06osipov (о • в) 15:59, 14 апреля 2006 (UTC)
- Это к чему? И транслятор не всегда компилятор или интерпретатор. По крайней мере, меня так научили в институте… --FHen 14:31, 2 декабря 2006 (UTC)
Всё-таки со статьей надо разобраться
правитьНадо всё-таки решить, что такое компилятор =). Всё-таки наверное транслятор на промежуточные языки низкого уровня не является компилятором. --FHen 14:31, 2 декабря 2006 (UTC)
- Почему это не является? (полагаю речь о байткодах) Кто сказал что машинный код обязан быть от реальной машины? Общей сути происходящего это не меняет. Можно их как-то дополнительно квалифицировать. --MadLex 23:38, 20 января 2007 (UTC)
- Он является компилятором-интерпретатором. Во всяком случае по php5 нас так учили. — Эта реплика добавлена с IP 195.5.125.3 (о) 06:30, 19 марта 2007 (UTC)
Статья во многом противоречит ГОСТ 19781—90 и формирует неверное представление о понятии компиляции. В ГОСТ даны определения компиляции, трансляции, интерпретации, не оставляющие сомнений в том, что же это такое. — Эта реплика добавлена с IP 109.124.199.72 (о) 20:18, 16 февраля 2011 (UTC)
компиляция и интерпретация — перпендикулярные понятия
правитьcompile в переводе с буржуйского означает: составлять/соединять/обобщать никогда не слышали словосочетания «художественная компиляция», означающего выдуманное совмещение разрозненных фактов? компиляция — это процесс составления программы на основе моножества разрозненных исходников. в программировании также есть build и make, которые представляют собой различные варианты компиляции (из исходников, из транслированных участков кода, из библиотек)
далее, трансляция — это перевод из одного языка в другой. например, трансляция в машинные (как реальной, так и виртуальной) коды.
интерпретация — выполнение программы без трансляции.
пример интерпретации:
switch ($a) {
case 'e': echo $b; break;
case 'p': print $b; break;
}
тут не происходит перевода, тут в зависимости от условий выполняется та или иная комманда, которая сама по себе не зависит от интерпретируемого исходника.
пример трансляции:
switch ($a) {
case 'e': $e= 'echo'; break;
case 'p': $e= 'print'; break;
}
eval ($e.' '.$b);
тут происходит формирование исполняемых инстукций и последующее их выполнение.
в случае с машинными кодами, трансляция быстрее, но интерпретация безопасней.
компиляция как правило включает в себя и этап трансляции, но он вовсе не обязателен. например, для php есть темплейтный движок, который пачку темплейтов умеет компилировать в один темплейт с тем же темплейтным синтаксисом.
на примере, данной статьи и обсуждения, видно что многие понимают под этими терминами что-то не то. даже относят компиляцию к подвидам интерпретации, что уж совсем дикость. это тоже надо бы указать в статье.
различия поверхностные и бесполезные
правитьПопытки провести четкую черту между компиляторами и интерпретаторами не имеют практической пользы. Реальные языки пишутся не исходя из книжных определений, а из практических соображений. И если кого-то чему-то учили в институте - это всего лишь личное мнение автора книги или преподавателя (если таковое имеется), в любом случае бесполезное.
С точки зрения пользователя, не особо интересующегося внутренностями, компиляция - когда речь идет о сохранении на диск и отдельной компоновке и/или выполнении, интерпретация - когда исходник выполняется тут же на месте. Всё остальное - подробности реализации.
Например, Python, явно не ассоциируемый с компиляцией. Как только начинается работа с внешними модулями, эти внешние модули компилируются в байткод.. То же самое умеет делать и PHP/Zend. То же самое, в принципе, можно сделать с любым, без исключения, "интерпретируемым" языком.
Тупые, построчные интерпретаторы по сути ближе к набору инструкций виртуальной машины (и к ассемблеру), чем к комиляторам. MadLex 19:29, 1 апреля 2007 (UTC)
- Различие не бесполезны. А раз статья о компиляторах вообще, то это должно оговариваться... и что за мода на каждую реплику заголовок создавать? ужс --exlex 23:59, 1 апреля 2007 (UTC)
- Так в чем же различие, кому оно чем полезно, и как это должно оговариваться? Утверждение, что нечто не бесполезно (а следовательно полезно) желательно обосновывать примерами полезности. Я, будучи заинтересованным и в пользовании, и в разработке компиляторов, такового пока не наблюдаю. MadLex 00:49, 2 апреля 2007 (UTC)
cpython компилирует все модули в байт код. Как и подавляющее большинство современных интерпретаторов. кроме того, существует psycho, отдаленное подобие jit. а jpython и ironpython компилируется в байт-код jvm и msil соответственно. так что python "явно не ассоциируемый с компиляцией" в той же степени, как java или c#. — Эта реплика добавлена с IP 85.140.26.50 (о) 18:42, 28 ноября 2007 (UTC)
Исправил "Грамматический анализ" на "Синтаксический (грамматический) анализ", т.к. понятие "синтаксический анализ" существенно больше распространено. Ссылка на статью по грамматическому анализу, естественно, сохранена. Aeore 07:57, 10 июля 2008 (UTC)
Рекламная агитка или дополнительная информация для развития кругозора?
правитьВ компьютерном мире существует уникальный высокоуровневый язык программирования Форт_(язык_программирования) (и другие конкатенавные языки) предлагающий простейшее понимание цикла трансляции программы в исполняемый код, за счёт максимальног упрощения синтаксиса языка (программа состоит из равноправных лексем-слов разделённых пробелом) с приближением его к "естественным" языкам при этом для управления процессом компиляции/интерпретации транслируемого кода базовые лексемы имеют признак компиляции/исполнения создавая (расширяя) в необходимом направлении внутреннюю семантику кода и синтаксис используемый при дальнейшей трансляции. Для увеличения эффективности выполнения кода внутреннее устройство транслятора может быть сколь угодно сложным и создано с уровня имеющегося базиса.
P.S. Почему она не может быть размещена в рамках данной статьи? Если это правда? Может стоит разместить в трансляторах? — Эта реплика добавлена с IP 88.206.38.25 (о) 17:57, 12 августа 2012 (UTC)
- Почему она не может быть размещена в рамках данной статьи - я знаю этот язык (было дело, писал на нём программы) и согласен, что язык действительно необычный и по некоторым параметрам уникальный, однако, во-первых, "упрощение синтаксиса" не обязательно ведёт к "естественности", во-вторых, есть и другие ЯП с ещё более простым "синтаксисом", а также с изменяемыми лексикой и синтаксисом, и ЯП, ориентированные на естественные (как Кобол) или прикладные (как APL) языки. Наконец, статья посвящена компиляции вообще, а не особенностям или расширяемости отдельных языков. В принципе, можно было бы завести отдельный раздел, в котором перечислить какие-то особенности некоторых языков, связанные с трансляцией, но предложенный вами текст явно не годится (рекламный стиль, несущественные детали или ошибочные детали - "приближением его к естественным языкам" явно неверно). -- AVBtalk 19:13, 12 августа 2012 (UTC)
нет, в классическом понимании лексического анализа (вырожденный случай), синтаксического (грамматический) анализа, семантического анализа. сама программа управляет процессом компиляции/интерпритации. — Эта реплика добавлена с IP 88.206.38.25 (о) 19:02, 12 августа 2012 (UTC)
- Хотелось чтобы варианты построения компиляторов применительно к "некласическим" языкам были представлены. А какие языки замечены в "способности" менять свой синтаксис и семантику во время трансляции исходного кода и имеют ещё более простой синтаксис? (В Форте фактически соглашение по формированию начального синтаксиса возложено на возможное (в большей части независимое) взаимодействие базовых слов ядра, которые могут быть подменены или изменены в любой момент, +плюс возможность изменения любого базового конструктива самой Форт-системы). Поэтому и встраивание поддержки всевозможных парадигм программирования, структур данных и управляющих конструкций необреминительное занятие. Со стилем наверное перебор, но вопрос "структуры" гибкой и простой "раскрутки" компилятора интересен. Завести раздел с особенностями компилирования разных языков хорошая идея.88.206.46.78 13:03, 13 августа 2012 (UTC)
- к "некласическим" языкам - для начала было бы неплохо услышать определение, что это такое. менять свой синтаксис и семантику - я сам давно этим не занимался и потому банально не помню название экспериментального языка, который имел в виду, но, к примеру, тут, среди прочих, упоминаются Nemerle и Boo. ещё более простой синтаксис - например, Brainfuck. необреминительное занятие - ну это вы сильно упрощаете - та же стековая парадигма ставит довольно жёсткие рамки. -- AVBtalk 20:58, 13 августа 2012 (UTC)
- Странно, что в приведённой ссылки Форт не упоминается.88.206.46.121 20:01, 19 августа 2012 (UTC)
Неправильное описание компиляции
правитьКомпиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду
Это не совсем так. Из dart в javascript - тоже компиляция, однако javascript низкоуровневом языком никак не назовёшь. Правильнее:
Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на языке более низкого уровня
91.235.245.5 09:55, 4 июля 2013 (UTC)
- Тогда уже двоичная компиляция тоже должна быть принята в расчёт. В ней исходный тоже не высокого уровня, а любого. И тогда это трансляция программы из одного языка в другой вид (что-то преобразовано). Другой даже не язык, а вид - потому что язык может быть тот-же самый, например x86->x86. MUR 10:16, 4 июля 2013 (UTC)
Некорректное описание
правитьВ английской википедии всё корректно, а здесь множество ошибок. Я предлагаю приблизить статью максимально к английской версии и не противоречить ей.
- Исходный код не обязан быть на языке высокого уровня (вспомним ассемблер).
- Целевой код также не обязан быть на языке низкого уровня. https://en.wiki.x.io/wiki/Source-to-source_compiler
- Входная программа тем более не обязана быть написанной на объектно-ориентированном языке программирования. Существует множество других парадигм: императивные, функциональные и др. Откуда это вообще взято - не понятно.
Компиляция преобразует исходный код на исходном языке программирования в целевой код. Не надо всё приписывать интерпретаторам. Под интерпретатором понимается отсутствие компиляции, непосредственное выполнение скрипта. Можно сказать, что в некоторых случаях граница условная, но не нужно вводить читателей в заблуждение, обрезая понятие компиляции. Лучше всего всё это заменить той информацией, которая великолепно изложена в английской версии. 91.9.73.199 22:37, 4 сентября 2015 (UTC)
- Согласен. Видимо, проблема изначально в источниках, которые использовались при написании статьи и дают слишком узкое определение. Если посмотреть Aho или Cooper-а, там даётся определение "из исходного языка в целевой". Так же в Muchnick-е, сначала даётся определение "из высокоуровневого языка в машинный", но тут же уточняется, что понятие можно расширить. --StepashkaRT 23:36, 8 сентября 2015 (UTC)
Статья дно.
правитьЭто не информация, это не Википедия, это помойка уровня первого попавшегося сео-рекламного бложика или копирайтерского сайта, только без баннеров, как вода из моего диплома. А ведь люди будут тратить время на такой мусор. Вот нормальная информация: https://en.wiki.x.io/wiki/Assembly_language In computer programming, assembly language (or assembler language),[1] often abbreviated asm, is any low-level programming language in which there is a very strong correspondence between the instructions in the language and the architecture's machine code instructions.[2] Because assembly depends on the machine code instructions, every assembler has its own assembly language which is designed for exactly one specific computer architecture. Assembly language may also be called symbolic machine code.[3][4]
Assembly code is converted into executable machine code by a utility program referred to as an assembler. The conversion process is referred to as assembly, as in assembling the source code. Assembly language usually has one statement per machine instruction (1:1), but comments and statements that are assembler directives,[5] macros,[6][1] and symbolic labels of program and memory locations are often also supported.
The term "assembler" is generally attributed to Wilkes, Wheeler and Gill in their 1951 book The preparation of programs for an electronic digital computer,[7] who, however, used the term to mean "a program that assembles another program consisting of several sections into a single program".[8]
Each assembly language is specific to a particular computer architecture and sometimes to an operating system.[9] However, some assembly languages do not provide specific syntax for operating system calls, and most assembly languages can be used universally with any operating system, as the language provides access to all the real capabilities of the processor, upon which all system call mechanisms ultimately rest. In contrast to assembly languages, most high-level programming languages are generally portable across multiple architectures but require interpreting or compiling, a much more complicated task than assembling.
https://en.wiki.x.io/wiki/Compiler In computing, a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language). The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language, object code, or machine code) to create an executable program.[1][2]:p1
89.178.227.224 12:40, 31 августа 2020 (UTC)Жирный хищный бобер
Да. Дно. Почему нельзя добавить английский термин "(англ. compiler)" после Компиля́тор?
31.41.61.200 16:50, 6 декабря 2021 (UTC)