Мой опыт разработки на языке Nim

Привет, Хабр!
Уже довольно давно я пишу свой игровой фреймворк — такой pet project для души. А так как для души нужно выбирать что-то, что нравится (а в данном случае — на чём нравится писать), то выбор мой пал на nim. В этой статье я хочу поговорить именно про nim, про его особенности, плюсы и минусы, а тема геймдева лишь задаёт контекст моего опыта — какие задачи я решал, какие трудности возникли.
Давным-давно, когда трава была зеленее, а небо чище, я встретил nim. Хотя нет, не так. Давным-давно я хотел заниматься разработкой игр, чтобы написать свою Самую Классную Игру — думаю, многие проходили через это. В те времена Unity и Unreal Engine только-только стали появляться на слуху и, вроде как, ещё не были бесплатными. Я не стал их использовать, не столько из-за жадности, сколько из-за желания написать всё самому, создать игровой мир полность с нуля, с самого первого нулевого байта. Да, долго, да, сложно, зато сам процесс приносит удовольствие — а что ещё для счастья надо?
Дзен Nim

1. Копирование плохого дизайна — плохой дизайн.
2. Если компилятор не может рассуждать о коде, то и программист не может.
3. Не стой на пути у программиста.
4. Перенеси работу на этап компиляции: программы запускаются гораздо чаще, чем компилируются.
5. Настраиваемое управление памятью.
6. Лаконичный код не мешает читабельности, он ей способствует.
7. (Задействовать метапрограммирование, чтобы оставить язык компактным).
8. Оптимизация это специализация: если вам нужно больше скорости, пишите кастомный код.
9. Должен быть только один язык программирования для всего. Этот язык — Nim.
Стоит ли переходить с Python на Nim ради производительности?

Несколько недель назад я бродил по GitHub и наткнулся на любопытный репозиторий: проект был полностью написан на языке Nim. До этого я с ним не сталкивался, и в этот раз решил разобраться, что это за зверь.
Сначала я подумал, что отстал от жизни, что это один из распространённых языков программирования, который многие, в отличие от меня, активно используют. И тогда я решил изучить его.
Сравниваем Nim и Rust
Rust и Nim — два новых языка программирования за развитием которых я слежу. Вскоре, после моего первого поста о Rust, вышел в свет Nim 0.10.2. Это побудило меня поближе познакомиться с Nim и, естественно, сравнить его с Rust.
В этом посте я собираюсь показать вам две простых программы написанных на Nim и Rust с грубым сравнением их времени выполнения и выскажу мои субъективные впечатления от программирования на этих языках.
Учебное пособие по Nim (часть 1)
Введение
“Der Mensch ist doch ein Augentier – schöne Dinge wünsch ich mir.”(Цитата из песни «Morgenstern» группы «Rammstein». Примерный перевод: «Но человек – глазастый зверь, – мне нужно множество красивых вещей».)
Это – обучающий материал (tutorial) по языку программирования Nim. Предполагается, что вы знакомы с базовыми концепциями программирования, такими как переменные, типы или команды, но глубокие знания не обязательны. Большое количество примеров по сложным нюансам языка, вы можете найти в официальном руководстве. Все примеры кода в этом документе следуют руководству по стилю языка Nim.
Что такого особенного в Nim?

Язык программирования Nim (ранее именовался Nimrod) — захватывающий! В то время как официальная документация с примерами плавно знакомит с языком, я хочу быстро показать вам что можно сделать с Nim, что было бы труднее или невозможно сделать на других языках.
Я открыл для себя Nim, когда искал правильный инструмент для написания игры, HoorRace, преемник моей текущей DDNet игры/мода Teeworlds.
(прим. пер. На синтаксис Nim имели влияние Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.)
Запускаем!
Да, эта часть всё ещё не захватывает, но просто следите за продолжением поста:
for i in 0..10:
echo "Hello World"[0..i]
Введение в ARC/ORC в Nim
Nim переходит к более эффективным моделям управления памятью: ARC и ORC. Давайте узнаем, как именно они изменят работу с памятью в нём.

Ускоряем код на Python с помощью Nim

Python — один из самых популярных и доступных языков программирования, но далеко не самый быстрый. Многие создатели библиотек и фреймворков прибегали к использованию расширения на С, чтобы их код работал быстрее, чем код на нативном Python. Этот способ вполне рабочий, но если вы не знакомы с С, сборка мусора и управление памятью станут вашим адом на Земле. И тут на сцену выходит Nim.
Знакомство с Nim: пишем консольную 2048

