×Закрыть
Desktop Engineering Director в ZEO Alliance
  • Nim: идеальный язык программирования

    Постараюсь прояснить некоторые вопросы, озвученные в комментариях. Дисклеймер: в любом случае я призываю попробовать Nim на ощупь, прежде чем его критиковать ;).
    * Чувствительность пробелов. Имхо, этот фукционал спорный, он отключен по умолчанию, включить его можно с помощью специальной прагмы. Я с трудом верю, что он когда-либо будет включен.
    * Бывают ли инструменты для всего. C++ был инструментом для всего, пока «всего» не стало больше. С течением времени, в программировании появляются новые потребности, для которых создаются специальные инструменты. Впоследствии, специальные инструменты могут быть унифицированы, если досконально изучить их области применения. 15-й конкурирующий стандарт свидетельствует лишь о том, что над ним плохо поработали =).
    * Количество библиотек. Вопрос курицы и яйца. В то же время, биндинги для существующих библиотек на C/C++/Obj-C можно сваять, практически не отвлекаясь от первоочередной задачи. Еще есть инструмент c2nim, который делает это в автоматическом режиме, и даже умеет транслировать код на C в nim (иногда требуется небольшая помощь)! Таким образом можно довольно быстро перевести всю старую кодбазу, и продолжить разработку на nim. Также следует заметить, что мощный механизм макросов и шаблонов позволяет почти бесшовно интегрироваться со всеми языками, допускающими написание расширений на C, то есть буквально, со всеми языками. Я пытался это показать в последней секции статьи.
    * Синтаксис. Это холивар. Скажу лишь, что на мой взгляд синтаксис выверен достаточно скрупулезно. При всей своей лаконичности, грамматика лишена многозначительности. Расширяемость синтаксиса сделана чище, чем в Ruby, и на много порядков чище, чем в Perl, где к каждому незнакомому слову следует относиться с подозрением =).
    * Конфликт в моих требованиях к идеальному языку. Заметьте, что это требования к языку, а не к коду. В Nim очень хорошо действует принцип pay-as-you-go. Вы всегда знаете, какова цена райнтайм-проверке выхода за пределы массива. И в Nim у вас всегда есть выбор между бешеной скоростью, и безопаностью. Однако, под скоростью я больше подразумевал близость промежуточного кода к железу, и отсутствие проверок типов в рантайме, чего не избежать в том же питоне. Если сравнивать скорость алгоритмов на ниме и питоне, то при всех безопасностях нима, он будет на порядок быстрее.
    * Статическая типизация. Ним — исключительно статически типизацированный. Однако, в нем есть механизм type inference, который позволяет не указывать типы переменных/констант. Так же есть generics, но в отличие от общепринятого понимания этого слова, дженерики в ниме по своей мощи больше похожы на темплейты в D, которые в свою очередь выводят темплейты C++ на новый космический уровень.
    * Выразительные языки проигрывают в скорости и простотой синтаксиса. Это следует формулировать так: «Известные мне выразительные языки ...» ;)
    * Портируемость и скорость совершенно не совместимы. Думаю, разработчики Assasin’s Creed с вами не согласятся. Разумеется, используемое апи всех поддерживаемых платформ следует свести к одному интерфейсу. Как правило, толщина такого портинг-слоя всецело зависит лишь от умений программиста и может быть достаточно производительной. Но даже в этом вопросе Nim может прийти вам на помощь, «заинлайнив» использование нативного API. Конечно, тут тоже трубется некоторое понимание принципов языка.

    Если вдруг не на все вопросы ответил, буду очень рад вашим комментариям по теме ;).
    ЗЫ. Реквестирую статью о том, как количество виртуальности в C++ (что бы это ни значило) влияет на производительность. Возможно, она перевернет мой мир ;)