# nimNim -- транслируемая в С (ну и в JS, потому что все хотят фулстэк) статически типизированная смесь Python и... Pascal. Для тех, кто хочет вернуть 2007ой.
Плюсы: простое написание, простое чтение, низкий порог вхождения.
Минусы: ненадёжно (хотя типизация статическая), относительно медленно (потому что асинхронность здесь выглядит недружелюбно, а мультипроцессорность вообще что-то страшное).
Тут понял, что эти "плюсы" и "минусы" -- не очень хорошая идея. После питона всё кажется быстрым, а после pony -- ненадёжным. Так что давайте нырять в детали.
Особенности:
+ Статическая типизация с дженериками (только в Go их не завезли, видимо). Выведения типов нет, аннотировать придётся всё.
+ Зная Python, знаешь уже почти весь синтаксис. Тут есть yield, async, try-except, from-import, with (ну, типа того), range (хотя синтаксис как в Ruby), такие же комментарии, литералы. Хотя в деталях отличий много, конечно.
+ Нет понятия методов и атрибутов, зато есть синтаксический сахар для них. То есть, a.len, a.len() и len(a) -- одно и то же.
+ Штука выше достигается с помощью
multiple dispatch -- возможностью иметь разные функции с одним именем для разных типов параметров.
+ Функции называются proc (procedure), чтобы запутать и вернуть флешбеки из Pascal.
+ Магических методов нет. Property выражаются с помощью описанного выше сахара, операторы перегружаются с помощью написания функции с этим оператором вместо имени (как в Ruby или Haskell).
+ Исключения. Зато есть директива, чтобы явно указывать, какие исключения функция может поднять, и компилятор это статически проверит.
+ Макросы. Потому что метаклассов нет. Ну или потому что хочется делать DSL.
+ Наследование (но не множественное).
В общем, основная мотивация -- сделать такой же простой в написании и чтении язык, как Python, но с компиляцией и статической типизацией. Множество простых концепций, синтаксический сахар и всё такое. Язык довольно простой, он не пытается заманить очередным подходом к конкурентности, особому подходу к типизации, ориентированностью на определенные задачи. Обьычный компилируемый язык, на котором просто писать и приятно читать. Хотя последнее, как и в Python, по факту не всегда так, потому что довольно легко наворотить что-то страшное.
Ссылки по теме:+
Туториал+
Репозиторий+
Nim Package Directory+
Что такого особенного в Nim?+
Getting Started Nim Lang+
Ask HN: Does anyone use Nim language in production?#nim #language #coding
@orsinium