
В интернетах говорят, что для улучшения своих программистских навыков нужно сделать что-нибудь хорошее, а следом приводят список такого хорошего. Обычно одним из пунктов "выучить новый язык программирования с концепциями отличными от тех, что вы используете каждый день". На самом деле это не цитата из списка, а вольный пересказ. Часто там предлагают список языков, которые обязательно должны помочь программисту стать чуточку лучше, обычно это Lisp, OCaml, Haskell. Ещё к этому списку были добавлены Rust и Nim. Поддавшись желанию стать немного лучше, взялся за выбор языка из этих пяти.
Lisp
Был вычеркнут почти сразу. Во-первых, я с ним уже имел дело, а во вторых у него динамическая типизация, что я и так каждый день вижу в python и javascript. Хотя как язык он мне понравился.
Nim, Rust
Следующими на вылет стали Nim и Rust. С Nim я немного поигрался до этого, прочёл его официальную документацию, а о Rust почерпнул немного информации с официального сайта. Как ни крути, но оба языка очень молодые, где-то сырые, идёт постоянная работа над изменениями. Т.е. мне бы пришлось не столько изучать новый язык и концепции, сколько следить за творческими метаниями авторов. Этого мне не хотелось. А Nim помимо молодости содержит совершенно непривычные для меня вещи, вроде регистро-независимости и возможности писать один и тот же код разными способами, например,
iecho "Hi" "Hi".echo
В общем, пусть оба эти языка подождут лучших времён.
OCaml vs Haskell
Осталось два кандидата. у обоих статическая типизация, оба невероятно круты и холивары чем-то напоминают vim vs emacs. Чтобы в таких условиях делать осознанный выбор (как когда-то я делал в случае с vim и emacs), нужно попробовать в деле оба языка. первым выбрал OCaml, без каких-либо веских доводов, просто "вот так".
Книга про OCaml
Первым делом просмотрел список доступных книг и примеров кода. Потом полистал официальную документацию. По ходу чтения OCaml нравился мне всё больше. После беглого ознакомления с официальной документацией взялся за realworldocaml.org. Авторы книги уже много лет пишут на OCaml, разработали расширения для языка и большую библиотеку. Ну я и подумал, что почему бы не поучиться у тех, кто имеет опыт в разработке на новом для меня языке. Книга мне понравилась с первого предложения:
Programming languages matter.
realworldocaml.org
Первое погружение
Помимо чтения книги, подсматривания в официальную документацию и поиска по форумам, делаю простые, но необходимые для меня вещи. Для начала запишу строку в файл.
open Core.Std;; let create_json_file str = let ofp = Out_channel.create "list.json" in fprintf ofp "%s" str; Out_channel.close ofp ;; let () = create_json_file "[1, 2, 3, 4, 5]"; printf "Bye\n"; ;;
Признаюсь, что помимо этого примера попытался записывать в файл список строк, превратив его в список в json-формате, но у меня пока что не получилось. При попытке написать что-то длиннее 10 строк вызывает целый поток ругательств от corebuild. Дело в том, что почти вся первая глава крутится вокруг utop, и предполагается, что читатель делает тоже самое.