The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Опубликован язык программирования Julia 1.11

10.10.2024 21:09

Опубликован релиз языка программирования Julia 1.11, сочетающего такие качества как высокая производительность, поддержка динамической типизации и встроенные средства для параллельного программирования. Синтаксис Julia близок к MATLAB с заимствованием некоторых элементов из Ruby и Lisp. Метод манипуляции строками напоминает Perl. Код проекта распространяется под лицензией MIT.

Ключевые особенности языка:

  • Высокая производительность: одной из ключевых целей проекта является достижение производительности близкой к программам на языке Си. Компилятор Julia основан на наработках проекта LLVM и генерирует эффективный нативный машинный код для многих целевых платформ;
  • Поддержка различных парадигм программирования, включая элементы объектно-ориентированного и функционального программирования. Стандартная библиотека предоставляет в том числе функции для асинхронного ввода/вывода, управления процессами, ведения логов, профилирования и управления пакетами;
  • Динамическая типизация: язык не требует явного определения типов для переменных по аналогии со скриптовыми языками программирования. Поддерживается интерактивный режим работы;
  • Опциональная возможность явного указания типов;
  • Синтаксис, превосходно подходящий для численных вычислений, научных расчётов, систем машинного обучения и визуализации данных. Поддержка многих числовых типов данных и средств для распараллеливания вычислений.
  • Возможность прямого вызова функций из библиотек на языке Си без дополнительных прослоек.



