Как я могу сказать, что язык программирования компилируется на другие языки?

22

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

Примером может быть Haxe . На сайте язык расшифровывается как «Мультиплатформа»:

Мультиплатформенность: Haxe может быть скомпилирован для всех популярных платформ программирования с его быстрым компилятором - JavaScript, Flash, NekoVM, PHP, C ++, C # и Java (скоро)

но мультиплатформенность может быть неправильно истолкована как аппаратная или программная платформа (win, mac, linux).

Итак, какое слово наиболее подходит для описания этой способности?

danilo2
источник
3
Я удалил бы «компиляции» и просто сказал бы, что этот язык программирования может быть преобразован в другой с помощью некоторого интерпретатора.
Нил
6
Вы можете использовать то же слово, что и для обычных языков: переводчик, переводчик. Это понятно, и я слышал, что слово используется в этом смысле.
СуперМ
4
@teresko Как так? Единственное, как я мог видеть, вы утверждаете, что вы используете чрезмерно ограничительное и бесполезное определение компиляции (которое ограничивает вывод машинным кодом).
18
@Neil: перевод программы, написанной на одном языке, на другой язык не является переводом. На самом деле, это определение из компиляции .
Йорг Миттаг
2
@Neil, компиляция, по определению, это трансформация из одного языка в другой. И «трансформация» звучит так же неясно и загадочно, как «компиляция», если ваш читатель не очень хорошо разбирается в терминах переписывания и тому подобного. Поэтому я бы предложил использовать слово «таргетинг», например, «Haxe нацелен на JavaScript, Flash, что угодно и тому подобное».
SK-logic

Ответы:

41

Обычный термин «транскомпиляция» - не общий, а технически правильный. Это не только для модных новых языков сценариев (CoffeeScript -> JavaScript); первые компиляторы C ++ были фактически транскомпиляторами к C.

Килиан Фот
источник
2
Также "переносит", как в "Транспортер переносит CoffeeScript в Javascript"
4
Я никогда не слышал этот термин раньше, будучи в поле десятилетиями. Не возражаете, указав на его происхождение (ссылка на первый документ, где он появился, будет лучшей)?
SK-logic
Из Википедии : «Компилятор от источника к источнику [aka.« Transcompiler »,« transpiler »] переводит между языками программирования, которые работают примерно на одном уровне абстракции, в то время как традиционный компилятор переводит с языка программирования более высокого уровня на более низкий уровень Уровень языка программирования. "
10
4
@ l0b0, Википедия не комментирует происхождение термина, и это определенно никогда не должно быть оригинальным источником.
SK-logic
3
... поиск "transcompilation" в Google не дает никакого связанного результата ...
Bakuriu
27

Извините, господа, но слово для этого просто "скомпилировано" . Это означает превращение одного типа кода в другой тип кода. Не имеет значения, является ли этот код английским, C ++, машинным кодом x86, машинным кодом ARM, Java, байт-кодом или обратно на английский. Обычно мы используем его для обозначения перехода от языка программирования к машинному коду, но это аспект, который слово приобрело со временем. И, эй, если достаточное количество людей начинает неправильно использовать слово, оно действительно приобретает этот новый смысл. Но если вам нужно слово для превращения Haxe в C ++, это слово «компилируется» .

Мультиплатформенность: Haxe может быть скомпилирован во все популярные языки программирования с его быстрым компилятором - JavaScript, Flash, NekoVM, PHP, C ++, C # и Java (скоро)

(Кроме того, я игнорирую Мерриам-Вебстер, потому что они глупы, потому что они не согласны со мной ... хммм)

Филипп
источник
10

Возможно, это вопрос к https://english.stackexchange.com/, но я бы сказал, что процесс компиляции включает компиляцию на другой язык высокого уровня и не ограничивается только компиляторами, которые компилируются с использованием машинного кода.

Как слово «компиляция» вообще не относится к компьютерным компиляторам и является достаточно общим. Мне приходит в голову «компиляция таблицы» или «составление списка имен», поэтому она достаточно широка для многих целей (текстовые процессоры, такие как Latex compile, и т. Д.). Чтобы быть более точным в отношении цели компиляции, я бы использовал to-source-compiler

Теперь для конкретного примера, я думаю, что платформа является подходящим словом для использования. Поскольку человеческие языки по своей природе неоднозначны, вы должны использовать избыточность (примеры, перефразируя с другими словами, объясняя), чтобы понять суть в случае сомнений.

Я также прочитал бы утверждение «Haxe» таким образом, чтобы оно содержало стандартные библиотеки и подобные вещи. Т.е. в этом случае plattform была бы надмножеством «языка», и вы могли бы отделить его от этого, назвав его «платформой разработки программного обеспечения» и т. Д.

wirrbel
источник
4
Я думаю, что вы имеете в виду english.stackexchange.com?
Суман
3

Вы можете сказать, что компилятор имеет языки X, Y и Z в качестве целей перевода , или разработать язык с учетом этих целей.

comingstorm
источник
2

Я бы сказал, что компилятор по определению переводится на другой язык программирования (по крайней мере, это определение, которое я знаю - программа, которая переводит один язык в другой). Например, большинство компиляторов Си производят сборку в качестве вывода. Сборочные компиляторы принимают этот вывод и преобразуют его в двоичный код, который также является языком (конечно - вероятно, никто не пишет пишет в нем в течение последних 40 лет или более, но технически это язык) - который можно взять и перекомпилировать, чтобы сказать микро- операции процессоров (или есть определенные операции, выполняемые компоновщиком над объектными файлами). Точно так жеjavapкомпилируется в байт-код. Обычно в конце такой цепочки находится интерпретатор, который выполняет окончательный код (будь то CPU, GPU или исполняемая программа). Не существует такого понятия, как машинный код, поскольку современный x86 перекомпилирует программы во внутренние операции (микрооперации), и я вполне способен обрабатывать машинный код ARM как интерпретируемый язык на x86 или наоборот (в некоторых случаях даже перекомпилировать из одной формы в другую).

Haxe - это компилятор исходного кода, поскольку он не преобразует язык более высокого уровня в язык более низкого уровня, как в предыдущих примерах. Похоже, это не решает непосредственно вашу проблему многоплатформенной неоднозначности, но, к сожалению, я не думаю, что существует практический способ разграничения между этими двумя вещами - API являются своего рода языками, которые в общем случае могут быть интерпретированы, перекомпилированы и т. Д.

Мацей Печотка
источник
1

Перво-наперво: я не знаю, есть ли подходящее слово для этой функции.

Но, может быть, это можно назвать мультиязычным? Или языкогностный? Поскольку речь идет больше о языке программирования, то упоминание «языка» в названии может сделать его более очевидным, чем мультиплатформенное.

Конечно, язык также неоднозначен, так как можно понять, что исходный код может быть написан на любом языке реального мира (например, потому что переменные могут быть записаны в Unicode).

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

Просто мои 2 цента.

Enduriel
источник
я не думаю, что это точно; и если вы видите тот факт, что сайт любит только фактически правильные ответы. но добро пожаловать в сообщество и надеюсь, что вы ответите еще немного, где вы уверены в ответе :)
tgkprog