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