Вопрос

Я хочу создать скомпилированный язык.В настоящее время я оцениваю бэкенды.Пока я смотрю на C из-за его скорости выполнения, компиляции и небольшого, простого в использовании компилятора под названием TCC.

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

Вот некоторые из моих мыслей о других возможных бэкэндах:

  1. Сборка:непереносимо и совершенно невыносимо программировать на нем.
  2. .NET:Кажется, действительно медленно.5 секунд на запуск и 5 секунд на оценку 1 + 2 на Ironpython и Boo.Невозможно запустить без большой библиотеки.
  3. JVM ( Совместное предприятие ):Кажется немного медленным.Нет доступа к двоичным библиотекам.Невозможно запустить без большой библиотеки.
  4. LLVM:Нет поддержки Windows.Я слышал, что размер скомпилированного исполняемого файла составляет 16 мб+
  5. C--:выглядит недоразвитым.
  6. C++:возможно.Не могу найти красивую маленькую свободную штуку, с которой я мог бы связать.

Может ли кто-нибудь из вас изменить мое мнение или у вас есть что добавить к этому списку?

Редактировать

Недавно я экспериментировал с LLVM.Я узнал, что у них есть предварительно скомпилированные двоичные файлы и что их можно скомпилировать в собственную сборку.

http://www.antlr.org/wiki/display/CS652/Generating+machine+executable+binaries+with+LLVM

Вот эти шаги:

  1. Запустите llvm-as на сборке LLVM, которая выдает файл байт-кода LLVM.
  2. Запустите llc в файле байт-кода LLVM, чтобы получить файл сборки.
  3. Запустите ассемблер для файла сборки, чтобы получить объектный файл.(или запустите llvm-ld, который, по-видимому, зависит от установленного извне компилятора c)
  4. Скомпилируйте в исполняемый файл с помощью gcc и т.д.
Это было полезно?

Решение

Рассматривали ли вы возможность написания интерфейса для ССАГПЗ?Я упоминаю об этом только для полноты картины – насколько я знаю, внутренний интерфейс довольно сложный, а кодовая база огромна и трудна для понимания.

С другой стороны, GCC - это зрелый продукт, над которым работает множество опытных программистов.По крайней мере, это, вероятно, обеспечивает наиболее прочную основу из всех альтернатив.

Лично я бы предпочел LLVM (захватывающая архитектура) или IL от .NET:очень, очень проста в использовании, имеет отличную инструментальную поддержку (Отражатель, Сесил, Рефлексил и последнее, но не менее важное: .NET reflection API) и две очень эффективные реализации (а именно реализация Microsoft canonical и Mono).

Но я не могу претендовать на экспертность ни в одной из архитектур, поэтому отнеситесь к этому ответу со всей серьезностью.

Другие советы

В этом случае LLVM, вероятно, является лучшим выбором.

LLVM поддерживает Windows, просто для компиляции требуется некоторое время

C ++ не даст вам многого, используйте вместо этого C.Но если вы хотите, чтобы ваш язык использовался в Интернете, используйте .NET или Java, конечно, они загружаются медленно, но когда загружаются, то так же быстро, как C.

Для Смартайффель мы используем C в качестве серверной части.

Tcc - очень хороший вариант для разработки, хотя и не для финальной версии (созданный объект эквивалентен gcc -O0)

Еще один, который нужно добавить в список:Слава недавно внедрил Smalltalk на Серверная часть фактора.Я сам этого не пробовал, но у меня такое чувство, что это предложило бы больше функций, которые вы хотите от более высокоуровневых, с большим сходством по размеру / производительности с более низкоуровневыми.

TCC - лучший выбор.Он переносим и имеет библиотеку, поэтому его можно легко использовать в качестве серверной части, которая называется libtcc.Исполняемые файлы меньше , чем gcc , и это ANSI C.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top