The OpenNET Project / Index page

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

Доступен язык программирования OCaml 5.4.0

10.10.2025 22:16

Опубликован релиз языка программирования OCaml 5.4.0, промышленного функционального языка программирования с акцентом на выразительность и безопасность разрабатываемого программного обеспечения. В OCaml сочетается функциональное ядро, императивные возможности, объектная система и модульная система. Код инструментария для языка OCaml распространяется под лицензией LGPL.

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

Основные изменения и улучшения в OCaml 5.4.0:

  • Именованные кортежи (Labelled tuples), позволяющие давать имена членам кортежа и затем использовать эти имена для обращения к ним.
    
           let point = ~x:1, ~y:2
           (* val point : x:int * y:int = (~x:1, ~y:2)  *)
    
           let ( * ) (x,~dx) (y, ~dx:dy) =
             x*.y, ~dx:(x *. dy +. y *. dx )
    
           (* val ( * ) : float * dx:float -> float * dx:float -> float * dx:float *)
    
           let mult_dx x y =
             let ~dx, .. = x * y in
             dx
    
  • Неизменяемые массивы и единый синтаксис для "_ array", "_ iarray" и "floatarray".
    
           [|1; 2; 3|]
    
           ([|1; 2; 3|] : _ iarray)
    
           ([|1.; 2.; 3.|] : floatarray)
    
  • Встроенный атрибут "atomic" для полей записей, требующий использования атомарных операций для работы над ними.
    
           type 'a mpsc_list = { mutable head:'a list; mutable tail: 'a list [@atomic] }
    
           let rec push t x =
             let before = Atomic.Loc.get [%atomic.loc t.tail] in
             let after = x :: before in
             if not (Atomic.Loc.compare_and_set [%atomic.loc t.tail] before after) then
               push t x
             ...
    
  • Новые модули в стандартной библиотеке: Pair, Pqueue, Repr, Iarray.
    • Модуль Pair для работы с парами;
      
                 let ones = Pair.map_fst succ (0,1)
      
    • Модуль Pqueue - очередь с приоритетом;
           
                 module Int_pqueue = Pqueue.MakeMin(Int)
                 let q = Int_pqueue.of_list [4;0;5;7]
                 let some_zero = Int_pqueue.pop_min q
      
    • Модуль Repr содержит функции физического и структурного сравнения;
      
                 let f = Repr.phys_equal (ref 0) (ref 0)
      
    • Модуль Iarray для работы с неизменяемыми массивами;
      
                 let a = Iarray.init 10 Fun.id
                 let b = Iarray.map succ a
      
  • Восстановлен режим “очистки памяти при выходе”. Этот режим позволяет многократно запускать среду выполнения OCaml в программах на языке C, которые используют библиотеки OCaml. Он также полезен для уменьшения шума при отслеживании утечек памяти в коде C, выполняемого в среде OCaml. Чтобы избежать проблем с "cancellation", все домены объединяются перед выходом из среды выполнения OCaml.
  • Новый раздел в документации по профилированию OCaml-программ в среде Linux и MacOS.
  • Множественные улучшению среды выполнения, кодогенерации, около тридцати новых функций в стандартной библиотеке, почти дюжина улучшенных сообщений об ошибках, более пятидесяти исправлений ошибок.


  1. Главная ссылка к новости (https://ocaml.org/releases/5.4...)
  2. OpenNews: Выпуск языка программирования OCaml 4.14.2
Автор новости: ocamlportal.ru
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64035-ocaml
Ключевые слова: ocaml
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (20) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 23:32, 10/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Начало новостной заметки звучит как сказка Андерсена
     
     
  • 2.9, Аноним (9), 00:50, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    особенно "с акцентом на выразительность" - вырвиглазность
     
     
  • 3.19, Аноним (-), 07:23, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > особенно "с акцентом на выразительность" - вырвиглазность

    Что делать, в новостях бывают опечатки :)

     

  • 1.5, Аноним (5), 00:06, 11/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > с акцентом на выразительность
    > let ( * ) (x,~dx) (y, ~dx:dy) = x*.y, ~dx:(x *. dy +. y *. dx )

    Хотелось бы услышать экспертное мнение о сабже от сишников, которые при каждой возможности воют о том, какой у Раста нечеловеческий синтаксис.

     
     
  • 2.6, Аноним (6), 00:15, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Все верно, с акцентом на выразительность
    Вот как тут не выразиться, глядя на такой код?
     
  • 2.7, Аноним (-), 00:19, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Хотелось бы услышать экспертное мнение о сабже от сишников,

    Сейчас тебе расскажут что "все просто и понятно" :)
    С другой местные кекспертные сишники обычно еще и яростно наяривают на lisp и scheme, а иногда даже на перловку.

     
     
  • 3.20, Аноним (-), 07:24, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Сейчас тебе расскажут что "все просто и понятно" :)

    Да вообще элементарщина. Ящеры совсем не палятся...

     
  • 3.22, Аноним (22), 07:48, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В Lisp и Sсheme нет синтакиса в общем случае. Нет синтаксиса - нет проблем. Так что все действительно просто и понятно. Так что наяривали, наяриваем, и будем наяривать.
     
  • 2.8, Аноним (8), 00:30, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Как сишник, не вижу противоречий, что у раста, что окамл, синтаксис непонятный.
     
     
  • 3.10, Аноним (10), 00:58, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Функциональные языки в целом не от мира сего, более-менее адекватно выглядят только созданные под конкреьные задачи Erlang (телеком) и F# (банкинг).
     
     
  • 4.13, Аноним (13), 01:48, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >F# (банкинг).

    Только вот F# это почти Ocaml, подобно тому, как C# почти Java.

     
  • 2.12, Аноним (13), 01:48, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На всякий случай сообщаю, что первые версии раста были написаны на окамле.

    ЗЫ интересно, кто-то кроме меня на опеннете в состоянии понять, что здесь написано?

     
     
  • 3.21, Аноним (-), 07:25, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > На всякий случай сообщаю, что первые версии раста были написаны на окамле.

    А первые версии си - вообще на ассемблере, вероятно. Не означает что толпа народа с энтузиазмом возьмется на ассемблере писать.

     
  • 2.15, Аноним (-), 04:58, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Всё ещё понятнее растосинтаксиса. Да даже у хаскеля синтаксис понятнее.
     
  • 2.17, Сосиска (?), 06:53, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Выразительнее только у Perl
     
  • 2.24, Vkni (ok), 08:19, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Наверное это троллинг. Если хочется на Камле писать код с плавающей точкой, то надо в преамбуле модуля написать

    let (+) = Float.(+)

    и т.д., а дальше писать с нормальными +-. Увы, нормально это в системах типов Хиндли-Милнера без классов типов не делается, а OCaml вынужден идти другим путём.

    Зачем тащить эти +. *. в учебный пример? В оригинальном PR'е пример значительно разумнее:

    let sum_and_product ints =
      let init = ~sum:0, ~product:1 in
      List.fold_left (fun (~sum, ~product) elem ->
        let sum = elem + sum in
        let product = elem * product in
        ~sum, ~product
      ) init ints

    См https://github.com/ocaml/ocaml/pull/13498

    И, в общем, понятно, что это идёт из кровавого ынтерпрайза (Улицы тёти Жени). И да, там оно имеет смысел.

     
  • 2.25, Аноним (-), 08:27, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Выразительность ≠ Читабельность. У чистой сишки одновременно имеются оба эти качества: выразитеьность и читабельность.
     

  • 1.11, Аноним (11), 01:07, 11/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    я верю что окамл может лучше!
    https://github.com/jinyus/related_post_gen
     
  • 1.18, Аноним (-), 07:22, 11/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > В OCaml гармонично сочетается функциональное ядро,
    > императивные возможности, продвинутая объектная
    > система и неповторимая модульная система.

    ...и абсолютно отбитый синтаксис, после которого Rust и C++ кажутся не такими уж и плохими.




           let ( * ) (x,~dx) (y, ~dx:dy) =
             x*.y, ~dx:(x *. dy +. y *. dx )



    Все очень читаемо и понятно, разве нет? :). Блин даже автоцензор на такой код агрится. На что же это похоже?...

     
  • 1.23, cheburnator9000 (ok), 07:50, 11/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Теперь понятно с какой дичи срисовывали раст.
     

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



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

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