LINUX.ORG.RU

Релиз языка Julia 1.0

 , ,


5

7

Спустя 9 лет активной разработки, свет увидел язык для инженерных и технических вычислений Julia 1.0!

Авторы языка многие годы работали с такими языками, как R, Matlab, Fortran и Python. Каждый язык, по мнению авторов, имел свои изъяны и недостатки, вследствие чего было решено разработать современный универсальный специализированный язык, который заменит все вышеперечисленные языки в инженерно-технических вычислениях.

Особенности языка:

  • Гибридная типизация с возможностью явно указывать типы.
  • Несмотря на нестатическую типизацию, имеет мощные средства для работы с типами. Например, два типа можно объединить в составной тип.
  • Имеет JIT-компилятор, который компилируется в LLVM-представление и далее в машинный код.
  • Вместо ООП используется множественная диспетчеризация, как более продвинутый механизм.
  • Простой и легкий вызов функций языка Си.
  • Поддержка многоядерности, в отличие от R, который всегда работает в одном потоке и использует одно ядро.
  • Поддержка модулей в стиле Python.
  • Макросы и метапрограммирование. Писать программы, создающие другие программы ― легко и просто!
  • Поддержка векторизации.
  • Свой пакетный менеджер.

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

★★

Проверено: jollheef ()

Со дня первого релиза julia в 2012, не прекращаются споры о том, стоит ли выдумывать новый язык, или лучше запилить компилятор для питона. Аргумент создателей julia: запилить нормальный компилятор для питона на данном этапе настолько же сложно, как и выдумать новый язык, так что уж лучше выдумать новый язык, а заодно и все косяки исправить.

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

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

Параметричность не имеет отношения к этому.

Тут всё есть https://docs.julialang.org/en/latest

Я оттуда и цитировал.

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

Параметричность не имеет отношения к этому.

Имеет прямое отношение.

Я оттуда и цитировал.

А ты не цитируй. Ты лучше вникни в секции «Types» и «Methods».

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

Параметричность не имеет отношения к этому.

Имеет прямое отношение.

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

Я оттуда и цитировал.

А ты не цитируй.

Я цитировал, чтобы лучше понять тебя. Похоже, это был напрасный труд.

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

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

Ну вот я тебе это сказал. Понятно надеюсь?

Я цитировал, чтобы лучше понять тебя.

Интересный подход к пониманию. Для понимания не цитировать нужно, а доки проботанить. Или тебе что, здесь в форуме всё пересказать нужно?

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

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

Ну вот я тебе это сказал. Понятно надеюсь?

Понятно. Непонятно, почему твои слова должны иметь вес. Ты разработчик Julia?

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

Непонятно, почему твои слова должны иметь вес.

Потому что я документацию осилил, в отличии от.. Джва раза перечитывать пришлось, чтобы вникнуть, в чём собственно фишка.

Ты разработчик Julia?

Нет. Но вижу отличную замену питону и может быть даже фортрану для моей работы.

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

Макросы и метапрограммирование. Писать программы, создающие другие программы ― легко и просто!

Зачем это нужно в числодробилке?

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

Тут всё есть https://docs.julialang.org/en/latest

Прокурил. И теперь понимаю, почему тред про индексацию.

Долго, конечно, доходят удобные языковые конструкции до мейнстрима. По Julia это хорошо видно. Авторы настолько были увлечены множественной диспетчеризацией, что сделали объекты, как в Common Lisp или R. А про AlgDT с PM опять забыли. Да и иерархии объектов никакой, стыдоба.

В части системы типов доки скудные. Про вывод типов ничего. Про параметрические типы почти ничего. Про контра-/ковариантность два слова.

Язык явно обречён на успех.

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

Это в детском саду для умственно отсталых разве что.

И на другой планете.

Использую одновременно python и например fortran, про off by one никогда не слышал.

Коллега недавно переписывал один мой алгоритм с матлаба на питон. Баг «off by one» не меньше трёх раз встретился. Два из них, причём, тестами не отловились, а только постфактум выявились в частных неочевидных случаях.

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

Что можно сделать макросами, чего нельзя сделать функциями?

Ничего. Макровызовы раскрываются в вызовы функций => в принципе не могут делать чего-то сверх их возможностей.

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

Макросы — это функции над AST. Вопрос лишён содержания, анон.

Ничего. Макровызовы раскрываются в вызовы функций => в принципе не могут делать чего-то сверх их возможностей.

Чтобы писать меньше кода.

Речь о нужности макросов с точки зрения читаемости кода.

В Лиспе макросы привели к куче разных диалектов. В C++ - к шаблонам. Это помимо макропроцессора, доставшегося в наследство от С.

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

Или нет?

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

Кстати, в Британии тоже found floor. Вроде в школе рассказывают, а как приедешь - смущает поначалу сильно. Может как раз потому, англичане считают правильно с нуля, они и изобрели компьютер?

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

С точки зрения читаемости кода макросы позволяют:

1. Не писать нудный однообразный бойлерплейт

2. Не читать нудный однообразный бойлерплейт

3. Заниматься чорной магией.

Нужно это вам или нет решайте сами.

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

Есть подозрение, что злоупотребление макросами довольно быстро приводит к какой-то нечитаемой ерунде.

Злоупотребление оно потому и злоупотребление, что довольно быстро приводит к какой-то ерунде. И не важно, чем именно злоупотребление.

Так что, это у вас аргумент против злоупотреблений, а не против макросов.

Ну и, конечно же, давать гранату макакам, безусловно, довольно безрассудный ход.

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

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

да, жесть

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

А у нас в матане последовательности с нуля нумеровались...

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

На самом деле в некоторых случаях используют и 0 (даже если не относят к натуральным), например, при описании вещественного числа, где {a_0} - целая часть вещественного числа, а ряд чисел составляющих дробную часть нумеруется в этом случае с 1.

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

Не только «психиатр» и «юрист», но ещё и личные данные сливает. Едва ли удастся найти более говнистой гнилой мерзости среди модераторов ресурса, чем этот персонаж.

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

Там вся линейная алгебра это BLAS и LINPACK. Так же другие библиотеки на Си и фортране вызываются из julia без всякого гемороя, как утверждают создатели.

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

Для меня Python это удобный и простой скриптовый интерфейс к библиотекам numpy и scipy. И не надо здесь ничего мудрить.

Для любителей Matlab платный, и на embedded платформу его не поставишь, в отличие от питона.

Единственное чего в Питоне не хватает - это заюзать GPU

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

угу, но так как в случае ряд формируется как выражение чисел в группе, то нумерации элементов чего-то при счёте, этот подход явно не подразумевает начинать с нуля.

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

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

да и BLAS с LINPACK всю линейку не описывают, нужен еще SPARSEPACK )

Slackware_user ★★★★★ ()