LINUX.ORG.RU

Julia 0.5

 ,


0

4

После года разработки представлен релиз Julia 0.5 — высокоуровневого высокопроизводительного свободного языка программирования с динамической типизацией, созданного для математических вычислений, но также эффективного и для написания программ общего назначения. Синтаксис языка схож с синтаксисом других математических языков (таких как MATLAB и Octave), однако имеет некоторые существенные отличия. Ядро Julia написано c использованием C, C++ и Scheme.

Этот релиз содержит существенные доработки языка и стандартной библиотеки. Главной его задачей было получение возможности писать быстрый функциональный код и избавиться от потерь производительности при использовании анонимных функций и замыканий.

Важные изменения:

  • Ускорение было достигнуто путём выведения каждой функции и замыкания в отдельный тип, где переменные замыкания являются атрибутами типа. Все функции, включая анонимные, теперь являются обобщенными и поддерживают все возможности.
  • Добавлена экспериментальная поддержка многопоточности.
  • Все измерения, индексируемые скалярами, теперь сбрасываются; ранее исключались только последующие измерения. Это изменение является несовместимым с предыдущими версиями, но упорядочивает правила индексации.
  • Списковое включение теперь может создавать итераторы, вычисляемые только при необходимости.
  • Добавлена экспериментальная поддержка массивов, индекс которых начинается от значения, отличного от 1. Стандартные массивы Julia по-прежнему индексируются от 1, но внешние пакеты могут реализовывать типы массивов, начинающихся c произвольных индексов.
  • Значительно упрощены строковые типы: ASCIIString и UTF8String объединены в String; из стандартной библиотеки извлечены типы и функции, относящиеся к кодировкам.
  • Управление пакетами теперь используют libgit2 вместо обращения к git с помощью командной оболочки. Это делает управление пакетами намного быстрее и надежнее, особенно на Windows.
  • Julia теперь работает на ARM и Power и, благодаря этому, теперь может использоваться на широком диапазоне аппаратного обеспечения — от самых малых встраиваемых систем до самых высокопроизводительных компьютеров.
  • Gallium, отладчик для Julia, теперь готов к использованию. Он даёт возможность полноценной отладки когда на Julia и C и встроен в IDE Juno.

>>> Список изменений

>>> Подробности

anonymous

Проверено: Falcon-peregrinus ()

Как выйдет релиз, то выкидываю R и перехожу на Julia.

FilosofeM ★★ ()

Но чем, чем им не угодила статическая типизация?

cvs-255 ★★★★★ ()

Добавлена экспериментальная поддержка многопоточности

serious business

Manhunt ★★★★★ ()
Ответ на: комментарий от cvs-255

Там гибридная типизация. Можно явно указывать типы переменных и возвратных значений. Такого нет в R.

FilosofeM ★★ ()
Ответ на: комментарий от cvs-255

Но чем, чем им не угодила статическая типизация?

А она часто не нужна. Типизация должна быть строгой.

Stil ★★★★★ ()

В REPL то научились? С переопределением функций и модулей в текущем сеансе? Или до сих пор ракетная наука?

anonymous ()
Ответ на: комментарий от anonymous

Ты что так резко, это могут то полтора языка нормально делать. И те созданы в прошлом веке.

loz ★★★★★ ()

По сабжу - не знаю где его применить, для общего назначения есть вещи поинтереснее/поразвитее, позиционируют его для научных, распределенных вычислений, которых в обыденном программировании практически и нет.

loz ★★★★★ ()
Ответ на: комментарий от Stil

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

cvs-255 ★★★★★ ()

Ещё один недоязычок. АСТАНАВИТЕСЬ!

r_asian ☆☆☆ ()
Ответ на: комментарий от cvs-255

статическая типизация очень помогает в больших проектах, когда имеешь дело с чужим кодом.

Статическая типизация означает что тип это аттрибут самой переменной а не значения на которое она указывает.
Динамическая типизация означает что тип это аттрибут значения на которое указывает переменная, и эта переменная может принимать значения любого типа.