Хочется чего-то нового, быстрого, компилируемого, но при этом приятного на ощупь? Добро пожаловать под кат, где мы опробуем язык программирования Nim на реализации очередного клона игры 2048. Никаких браузеров, только хардкор, только командная строка!
В программе:
- Who is the Nim?
- Как выглядит ООП в Nim
- Немного C под капотом
- Создание экземпляров
- Собственно игра 2048 (github)
- Субъективные выводы
Учебное пособие по Nim (часть 2)
Перевод делался для себя, то есть коряво и на скорую руку. Формулировки некоторых фраз приходилось рожать в страшных муках, чтобы они хоть отдалённо были похожи на русский язык. Кто знает, как написать лучше — пишите в личку, буду править.
Введение
«Повторение придаёт нелепости вид благоразумия.» – Норман Вайлдбергер
(в оригинале: "Repetition renders the ridiculous reasonable." – Norman Wildberger)
Этот документ является учебным пособием по сложным конструкциям языка Nim. Помните, что этот документ в чём-то устарел, а в руководстве есть гораздо больше актуальных примеров по сложным особенностям языка.
Использование Nim В Python

В этой статье поговорим о том, как можно ускорить свой код, написанный на Python с помощью модулей, скомпилированных через Nim.
Узнаем о том, какие библиотеки в Python написаны на Nim и даже напишем свой небольшой модуль для Python!
Пробрасываем вызовы Steam API из Wine в GNU/Linux и обратно с помощью Nim
У игроков на платформе GNU/Linux множество проблем. Одна из них — необходимость устанавливать отдельный клиент Steam для каждой Windows игры из Steam. Ситуация усугубляется необходимостью установки ещё и родного клиента Steam для портированных и кроссплатформенных игр.

Но что если найти способ использовать один клиент для всех игр? За основу можно взять родной клиент, а игры для Windows пусть обращаются к нему так же как, например, к OpenGL или звуковой подсистеме GNU/Linux — средствами Wine. О реализации такого подхода и пойдёт речь далее.
Разработка веб-приложений с помощью Nim

В этой статье я постараюсь ознакомить вас с возможностями веб разработки на языке программирования Nim.
На данный момент в Nim можно выделить 2 основных веб-фреймворка: Jester и Karax. Однако Jester используется только для серверной разработки, а Karax для клиентской. Поэтому рассказывать о них я не стану, однако я расскажу о другом замечательном фреймворке - HappyX.
Дженерики и конвертеры в Nim

Всем привет! В данной статье я постараюсь рассказать, что такое generic процедуры и converter’ы в Nim (и показать примеры их использования)
Что такое Nim? Nim – компилируемый (в C, C++, Objective C и JS) высокоуровневый язык программирования со сборщиком мусора, имеющий три основных цели (в порядке приоритета): производительность, выразительность, элегантность. Официальный сайт языка, репозиторий на GitHub.
Также в Nim достаточно развито метапрограммирование (дженерики, шаблоны, макросы).
О разработке веб-приложений на Nim. Часть 2

В прошлой статье (вот здесь) я рассказывал вам о свежем веб-фреймворке под названием HappyX, который, кстати, получил новый мажорный релиз - 2.0.0 (Nim кстати тоже, об этом писал @denis-19 вот здесь).
В этой статье я ознакомлю вас с основными изменениями новой версии фреймворка, а также расскажу, почему стоит выбрать HappyX для ваших проектов.
Ну и Herz'с'nim!!!
На Хабре уже много было статей про разные компании, предлагающие в аренду физические сервера, и всех их объединяло две фактора: расположение за рубежом и низкая цена.
Parking.ru решил ответить иностранным «захватчикам» и вернуть сервера на Родину! Буржуи заманивают вас низкими ценами — Herz'с'nim, мы предложим ниже! С 20 марта мы запускаем услуги аренды физических серверов по цене в 1,5 -2 раза ниже, чем сейчас есть на рынке!!! Ваши сервера будут надежно спрятаны в ЦОДе, расположенном в густых Владимирских лесах.
Все лучшее на Herz'с'nim
Разработка Telegram Web App с помощью HappyX и telebot

В этой статье я расскажу вам, как можно с помощью Nim разработать Telegram Web App, используя HappyX и telebot.
Разработка простого приложения для заметок на HappyX

Как создать веб-приложение, если вы пишите на Nim? Что такое HappyX и как можно создать на нем приложение для заметок? Обо всем этом вы узнаете в полной статье.
