Разработка на коленке

"тут должна быть красивая цитата о программировании"

OCaml для python-программиста

2015-07-31 23:55
Фотография аквариума от будущего OCaml-программиста

В интернетах говорят, что для улучшения своих программистских навыков нужно сделать что-нибудь хорошее, а следом приводят список такого хорошего. Обычно одним из пунктов "выучить новый язык программирования с концепциями отличными от тех, что вы используете каждый день". На самом деле это не цитата из списка, а вольный пересказ. Часто там предлагают список языков, которые обязательно должны помочь программисту стать чуточку лучше, обычно это 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, и предполагается, что читатель делает тоже самое.