Здравствуйте, repka, Вы писали:
R>Здравствуйте, VladD2, Вы писали:
VD>>Н2 это технологическая основа для создания расширяемых языков. Причем на его основе можно будет, относительно не сложно, реализовать не только улучшенную версию Немерла, но и сделать расширяемые версии других языков (например, шарпа).
R>Звучит, конечно, здорово, но сама Микрософт уже сколько лет доделывает Розлин. Не кажется, что объем работы для Н2 на порядок больше? Или расчет идет на то, что Н2 будет простой, как и сама базовая Немерля, а шарп на ней будет немерянно легче имплементировать, чем на самом шарпе?
Roslyn это Nemerle без поддержки удобным языком. То есть получается компилятор, который позволяет встраиваться в разные стадии компиляции, но не имеет языковых средств, типа макросов для удобного применения. Так же отсутствует паттерн матчинг, что делает работу с AST совершенно зубодробительным процессом. Про синтаксические расширения я промолчу, до них майкрософту еще далеко.
Шарп, как он имплементирован сейчас, будет совсем не сложно сделать (то есть транслятор в Nemerle и потом компиляция по его правилам). Другое дело, что спецификация шарпа есть, а немерла нет. И повторить спецификацию шарпа будет не то, что бы сложно, просто очень объемно. JB имеет такие ресурсы, вопрос только в целесообразности.
R>Но, ИМХО, все языки имеют пересечения только с академической точки зрения. Да, концепции типов, переменных, наследования и т.п. довольно похожи друг на друга. Но имплементация компиляторов абсолютно другая.
R>Например шарп вначале определяется с типами и их членами по всему проэкту, а уже затем парсит код внутри методов. В то время как Си++ парсает всё подряд: хочешь вызвать функцию имплементированую позже, будь добр, задекларируй её заранее.
У вас очень поверхностное представление о компиляторах.
R>Хуже с темплейтами, где полностю отсутствует типизация.
R>А макросы Си/Си++, вообще, ломают все рамки со скобками. Можно, конечно остановится, сказав: "это должно просто обрабатываться на уровне глупого препроцессора". Но юзера тут же забухтят, — "А где мой интеллисенс? Да мне в Vim 15 лет назад лучше кодировалось!".
Препроцессор естественно нужен (не в темплейтах конечно), а скорость это вопросы оптимизации. Никто не говорил, что супер сложные задачи превратятся в элементарные, они станут просто сложными. Нормальный сенс в С++ получить очень непросто и эту сложность никуда не денешь.
R>Та же ситуация в JavaScript и SQL с их eval-фичами, или использованием их же как встроеных (embedded™) языков. Там после включения какой-нибудь eval-напичканой библиотечки нужно подрубать искуственный интелект, способный бороться с Проблемой Остановки. Микрософт, вроде бы, что-то недавно наклепали в Студии недавно на эту тему, чем очень гордились — с деталямия я не знаком, к сожалению.
Не понял про JS, какие проблемы распарсить eval'ы?
R>Промолчу про саму Немерлю, которая хоть и упрощена до нельзя, но стадий компиляции — непочатый край.
Скажу по секрету, эти стадии в похожем виде есть во всех компиляторах. Просто в Nemerle открыто API для них.
R>Я веду к тому, что весь этот зоопарк не просто разные способы изобразить одно и то же. Может еще Си-шарп, VB.NET, и Жаву можно к общему знаменателю подогнать. Добавь чего-то "нестандартное" и сложность растет экспоненциально.
Это просто инструмент. Применить его к одним языкам будет просто, к другим сложнее. Для одних будет достаточно декларативно задать грамматику, для других придется добавлять препроцессор, для третьих переписывать механизм типизации с нуля, для многих придется писать отдельные бэкенды. Но это все может стать стандартом, как в свое время стали lex&yacc, только еще и для IDE.