Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Об Julia language

Сегодня в порядке воскресного развлечения поставил Juno+Julia (http://junolab.org/ -- это IDE Light Table + Julia), потрогал язык живьём. Эх, мне бы этот язык году так в 1977 (когда я начал заниматься распознаванием образов/image recognition, тогда так называлось machine learning), я был бы счастлив безумно. Но нет, приходилось работать на Fortran и PL/1 (ибо считал я тогда на EC-1022 главным образом). Для численного моделирования в этом языке есть всё и ещё чуть-чуть. Поддержка изнутри языка кодов LaTeX (ага, греческие идентификаторы -- не вопрос), встроенные типы комплексных и рациональных чисел.

Мои заметки:
-- всё работает с полпинка, но всё-таки глючит (так, у меня не показывает Image: ругается при попытке отображения -- похоже, не хватает каких-то файлов). Скорее всего, что-то я поставил не так и не туда.
-- исполняется всё неожиданно долго (как я понимаю, исполняется-то быстро, но вот какие-то компиляции "на лету" делаются каждый раз -- чуть ли не перекомпилируются все пакеты при каждом чихе. Ну, или опять же -- у меня всё криво настроено, и я не знаю, какое нужно выполнить заклинание, какое-нибудь Pkg.build -- но разбираться лень).
-- с другой стороны, критика Julia известна (она такая же, как для большинства других Open Source проектов: хочется пожаловаться на баги и недоделки, но непонятно на кого жаловаться и почему они обязаны вдруг встрепенуться и всё исправить). Вот типичная жалоба -- http://danluu.com/julialang/, вот примерное положение надёжности Julia среди многих других языков -- http://danluu.com/broken-builds/. Нужно отметить, что сам автор спец по тестированию. Вот его fuzzer для Julia: https://github.com/danluu/Fuzz.jl (http://en.wikipedia.org/wiki/Fuzz_testing). С надёжностью работают: очередной багфикс релиз по плану завтра, по факту "скоро" -- https://github.com/JuliaLang/julia/milestones, фичарелиз 0.4.0 "на полпути к победе" -- https://github.com/JuliaLang/julia/milestones/0.4
-- для учебных целей это гиперкрутая среда. Роскошно и шикарно. Это даже без notebooks из IJulia и коллаборативных возможностей https://colaboratory.jupyter.org/welcome/ (там, кстати, всё не остановилось и как-то живёт -- но развивается неравномерно по языкам и фичам: https://twitter.com/ProjectJupyter).

Поддержка библиотек (пакетов) в Julia супер: в язык встроено много чего для накопления знаний. Менеджер пакетов декларативный, с зависимостями разбирается сам. Язык знает про существование интернета, всё нужное подкачивает. И поддерживает тип литерала "номер версии" (http://julia.readthedocs.org/en/latest/manual/strings/), который представляет расширение для стандарта semantic versioning 2.0.0 -- http://semver.org/

Важно, что механизм позволяет не только хорошо использовать чужие пакеты, но и разрабатывать свои: поддерживается накопление знаний как собственных, так и команды, так и в мировом масштабе. Тут, конечно, дело не только в пакетах, но и в multiple dispatch (я писал об этом уже: http://ailev.livejournal.com/1140646.html -- это решение позволяет более-менее независимо пополнять типы данных и процедуры, разделить "программы" и "данные", т.е. иметь множество программ для обработки одних и тех же данных и множество данных для обработки одной и той же программой). Сам Stephan Karpinski заметил 20 декабря "How hard it is to explain how effective multiple dispatch is, is itself quite interesting" -- https://github.com/JuliaLang/julia/issues/8839 (заодно обратите внимание, какие весёленькие у этой команды issues в разработке).

Операторы в Julia -- это функции с синтаксическим сахаром. К ним вполне применим multiple dispatch. И метапрограммирование в количестве, язык отлично расширяется собственными средствами.

Сам язык не слишком маленький, плюс к нему даётся ещё куча библиотек. "Выучить" его нельзя, можно только к нему привыкнуть. Три месяца full time для перехода от "осваиваю" к "работаю" для неновичков в программировании -- это нижняя оценка. Увы, трёх свободных месяцев у меня нет.

Нормальной учебной среды с кучей задач и проверкой ответов, похоже, тоже пока нет. Курсов какого-нибудь machine learning с опорой на Julia тоже пока нет. Но язык хорош (и продолжает улучшаться), так что всё потихоньку появится.

Что интересно, так Julia до сих пор среди популярных языков не замечен (хотя R нынче 18й по популярности, между MATLAB и Pascal. Но это всё одно слёзы: все они уступают современной инкарнации Кобола -- ABAP, который резко рванул вверх и сегодня 16й среди всех языков, http://en.wikipedia.org/wiki/ABAP): http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html (альтернатива http://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/, и там R, Go, Julia все есть, и все мимо основного списка).
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 28 comments