Основные изменения в Julia 1.11:

  • Новые возможности языка
    • Добавлен тип Memory, который является низкоуровневой альтернативой типу Array. Тип Memory требует меньших затрат и имеет быстрый конструктор, являясь при этом альтернативой Array там, где не требуется полный набор его возможностей. Например, многомерные массивы. Во внутренней реализации, большая часть методов типа Array реализована поверх типа Memory, что существенно ускорило некоторые функции, например push.
    • Добавлено ключевое слово "public". Идентификаторы, которые промаркированы как "public", рассматриваются как внешний программный интерфейс. Идентификаторы с ключевым словом "export" рассматриваются похожим образом. Но основное различием между "public" и "export" в том, что имена, помеченные "public", не включаются в контекст модуля при использовании "using" в зависимых модулях.
    • Пакет ScopedValue реализует динамическую область видимости при использовании в параллельном программировании Threads/tasks.
    • Файл Manifest.toml теперь может быть переименован в формате Manifest-v{major}.{minor}.toml для использования конкретной версией Julia. Например, файл Manifest-v1.11.toml будет использован версией 1.11, а файл Manifest.toml в той же директории будет использоваться прочими версиями Julia.
    • Добавлена поддержка Unicode 15.1.
  • Изменения в языке
    • В процессе прекомпиляции обработчик "atexit" запускается до формирования результирующего файла. Это позволяет пользователям безопасно завершать фоновое выполнение (например триггеры по таймеру или периодические оповещения), а также явно высвобождать ресурсы перед завершением программы.
    • Файлы покрытия кода и выделения памяти больше не формируются в процессе прекомпиляции. Кроме того, в этих режимах кэши pkgimage используются для пакетов, которые также не отслеживаются. Это означает, что тесты покрытия (по умолчанию для julia-actions/julia-runtest) используют кэши pkgimage для всех остальных пакетов, от которых зависит тестируемый. Это позволяет ускорить тестирование.
    • Указание пути в JULIA_DEPOT_PATH теперь обрабатывается иначе. При наличии одного пути, только этот путь будет вставлен в значение внутренней переменной DEPOT_PATH. Если последним символом является ":", то переменная DEPOT_PATH получит значение, содержащее всё то, что было указано до ":", а также перечень системных путей, где находится Julia.
    • Файлы кэша предварительной компиляции теперь можно перемещать, а их актуальность теперь проверяется с помощью хеша содержимого исходных файлов, а не с помощью "mtime".
  • Улучшения компилятора/среды выполнения
    • Обновлена эвристика сборщика мусора, позволяющая работать со страницами памяти в целом вместо индивидуальных объектов.
    • Добавлена поддержка аннотирования Base.@assume_effects в коде.
  • Изменения параметров командной строки
    • Точка входа теперь строго определена как Main.main(args). Точка входа должна быть определена макросом @main (см. документацию). Если точка входа задана в скрипте, запускаемом в командной строке (например "julia script.jl или julia -e expr"), julia запустит функцию Main.main автоматически. Это сделано для унификации исполнения скриптов и их компиляции, когда загрузка кода может происходить для компиляции, а выполнение метода Main.main только на этапе запуска исполняемого файла. При использовании Julia в интерактивном режиме изменений нет. Весь код исполняется последовательно. Аргументы "--compiled-modules" и "--pkgimages" могут быть выставлены в режим existing, который заставляет Julia использовать существующие кэши, но не создавать новые.
    • Аргумент "--project" теперь может получать значение @script для указания размещения файла Project.toml относительно запускаемого скрипта. Например "--project=@script/foo" для поддиректории foo. Если ничего не указано, то есть "--project=@script", это будет аналогично "--project=@.", когда файл Project.toml ищется в текущей директории.
  • Многопоточные изменения
    • В макросе Threads.@threads можно указать режим планировщика :greedy, который удобен для неравномерной вычислительной нагрузки. Новая структура (со спецификатором public, но не export) "struct Base.Lockable{T, L<:AbstractLock}" представляет собой обёртку для упорядочивания параллельного доступа к элементам составных типов, в целом упрощая код.
  • Изменения системы сборки
    • Файл Makefile для сборки Julia и LLVM использует стратегии оптимизации PGO и LTO. См. contrib/pgo-lto/Makefile.
  • Новые библиотечные функции
    • Добавлены три новых типа в рамках идеи текста с аннотацией - Pair{Symbol, Any}, например ':lang => "en"' или ':face => :magenta'. Если это возможно, то аннотации сохраняются в процессе операций над строками, например конкатенции.
    • Конкретный тип AnnotatedString реализует AbstractString. Этот тип является обёрткой над строкой, позволяя добавить аннотацию по диапазону символов. Тип AnnotatedString широко используется в новой стандартной библиотеке StyledStrings для отображения информации на экране со стилем.
    • Конкретный тип AnnotatedChar реализует AbstractChar. Является обёрткой над символом и позволяет присоединить список аннотаций к нему.
    • Конкретный тип AnnotatedIOBuffer реализует IO, повторяет интерфейс типа IOBuffer, но имеет специализированные методы read/write для аннотирования потока. Может использоваться как построитель строк или как средство склейки аннотированных и не аннотированных строк.
    • Метод "in!(x, s::AbstractSet)" всегда возвращает true. Но если элемент x не входит в s, то он будет вставлен.
    • Новая функция Libc.mkfifo является обёрткой C-функции mkfifo для Unix платформ.
    • Метод "logrange(start, stop; length)" создаёт логарифмическую последовательность с указанным количеством, вместо фиксированного шага.
    • Методы "copyuntil(out, io, delim)" и "copyline(out, io)" копируют данные из потока io в поток out::IO.
    • Метод "eachrsplit(string, pattern)" возвращает итератор по разбитым элементам строки справа налево.
    • Метод Sys.username() возвращает имя текущего пользователя.
    • Методы Sys.isreadable(), Sys.iswritable() могут быть использованы для определения разрешений пользователя на чтение и запись данных.
    • Метод GC.logging_enabled() возвращает true если журналирование операций сборщика мусора включено через GC.enable_logging.
    • Тип IdSet теперь экспортируется из Base и является общедоступным.
    • Макрос "@time" теперь сообщает значение счётчика конфликтов блокировки, если используется ReentrantLock, который необходимо ожидать. А также добавлен макрос "@lock_conflicts", которые возвращает этот счётчик.
    • Макрос Base.Cartesian.@ncallkw разработан по аналогии с Base.Cartesian.@ncall, но позволяет добавить аргументы в форме ключевых слов для вызова функции.
    • Новая функция Docs.hasdoc(module, symbol) сообщает имеет ли запрошенное имя symbol описания docstring.
    • Новая функция Docs.undocumented_names(module) возвращает имена недокументированных функций запрошенного модуля module.
  • Новые возможности известных методов
    • Метод invmod(n, T) для предопределённого целого типа T теперь вычисляет обратное по модулю целое n по новому алгоритму.
    • Метод invmod(n) предоставляет сокращённую форму вызова invmod(n, typeof(n)) для целых типов.
    • Метод replace(string, pattern...) теперь поддерживает опциональный аргумент IO для возврата значения в поток вместо возврата строки типа String.
    • Новые методы allequal(f, itr) и allunique(f, itr) с аргументом функции-предиката.
    • Метод sizehint!(s, n) теперь поддерживает опцию "shrink", позволяющую отключить отсечку элементов.
    • Передача IOBuffer как аргумента stdout при порождении процессов, теперь работает с полной синхронизацией "wait" или "success", поэтому в Base.BufferStream нет больше необходимости проверки доступности.
    • Метод "closewrite" больше не вызывается автоматически для переданного потока после закрытия процесса. Используйте метод "wait" для процесса, а затем принудительно вызывайте "closewrite". Или используйте форму метода open с функций для автоматической обработки закрытия.
    • Метод "@timed" теперь дополнительно возвращает оценку времени компиляции и перекомпиляции, обусловленной нестабильностью типов.
    • Метод "filter" теперь может работать с NamedTuple.
    • Метод Iterators.cycle(iter, n) запускается на итераторе "iter" фиксированное n число раз.
    • Метод zero(::AbstractArray) применяется рекурсивно, например zero([[1,2],[3,4,5]]) порождает [[0,0],[0,0,0]] вместо генерации ошибки.
    • Метод include_dependency(path; track_content=true) подключает зависимости на основе хэш-значения прекомпилированного кода, а не mtime.
  • Изменения базовой библиотеки
    • Метод write(::IO, ::AbstractArray) используется для рекурсивного вызова методов "write" для каждого элемента массива, но теперь записывается представление в памяти каждого значения. Например, вызов write(io, 'a':'b') запишет 4 байта каждого символа, вместо сокращенного представления UTF-8 для каждого из них. Новый формат совместим с Array, делая возможным использовать метод "read!" для обратного чтения значений.
    • Невозможно определить метод "length" для итераторов с состоянием в общем виде. В связи с потенциально некорректной работой итераторов Stateful, метод length(::Stateful) удалён.
    • StyledStrings
      • Новая стандартная библиотека для стилевого представления строк.
      • Структура Faces является контейнером стилевой информации (цвет, декораторы и пр.), а также предоставляет каркас удобного, расширяемого (via addface!), и адаптируемого (с применением пользовательских Faces.toml и loadfaces!) подхода к отображению содержимого со стилями.
      • Макрос @styled_str предоставляет удобный способ создания аннотированных строк AnnotatedString с различными атрибутами-стилями. Например,
        
           StyledStrings.addface!(:orange => StyledStrings.Face(foreground = 0xFF7700))
           styled"{orange:this is orange text}"
        
    • Libdl
      • Новый тип LazyLibrary экспортируется из библиотеки Libdl для создания ленивых цепочек загрузки библиотек, изначально используемых в формате JLL.
    • LinearAlgebra
      • Метод cbrt(::AbstractMatrix{<:Real}) теперь возвращает матрицу действительных значений квадратных корней для входной матрицы действительных значений.
      • Метод вычисления собственных значений "eigvals/eigen(A, bunchkaufman(B)) and eigvals/eigen(A, lu(B))" использует алгоритмы Bunchkaufman (LDL) и LU декомпозиции B, соответственно, для эффективного вычисления обобщённых собственных значений (eigen: и eigenvectors) от A и B. Вторым аргументом метода передаётся результат методов bunchkaufman или lu.
      • Специализированный метод "eigvals/eigen(::Hermitian{<:Tridiagonal})", который предназначен для симметричных тридиагональных матриц и использует средства LAPACK.
      • Структурированные матрицы теперь сохраняют оси родительских(для Symmetric/Hermitian/AbstractTriangular/UpperHessenberg), либо оси главных диагоналей (для ленточных матриц).
      • Методы bunchkaufman и bunchkaufman! теперь определены для типов AbstractFloat, Rational и их комплексных вариаций. Метод bunchkaufman теперь поддерживает типы Integer, внутренне преобразуя их к Rational{BigInt}. Добавлена функция inertia, которая вычисляет инерцию диагонального фактора процедуры BunchKaufman для объекта действительной симметричной или Эрмитовой матрицы. Для комплексных симметричных матриц, метод inertia только вычисляет количество собственных значений диагонального фактора.
      • Пакеты, который определяют метод матричного умножения mul! с сигнатурой mul!(::AbstractMatrix, ::MyMatrix, ::AbstractMatrix, ::Number, ::Number) больше не будут иметь неоднозначность, взаимодействуя с пакетом LinearAlgebra. Ранее при умножении возникали неоднозначности между пользовательским типом матрицы MyMatrix и структурированными матрицами, предоставляемыми пакетом LinearAlgebra, например AbstractTriangular. Подобные проблемы устранены для операций mul! с типами матрица-вектор.
      • Методы lu и issuccess(::LU) теперь поддерживают аргумент allowsingular. Если он имеет значение true, допустимая факторизация с фактором U с недостаточным рангом будет считаться успешной, а не выдавать ошибку. Такие факторизации теперь отображаются путем печати множителей вместе с пометкой "rank-deficient", а не сообщения "Failed Factorization".
    • Random
      • Метод rand теперь применим для типов, переданных в форме Tuple.
      • Метод rand теперь применим для типов, переданных в Pair.
      • Для начального запуска генератора случайных чисел RNG модуля Random теперь можно использовать отрицательные числа.
      • Инициализация генератора случайных чисел теперь может быть выполнена строкой, например seed!(rng, "a random seed").
    • REPL
      • Нажатие на клавишу Tab для завершения подсказки теперь подсвечивается светлым шрифтом. Для выключения этого режима примените Base.active_repl.options.hint_tab_completes = false интерактивно или в скрипте startup.jl:
        
         if VERSION >= v"1.11.0-0"
          atreplinit() do repl
              repl.options.hint_tab_completes = false
          end
        end
        
      • Meta-M с пустым приглашением теперь переключает контекстный модуль между предыдущим неосновным контекстным модулем и основным, упрощая переключение туда и обратно.
    • Dates
      • Недокументированная функция adjust больше не экспортируется, но задокументирована.
    • Statistics
      • Пакет Statistics теперь является обновляемым без всего комплекта Julia.
    • Distributed
      • Метод pmap теперь использует по-умолчанию CachingPool.
  • Устаревшие и удалённые методы
    • Методы Base.map, Iterators.map, и foreach с единственным аргументом больше не поддерживаются.
  • Внешние зависимости
    • Библиотека libuv обновлена с версии 1.44.2 до 1.48.0.
    • Метод tput больше не используется для проверки возможностей терминала. Он заменён средствами разбора terminfo, реализованными полностью на Julia.
    • Terminfo используется по умолчанию. Если в системе он отсутствует, то Julia может быть собрана с опцией Makefile WITH_TERMINFO=0.
  • Улучшения инструментов
    • CI теперь выполняет ограниченную автоматическую проверку типов во всех запросах слияния.


  1. Главная ссылка к новости (https://julialang.org/blog/202...)
  2. OpenNews: Выпуск языка программирования Julia 1.10
  3. OpenNews: Новый открытый динамический язык программирования Julia, использующий наработки проекта LLVM
  4. OpenNews: Выпуск языка программирования Zig 0.11.0
  5. OpenNews: Релиз языка программирования Nim 2.0
  6. OpenNews: Выпуск языка программирования Crystal 1.6
Автор новости: Аноним
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62026-julia
Ключевые слова: julia
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (78) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, corvuscor (ok), 21:40, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хороший, годный язык.
    Жаль только, что на RISC-V не хотят портировать.
     
     
  • 2.2, Аноним (2), 21:48, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Экзотика пока ещё RISC-V. Тем не менее, народ ковыряется - https://discourse.julialang.org/t/julia-installation-on-risc-v-build-failing-a
     
  • 2.39, Подпынявый Швайнокарась (?), 06:30, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +9 +/
    > Жаль только, что на RISC-V не хотят портировать.

    Потому что никто не будет делать научные расчёты на одноплатниках с производительностью четвёртого пня.

     
     
  • 3.52, Аноним (52), 09:52, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Так RISC-V в перспективе это ещё и суперкомпьютеры
     
  • 3.61, corvuscor (ok), 10:35, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ох, коллега!
    Давайте вы мне не будете рассказывать, чем я буду заниматься, а чем нет.
    А то как-то неудобно выходит.
     
  • 2.93, Аноним (93), 22:51, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Да и на расте переписывать никто не спешит. Сразу видно - очередное нинужно эта ваша Julia.
     

  • 1.3, Филимон Любопытный (?), 22:04, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто-нибудь знает почему на FreeBSD Julia не собирается из портов и как это исправить ?
     
     
  • 2.5, Аноним (2), 22:18, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вообще-то вот инструкция - https://docs.julialang.org/en/v1/devdocs/build/freebsd/. Если не работает, имеет смысл открыть issue на гитхабе.
     

  • 1.6, Самый Лучший Гусь (?), 22:36, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Довольно сложный язык много подводных камней и непоняток
     
     
  • 2.8, Аноним (-), 22:47, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как язык Julia очень проста. Синтаксис за вечер можно освоить. Сложности могут быть с написанием макросов, но они начинающим не нужны. И есть очевидные сложности изучения новых библиотек.
     
     
  • 3.54, Аноним (54), 10:04, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Джулию не понимает чатгпт, поэтому сложна. И на курсах от скилбрейнс не преподают. Это чтобы её выучить надо книги читать, а не видео смотреть - вкатун такое не выучит.
     
     
  • 4.60, Аноним (2), 10:32, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Чатгпт понимает. Могут быть некоторые проблемы, если задача касается библиотек, где сильно меняли API, но в целом, работает. Причём, были даже наблюдения, что генерируемый на Julia код в целом правильнее, чем на Питоне (сказывается, что на Джулии студенты и школьники свои поделки на гитхаб не выкладывают).
     
     
  • 5.68, Аноним (68), 11:45, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Он даже питон не понимает и генерирует совершенно случайный булшит, который каким-то чудом может работать (хоть и не так, как предполагает бот). А вы тут хотите от него эзотерические языки.
     
     
  • 6.79, Аноним (2), 14:23, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    https://discourse.julialang.org/t/julia-ranking-fairly-good-in-code-generating
     
  • 6.86, decaprox (?), 16:37, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну хз, чувак, я регулярно генерирую вспомогательные скрипты в chatgpt и claude.
    Периодически использую claude для генерации простых драйверов. Там это крайне удобно: создаешь проект, заливаешь в knowledge base datasheet и всякую сопутствующую инфу а-ля стиль кодирования и т.д. Даешь задачу оно генерит. Это как иметь виртуального джуна, но как и за реальным за ним надо проверять, что оно сделало. Но в целом каких-то радикальных промахов обычно не бывает.
     
     
  • 7.88, Аноним (68), 18:38, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Генеративные сети могут экономить время на тривиальщине, но ровно до тех пор, пока не окажется, что они его не экономят, а цена ошибки ощутимо возрастает (как и их количество). И если чатгпт хотя бы генерирует код, который в теории как-то работает (чего может даже оказаться достаточно, хотя обычно надо несколько раз указать на проблемы), то клауде генерирует какую-то дичь, надёрганную непонятно как и откуда, которая выглядит замечательно (по сравнению с тем же чатгпт), но содержит невообразимое количество ошибок, которые ты ещё долго бкдешь искать. Ой, даже не начинай, чувак.
     

  • 1.7, Аноним (7), 22:44, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    В принципе, хороший язык с достойно организованной ориентацией на научные вычисления. Дай Дарвин ему ресурсов для развития. Но сам нашёл лучшую замену. Язык, компилируемый в бинарный код, работающий без всяких прослоек. Рекламировать не буду.
     
     
  • 2.9, Bonbon (?), 22:49, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Асемблер?
     
     
  • 3.81, Аноним (81), 14:34, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    C
     
  • 2.10, ddp (?), 22:56, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    да вы интриган! И я заинтригован.
     
  • 2.11, Самый Лучший Гусь (?), 23:04, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Rust не считается за замену. Он не предназначен для научных рассчетов.
     
  • 2.13, Эндрю Келли (?), 23:23, 10/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Zig?
     
  • 2.19, Аноним (19), 01:01, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если пригоден для научных вычислений, компилируемый сразу в машинный код... С++ !
     
  • 2.22, OpenEcho (?), 02:05, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Язык, компилируемый в бинарный код, работающий без всяких прослоек. Рекламировать не буду.

    И как это вы делаете? (Пусть хоть чуть чуть посложнее чем Хелоу Ворлд)
    Ну чтоб вот правда, взяла и готовый выполняемый бинарник чтоб сделала, который можно выполнить на другой машине где нет Юлии Петровны.

     
     
  • 3.51, Аноним (51), 09:47, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вот за это мне язык и нравится )
    (Аноним 7)
     
  • 2.23, Аноним (23), 02:38, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я тоже на естественный отбор надеюсь, но в другом смысле.

    Julia создали как язык, который решит "проблему двух языков" (прототип приходится делать на одном удобном языке типа питона, релиз на другом быстром типа C++; неудобно, поэтому делаем язык, удобный как питон и быстрый как C++).

    В итоге получилось, что Julia не прыгает выше питоновских JIT'ов и математических либ и назначение языка замяли. Зачем он теперь нужен? Просто так.

    В сообществе пользуются уникальным термином "time to first plot" (время до первого графика), потому что запуск тормозит. Статические бинарники занимали сотни мегабайт, память не экономит, часть решений продиктована NIH-синдромом (конкатенация строк через оператор умножения).

     
     
  • 3.28, Аноним (28), 02:59, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > конкатенация строк через оператор умножения

    Оператор + тоже некорректно использовать несмотря на популярность этого в мейнстримных языках.

     
     
  • 4.32, Аноним (23), 03:32, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    str1 + str2 - узнаваемость, правило наименьшего удивления.
    [str1 str2] - математичность, преемственность с MATLAB/Octave
    str1 * str2 - "видали как я могу, а!? да я три бутылки залпом могу"
     
     
  • 5.89, Sem (??), 18:45, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А str1.str2 забыли
     
  • 4.42, Аноним (2), 07:35, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Во-первых, для конкатенации есть метод string("abc", "def"), который ещё и типы умеет преобразовывать. А во-вторых, объяснение почему нельзя использовать * как операцию склейки приводится тут - https://docs.julialang.org/en/v1/manual/strings/#man-concatenation

    Причина в том, что с математической точки зрения операция + должна гарантировать коммутативность. То есть 1 + 2 == 2 + 1. Но со строками это не проходит. А вот операция матричного умножения не является коммутативной по определению. Поэтому её и взяли для конкатенации.

     
     
  • 5.46, Аноним (23), 08:04, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > с математической точки зрения операция + должна гарантировать коммутативность
    > In mathematics, + usually denotes a commutative operation (#man-concatenation)

    .

    > должна гарантировать
    > usually denotes

    ...

    Её взяли из-за NIH-синдрома. Так-то и операция умножения над векторами должна умножать вектора.



    'abc' * transpose('def') == 29696  % MATLAB


     
     
  • 6.47, Аноним (23), 08:20, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да и если избегать +, в языках программирования для конкатенации уже использовали 5 других операторов:
       ~  <>  ++  .  ..

    Julia захотела отличиться от всех этих языков (Wolfram Mathematica, Haskell, D, Lua, Perl...).

     
  • 5.85, Аноним (85), 16:24, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Хм, а операция умножения разве не должна быть коммутативной?
     
     
  • 6.87, Аноним (2), 16:40, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >  Хм, а операция умножения разве не должна быть коммутативной?

    Матричное умножение? Нет, не должна. Матричное сложение может быть коммутативным.

     
  • 3.49, ИмяХ (ok), 09:21, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>прототип приходится делать на одном удобном языке типа питона, релиз на другом быстром типа C++; неудобно

    Как это? Наоборот же, очень удобно сначала накидал тяп-ляп быстренько, чтоб работало, а потом пишешь нормально. Так всегда делается, даже если всё на одном языке. Тем более при переписывании одновременно производится и аудит и рефакторинг в одном флаконе.

     
     
  • 4.57, Аноним (-), 10:21, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Если язык прототипа отличается от целевого и не используется автоматическая трансляция кода, это означает, что оба раза будет тяп-ляп. И после переписывания на другой язык придётся отдельно делать рефакторинг и переписывание уже под прод. Джулийный подход с написанием прототипа на ней же всегда будет дешевле, чем связка питон + что-то ещё. Не говоря уже о том, что квалификация одного универсального джулийного программиста будет выше, чем питониста + чеготоещениста. Он и задачу понимать будет, и оптимизацию решения.
     
  • 2.35, Аноним (35), 04:17, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Но сам нашёл лучшую замену. Язык, компилируемый в бинарный код, работающий без всяких прослоек. Рекламировать не буду.

    Fortran?

     
     
  • 3.36, Аноним (36), 05:46, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    так Фортран быстрее Си на математических вычислениях и сами математики прекрасно это знают, и задел библиотек у них в нем огромный. Поэтому спроса на новинку не будет в принципе.
     
     
  • 4.82, Аноним (81), 14:36, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > задел библиотек

    кривых. Не стал бы доверять - пишем только сами.

     
  • 2.50, Аноним (51), 09:46, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Никто пока не назвал :)  Уже становится забавным. Zig — тепло, но не он.

    Ребята, ещё попытка. Компилируемый в нативный код на большинстве известных платформ и ОС. Строгая типизация. Простой как топор синтаксис. Чрезвычайно легко реализовывать научные вычисления, хотя предназначен скорее для системного программирования. Мощная система макросов. Входит в десятку языков, генерирующих наиболее быстрый код. Как уже освоивший этот язык, добавлю пару недостатков: не самая развёрнутая документация. Сравнительно медленная компиляция.

    Подпись: Аноним 7  )

     
     
  • 3.56, Аноним (56), 10:17, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    this is Nim
     
     
  • 4.62, Аноним (51), 10:58, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Бинго! )
     
  • 3.59, Аноним (68), 10:30, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, явно не си, у сей со всем перечисленным всё в порядке. Видимо, плюсы.
     
     
  • 4.63, Вячеслав (??), 10:59, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это подумал Я V Z Hare Carbon Elena Это подумал Claude 3 5 Sonnet Я ... большой текст свёрнут, показать
     
     
  • 5.65, Аноним (68), 11:17, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Твой бот бракованный. У D рантайм, для системного программирования не очень. Согласно чатгпт, существуют определённые способы исключения GC, но, что-то сомнительно, видимо, это задача уровня написать ОС на GO. Nim сомнительно.
     
  • 5.67, Аноним (51), 11:30, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Што это за Claude Спросил у ChatGPT Что это за язык программирования Компил... большой текст свёрнут, показать
     
  • 2.55, Аноним (54), 10:04, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Common Lisp, реализация SBCL.
     

  • 1.12, DEF (?), 23:14, 10/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Перешёл на него с убогих и тормознутых R и Python.
     
     
  • 2.16, Аноним (16), 00:45, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А как же NumPy и Numba?
     
     
  • 3.44, Аноним (-), 07:45, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Слишком коряво по синтаксису. Даже близко нет лаконичности Джулии. И чрезмерный расход вычислительных ресурсов. Несерьёзно.
     
  • 2.83, Аноним (81), 14:37, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Согласен с Вашими определениями. Но перешел на C++.
     

  • 1.14, Bottle (?), 00:36, 11/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    У-у-ух, не нужны нам эти ваши питоны и джулии, нам подавай только ANSI C!
     
  • 1.17, голос из леса (?), 00:48, 11/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Julia такое же дурацкое название как и Go. Хуже не придумаешь, гуглить что-то себе дороже. Для go уже давно синонимом стало "golang". А здесь? "Julialala"?
     
     
  • 2.20, Аноним (19), 01:04, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Juliabla
     
  • 2.21, Bottle (?), 01:18, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Нормальные названия, всяко лучше, чем буквы из алфавита брать.
     
  • 2.30, DEF (?), 03:11, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    julialang.org - как бы намекает...
     
  • 2.37, Аноним (36), 05:48, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а C как деды гуглили?)
     
     
  • 3.71, Аноним (71), 12:53, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Дедам это было не нужно, т.к. руководство по Си шло вместо мануала к игре под названием UNIX OS.
     
     
  • 4.84, Аноним (81), 14:40, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    C/C++ есть везде помимо UNIX. В этом достоинство - компилируется (адекватным компилятором) в любой системе. Недавно ради смеха взял и сделал тот же код вообще в экзотике.
     

  • 1.29, Аноним (28), 03:02, 11/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > StyledStrings

    Зачем это на практике?

     
     
  • 2.43, Аноним (2), 07:40, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Для разукрашивания текста, выводимого в консоль. И для формирования отчётов. Идея в том, что к частям строки можно навесить атрибуты отображения, для которых прописать стиль. То есть, формируем строку в вычислительной части программы, навешиваем стили на кусочки, из которых её формируем, а потом кидаем на отображение.

    https://julialang.github.io/StyledStrings.jl/dev/examples/

     
     
  • 3.45, Жироватт (ok), 08:03, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > отчеты

    И чем это лучше готовых шаблонов?

     
     
  • 4.48, Аноним (2), 09:20, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Поскольку оно только что появилось, очевидно, никто реального опыта использования не имеет. Чисто в теории разница с шаблонами в том, что в одном случае код надо кусочками компоновать по частям шаблона (в зависимости от того чем шаблон делаем), во втором - формируем линейную строку и полностью развязываем отображение от кода. Да ещё и можем легко нанизывать разные схемы отображения на одну и ту же строку без перекомпоновки кода.
     

  • 1.38, Подпынявый Швайнокарась (?), 06:29, 11/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > основан на наработках проекта LLVM

    И это прекрасно.

     
  • 1.64, Анон1110м (?), 11:01, 11/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    О нет. Здесь же есть вот эти end как в Pascal.
     
     
  • 2.90, Аноним (90), 18:59, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Тогда тем более годно
     

  • 1.66, Аноним (66), 11:19, 11/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >Высокая производительность

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

     
     
  • 2.69, Аноним (69), 12:26, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Перед тем как писать комментарии, стоит хотя бы поверхностно ознакомиться с предметной областью.... Ну или почитать как работает компилятор Julia. Тесты же производительности присутствуют на главной странице сайта языка.
     
     
  • 3.72, Аноним (68), 12:55, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Мало ли, что там написано. Вон даже чатгпт утверждает, что жулия язык с динамической типизацией и рантаймом, сиречь питон, и других вариантов использования не подразумевает (т.е. нельзя как жаву скомпилировать без вм при отказе от части функциональности).
     
     
  • 4.73, Аноним (-), 13:33, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Мало ли, что там написано.

    А код посмотреть на гитхабе и проверить слабо?

     
     
  • 5.74, Аноним (68), 14:07, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Естественно, синтетика позволяет показывать красивые графики для недалёких. Это конкурент жаваскрипта и никому не нужен ещё один жаваскрипт.
     
  • 3.76, Аноним (66), 14:13, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Я-то знаком с этой скриптотой. Даже простой джулиевский хеллоуворлд выжирает 250 мегабайт, потому что интерпретатор запускается.
     
     
  • 4.78, Аноним (78), 14:21, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ок. Не занимайтесь больше программированием.
     

  • 1.75, Аноним (75), 14:08, 11/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    'occursin' — наверное смешно было, когда имя функции придумывали ('случись грех'). А у меня сразу же стойкое мнение - "разрабы - придурки".
     
     
  • 2.77, Аноним (2), 14:19, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > А у меня сразу же стойкое мнение - "разрабы - придурки".

    Нет, это всего лишь незнание английского языка в части использования глаголов с местоимением (первый аргумент) в треьем лице.

     

  • 1.91, Аноним (91), 19:42, 11/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >поддержка динамической типизации

    Но зачем? Из-за динамической типизации куча проблем вылазит в рантайме.
    >Высокая производительность: одной из ключевых целей проекта является достижение производительности близкой к программам на языке Си. Компилятор Julia основан на наработках проекта LLVM и генерирует эффективный нативный машинный код для многих целевых платформ;

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

     
     
  • 2.92, Аноним (2), 20:47, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Динамическая типизация позволяет использовать язык в блокнотике и не думать об и... большой текст свёрнут, показать
     
     
  • 3.94, Аноним (91), 23:29, 11/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    С учётом Хиндли-Милнера, которые используется во многих функциональных языках, н... большой текст свёрнут, показать
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру