Опубликован (https://github.com/JuliaLang/julia/releases/tag/v1.1.0) релиз языка программирования Julia 1.1 (https://julialang.org), сочетающего такие качества как высокая производительность, поддержка динамической типизации и встроенные средства для параллельного программирования. Синтаксис Julia близок к MATLAB с заимствованием некоторых элементов из Ruby и Lisp. Метод манипуляции строками напоминает Perl. Код проекта распространяется (https://github.com/JuliaLang/julia) под лицензией MIT.
В новой версии (https://github.com/JuliaLang/julia/blob/v1.1.0/NEWS.md) переработана обработка исключений - отдельный стек исключений теперь предоставляется для каждой задачи и может быть разобран при помощи функции "Base.catch_stack". Добавлен экспериментальный макрос
"Base.@locals" для доступа к параметрам текущей локали. Реализован оператор ".~ (https://github.com/JuliaLang/julia/issues/30341)". Ужесточён разбор списков, заканчивающихся на запятую. В стандартную библиотеку добавлена подборка новых функций и расширены многие существующие функции.
Ключевые особенности языка:- Высокая (https://julialang.org/benchmarks/) производительность: одной из ключевых целей проекта является достижение производительности близкой к программам на языке Си. Компилятор Julia основан на наработках проекта LLVM и генерирует эффективный нативный машинный код для многих целевых платформ;
- Поддержка различных парадигм программирования, включая элементы объектно-ориентированного и функционального программирования. Стандартная библиотека предоставляет в том числе функции для асинхронного ввода/вывода, управления процессами, ведения логов, профилирования и управления пакетами;- Динамическая типизация: язык не требует явного определения типов для переменных по аналогии со скриптовыми языками программирования. Поддерживается интерактивный режим работы;
- Опциональная возможность явного указания типов;
- Синтаксис, превосходно подходящий для численных вычислений, научных расчётов, систем машинного обучения и визуализации данных. Поддержка многих числовых типов данных и средства для распараллеливания вычислений.
- Возможность прямого вызова функций из библиотек на языке Си без дополнительных прослоек.
URL: https://github.com/JuliaLang/julia/releases/tag/v1.1.0
Новость: https://www.opennet.me/opennews/art.shtml?num=50039
> Синтаксис Julia близок к MATLAB с заимствованием некоторых элементов из Ruby и Lisp. Метод манипуляции строками напоминает Perl.Не зря назвали женским именем
https://venturebeat.com/2019/01/29/hackerrank-developer-skil.../
Опять динамическая хренотень. Даже распоследние нпм-лефтпадчики и пихонисты сообразили, что динамическость - зло
Статическая типизация не нужна.
Здравствуйте, undefined. Согласен с вашей мыслью касательно [object Object].
undefined значит что значение никто не присваивал, null значит что я явно присвоил что значения нет. А в вашем статическом C++ не присовенной переменной присваивается случайное значение. Какого размера должна была быть дыра в башке разработчика чтобы придумать такое поведение комилятора.
А еще лучше когда андефайнеда и null-значения вообще не предусмотрено.
Языки о которых ты говоришь не нужны.
Знаете африканцы различают 1 вид снега, а полярники более 11 видов.
Африканцы различают 7 видов песка, а полярники 1.Я это к тому, что Вы если полярник так и пишите на своем типизированном языке,
а там где нужно людям быстро навять что-то на JavaScript ну и зачем Вы их обижаете
они умеют прототипировать что-то там себе на своих языках ...Все нужны и все пригодяться ;)
Ага то то я смотрю все на TypeScript переписывают с динамического JS.
Исправил, не благодарите.> Я это к тому, что Вы если полярник так и пишите на своем типизированном языке, а если африканец - то на своем динамическом. Но если же вам обоим надо поковыряться в гoвне, то JavaScript к вашим услугам.
> в вашем статическом C++ не присовенной переменной
> присваивается случайное значение.Нет.
std::string str;
предыдущий оратор знаком с javascript и как бы намекает что без типизации в гробу он видал отлавливать дурацкие ошибки с типами в рантайме
Судя по тому что он написал ничего он про него не знает. Проверять типы тебе никто не мешает даже в чистом джаваскрипте. Если ваши руки растут не из того места вам вообще к компьютеру лучше не подходить.
Все правильно. И эти умельцы в кавычках пытаются свои привычки из С++/Java перетащить на JS, не разобравшись в нем и не изучив (скобки-то ведь похожи!). Вот так и появляются поделия а-ля TypeScript ("подарок" от нашей любимой Microsoft"
Тайпскрипт - лучшее, что случилось с джаваскриптом за последние десять, если не больше лет.
Это лучше вам не подходить в компьютеру и уж явно не программировать если вы не понимаете что когда используется динамическая типизация типы не играю роли, проверка идет по интерфейсу. Исли интерфейс совместим то тип нам не важен, а городить костыли с проверкой это совсем васей нужно быть.
> проверка идет по интерфейсуВы уверены? Что там по интерфейсу идёт какая-то проверка? :-)
> не присовенной переменной присваивается случайное значениеЭэээ... а вы как-то используете значение переменной до того, как ей что-то присвоили?
>> не присовенной переменной присваивается случайное значение
> Ээээ... а вы как-то используете значение переменной до того, как ей что-то
> присвоили?Дебиановский 'return 4;' openssl fail-о-fix как раз такое "использование"... сломал.
Смотри же -- в каждом твоём компе[I]!
Смотри на букву С++
julia> function test(x,y)
if x < y
relation = "less than"
elseif x == y
relation = "equal to"
end
println("x is ", relation, " y.")
end
test (generic function with 1 method)julia> test(1,2)
x is less than y.julia> test(2,1)
ERROR: UndefVarError: relation not defined
Stacktrace:
[1] test(::Int64, ::Int64) at ./none:7
Опасный код!function test(x,y)
local relation::String =
if x < y
"less than"
elseif x == y
"equal to"
end
println("x is ", relation, " y.")
endjulia> test(2,1)
ERROR: LoadError: MethodError: Cannot `convert` an object of type Nothing to an object of type String
Впрочем, в этом случае, сразу видно, что что-то не то происходит. Нехватка альтернативной ветви проявляется в несоответствии типов
Ну вот а нам рассказывали что обезьяны не могут программы писать.
> Ну вот а нам рассказывали что обезьяны не могут программы писать.Надо полагать, они ещё и комментарии оставлять умеют?
Не обижайся анонимка, просто смени профессию если тебя удивляют ошибки в твоем коде выше, программирование это явно не твое.
> Впрочем, в этом случае, сразу видно, что что-то не то происходит. Нехватка
> альтернативной ветви проявляется в несоответствии типовЭто пример из руководства. Транслятору тоже могло быть "сразу видно".
Ну... молодец, чо...
И это язык виноват?
> Ну... молодец, чо...
> И это язык виноват?У написавшего исходное "в ... статическом C++ не присовенной переменной присваивается случайное значение" -- виноват, очевидно, язык.
julia> function test(x,y)
if x < y
relation = "less than"
elseif x == y
relation = "equal to"
end
println("x is ", relation, " y.")
end
test (generic function with 1 method)
julia> test(1,2)
x is less than y.julia> test(2,1)
ERROR: UndefVarError: relation not defined
Stacktrace:
[1] test(::Int64, ::Int64) at ./none:7
этот код чем то на питон смахивает)) или все взялись брать с него пример и готовить свои смеси?))
> этот код чем то на питон смахивает)) или все взялись брать с него пример и готовить свои смеси?))Одна из задач Julia - перетащить питонистов. Потому, безусловно, там много конструкций, похожих на питон. Но там и от Ruby много чего. Например, map с блоком. А также возврат последней операции без необходимости писать return.
вот это и удивило. ни разу на julia внимание не обращал, а тут раз и знакомый тип кода. но и отличий много. даже по этому куску кода. это я так понимаю всех поразила в последнее время болезнь создания языков? их уже столько, что путаешься. хотя мне кажется чистый Си из компилируемых и питон из интерпретируемых уже более чем достаточно. этот смотрю пытается отхватить "широкую" аудиторию.))
разработчик С++ взялся за разработку D. другие rust. развели зверинец))
> чистый Си
> и Lisp
> уже более чем достаточноНе прижилась идея.
Julia ориентирована на область математики. Питон по синтаксису сильно проще, чем R, который там долго использовался. Но питон ужасен с точки зрения производительности и качества дальнейшей поддержки кода. А, поскольку Julia-сервисы реально получаются быстрыми, нет необходимости использовать ни питон, ни С.При всём при этом, Julia довольно простой язык с синтаксисом, гораздо прозрачнее, чем питон.
> то я так понимаю всех поразила в последнее время болезнь создания языков?Угу, как только появилось то, где они нужны.
> хотя мне кажется чистый Си из компилируемых и питон из интерпретируемых уже более чем достаточно
А кому-то кажется что достаточно одного функционального и одного императивного. А кому-то Perl и C. А кому-то Ruby и Rust. А кому-то Haskell и всё. Ну я продолжать не буду, направление улавливаешь? Иногда граждане, которые видят архитектурные просчёты существующих языков считают, что могут их избежать.
> развели зверинец))
как будто что-то плохое. просто корми тех зверушек, что интересны лично тебе - а там будем посмотреть.
разработчик С++ перешел на разработку D, тоже полагая, что сможет создать язык лишенный недостатков прежнего. Но что то мне подсказывает, что наступят на те же грабли. как говорится хороший инструмент не может быть "всеядным". так и языки должны специализироваться на своей стезе полагаю. тогда можно будет создать язык "идеальный" для своей области.
> разработчик С++ перешел на разработку D, тоже полагая, что сможет создать язык
> лишенный недостатков прежнего. Но что то мне подсказывает, что наступят на
> те же грабли.Недостатков прежнего он таки лишён. Но понятное дело не лишён их совсем.
> как говорится хороший инструмент не может быть "всеядным". так и языки должны специализироваться на своей стезе полагаю.
очень может быть. но пока непонятно, куда вы клоните. типа стезя C++ занята?
> тогда можно будет создать язык "идеальный" для своей области.
у любого инструмента кроме непосредственно рабочих характеристик есть и другие характеристики, кому-то и когда-то важные. они могут быть неожиданными. вес (если нести в поход), способность убирать острые части, прорезиненая рукоять, элементы крепления, ремонтопригодность, скорость смены сменных частей да вплоть до цвета (искать оранжевый инструмент в траве проще) и плавучести.
как будем считать - если кому-то нужны плоскогубцы складные, а кому-то оранжевые, плавучие и скреплением к поясу - это уже разные области или ещё нет (это всё же плоскогубцы)? ну и у языков тоже есть разные неожиданные характеристики: скорость обучения, вариативность достижения задачи, навязывание (или нет) "паттернов хорошего программирования", например. и может статься, что нуб, пришедший в язык А и даже в итоге перешедший на язык Б развивался бы медленнее без "промежуточной ступени", а то и вовсе бы бросил это гиблое дело. Так что пусть будет хоть даже и некоторый избыток языков.
> а тут раз и знакомый тип кода.И это тоже. //см.ниже
>это я так понимаю всех поразила
> в последнее время болезнь создания языков? их уже столько, что путаешься.Это вы путеетесь.
А Настоящие Профессиональне Программисты слушали в вузах своих курс "конструирования компиляторов". Теперь они _думают_, что их научили писать компиляторы (а не CS-у?~), что они умеют писать компиляторы, и что они могут писать компиляторы.
Поэтому многие из них этим и занимаютя "в свободную минутку".
Причём бОльшая часть не хочет разбираться в чужих, поэтому пишет свои новые-оригинальные.
C++ далеко не образец статической типизации, он весьма слабоват в этом плане.
Вроде ж неопределённое поведение. Т.е. там и случайное значение может быть и зануленное и вообще что угодно - что захочет компилятор, лишь бы ему было эффективнее. Хочешь платить оверхедом каждый раз получая значение переменной, чтобы избежать полтора случая и то по глупости?
Но там ей ничего не присваивается. Как вам такой поворот головы? >:-)
Самые маленькие кодеры не знают, что у процессорных регистров нет значения null и undef! :)
В Julia имеется типизация на аргументы функций и возвращаемые значения. Можно не декларировать, но тогда жалобы на прроизводительность не принимаются
Числодробилки без статической типизации приводят к всемирному потеплению.
Более того динамические интерпретируемые языки особенно, которые много и часто запускают на интерпретацию так же приводят к потеплению. В целом все приводит к потеплению, а это в свою очередь к тепловой смерти всееленной, но вот когда это произойдет?
И озеленению Сахары. Так выпьем же за диалектику!
> Числодробилки без статической типизации приводят к всемирному потеплению.Ок. А какое отношение к сабжу имеет это высказывание?
Можно указывать типы, через двоеточие, даже128-битный есть
Познакомился недавно - красивая, современная и без лишних заскоков
Поковыряв её полгода с момента выпуска версии 1.0, могу сказать, что для ML-щиков она должна стать приоритетом номер один. Альтернативный питоноский вариант в любом случае требует две версии - одну под ML, вторую - под production на непитоне. В Julia можно обходиться одной реализацией. Если в компании много лишних денег - можно писать на питоне. Если нет, лучше на Julia.
Как там с привязками к С библиотекам? Асинхронность? Производительность списков?
Производительность обратных вызовов? Наличие GIL?
> Как там с привязками к С библиотекамЗамечательно. А также вызов питон, матлаб и R-кода. Впрочем, в случае последних, есть ограничения на их библиотеки, тянущие очередную порцию C/C++ и прочих библиотек.
> Асинхронность?
заложена на уровне языка. Как и управление кластером из Джулий на разных машинах.
> Производительность списков?
https://julialang.org/benchmarks/
> Производительность обратных вызовов?
У неё две сущности. Функция и макрос. И обе максимально оптимизированы.
Лямбды сводятся к обычным функциям. Полиморфизм реализован на уровне функций с разными аргументами.> Наличие GIL?
отсутствует
Зачем привязки к си-либам, когда можно использовать язык, где си - родное?
Хорошо, если она стала надежной.
Мне рассказывали истории, как попытки применить ее 24/7 обламывались по причине острой течки.
> Мне рассказывали истории, как попытки применить ее 24/7 обламывались по причине острой течки.Это на каких версиях было? У нас веб-сервис крутится под 1.0. Не течет.
блин ты прям как идеальную девушку описываешь)))
Lua можно очень легко использовать прямо в Vala через объект LuaVM, вот бы также было в Julia.
NA уже научили поддерживать?
Есть встраиваемый в код?
тут тебе и маргинальные begin-end, и победное количество скобок на строчку кода...и матлаб с перлом...и функции через точку...привет от 1С ?
> тут тебе и маргинальные begin-end,Обзывать (скорее всего) самую узнаваемую часть синтаксиса ISWIM/Algol-like ЯП "маргинальщиной" … довольно инновативно.
А, ну конечно, кто ж щас на алголе-то не пишет!
Насчёт скобок зря, в ней есть композиция функций. Например, округление с приведением к типу вглядит как-то так
(Int32 ∘ round).(some_float);
а ещё в ней есть pipe. Например, взять массив, отсортировать и что-нибудь с ним сделать, можно:[3,1,2] |> sort |> arr -> map(x -> x^2, arr)
Функция через точку - это применение функции к каждому элементу (перечислителя). Запомнить довольно просто.
То есть map функция — это просто точка?
julia> a = [-1, -2, -4]
3-element Array{Int64,1}:
-1
-2
-4
julia> b = abs(a)
ERROR: MethodError: no method matching abs(::Array{Int64,1})
julia> b = abs.(a)
3-element Array{Int64,1}:
1
2
4
> julia> b = abs.(a)Действительно. В любом другом языке это было бы без специального синтаксиса
> map(abs, a)или
> a.map(abs)
> a.map(abs)map(abs, a) для Julia. Но можно же и не писать map.
begin-end маргинальщина, как тогда выделить блоки кода? Давайте свой вариант чтоб прямо ух ))
А я качусь с неё на раст, доволен, как слон.
Слабо верится, что Rust станет популярен у ML-льщиков.
Вообще Rust -- попытка сделать ML с сишным синтаксисом. Как и другие подобные попытки (BitC) -- не очень удачная
В этом смысле, Julia - весьма неплохая реализация языка под ML. Она совсем не C-подобная.
И все равно понятна даже заядлому любителю C, в отличии от Rust.
А можно вопрос? Этот самый BitC где-то пощупать можно? А то исхдники совсем уж древнего Cyclone (попытка создать типобезопасный C 2000 года) на GitHub лежит и с помощью такой-то матери даже скомпилировать и запустить можно. А тут вообще не вижу следа открытия исходников, только спецификацию.
Есть https://github.com/repos-bitc/bitc
Сам проект самоустранился где-то в 2008-м году.
> Есть https://github.com/repos-bitc/bitc
> Сам проект самоустранился где-то в 2008-м году.Спасибо
Первый оратор подразумевал Machine Learning, тогда как второй ML язык Милнера. Лучше уточняйте, пока вообще шизофазия не пошла
Если бы они ещё LLVM 6.0 не патчили! Ну и 4+ месяца назад вышел LLVM 7.0.
Кто пробовал, голову пытается съесть?
Julia - простая до безобразия. Сложности начинаются, когда надо срочно какой-нибудь scikit-learn-код с питона переписать. Тогда приходится рыться в различных библиотеках, а их много....
Если переносишь готовый проект, то отсчёт индексом массивов с 1 включительно уже съест тебе мозг. Потом его будет подтачивать отсутствие элементарной иде с проверкой синтаксиса и очепяток, которое, вероятно, невозможно из-за невероятно долгой компиляции (в атоме не работает даже "go to declaration"). В расте это всё есть даже в плагине для вима.
В ней есть также то, за что мы так не любим питон - объявление переменной в любом месте в любое время. Если ты опечатался, то это, вуа-ля, новая переменная. И не факт, что при компиляции вывалится ошибка. А если и есть ошибки, то видны они только во время компиляции или выполнения, для чего, опять же, нужно п_о_д_о_ж_д_а_т_ь.
Не всё так плохо. К ней надо приноровиться. Но когда работаешь в Atom, он даже индексы хэша может подсказывать, когда начинаешь кавычки набирать. А лишние переменные, во-первых надо объявлять локальные как local. Во-вторых, если ошибся, они начинают светиться в workspace от Atom. Плюс, надо разбивать код на мини-тесты. Тогда прямо из Атома можно выделить один из них и запустить в уже загруженном системном окружении.
https://julialang.org/blog/2019/01/fluxdiffeq - см. анимированные картинки с иллюстрацией как в Atom/Julia контролировать процесс обучения нейросети.
Но мой папа не любит эти модные приколы, Только чистый Си, по заветам старой школы.
> Только чистый Си, по заветам старой школы.Если он действительно старой школы, то должен знать Фортран. А вот с ним у Julia много общего. Включая нумерацию индексов массивов и упаковку памяти в матрицах по колонкам.
>> Только чистый Си, по заветам старой школы.
> Если он действительно старой школы, то должен знать Фортран.Да не, это псевдо-ИТшный стишок-песня:
...
C++ или C# - это юнцам по вкусу.
За решёткой есть жизнь, и на кладбище есть плюсы,
Но мой папа не любит эти модные приколы,
Только чистый Си, по заветам старой школы.
...
Поставить в один ряд плюсы (которые существуют еще с начала 80-х) и с-шарп …
Ну и "чистый Си" в "старой школе" (когда до середины 2000х были регулярные эпичные срач^W кидания этим-самым по поводу asm vs c) тоже еще тот перл ;)
https://www.youtube.com/watch?v=cdX8r3ZSzN4 неплохо так.
Пока в Велорибо создавали сборку проекта в Велобаджо уже сделали MVP.
>Компилятор Julia основан на наработках проекта LLVM и генерирует эффективный нативный машинный код для многих целевых платформ;Компилятор Julia основан на наработках проекта LLVM и генерирует эффективный машинный код, РОДНОЙ для многих целевых платформ;
Что русский язык в школе не учил?
Не надо умничать. Там сверху есть кнопка "исправить"
Судя по пунктуации, русский язык вам самому вряд ли родной. А вот код именно что нативный.
> РОДНОЙ для многих целевых платформ;Учите матчасть и терминологию:
https://ru.wikipedia.org/wiki/%D0%9C%D0%...
"Машинный код иногда называют нативным кодом, когда говорят о платформенно-зависимых частях языка или библиотек"
Не вижу стартапов, митапов, конф о саксесс стори на хабре :(
А почему они там должны быть, если это такая числодробилка для физиков? Собственно одна из первых статией про Юлию на хабре вот https://habr.com/ru/post/210298/ и это перевод вот этого http://www.evanmiller.org/ аспиранта.
Для саксесс стори на хабре она слишком молода. Полгода с первого релиза.Думаю, что к лету появятся.
Как обстоят дела с отладчиком? Уже завезли в первую версию, или все ещё нужно отлаживать в уме?
> Как обстоят дела с отладчиком?пошагового нет
> Уже завезли в первую версию, или все ещё нужно отлаживать в уме?
По желанию.
Вообще, есть Atom с возможностью построчно запускать код и видеть результат. Кроме того, отладочный вывод никто не отменял. Классический вариант отладки работает всегда.
> пошагового нетЭто плохо. До Матлаба Джулии еще долго. Даже до такой его инкарнации как Octave.
> Вообще, есть Atom с возможностью построчно запускать код и видеть результат.
Спасибо, не надо. Я лучше продолжу делать прототипы в Октаве и потом переписывать на Си++. И там и там отладчики имеются и причем очень качественные.
>> пошагового нет
> Это плохо. До Матлаба Джулии еще долго. Даже до такой его инкарнации как Octave.Это, реально, лишь вопрос привычки и предыдущего программистского опыта. После отладки встраиваемых устройств через COM-консольку, мне лично, это совсем проблемой не кажется.
К тому же, они работают в этом направлении. Поэтому, рассматривая выбирая между написанием прототипа на одном и прода на другом языке, и реализацией на одном единственном языке одной единой версии, мне лично, больше подходит второй вариант.
Что такое COM-консолька я не знаю, но для отладки ПО для встраиваемых устройств вполне подойдет GDB, так что мазохизмом с printf-ми там можно и не заниматься. Касаемо Джулии. Допустим нужно разобраться как работает, какая ни-будь сложная рекуррентная нейронная сеть. И как это сделать без отладчика? Там полно многомерных тензоров, матриц. Конечно может какой-то гений от программирования наверное и способен понимать просто глядя на код, но я таковым не являюсь поэтому использую отладчик. Еще момент, где вы видели, чтобы Джулия использовалась в продакшене?
>Что такое COM-консолька я не знаюRS232. Ничего, кроме вывода и ввода она не поддерживает.
> Допустим нужно разобраться как работает, какая ни-будь сложная рекуррентная нейронная сеть.
https://julialang.org/blog/2019/01/fluxdiffeq
> И как это сделать без отладчика?
"Отладчик" != "пошаговый отладчик" !!!. Отладчик для Julia есть.
> Еще момент, где вы видели, чтобы Джулия использовалась в продакшене?
Сам начал использовать.
> Сам начал использовать.Поздравляю. Потащили в продакшен недоделанную сырую вещь.
> Поздравляю. Потащили в продакшен недоделанную сырую вещь.С чего такое заключение? Если я пишу один, то "сырая вещь", а если нас будет тысяча, то ок?
Если можно будет объявить глобальную переменную с типом, то это будет не сырая вещь.
> Допустим нужно разобраться как работает, какая ни-будь сложная рекуррентная нейронная сеть. И как это сделать без отладчика?А gdb здесь как поможет?
Позволит пройти пошагово и посмотреть нужные значения переменных, размерности тензоров, возможно вызвать какие-ни будь функции и таким образом разобраться как работает код.
Вот уж где точно не пригодится вызов каких-то абстрактных функций, так это в процессе обучения нейросети. Там, кроме распечаток по эпохам, ничего больше не нужно. См. ссылку выше с примером обучения нейросети.
Спасибо, если речь о нейросетях, то я лучше код Кафе посмотрю. Мой заказчик никакую Джулию в продакшен за километр не пустит.
На чем пишут ОС?
Молодёжь пишет ОС на JavaScript и пищит от радости, как дети :)
И микрокод к процам, дети!