Обсуждение:Компилятор

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Пожалуйста, добавляйте новые темы снизу


Транслятор или Компилятор?[править код]

Есть дублированная страница — Транслятор. Что будем делать? — 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 есть темплейтный движок, который пачку темплейтов умеет компилировать в один темплейт с тем же темплейтным синтаксисом.

на примере, данной статьи и обсуждения, видно что многие понимают под этими терминами что-то не то. даже относят компиляцию к подвидам интерпретации, что уж совсем дикость. это тоже надо бы указать в статье.

--Dark-Demon 13:46, 1 апреля 2007 (UTC)[ответить]

различия поверхностные и бесполезные[править код]

Попытки провести четкую черту между компиляторами и интерпретаторами не имеют практической пользы. Реальные языки пишутся не исходя из книжных определений, а из практических соображений. И если кого-то чему-то учили в институте - это всего лишь личное мнение автора книги или преподавателя (если таковое имеется), в любом случае бесполезное.

С точки зрения пользователя, не особо интересующегося внутренностями, компиляция - когда речь идет о сохранении на диск и отдельной компоновке и/или выполнении, интерпретация - когда исходник выполняется тут же на месте. Всё остальное - подробности реализации.

Например, 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)[ответить]

Некорректное описание[править код]

В английской википедии всё корректно, а здесь множество ошибок. Я предлагаю приблизить статью максимально к английской версии и не противоречить ей.

  1. Исходный код не обязан быть на языке высокого уровня (вспомним ассемблер).
  2. Целевой код также не обязан быть на языке низкого уровня. https://en.wikipedia.org/wiki/Source-to-source_compiler
  3. Входная программа тем более не обязана быть написанной на объектно-ориентированном языке программирования. Существует множество других парадигм: императивные, функциональные и др. Откуда это вообще взято - не понятно.

Компиляция преобразует исходный код на исходном языке программирования в целевой код. Не надо всё приписывать интерпретаторам. Под интерпретатором понимается отсутствие компиляции, непосредственное выполнение скрипта. Можно сказать, что в некоторых случаях граница условная, но не нужно вводить читателей в заблуждение, обрезая понятие компиляции. Лучше всего всё это заменить той информацией, которая великолепно изложена в английской версии. 91.9.73.199 22:37, 4 сентября 2015 (UTC)[ответить]

Согласен. Видимо, проблема изначально в источниках, которые использовались при написании статьи и дают слишком узкое определение. Если посмотреть Aho или Cooper-а, там даётся определение "из исходного языка в целевой". Так же в Muchnick-е, сначала даётся определение "из высокоуровневого языка в машинный", но тут же уточняется, что понятие можно расширить. --StepashkaRT 23:36, 8 сентября 2015 (UTC)[ответить]

Статья дно.[править код]

Это не информация, это не Википедия, это помойка уровня первого попавшегося сео-рекламного бложика или копирайтерского сайта, только без баннеров, как вода из моего диплома. А ведь люди будут тратить время на такой мусор. Вот нормальная информация: https://en.wikipedia.org/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.wikipedia.org/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)[ответить]