Динамика подразумевает что во время исполнения программы доступна информация о любом типе.

Без нее вообще я не представляю, как можно быстро понять, что тут делается.

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

tp_for_my_bunghole ()
Ответ на: комментарий от cvs-255

Ну и автодополнение полей при использовании структур непонятно как делать, если неизвестно, какого типа переменная.

Это ты говоришь как бы от имени IDE, а не программиста. Да, IDE в случае с динамикой не знает как автодополнять поля объектов.
Но программист всегда должен знать, он подразумевает конкретный интерфейс который увидел в документации. Задания формулируются в терминах предметной области, а названия структур данных и функции не могут быть достаточно информативны, иногда даже вводят в заблуждение.

В динамических языках подход подразумевает использование REPL, когда можно импортировать в интерактивном режиме какую-то библиотеку и начать композицию функций приближаясь к нужному результату, с нижних уровней логики к верхним, читая стандартные тесты библиотеки когда нужно. В таком процессе появляются заготовки своих тестов, которые периодически надо оформлять перенося код из REPL, или часто сразу писать тесты(test driven development). С REPL это уже скорее exploratory programming, исследовательское программирование. Это естественно когда заранее неизвестно какие алгоритмы будут использоваться, или логика принятия решений может/будет изменяться(как в бизнесе).

tp_for_my_bunghole ()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 2)

Это же надо, до какой степени R не осилили.

Vinni_Pooh ★★★★ ()
Ответ на: комментарий от tp_for_my_bunghole

Но программист всегда должен знать, он подразумевает конкретный интерфейс который увидел в документации. Задания формулируются в терминах предметной области

знать должен, но автодополнение экономит время.

Особенно когда приходишь в компанию, где уже есть код, над которым работала уже куча людей и тебе надо максимально быстро разобраться с уже существующим кодом.

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)

Скриншоты где?

anonymous ()
Ответ на: комментарий от tp_for_my_bunghole

Сколько KLOC и дизайнеров в проекте на динамическом языке, который ты поддерживаешь?

GoodRiddance ()
Ответ на: комментарий от FilosofeM

а в чем профит? R справляется со своими задачами а где нет есть python/scala

robotron5 ()
Ответ на: комментарий от robotron5

а в чем профит? R справляется со своими задачами а где нет есть python/scala

По бенчам на http://www.juliabloggers.com/speed-expectations-for-julia/ , Julia обходит по производительности даже Fortran; Java на пол-порядка медленнее, Питон - на полтора.

Ну и сильная ориентировка на векторное программирование в духе APL/J.

Для любителей ужастиков и синтакса APL, вот часть синтакса Julia (это не псевдокод, это и *есть* синтакс):

