Ответ 1
Язык Haxe может выводиться на С++, С#, Java, JavaScript, Python (экспериментальный), PHP, Flash и NekoVM.
Я использую CoffeeScript, чтобы упростить разработку JavaScript. Это язык с чистым синтаксисом, который компилируется в JavaScript.
Итак, каковы установленные языки программирования, которые компилируются в исходный код C/С++, чтобы упростить синтаксис и/или улучшить функциональность?
Язык Haxe может выводиться на С++, С#, Java, JavaScript, Python (экспериментальный), PHP, Flash и NekoVM.
Vala и Genie - это языки, которые используют систему типа GObject и скомпилируются с C код. Я никогда не использовал их, но они выглядят интересными. GObject - это система типов, используемая GTK, но я считаю, что она отделяется от GTK.
Здесь HipHop, который преобразует PHP-программы в С++.
OOC - очень новый, но довольно приятный.
GHC (компилятор Glasgow Haskell) использовал параметр (-fvia-c
) для компиляции на C.
Я считаю, что, начиная с версии v7, LLVM используется для генерации собственного кода вместо перехода через внешний компилятор C.
Цитата Qt документация:
Компилятор мета-объектов, moc, - это программа, которая обрабатывает расширения Qt С++. Средство moc считывает заголовочный файл С++. Если он находит одну или несколько деклараций классов, содержащих макрос Q_OBJECT, он создает исходный файл С++, содержащий метаобъектный код для этих классов. Между прочим, мета-объектный код необходим для механизма сигналов и слотов, информации типа времени выполнения и динамической системы свойств. Исходный файл С++, сгенерированный moc, должен быть скомпилирован и связан с реализацией класса.
Итак, это похоже на С++, превратившийся в С++, я не уверен, соответствует ли он тому, что вы ищете.
Язык программирования IBM Informix 4GL проходит через многоэтапное преобразование в C-код, который затем скомпилирован и связан с его собственной библиотекой времени исполнения, библиотеками времени исполнения ESQL/C (Embedded SQL in C) и библиотеками системы C.
program.4gl
- исходный кодprogram.4ec
- код C со встроенными ESQL/C и расширенными операциями вводаprogram.ec
- код C со встроенным ESQL/Cprogram.c
- чистый код Cprogram.o
- код объектаprogram
- исполняемый файлФаза .4ec
- это своего рода историческая авария; изначально компилятор ESQL/C обрабатывал как расширенные операции ввода, так и ESQL/C, но когда расширенные операции были удалены из компилятора ESQL/C (когда библиотека и компилятор ESQL/C была значительно переписана), расширенные операции ввода были обработаны путем вырезания кода, который обрабатывал это из исходного компилятора ESQL/C.
Справедливое число людей написало генераторы кода, которые пишут исходный код I4GL с другого языка, или который предварительно обрабатывает тесно связанный исходный код в I4GL, прежде чем он будет отправлен в компилятор I4GL.
Встраиваемый общий Lisp (ECL) может скомпилировать Common Lisp в C.
Я полагаю, вы могли бы написать C backend для LLVM, тогда вы могли бы перевести почти что угодно до C, но более глубокий вопрос был бы "почему?". Причина в том, что нет никаких инструментов, которые делают это сегодня, заключается в том, что если вы собираетесь скомпилировать до C, почему бы не пройти весь путь и не указать на какой-то промежуточный язык машинного кода? (Например, LLVM или JVM)
Теперь в старые времена идея компиляции до С была немного более оправдана, поскольку отсутствовали достойные языки vm, но сегодня не так уж много веских причин для этого. Тем не менее, вы все равно можете найти множество проектов, вокруг которых можно взять определенные интерпретируемые языки и попытаться скомпилировать их на C/С++. Например, вот питон для компилятора С++:
Я слышал, что clang может скомпилировать С++ в C. Я сомневаюсь, что это будет "упрощать" что-либо.
Можно утверждать, что, поскольку большинство основных языков программирования Turing-complete, они фактически эквивалентны, и написанные в них программы могут быть переведены в каждый другие.
Тем не менее, как отмечали другие люди, существует немало языков, для которых существуют (или использовались ранее) их разработки, которые создают код C, поскольку это устраняет сложности, связанные с генерированием двоичного кода из языковая реализация. Это ни в коем случае не означает (ненамеренный каламбур), что указанный код действительно читаем - он был просто более читабельным, чем его скомпилированная форма.
Что касается моего вклада в список, lex и yacc "программы" (если их можно считать такими), как правило, преобразуются в C-код - ужасный, запутанный беспорядок, но C-код тем не менее...
Большинство языков могут использоваться для генерации кода C, но это действительно зависит от того, что вы пытаетесь сделать. Вы действительно хотите, чтобы иметь возможность читать код? Вы просто пытаетесь создать приложения Windows?
Если вы ищете универсально полезный язык, который легко учится, Python всегда является хорошим выбором, и он может делать все, что может сделать C/С++.
Oracle PRO * C/С++ - это встроенный язык SQL. Он позволяет включать SQL-запросы в C/С++, которые обрабатываются прекомпилером, который заменяет встроенные операторы SQL вызовами функций на необходимые библиотеки C/С++ SQL. Выход из прекомпилятора является стандартным C/С++, который затем может быть скомпилирован для исполняемого файла.
http://en.wikipedia.org/wiki/Pro*C
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14407/toc.htm
Подмножество Matlab (Embedded Matlab) может быть скомпилировано для C. Вам нужна панель инструментов встроенного кодера.