Spiiin's blog

Nim vk-get-pictures

Вторая программа на Nim – скрипт скачивания картинок из альбома Vkontakte.

(2015) - Версия на Scala

Следующий эксперимент после решения задачи Джеймса Бонда-младшего - скрипт для выкачивания всех картинок из альбома вконтакте в несколько потоков.

Смысл выбора задачи - попробовать использовать Nim в качестве скриптового языка, для написания quick-and-dirty кода.

Код на Nim, написанный в таком стиле, похож на Pascal. Однако после изучения стиля нескольких библиотек становятся ощутимее различия. Разница в том, что импортируется из модулей в программу. Это не просто “структуры данных и алгоритмы”, а элементы синтаксиса. В Nim, по сравнению с Python, меньше синтаксического сахара в языке, но его можно добавить, импортируя “сахарные” библиотеки. Практически, каждый модуль может быть написан на своём “микро-языке”, в зависимости от того, что он импортирует.

Примеры библиотек:
Async/await
Pattern matching
HTML DSL

В терминах Фаулера из книги “Предметно-ориентированные языки программирования”, библиотеки могут представлять свободные API (fluent interface, “языкообразные апи”) или API командных запросов (“обычные” для объектного программирования вызовы методов у объектов), причем одна и та же библиотека может представлять различные API для работы с ней.

Гибкий синтаксис приближает Nim к таким языкам, как Lisp или Smalltalk. Возможно, правильный выбор языков может сильно уменьшать количество строк кода, необходимого для решения задач, хотя пока о том, что даст языково-ориентированное программирование, больше мечтают (MPS, Language Workbenches, Racket).

Вдобавок к изменениям синтаксиса, компилятор имеет переключатели, существенно меняющие поведение (hot code reload, ARC garbage collector, threads) и использовать C++ в качестве “ассемблера” для сборки под разные платформы.