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 обязательно


Обсуждение (10) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 23:11, 10/10/2025 Скрыто ботом-модератором     [к модератору]
  • +2 +/
     
  • 1.2, Аноним (2), 23:32, 10/10/2025 [ответить]  
  • +/
    Начало новостной заметки звучит как сказка Андерсена
     

  • 1.3, Аноним (3), 23:41, 10/10/2025 [ответить]  
  • +1 +/
    камлать в бубен уже не актуально. разве что секта где-то сохранилась
     
  • 1.4, Мемоним (?), 23:54, 10/10/2025 [ответить]  
  • +/
    > неповторимая модульная система

    Это как? Никто не смог повторить или никому нафиг не сдалось?

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

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

     
     
  • 2.6, Аноним (3), 00:15, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Все верно, с акцентом на выразительность
    Вот как тут не выразиться, глядя на такой код?
     
  • 2.7, Аноним (-), 00:19, 11/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.8, Аноним (8), 00:30, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Как сишник, не вижу противоречий, что у раста, что окамл, синтаксис непонятный.
     
     
  • 3.10, Аноним (10), 00:58, 11/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Функциональные языки в целом не от мира сего, более-менее адекватно выглядят только созданные под конкреьные задачи Erlang (телеком) и F# (банкинг).
     

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



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

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