-- --> ← → ↔ ↚ ↛ ↠ ↣ ↦ ↮ ⇎ ⇏ ⇒ ⇔ ⇴ ⇶ ⇷ ⇸ ⇹ ⇺ ⇻ ⇼ ⇽ ⇾ ⇿ ⟵ ⟶ ⟷ ⟷ ⟹ ⟺ ⟻ ⟼ ⟽ ⟾ ⟿ ⤀ ⤁ ⤂ ⤃ ⤄ ⤅ ⤆ ⤇ 
⤌ ⤍ ⤎ ⤏ ⤐ ⤑ ⤔ ⤕ ⤖ ⤗ ⤘ ⤝ ⤞ ⤟ ⤠ ⥄ ⥅ ⥆ ⥇ ⥈ ⥊ ⥋ ⥎ ⥐ ⥒ ⥓ ⥖ ⥗ ⥚ ⥛ ⥞ ⥟ ⥢ ⥤ ⥦ ⥧ ⥨ ⥩ ⥪ ⥫ ⥬ ⥭ ⥰ ⧴ 
⬱ ⬰ ⬲ ⬳ ⬴ ⬵ ⬶ ⬷ ⬸ ⬹ ⬺ ⬻ ⬼ ⬽ ⬾ ⬿ ⭀ ⭁ ⭂ ⭃ ⭄ ⭇ ⭈ ⭉ ⭊ ⭋ ⭌ ← → > < >= ≥ <= ≤ == === ≡ != ≠ !== ≢ 
|.>| |.<| |.>=| |.≥| |.<=| |.≤| |.==| |.!=| |.≠| |.=| |.!| |<:| |>:| ∈ ∉ ∋ ∌ ⊆ ⊈ ⊂ ⊄ ⊊ ∝ ∊ ∍ ∥ ∦ ∷ ∺ ∻ ∽ ∾ ≁ ≃ 
≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≐ ≑ ≒ ≓ ≔ ≕ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ ≣ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ ⊀ ⊁ 
⊃ ⊅ ⊇ ⊉ ⊋ ⊏ ⊐ ⊑ ⊒ ⊜ ⊩ ⊬ ⊮ ⊰ ⊱ ⊲ ⊳ ⊴ ⊵ ⊶ ⊷ ⋍ ⋐ ⋑ ⋕ ⋖ ⋗ ⋘ ⋙ ⋚ ⋛ ⋜ ⋝ ⋞ ⋟ ⋠ ⋡ ⋢ ⋣ ⋤ ⋥ ⋦ ⋧ ⋨ ⋩ ⋪ ⋫ ⋬ ⋭ ⋲ ⋳ ⋴ ⋵ 
⋶ ⋷ ⋸ ⋹ ⋺ ⋻ ⋼ ⋽ ⋾ ⋿ ⟈ ⟉ ⟒ ⦷ ⧀ ⧁ ⧡ ⧣ ⧤ ⧥ ⩦ ⩧ ⩪ ⩫ ⩬ ⩭ ⩮ ⩯ ⩰ ⩱ ⩲ ⩳ ⩴ ⩵ ⩶ ⩷ ⩸ ⩹ ⩺ ⩻ ⩼ ⩽ ⩾ ⩿ ⪀ ⪁ ⪂ ⪃ ⪄ ⪅ ⪆ ⪇ ⪈ ⪉ 
⪊ ⪋ ⪌ ⪍ ⪎ ⪏ ⪐ ⪑ ⪒ ⪓ ⪔ ⪕ ⪖ ⪗ ⪘ ⪙ ⪚ ⪛ ⪜ ⪝ ⪞ ⪟ ⪠ ⪡ ⪢ ⪣ ⪤ ⪥ ⪦ ⪧ ⪨ ⪩ ⪪ ⪫ ⪬ ⪭ ⪮ ⪯ ⪰ ⪱ ⪲ ⪳ ⪴ ⪵ ⪶ ⪷ ⪸ ⪹ ⪺ ⪻ ⪼ ⪽ ⪾ ⪿ ⫀ ⫁
⫂ ⫃ ⫄ ⫅ ⫆ ⫇ ⫈ ⫉ ⫊ ⫋ ⫌ ⫍ ⫎ ⫏ ⫐ ⫑ ⫒ ⫓ ⫔ ⫕ ⫖ ⫗ ⫘ ⫙ ⫷ ⫸ ⫹ ⫺ ⊢ ⊣ + - ⊕ ⊖ ⊞ ⊟ |.+| |.-| |++| |\|| ∪ ∨ $ ⊔ ± ∓ ∔ ∸ ≂ ≏ 
⊎ ⊻ ⊽ ⋎ ⋓ ⧺ ⧻ ⨈ ⨢ ⨣ ⨤ ⨥ ⨦ ⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨹ ⨺ ⩁ ⩂ ⩅ ⩊ ⩌ ⩏ ⩐ ⩒ ⩔ ⩖ ⩗ ⩛ ⩝ ⩡ ⩢ ⩣ * / |./| ÷ |.÷| % ⋅ ∘ × |.%| |.*|
|\\| |.\\| & ∩ ∧ ⊗ ⊘ ⊙ ⊚ ⊛ ⊠ ⊡ ⊓ ∗ ∙ ∤ ⅋ ≀ ⊼ ⋄ ⋆ ⋇ ⋉ ⋊ ⋋ ⋌ ⋏ ⋒ ⟑ ⦸ ⦼ ⦾ ⦿ ⧶ ⧷ ⨇ ⨰ ⨱ ⨲ ⨳ ⨴ ⨵ ⨶ ⨷ ⨸ ⨻ ⨼ ⨽ ⩀ ⩃ ⩄ ⩋
⩍ ⩎ ⩑ ⩓ ⩕ ⩘ ⩚ ⩜ ⩞ ⩟ ⩠ ⫛ ⊍ ▷ ⨝ ⟕ ⟖ ⟗

