В течение долгого времени я пытаюсь использовать разные языки, чтобы найти набор функций, который я хочу, и я не смог его найти. У меня есть языки, которые прилично подходят для моих проектов, но я придумал пересечение этих языков, что позволит мне делать 99,9% моих проектов на одном языке. Я хочу следующее:
- Построено поверх .NET или имеет реализацию .NET.
- Имеет мало зависимостей от среды выполнения .NET как во время компиляции, так и во время выполнения (это важно, поскольку один из основных вариантов использования - встроенная разработка, где среда выполнения .NET полностью настраивается).
- Имеет ли компилятор 100% код .NET без неуправляемых зависимостей
- Поддерживает произвольное выражение вложенности (см. ниже)
- Поддерживает пользовательские определения операторов
- Поддерживает вывод типа
- Оптимизирует хвостовые вызовы
- Имеет явные неизменяемые/изменяемые определения (тонкости - я полюбил это, но могу жить без него)
- Поддерживает реальные макросы для сильного метапрограммирования (абсолютный обязательный)
Первыми двумя языками, с которыми я работал, являются Boo и Nemerle, но я также играл с F #.
Основные жалобы на Nemerle: у компилятора есть ужасные сообщения об ошибках, реализация глючит, как ад (компилятор и библиотеки), макросы могут применяться только внутри функции или как атрибуты, и это довольно тяжелая зависимость (хотя и не достаточно, чтобы это был разбойник).
Основные жалобы на Boo: Никакое произвольное выражение вложенности (dealbreaker), макросы трудно писать, нет пользовательского определения оператора (потенциальный разбойник).
Основные жалобы на F #: Уродливый синтаксис, трудно понять метапрограммирование, несвободная лицензия (эпический разбойник).
Итак, чем больше я думаю об этом, тем больше я думаю о разработке собственного языка.
Плюсы:
- Получить точный синтаксис, который я хочу
- Получите время обработки, которое будет намного быстрее; трудно оценить количественно, но я не удивлюсь, увидев производительность разработчиков на уровне 1.5x, особенно из-за тестовых инфраструктур, которые это может обеспечить для определенных проектов.
- Я могу легко добавить пользовательские функции в компилятор, чтобы хорошо играть с моей версией
- Я получаю что-то, что разработано и работает точно, как я хочу - насколько это звучит, как NIH, это облегчит мне жизнь.
Минусы:
- Если он не сможет получить популярность, я буду зависеть от бремени обслуживания. Я знаю, что, по крайней мере, могу получить людей Немерле, так как я думаю, что каждый хочет что-то более профессиональное, но он берет деревню.
- В связи с первым соглашением я опасаюсь использовать его в профессиональной среде. Тем не менее, я уже использую Nemerle и использую свой собственный модифицированный компилятор, поскольку они не поддерживают его вообще.
- Если он не наберет популярности, поиск разработчиков будет намного сложнее, так как Paul Graham может даже не потворствовать.
Итак, основываясь на этом, какой общий консенсус - это хорошая идея или плохая идея? И, возможно, более полезно, я пропустил какие-либо большие плюсы или минусы?
Изменить: Забыл добавить пример вложенности - вот случай в Nemerle:
def foo =
if(bar == 5)
match(baz) { | "foo" => 1 | _ => 0 }
else bar;
Редактировать # 2: Понятно, что не помешает привести пример типа кода, который будет преобразован на этот язык, если он существует (ответа С. Лотта в одиночку может быть достаточно, чтобы отпугнуть меня от этого), Код сильно использует пользовательский синтаксис (opcode,: =, quoteblock и т.д.), Вложение выражений и т.д. Вы можете проверить хороший пример здесь: здесь.