2009-04-06 7 views
4

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

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

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

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

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

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

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

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

Вот шаги:

  1. Run LLVM-а на LLVM Ассамблеи, которая дает байткодовую файл LLVM.
  2. Запустите llc в файле байт-кода LLVM, чтобы получить файл сборки.
  3. Запустите ассемблер в файле сборки, чтобы получить файл объекта. (Или запустить LLVM-ЛД, который, кажется, зависит от установленного извне C Compiler)
  4. Compile в исполняемый файл с НКУ и т.д.
+0

Duplicates http://stackoverflow.com/questions/446883/best-compiler-destination –

+0

@ norman, У моего вопроса есть более подробная информация. Я не очень доволен ответами там. – Unknown

ответ

5

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

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

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

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

4

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

+0

Мне нравится C++, потому что у него уже есть исключения для стирания стека, и я могу инкапсулировать указатели, чтобы сделать их более недружественными, но, к сожалению, имеющиеся компиляторы кажутся чрезвычайно большими и требуют больше времени для компиляции. – Unknown

2

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

ТСС является очень хорошим вариантом для Развитие-, хотя и не для окончательного освобождения (полученный объект эквивалентен Gcc -O0)

+0

Я читал о многих языках, которые использовали C как бэкэнд, а ваш был одним из них. Вам было сложно выводить C-код, который можно легко собрать мусором? – Unknown

+1

У нас есть своя собственная реализация GC, со специальными ковшими для каждого типа (наш язык близок к миру, каждый тип известен во время компиляции). Единственная сложная часть - это уверенность в маркировке каждого живого объекта: мы используем некоторые маркеры в хранилище + регистры для тех архитектур, которые в нем нуждаются. – cadrian

6

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

LLVM поддерживает ОС Windows, он просто занимает некоторое время, чтобы собрать

+0

Я пробовал читать все документы LLVM. Из того, что я могу понять из него до сих пор, я не хочу заставлять пользователей устанавливать большую рабочую среду, которая требует 3 Гбайт для компиляции. – Unknown

+0

LLVM не является средой выполнения, это компилятор. Как только ваше приложение скомпилировано, оно будет запущено, как и любой другой родной двоичный файл на окнах. – 2009-04-06 22:57:20

+0

Я читаю только документацию, в которой упоминается компиляция байткода. Даже если это разрешает статическую компиляцию, у меня даже нет 3 ГБ памяти для ее компиляции под окнами, и я не могу ожидать никого другого. – Unknown

1

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

1

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

+0

Я уже начал использовать C++ в качестве backend, поэтому мне не нужно реализовывать контейнеры STL и OOP. Я экспериментировал с TCC и нашел его маленьким и быстрым, но я слышал, что код, который он компилирует, не оптимизирован вообще. – Unknown

 Смежные вопросы

  • Нет связанных вопросов^_^