> А теперь повторно задам вопрос: Трансляция из Python -> C, C - является "машинно-ориентированным языком"? Если нет, то как можно этот процесс трансляции называть компиляцией?Я тоже повторно объясню: компиляция не требует обязательного результата в виде машинно-ориентированного языка, потому что она не относится к обработке данных. Преобразованием в другой язык занимается трансляция в процессе работы компилятора, внутри процесса компиляции.
"A source-to-source COMPILER is a type of COMPILER that takes the source code of a program written in a programming language as its input and PRODUCES the EQUIVALENT SOURCE CODE in the same or a different programming language."
Что в слове compiler непонятно? При такой компиляции, без трансляции в машинно-ориентированный язык, никакого машинно-ориентированного языка на выходе нет.
> пс: Из вашего мнения следует, помимо "обфускации", "рефакторинга", "оптимизации", что и обычное "редактирование" исходного кода есть процесс компиляции. Так ли это?
Очень хороший и интересный вопрос.
Вообще-то любой процесс трансляции, обфускации и прочих это тоже редактирование кода. Ведь он в итоге будет изменён и представлен в виде исходного кода на другом языке, или байт-коде или ином представлении. Но обычным редактированием это не назовёшь.
Но компиляция не об этом, она об организации данных из разных источников. Что подразумевается под разными источниками? Это, во-первых, источники данных на входе процесса компиляции (например, файлы в дереве кода и за его пределами), а во-вторых - обработанные данные на выходах промежуточных процессов, которые занимаются преобразованием данных внутри процесса компиляции (Здесь и выше я специально выделяю процесс компиляции, потому что ещё есть промежуточные процессы внутри трансляции и прочих процессов. Они отношения к компиляции не имеют, как и их результативные данные.)
Поэтому ответ: нет. Компилятор должен выполнять преобразование кода из языка в другое представление, а этим занимается трансляция. Остальные процессы не являются обязательными, и поэтому их не используют в качестве синонимов компиляции.
> пс2: Выше Пох подставил под сомнение статью в википедии об компиляторе, но в тоже самое время приводит из неё же статью про транспайлер, в которой ссылка на понятие компилятора. И вы собственно так же поступаете, не противоречивы ли ваши действия?
Это не противоречие, а дополнение.
Включи логику уже. :)
Истинно ли высказывание в вики, или ложно?
1) Из определения уже явно видно, что оно состоит из двух утверждающих частей, и что преобразование в язык, близкий к машинному коду тоже выполняется трансляцией: "(включающая ТРАНСЛЯЦИЮ всех модулей программы, написанных на одном или нескольких исходных языках программирования высокого уровня и/или языке ассемблера, В эквивалентные программные МОДУЛИ НА низкоуровневом ЯЗЫКЕ, БЛИЗКОМ МАШИННОМУ КОДУ)" - это одна часть. Никакой речи о компиляции, которая что-то переводит в другое представление (машинно-зависимый язык и пр.), не идёт. И правильно, компиляция не занимается переводом в машинно-зависимый код, что ты утверждаешь, ссылаясь на это определение. А где же речь о компиляции? А она в оставшейся части:
2) (Компиляция - СБОРКА программы), (тут первая часть про трансляцию). Вот же компиляция, она просто передаёт исходные данные транслятору и СОБИРАЕТ результаты трансляции в конкретную форму, необходимую для дальнейшей обработки и передачи другим процессам.
Что и следует из толкований глаголов: compile и translate. Как ни странно - слова на английском языке тоже берутся не от балды.
Чтобы доказать истинность или ложность вики перефразируем определение в вопросительной форме:
является ли "сборка программы, включающая трансляцию всех модулей программы, написанных на одном или нескольких исходных языках программирования высокого уровня и/или языке ассемблера, в эквивалентные программные модули на низкоуровневом языке, близком машинному коду" компиляцией?
То есть, можно ли назвать это действие/процесс (а на самом деле - совокупность процессов) компиляцией?
Конечно можно, такой вариант существует. Значит вики не врёт.
Далее рассуждаем.
Раз существуют компиляторы не в низкоуровневые языки, что противоречит вики, и, при этом, вики не врёт, значит вики содержит неполную информацию. Причём неполную информацию содержит только русская вики, потому что в английской всё в порядке:
1) "The name compiler is PRIMARILY used..." (primarily фактически означает "данное определение не является строгим")
2) "A program that translates between high-level languages is usually called a source-to-source compiler or transpiler". (Тут видим упоминание о компиляторах-транспиляторах.)
Пох подставил под сомнение статью, потому что она не описывает различные варианты, про которые он знает, потому что у него есть опыт. Зато статья про транспилятор дополняет статью про компилятор.
Что тут добавить. Не стоит основываться на одном источнике информации. Или даже массе источников, если они повторяют одно и то же.
---------------
Насчёт противоречий. Подумал, и решил сделать ещё пару противоречий к резюме предыдущего сообщения (чтобы жизнь мёдом не казалась) :)
1) компиляция != трансляция - процессы разные, трансляция выполняется внутри компиляции
2) компиляция == трансляция - на выходе компиляции - оттранслированный код. Поскольку трансляция выполнилась внутри компиляции, то можно считать трансляцию подпроцессом и синонимом компиляции
3) компилятор == транслятор - компилятор выполняет трансляцию в процессе компиляции
4) компилятор != транслятор - целое не является частью самого себя (высказывание работает не всегда!).
Поразмышляй над ними. Как поймёшь разницу, тогда выйдешь на другой уровень понимания. А лучше сам напиши какой-нибудь компилятор-транслятор.
Это как смотреть на картинку, где нарисована одновременно старуха и молодая девушка. А некоторые люди могут видеть что-то одно, пока не попробуют смотреть по-другому. И трудно объяснить, как надо смотреть.
P.S. Сайт уже скукожился. Давай закругляться :) А то уже надоело заниматься т(а)(у)фтологией (выбрать подходящее)
Всё равно дальше я могу лишь предыдущие сообщения цитировать.
Удачи в осознании разницы! Практического смысла для программиста в ней нет, но хоть не будешь пытаться доказать недоказуемое. А я выхожу из дискуссии.