Пруф: https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm

gene1 ()
Ответ на: комментарий от GoodRiddance

Сколько KLOC и дизайнеров в проекте на динамическом языке, который ты поддерживаешь?

Да что всё обо мне да обо мне, ты то как? Жена, дети?

В рамках KLOC сравнивать неинтересно. Ещё давай сопоставлять KLOC с рабочими часами и отправлять отчётность в бухгалтерию.

Избитый пример, в 2012 году youtube обслуживал 4 миллиарда запросов, загрузка 60 часов видео каждую минуту. Основная масса кода на Python.

Reddit на Python(обитателям рунета это не всегда понятно).
Paypal, Ebay, Quora, Pinterest, Instagram, Disqus, Bitbucket, Dropbox мигрирует на Go, но desktop клиент на Python.

То с чем я работаю, по сравнению с этим не попадает на радары.

Blender 3D, функции прямо указаны на элементах интерфейса, с постоянно открытым REPL.

Самая хорошо документированная система из существующих, это Emacs.

tp_for_my_bunghole ()
Ответ на: комментарий от tp_for_my_bunghole

Есть разница между программированием общего назначения (пусть даже сверх-производительным) и ЯП для математических, статистических и научных задач.

Например, если важно не обработать миллион запросов в секунду, а вычислить один-единственную задачу за месяц, но такую, которая на другом языке заняла бы год.

Не всем же хипстерам стримить видосы с Ютюба и перепосты с Фейсбука; еще остались бедные яйцеголовые, которые вычисляют фолдинг белка или или эмуляцию ядерного синтеза.

gene1 ()

И нахрена оно надо? Тем, кто использует Octave эти самые существенные отличия только мешать будут, а те, кому они не мешают, давно на R перешли.

zabbal ()

Никакой информации как работает GC. Сейчас так не принято.

tp_for_my_bunghole ()
Ответ на: комментарий от gene1

Для любителей ужастиков и синтакса APL

какой кошмар, для APL и клавы вроде свои с такими закорючками на кнопочках

По бенчам; Java на пол-порядка медленнее

для скорости есть Ц и Цпп

robotron5 ()
Ответ на: комментарий от gene1

еще остались бедные яйцеголовые, которые вычисляют фолдинг белка или или эмуляцию ядерного синтеза.

Python легко оптимизировать, но только для программиста.
Многие потом поймут что Julia тоже язык программирования, и у него свoи сложности для непрограммистов, окажется что проблема была не в самом Python.

tp_for_my_bunghole ()
Ответ на: комментарий от cvs-255

Нельзя математикам статическую типизацию давать. Уйдут с головой в эндофункторы и забудут начальную задачу.

anonymous ()

Управление пакетами теперь используют libgit2 вместо обращения к git с помощью командной оболочки. Это делает управление пакетами намного быстрее и надежнее, особенно на Windows.

На оффтопе оно Ттк быстро и надежно, аж мелкомягкие в vs15 сваливают на git.exe https://blogs.msdn.microsoft.com/visualstudio/2016/10/05/announcing-visual-st...

lberserq ()
Ответ на: комментарий от tp_for_my_bunghole

Julia — это такая очередная попытка построить DSL «общего вычсилительного назначения», с семинарами и лаборантками численными методами и матричной алгеброй.

