Pull to refresh

Comments 11

Еще не успели руки дойти до подробного изучения Julia, отмечу тот факт что Julia сейчас сильно поддерживается MIT и LL MIT. Думаю многие будут рады продолжению статей по Julia в дальнейшем. Спасибо за статью.
Julia явно создавалась под влиянием языка R

И не только его. Линейная алгебра скорее слизана с Matlab, макросы, разумеется, с Lisp, по скорости они ориентируются на С, а по удобству — на Python.

Так же, как в R, индексы начинаются с единицы. На мой взгляд это неудачное решение, отражающее страх нематематиков перед нулем, но многим оно нравится.

Да нет, причём здесь страх, это чистой воды дело вкуса. Лично мне, например, удобней считать, что на руках у меня 5 пальцев — от первого до пятого, а не от нулевого до четвёртого — но я знаю людей, которые бы сказали иначе.
Линейная алгебра и в R хороша. Да и по удобству он мне больше нравится, чем Python :-).
Макросы, конечно, корнями уходят в Lisp. Но по моему, не обошлось без влияния camlp4.
Линейная алгебра везде хороша, где есть LAPACK. Вроде как R не исключение. А Julia изначально создавалась больше с оглядкой на Matlab как язык для технических вычислений. Но сейчас Julia несравненно более мощная вещь концептуально и технологически. Вот бы ещё стабильности, да стандартную библиотеку допилить бы и можно пробовать c ним в production залезть. :)
Один LAPACK счастья не принесет. Легкость работы с векторами в R сама по себе позволяет решать многие задачи линейной алгебры или близкие к ним.
А LAPACK не поможет, если мы работаем не с действительными или комплексными числами. Иногда хочется решить систему линейных уравнений в булевых значениях (в Z/2Z) или дуальных числах (1 2). Готовых методов я не нашел.
Линейная алгебра и в R хороша.

Да ладно, разве можно сравнить это:

A = matrix(c(1, 2, 3, 4, 5, 6), nrow=2, ncol=3, byrow=TRUE)
B = matrix(rnorm(6), ncol=3)
C = A %*% t(B)

и это?
A = [1 2 3; 4 5 6]
B = randn(2, 3)
C = A * B'

:)

Макросы, конечно, корнями уходят в Lisp. Но по моему, не обошлось без влияния camlp4.

Насколько я понял, Camlp4 — это библиотека парсеров, а не отдельный язык, разве нет?
Это препроцессор, реализующий макросы. То есть он реализует проход разворачивания макросов перед компиляцией в Lisp. По моему, то что он не встроен в язык, не слишком принципиально.
Дело не только в препроцессоре — синтаксический сахар всего лишь отражает наиболее часто используемые операции, т.е. является следствием, а не причиной — дело в общем подходе, решаемых задачах и соответсвующей семантике. Смотрите, что будет если в R сложить два вектора разной длины?

> c(1, 2) + c(10, 20, 30, 40)
[1] 11 22 31 42

R реплицировал вектор меньшего размера до размера большего и сложил их. Это удобно, например, для умножения вектора на скаляр (который, как известно, просто вектор единичного размера), но не имеет смысла в линейной алгебре. Поэтому и Matlab/Octave, и Julia это строго запрещают:

julia> [1, 2] + [10, 20, 30, 40]
ERROR: dimensions must match
 in + at array.jl:719


Разница между статистикой и линейной алгеброй проявляется и в основных структурах данных. В R вы работаете, в первую очередь, с фреймами данных, т.е. с таблицами гетерогенных наблюдений. Колонки обычно соответсвуют именам переменных и индексируются строками, а стандартные арифметические операции (например, +, *) над колонками (т.е. векторами) являются поэлементными. В Matlab и Julia основная структура данных — матрица, т.е. двумерный массив однородных данных. Вектор соответсвует одноколоночной матрице, арифметические операции — тоже матричные (для поэлементных операций есть .+ и .*). Есть DataArrays и DataFrames, но это пока только отдельные пакеты, и вряд ли они будут когда-либо интегрированы в язык так же плотно, как линейная алгебра в Matlab или Julia.
По препроцессор — это я про camlp4.
Про линеную алгебру соглашусь — в Julia она лучше продумана.
Имеется вопрос к тем, кто пробовал использовать Julia на практике.
Я занимаюсь анализом данных на R, но давненько присматриваюсь к Julia. Очень нравится синтаксис и система типов, хочется чего-нибудь полезное попробовать написать, но несколько пугает молодость языка и малое количество библиотек. Пробовал кто-нибудь писать что-нибудь более или менее большое, а не академические примеры? Мне хочется понять насколько язык готов к реальному бою.
По моему впечатлению (на базе очень ограниченного опыта) язык уже достаточно стабилен, но библиотек крайне мало.
Sign up to leave a comment.

Articles