The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Новая криптографическая библиотека EverCrypt с математически..."
Отправлено t_, 10-Апр-19 23:40 
> А теперь повторно задам вопрос: Трансляция из 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. Сайт уже скукожился. Давай закругляться :) А то уже надоело заниматься т(а)(у)фтологией (выбрать подходящее)
Всё равно дальше я могу лишь предыдущие сообщения цитировать.

Удачи в осознании разницы! Практического смысла для программиста в ней нет, но хоть не будешь пытаться доказать недоказуемое. А я выхожу из дискуссии.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру