The OpenNET Project / Index page

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



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

Исходное сообщение
"Новая криптографическая библиотека EverCrypt с математически..."
Отправлено Sw00p aka Jerom, 09-Апр-19 18:41 
>трансляция отвечает за перевод данных из исходной формы в результирующую.

если "результирующую" понимать как конечный этап (машинные коды операций), то да это и есть по моему мнению процесс компиляции, объединяющий в себе понятия "итоговой трансляции", "сборки" (assembly - в прямом смысле) и собственно "связи" (linkage).

Хочу отметить, что я делаю именно акцент на "конечный этап трансляции" - это и есть компиляция. Вот такое строгое мое мнение понятия компиляции.

>Представь, что у тебя есть набор лабораторных работ. Из которых тебе надо сделать курсовую. Наверное слышал словосочетание "скомпилированная работа"?

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

>Ты берёшь эти лабораторки и копируешь в один большой текст. Компиляция была? Была.

Нет, не была. Была "сборка" в выше указанном моем определении процесса компиляции.

>Компиляция была? Разумеется была. Она всегда есть! В данном случае с оптимизацией.

Нет, не была, таже самая "сборка". Оптимизацию объясню ниже.

>Аналог: компиляция выполнена с трансляцией (переводом).

Из моего определения процесса компиляции - "итоговая трансляция" (конечный этап).


>На выходе результат на другом языке. И только в случае трансляции получается ДРУГОЙ язык, например Vala => C.

И как я понял, в итоге по вашему мнению "процесс компиляции" есть процесс трансляции из языка A в язык B.

Отсюда, по вашему мнению, процесс трансляции (перевода) из Python в C - есть процесс компиляции, так ли это ? Если да, то приведу такой пример.

Допустим, есть множество языков вида L1, L2, L3 ... LN, где LN есть "результирующий язык" (машинные коды операций), а пронумерованные это прочие высокоуровневые ЯП. Введем оператор трансляции "->" (стрелочка).

Из вашего мнения следует L1 -> L2 - есть процесс компиляции, тогда L1 -> L1` (штрих) также есть процесс компиляции. L1` (штрих) - тут в роли процесса "обфускации" или же "рефакторинга", та же "оптимизация". И получается, что это так же трансляция если строго трансляцию не принимать как только L1 -> L2.


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

"для получения готового результата" - то есть исполняемого? Если да, то Python -> C, где тут "готовый результат"? Вы противоречите своему определению процесса компиляции.


>Но так как в кодогенерации компиляция и интерпретация не имеют смысла без трансляции, то компиляторы и интерпретаторы общепринято называются трансляторами.

Тут как-то сумбурно, кодогенерации это фактическая трансляция.


>Вот на это отличие обратил внимание Sw00p aka Jerom.
>У него пока тоже нет полного понимания, но можно было бы объяснить ему это по-человечески, не самоутверждаясь.

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

Если бы каждый шаг L1 -> L2 -> L3 ... -> LN и весь процесс трансляций в целом называть компиляцией, то зачем мы еще порождаем всякие понятия L1 -> L1` (штрих) как "обфускация", "рефакторинг", "оптимизация"?

Почему мы принимаем Java как "компилируемый язык"?

Пример:

Python -> Java -> Java-bytecode (конечный этап трансляции для JVM)

Этот пример имеет место быть, так как Java-bytecode тут конечный этап трансляции для JVM, и по моему мнению (когда конечный этап - это машинные коды операций), компиляция тут заключается только лишь в процессе трансляции Java -> Java-bytecode, но не Python -> Java. И эту компиляцию, для строгого отличия от "нативной" (Asm -> CPU Opcodes), я называю - "виртуальной компиляцией".

Тоже самое: C -> Asm -> CPU Opcodes, Asm -> CPU Opcodes - последняя стадия трансляции - компиляция, C -> Asm - просто трансляция (обычно говорят кодогенерация)

пс: всем спасибо за участие в дискуссии.

 

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



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

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