Я пытался на неё смотреть с самого начала, и идея мне нравилась, но теперь они растеряли фокус :(

Вместо того, чтобы исправить недостатки матлаба как DSL для матричных вычислелий + добавки честной иерархии чисел получили опять unmamageble говно :( Ну, точнее, не говно, но опять язык программирования общего назначения, и в этом я согласен уже, что питон становится не таким уж унылым.

unanimous ★★★★★ ()
Ответ на: комментарий от loz

И те созданы в прошлом веке.

Большинство широко используемых ныне ЯП создано в прошлом веке.

Virtuos86 ★★★★★ ()

она подходит парсить логи? чем вообще лучше всего парсить логи (кроме perl|c) ?

dinama ()
Ответ на: комментарий от dinama

Лучше парсить логи только Matlab'ом

anonymous ()
Ответ на: комментарий от dinama

Есть один язык, но он еще не готов. И мир еще не готов.

loz ★★★★★ ()

Почему люди просто не используют Фортран?

anonymous ()

А это про julia была здесь новость-статья про fem, с примером в виде дракончика?

anonymous ()
Ответ на: комментарий от tp_for_my_bunghole

Я пишу нечто большое (2.5MLOC только одна подсистема) на динамическом (Erlang). Так что про боль динамической типизации что-то могу рассказать.

GoodRiddance ()
Ответ на: комментарий от anonymous

Почему люди просто не используют Фортран?

Потому что вместо пары строк кода иногда на фортране надо катать пару страниц. И не просто говнокода, а думать. Не всегда оно оправдано.

julia занимает место языков протитипирования (DSL), а не общего назначения. Хотя судя по тенденции, быстро скатывается во второе.

unanimous ★★★★★ ()
Ответ на: комментарий от anonymous

Почему люди просто не используют Фортран?

Фортран люди используют. Однако, он недостаточно высокоуровневый для многих научных задач. Поэтому люди также используют матлаб/IDL/питон/R и др.

yvv ★★☆ ()
Последнее исправление: yvv (всего исправлений: 1)
julia> 1/1000000000000000*100000000000000000000
100000.00000000001

Плохо

urquan ()
Ответ на: комментарий от urquan

Это особенность процессоров, а не языка. Julia использует операции на CPU, без каких-либо доп. проверок.

Хочешь абсолютную точность - используй символьные вычисления и теряй в скорости.

Norgat ★★★★★ ()
Последнее исправление: Norgat (всего исправлений: 1)
Ответ на: комментарий от urquan

Плохо

А кому сейчас жить легко? Все строго по стандарту IEEE 754. В том же Питоне:

(1.0)/1000000000000000*100000000000000000000

Или смущает что в Юле не 1.0 а 1? Ну вернулся бы тебе 0, легче бы стало? :-)

Для точных операций есть рациональные типы чисел: В Юле это пишется x//y вместо x/y:

int((1//1000000000000000)*100000000000000000000)
100000
gene1 ()
Ответ на: комментарий от urquan

Тебе к maxima прямая дорога, но поверь мне, там до сих пор машинные флоаты/big флоаты/символьные выкрутасы очень сильно сбивают с толку.

+ некоторое млядство с ветвлением и итерацией через do

+ много млядства с мешаниной из матриц, 3х типов массивов, списков и матриц.

Но я её всё равно люблю.

anonymous ()

созданного для математических вычислений, но также эффективного и для написания программ общего назначения

И чтец, и жнец...

Sociopsih ★☆ ()
Ответ на: комментарий от GoodRiddance

Я пишу нечто большое (2.5MLOC только одна подсистема) на динамическом (Erlang). Так что про боль динамической типизации что-то могу рассказать.

Это какая-то ошибка. Проблема не в Erlang скорее всего.
FFmpeg, 1 MLOC.
Erlang минималистичный, разрабатывался с определённой моделью в уме. Мало типов, и все они специально подобранны.

tp_for_my_bunghole ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.