>трансляция отвечает за перевод данных из исходной формы в результирующую.если "результирующую" понимать как конечный этап (машинные коды операций), то да это и есть по моему мнению процесс компиляции, объединяющий в себе понятия "итоговой трансляции", "сборки" (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 - просто трансляция (обычно говорят кодогенерация)
пс: всем спасибо за участие в дискуссии.