Вторая программа на 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++ в качестве “ассемблера” для сборки под разные платформы.