Выбор промежуточного языка - PullRequest
7 голосов
/ 14 июня 2011

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

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

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

Конечно, я мог бы попытаться написать внешний интерфейс для LLVM или сгенерировать байт-код MSIL или JVM. Но я чувствую, что это слишком много, чтобы учиться прямо сейчас, и я не вижу особой выгоды на самом деле.
Кроме того, C отлично читается человеком, поэтому, если я облажаюсь, гораздо легче понять почему. И C, в конце концов, высокий уровень. Я действительно могу перевести концепции с языка ввода без особых излишеств. Мне нужно, чтобы что-то работало и работало в разумные сроки, а затем оптимизировало бы это, как я считаю нужным.

Итак: есть ли недостатки использования C? Можете ли вы порекомендовать альтернативу?
Спасибо за понимание:)


Редактировать: Некоторые разъяснения

  • Причина, по которой я хочу пройти весь путь, заключается в том, что я пишу язык с поддержкой ООП и хочу реализовать свой метод диспетчеризации вручную, потому что я имею в виду нечто очень конкретное.
  • Основной областью использования было бы написание HTTP-сервисов, но я мог бы добавлять изображения в библиотеки графического интерфейса (возможно, wxWidgets) или что-то еще.

Ответы [ 4 ]

6 голосов
/ 14 июня 2011

C - хороший и довольно популярный выбор для того, что вы пытаетесь сделать.

Тем не менее, взгляните на промежуточный язык LLVM (IR).Он довольно читабелен, и я думаю, что он чище и легче генерировать и анализировать, чем C. LLVM поставляется с довольно большим набором инструментов для работы с ним.Вы можете генерировать собственный код для различных платформ (как с C, но с немного большим контролем над выводом) или для виртуальных машин.Возможность JIT-компиляции также является плюсом.

См. Архитектура приложений с открытым исходным кодом, глава 11 , для ознакомления с подходом LLVM и некоторыми фрагментами IR.* Какова ваша целевая среда?Это может помочь нам дать вам лучший ответ.

2 голосов
/ 15 июня 2011

Вы можете рассмотреть C - , C-подобный язык, предназначенный для лучшей цели для генерации кода, чем C.

2 голосов
/ 14 июня 2011

C на самом деле является довольно хорошим выбором для целевого языка для небольшого или экспериментального компилятора - он широко доступен на многих платформах, поэтому ваш компилятор сразу становится полезным во многих средах. Основным недостатком является работа с вещами, которые не очень хорошо поддерживаются в C или плохо определены в спецификации C. Например, если вы хотите выполнить динамическую генерацию кода (JIT-компиляцию), C проблематичен. Такие вещи, как разматывание и отражение стека, сложно сделать в C (хотя setjmp / longjmp и тщательное использование структур, для которых вы генерируете описания компоновки, могут многое сделать). Такие вещи, как размеры слов, разметка с большим или младшим порядком байтов и арифметическая точность различаются в разных компиляторах Си, так что вам следует об этом знать, но с этими вещами вам придется иметь дело, если вы все равно хотите поддерживать несколько целевых машин.

Можно использовать и другие языки - главным преимуществом C является его повсеместность.

0 голосов
/ 15 июня 2011

С - хороший выбор, ИМХО.В отличие от многих языков, C обычно считается «элегантным» в том смысле, что у вас есть только 32 ключевых слова и очень простые конструкции (последовательность, выбор, итерация) с очень простой и согласованной коллекцией токенов и операторов.

Поскольку синтаксис очень согласован в C (скобки и скобки, блоки и операторы, использование выражений), вы не вступаете в неограниченный мир расширения языка.C - зрелый язык, он хорошо выдержал время, и в наши дни это «известное количество» (что трудно сказать о многих других языках, даже о «зрелых»).

...