<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Результаты поиска по запросу «[ocaml]»]]></title>
    <link>https://habr.com/ru/</link>
    <description><![CDATA[Результаты поиска по запросу «[ocaml]»]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Fri, 06 Nov 2026 00:04:11 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[Взлом TLS с денежным призом]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/250339/</guid>
      <link>https://habr.com/ru/articles/250339/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=250339</link>
      <description><![CDATA[<img src="https://habrastorage.org/files/7d7/850/46a/7d785046a3ec489f946cd4f8a9346ab3.png" align="right"/>Разработчики <a href="https://github.com/mirleft/ocaml-tls">TLS-имплементации на языке OCaml</a> объявили конкурс BTC Piñata, чтобы доказать надёжность своей защиты. Известно, что конкурсы не могут быть настоящим доказательством, но этот очень уж забавный, да ещё с небольшим денежным призом.<br/>
<br/>
Итак, <a href="http://media.ccc.de/browse/congress/2014/31c3_-_6443_-_en_-_saal_2_-_201412271245_-_trustworthy_secure_modular_operating_system_engineering_-_hannes_-_david_kaloper.html#video">двое хакеров</a> открыли демо-сервер <a href="http://ownme.ipredator.se/">ownme.ipredator.se</a>.<br/>
<br/>
На сервере лежит ключ от биткоин-адреса <a href="https://blockchain.info/address/183XuXTTgnfYfKcHbJ4sZeF46a49Fnihdh">183XuXTTgnfYfKcHbJ4sZeF46a49Fnihdh</a>. Сервер отдаст нам ключ, если мы предъявим сертификат.<br/>
<br/>
Организаторы предусмотрели механизм MiTM для нас. Мы можем пропускать через себя трафик между виртуальными машинами BTC Piñata (TLS-сервер и TLS-клиент). Как понятно, в этом трафике есть нужный сертификат, нужно его только извлечь каким-то образом.<br/>
 <a href="https://habr.com/ru/articles/250339/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=250339#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 11 Feb 2015 13:30:46 GMT</pubDate>
      <dc:creator><![CDATA[alizar]]></dc:creator>
      <category><![CDATA[Информационная безопасность]]></category><category><![CDATA[Криптография]]></category>
      <category><![CDATA[OCaml]]></category><category><![CDATA[TLS]]></category><category><![CDATA[BTC Piñata]]></category><category><![CDATA[конкурс]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Как я нашёл баг в процессорах Intel Skylake]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/332552/</guid>
      <link>https://habr.com/ru/articles/332552/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=332552</link>
      <description><![CDATA[<img src="https://habrastorage.org/web/f82/7b2/c1a/f827b2c1a23a435d9696abb154b87894.jpg" align="left">Инструкторы курсов «Введение в программирование» знают, что студенты находят любые причины для ошибок своих программ. Процедура сортировки отбраковала половину данных? «Это может быть вирус в Windows!» Двоичный поиск ни разу не сработал? «Компилятор Java сегодня странно себя ведёт!» Опытные программисты очень хорошо знают, что баг обычно в их собственном коде, иногда в сторонних библиотеках, очень редко в системных библиотеках, крайне редко в компиляторе и никогда — в процессоре. Я тоже так думал до недавнего времени. Пока не столкнулся с багом в процессорах Intel Skylake, когда занимался отладкой таинственных сбоев OCaml.<br>
<br>
<h1>Первое проявление</h1><br>
В конце апреля 2016 года вскоре после выпуска OCaml 4.03.0 один Очень Серьёзный Индустриальный Пользователь OCaml (ОСИП) обратился ко мне в частном порядке с плохими новостями: одно из наших приложений, написанное на OCaml и скомпилированное в OCaml 4.03.0, падало случайным образом. Не при каждом запуске, но иногда вылетал segfault, в разных местах кода. Более того, сбои наблюдались только на их самых новых компьютерах, которые работали на процессорах Intel Skylake (Skylake — это кодовое название последнего на тот момент поколения процессоров Intel. Сейчас последним поколением является Kaby Lake).<br>
<br>
За последние 25 лет мне сообщали о многих багах OCaml, но это сообщение вызывало особенное беспокойство. Почему только процессоры Skylake? В конце концов, я даже не мог воспроизвести сбои в бинарниках ОСИПа на компьютерах в моей компании Inria, потому что все они работали на более старых процессорах Intel. Почему сбои не воспроизводятся? Однопоточное приложение ОСИПа делает сетевые и дисковые операции I/O, так что его выполнение должно быть строго детерминировано, и любой баг, который вызвал segfault, должен проявлять себя при каждом запуске в том же месте кода.<br> <a href="https://habr.com/ru/articles/332552/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=332552#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Thu, 06 Jul 2017 12:24:53 GMT</pubDate>
      <dc:creator><![CDATA[m1rko]]></dc:creator>
      <category><![CDATA[Assembler]]></category><category><![CDATA[C]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Отладка]]></category><category><![CDATA[Тестирование IT-систем]]></category>
      <category>OCaml</category><category>Caml</category><category>Skylake</category><category>Hyper-Threading</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Формальная верификация кода на Coq: тактики]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/748720/</guid>
      <link>https://habr.com/ru/articles/748720/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=748720</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/29b/ee5/57a/29bee557a2ef545fa1f27271ccbcca97.png" /><p>Данная статья является адаптированным переводом моей статьи: <a href="https://formal-land.gitlab.io/coq-tezos-of-ocaml/blog/2022/02/26/simulations-dependently-typed-version" rel="noopener noreferrer nofollow">Formalization of code in Coq - tactics</a>, написанной в период работы над проектом coq-tezos-of-ocaml. </p><p>Суть проекта: часть <a href="https://gitlab.com/tezos/tezos/-/tree/master/src/proto_alpha/lib_protocol" rel="noopener noreferrer nofollow">исходного кода  протокола </a><a href="https://tezos.com/" rel="noopener noreferrer nofollow">криптовалюты Tezos</a> была переведена на <a href="https://coq.inria.fr/" rel="noopener noreferrer nofollow">Coq</a>, а затем верифицирована с помощью математических методов и формальной логики.   </p><p>Статья предназначена для круга читателей, имеющих опыт работы с Coq.</p><p>Часто процесс формальной верификации становится утомительным и монотонным из за повторяющихся действий, которые пруф-инженеру (от английского слова <em>proof</em> - доказательство) приходится выполнять. К счастью, в Coq есть инструменты и техники автоматизации доказательств, которые позволяют не только значительно  увеличить производительность, но и сделать доказательства короче.</p><p>В данной статье мы покажем, как использовать и писать тактики на примере формальной верификации исходного кода криптовалюты <a href="https://tezos.com/" rel="noopener noreferrer nofollow">Tezos</a> (написанной на OCaml), а именно, мы затронем следующие темы:</p><p></p> <a href="https://habr.com/ru/articles/748720/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=748720#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 18 Jul 2023 10:00:45 GMT</pubDate>
      <dc:creator><![CDATA[Natasha_Klaus]]></dc:creator>
      <category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[Coq]]></category><category><![CDATA[OCaml]]></category><category><![CDATA[formal verification]]></category><category><![CDATA[формальная верификация]]></category><category><![CDATA[proof engineer]]></category><category><![CDATA[пруф-инженер]]></category><category><![CDATA[тактики в Coq]]></category><category><![CDATA[LTac]]></category><category><![CDATA[формальная верификация криптовалют]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Сравнение одинакового проекта в Rust, Haskell, C++, Python, Scala и OCaml]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/456638/</guid>
      <link>https://habr.com/ru/articles/456638/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=456638</link>
      <description><![CDATA[В последнем семестре университета я выбрал <a href="https://www.student.cs.uwaterloo.ca/~cs444/">курс компиляторов CS444</a>. Там каждая группа из 1-3 человек должна была написать компилятор из существенного подмножества Java в x86. Язык на выбор группы. Это была редкая возможность сравнить реализации больших программ одинаковой функциональности, написанных очень компетентными программистами на разных языках, и сравнить разницу в дизайне и выборе языка. Такое сравнение породило массу интересных мыслей. Редко можно встретить такое контролируемое сравнение языков. Оно не идеально, но намного лучше, чем большинство субъективных историй, на которых основано мнение людей о языках программирования.<br>
<br>
Мы сделали наш компилятор на Rust, и сначала я сравнил его с проектом команды на Haskell. Я ожидал, что их программа будет намного короче, но она оказалась того же размера или больше. То же самое для OCaml. Затем сравнил с компилятором на C++, и там вполне ожидаемо компилятор был примерно на 30% больше, в основном, из-за заголовков, отсутствия типов sum и сопоставлений с образцом. Следующее сравнение было с моей подругой, которая сделала компилятор самостоятельно на Python и использовала менее половины кода, по сравнению с нами, из-за мощности метапрограммирования и динамических типов. У другого товарища программа на Scala тоже была меньше нашей. Больше всего меня удивило сравнение с другой командой, которая тоже использовала Rust, но у них оказалось в три раза больше кода из-за разных дизайнерских решений. В конце концов, самая большая разница в количестве кода оказалась в пределах одного языка!<br> <a href="https://habr.com/ru/articles/456638/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=456638#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Tue, 18 Jun 2019 16:32:26 GMT</pubDate>
      <dc:creator><![CDATA[m1rko]]></dc:creator>
      <category><![CDATA[Haskell]]></category><category><![CDATA[Python]]></category><category><![CDATA[Rust]]></category><category><![CDATA[Scala]]></category><category><![CDATA[Компиляторы]]></category>
      <category>Rust</category><category>Haskell</category><category>C++</category><category>Python</category><category>Scala</category><category>OCaml</category><category>компиляторы</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Objective CAML]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/74488/</guid>
      <link>https://habr.com/ru/articles/74488/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74488</link>
      <description><![CDATA[Objective CAML — один из гибридных языков программирования, то есть поддерживающий несколько парадигм программирования, в данном случае у нас это объектно-ориентированное программирование и функциональное программирование. Как известно, сильными сторонами функционального программирования являются: надежность кода, удобство тестирования, возможность оптимизации при компиляции и т.д. Но несмотря на все достоинства функционального программирования, так же присутствуют и минусы, такие как: отличающийся стиль написания программ от императивного, зачастую нехватка хорошей литературы, неудобный синтаксис и т.д. <br/>
Если кого — либо заинтересует, рискну рассказать по подробнее об этом языке программирования. <a href="https://habr.com/ru/articles/74488/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74488#habracut"></a>]]></description>
      
      <pubDate>Fri, 06 Nov 2009 13:48:32 GMT</pubDate>
      <dc:creator><![CDATA[SHK]]></dc:creator>
      <category><![CDATA[Чулан]]></category>
      <category><![CDATA[OCaml]]></category><category><![CDATA[ФП]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Ocaml Tools]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/74501/</guid>
      <link>https://habr.com/ru/articles/74501/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74501</link>
      <description><![CDATA[Сегодня я постараюсь рассказать вам об инструментах, помогающих программировать на Objective CAML.<br/>
 <a href="https://habr.com/ru/articles/74501/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74501#habracut">Продолжение</a>]]></description>
      
      <pubDate>Fri, 06 Nov 2009 14:59:52 GMT</pubDate>
      <dc:creator><![CDATA[SHK]]></dc:creator>
      <category><![CDATA[Чулан]]></category>
      <category><![CDATA[Ocaml]]></category><category><![CDATA[Ocaml Tools]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Списки и другие структуры данных в Ocaml]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/74691/</guid>
      <link>https://habr.com/ru/articles/74691/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74691</link>
      <description><![CDATA[<h4>Введение</h4><br/>
Кроме базовых типов данных в Objective Caml к предопределенным типам относятся кортеж, список, запись. <br/>
 <a href="https://habr.com/ru/articles/74691/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74691#habracut">Продолжение</a>]]></description>
      
      <pubDate>Mon, 09 Nov 2009 06:08:51 GMT</pubDate>
      <dc:creator><![CDATA[SHK]]></dc:creator>
      <category><![CDATA[Чулан]]></category>
      <category><![CDATA[Ocaml]]></category><category><![CDATA[ФП]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[PG'OCAML = PostgreSQL + OCaml]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/75599/</guid>
      <link>https://habr.com/ru/articles/75599/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=75599</link>
      <description><![CDATA[Cегодня понадобилось обратиться к базе данных PostgreSQL из Objective Caml, наиболее удобным и продвинутым фремворком для работы с PostgreSQL оказался — PG'OCAML. В этом посте хотелось бы показать пару примеров связки Objective Caml и PostgreSQL и насколько это просто.<br/>
 <a href="https://habr.com/ru/articles/75599/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=75599#habracut">Продолжение</a>]]></description>
      
      <pubDate>Wed, 18 Nov 2009 08:29:38 GMT</pubDate>
      <dc:creator><![CDATA[SHK]]></dc:creator>
      <category><![CDATA[Чулан]]></category>
      <category><![CDATA[Ocaml]]></category><category><![CDATA[postgresql + ocaml]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Сегфолт в glibc, 345 тысяч утёкших сокетов и 474 тысячи соединений за полминуты: шесть багов в одной цепочке]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096002/</guid>
      <link>https://habr.com/ru/articles/1096002/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=1096002</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/9c/cf/a2/9ccfa22e826a43c8043bb84422da551f.jpg" /><p>Плановые работы в сети раз за разом валили процессы Kafka: segfault в DNS-резолвере glibc, сотни тысяч утёкших UDP-сокетов, полмиллиона TCP-соединений за 31 секунду после восстановления. Инженер Jane Street разматывает цепочку из шести багов (два из них старше десяти лет): как нашли причину, какие числа подтвердили гипотезу и чем всё закрыли.</p> <a href="https://habr.com/ru/articles/1096002/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=1096002#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 19 Oct 2026 04:01:37 GMT</pubDate>
      <dc:creator><![CDATA[opium]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[DevOps]]></category><category><![CDATA[Open source]]></category>
      <category>glibc</category><category>DNS</category><category>Kafka</category><category>OCaml</category><category>segfault</category><category>sockets</category><category>linux</category><category>debugging</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[OCaml и PHP — эзотерика для вашего удобства]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/98185/</guid>
      <link>https://habr.com/ru/articles/98185/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=98185</link>
      <description><![CDATA[<b>NB:</b> читая этот топик, желательно не есть — можно поперхнуться от неожиданности.<br/>
<b>NB:</b> менее ценные куски кода пришлось вынести на пастебин, из-за того что хабр обрезает пост. Следите за ссылками в тексте.<br/>
<br/>
Многие причисляют OCaml к маргинальным и даже эзотерическим языкам. Возможно они и правы, хотя множество людей с ними не согласны. Для меня знакомство с ним началось с полгода назад, когда мне в очередной раз захотелось научиться чему-то новому и я подумал, что хоть один функциональный язык надо освоить. Из множества языков я выбрал Objective Caml. Язык покорил меня человеческим синтаксисом и идеей: есть все функциональные радости жизни, но если хочешь императивный стиль и ООП — бери, их есть у меня! Оказалось, что разработчики прекрасно понимали, что для разных задач нужны разные средства. Три дня чтения <a href="http://www.ocaml-tutorial.org/">мануала для C++ и Perl-программистов</a> и я уже вполне мог читать код и писать хеллоуворлды. На этом моё знакомство с языком закончилось, потому что изучать язык не на реальной задаче — дело глупое.<br/>
 <a href="https://habr.com/ru/articles/98185/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=98185#habracut">А теперь о более реальной разработке</a>]]></description>
      
      <pubDate>Tue, 13 Jul 2010 16:37:31 GMT</pubDate>
      <dc:creator><![CDATA[torkve]]></dc:creator>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[ocaml]]></category><category><![CDATA[php]]></category><category><![CDATA[php5]]></category><category><![CDATA[php extenstion]]></category><category><![CDATA[c]]></category><category><![CDATA[c++]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как сделать Laser Squad из XCOM: этюд для GDB в OSX]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/255787/</guid>
      <link>https://habr.com/ru/articles/255787/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=255787</link>
      <description><![CDATA[<img src="https://habrastorage.org/files/233/50d/817/23350d817fa54273ac4513758a1d73ef.jpg" alt="image"/><br/>
<br/>
Вот так теперь выглядит игра Laser Squad, которую я увидел очень давно. Тогда она была во всех смыслах проще и выглядела так:<br/>
<br/>
<img src="https://habrastorage.org/files/805/8f3/03a/8058f303aae14a938528d4a48ca91f49.png" alt="image"/><br/>
<br/>
При этом принципиально игра не изменилась. Просто стала сложнее: куча типов ресурсов, множество вариантов их применения плюс «инфляция»: каждая следующая мастерская, лаборатория или спутниковый канал стоят больше, чем предыдущие. С одной стороны, это все дает возможность играть разными стратегиями развития, но иногда так хочется поиграть просто в Laser Squad! Поэтому…<br/>
 <a href="https://habr.com/ru/articles/255787/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=255787#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 15 Apr 2015 07:57:11 GMT</pubDate>
      <dc:creator><![CDATA[zbroyar]]></dc:creator>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[os x]]></category><category><![CDATA[gdb]]></category><category><![CDATA[ocaml]]></category><category><![CDATA[XCOM: Enemy Unknown]]></category><category><![CDATA[перевод]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Десять причин не использовать статически типизированный функциональный язык программирования]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/190492/</guid>
      <link>https://habr.com/ru/articles/190492/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=190492</link>
      <description><![CDATA[<blockquote>От переводчика<br/>
Это вольный перевод статьи о том, почему люди боятся функциональных языков, присутствует ирония и юмор, для тех кто может и любит читать на английском <a href="http://fsharpforfunandprofit.com/posts/ten-reasons-not-to-use-a-functional-programming-language/">оригинал здесь</a>.<br/>
<br/>
<h6>Про автора</h6><br/>
Я разработчик и архитектор британской не софтверной компании. Имею 20 летний опыт в различных областях от высоко-уровневых UX/HCI до низко-уровневых реализаций баз данных.<br/>
Несмотря на то что я использую C# в своей повседневной работе, я писал промышленный код на многих языках, мои любимые Smalltalk, Python и совсем недавно F# (поэтому я и создал <a href="http://fsharpforfunandprofit.com/">этот сайт</a>).<br/>
</blockquote><br/>
<br/>
<h4>Разглагольствования по поводу того чего я не понимаю</h4><br/>
Вам надоела вся эта шумиха вокруг функциональных языков? Мне тоже! Я выскажу по этому поводу несколько причин почему разумные люди, такие как мы с вами, должны держаться подальше от этого.<br/>
<br/>
Немного поясню: когда я говорю «статически типизированный функциональный язык программирования», я подразумеваю языки, которые поддерживают вывод типов по-умолчанию и прочее. На практике это означает Haskell и семейство языков ML (включая OCaml и F#).<br/>
 <a href="https://habr.com/ru/articles/190492/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=190492#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 18 Aug 2013 19:13:31 GMT</pubDate>
      <dc:creator><![CDATA[DarkCoder]]></dc:creator>
      <category><![CDATA[Функциональное программирование]]></category>
      <category>функциональное программирование</category><category>f#</category><category>haskell</category><category>ocaml</category><category>ml</category><category>c#</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Скоро ICFPC 2016]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/306882/</guid>
      <link>https://habr.com/ru/articles/306882/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=306882</link>
      <description><![CDATA[19 серия культового соревнования начнётся в пятницу, 5 августа, в 0:00 UTC.<br/>
<br/>
<blockquote>ICFP Programming Contest — международное соревнование по программированию, проводимое ежегодно летом с 1998 года. Результаты соревнования объявляются на Международной конференции по функциональному программированию. (с) <a href="https://ru.wikipedia.org/wiki/ICFP_Programming_Contest">Wikipedia</a></blockquote><br/>
 <a href="https://habr.com/ru/articles/306882/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=306882#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Tue, 02 Aug 2016 02:26:01 GMT</pubDate>
      <dc:creator><![CDATA[unclechu]]></dc:creator>
      <category><![CDATA[Haskell]]></category><category><![CDATA[Спортивное программирование]]></category><category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[функциональное программирование]]></category><category><![CDATA[соревнования по программированию]]></category><category><![CDATA[haskell]]></category><category><![CDATA[ocaml]]></category><category><![CDATA[lisp]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Пишем эмулятор Game Boy на OCaml]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/645237/</guid>
      <link>https://habr.com/ru/articles/645237/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=645237</link>
      <description><![CDATA[<div style="text-align:center;"><img src="https://habrastorage.org/webt/s7/wu/eh/s7wuehzqqlfkr5xqnzuaqsnmbdw.png"></div><br>
<h1>Введение</h1><br>
Последние несколько месяцев я работал над проектом под названием <em>CAMLBOY</em> — эмулятором Game Boy, написанным на OCaml, который работает в браузере. Протестировать его можно на следующей странице демо:<br>
<br>
<strong><a href="https://linoscope.github.io/CAMLBOY/" rel="nofollow noopener noreferrer">Страница демо</a></strong><br>
<br>
Я добавил в демо несколько неофициальных ROM, поэтому в них можно поиграть (рекомендую <em>Bouncing ball</em> и <em>Rocket Man Demo</em>). Также можно поиграть в них в мобильном браузере, на современных смартфонах эмулятор работает с частотой 60 FPS.<br>
<br>
<h2>Репозиторий</h2><br>
Репозиторий находится здесь:<br>
<br>
<strong><a href="https://github.com/linoscope/CAMLBOY" rel="nofollow noopener noreferrer">https://github.com/linoscope/CAMLBOY</a></strong><br> <a href="https://habr.com/ru/articles/645237/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=645237#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 14 Jan 2022 07:51:16 GMT</pubDate>
      <dc:creator><![CDATA[PatientZero]]></dc:creator>
      <category><![CDATA[Игры и игровые консоли]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Разработка игр]]></category>
      <category>ocaml</category><category>game boy</category><category>эмуляторы</category><category>эмуляторы консолей</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Melange — DSL для сетевых протоколов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/207764/</guid>
      <link>https://habr.com/ru/articles/207764/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=207764</link>
      <description><![CDATA[<img align="right" src="https://habrastorage.org/getpro/habr/post_images/694/788/f84/694788f8487decb436713dfcf14518da.png"/>Всем программистам рано или поздно приходится передавать данные. Ни для кого не секрет, что библиотек сериализации в Java существует примерно &gt;9000, а в C++ они вроде и есть, а вроде их и нет. К счастью для большинства, несколько лет назад появился Google Protobuf, который принёс достаточно удобный способ определять структуры данных и быстро завоевал всенародную любовь. Это была фактически первая, доступная широким массам библиотека, позволяющая гонять по сети готовые структуры данных, не связываясь при этом с чем-то вроде XML. На дворе был 2008 год.<br/>
<br/>
Вернёмся немного назад. В 2006 году простой индийский программист (как бы подозрительно это ни звучало!) Анил Мадхавапедди, один из самых известных сейчас в мире OCaml-разработчиков и автор свежевышедшей книги <a href="http://realworldocaml.org/">Real World OCaml</a>, защищал в Кембридже <a href="http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-775.pdf">кандидатскую диссертацию</a>. Именно о ней я сегодня вам и расскажу.<br/>
<br/>
Анил сразу пошёл дальше, чем Google. Он сразу подумал, для чего люди обычно пересылают по сети какие-то формализованные структуры данных? Чтобы реализовать какой-то протокол. А что такое протокол? Это какой-то <a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82">конечный автомат</a>. А где мы можем взять хороший пример сложного, хорошо спроектированного и проверенного временем протокола? Да прямо в обычном сетевом стеке! Итак, были взяты набор сетевых структур данных и протоколов: Ethernet frame, IPv4, ICMP, TCP, UDP, SSH, DNS и DHCP и постановка задачи: большая часть этих протоколов (особенно SSH и DNS) реализуются, что называется «руками», а хочется, чтобы не было типичных для C переполнений буфера, все переходы совершались автоматически, это всё можно было верифицировать, и чтобы работало быстро, а не как обычно.<br/>
<br/>
Поскольку никто не будет читать диссертацию, сразу скажу: это более чем удалось. По результатам работы были написаны референсные реализации DNS и SSH-сервера и произведено сравнение с BIND и OpenSSH. OCaml-реализации давали по сравнению с традиционными прирост производительности от незначительного, до почти двухкратного. Кроме того была найдена ошибка в RFC на SSH (рабочая группа была уведомлена и RFC исправлен). О том, что было сделано, и как с этим жить, читайте под катом.  <a href="https://habr.com/ru/articles/207764/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=207764#habracut">Мне интересно.</a>]]></description>
      
      <pubDate>Sat, 28 Dec 2013 20:07:01 GMT</pubDate>
      <dc:creator><![CDATA[torkve]]></dc:creator>
      <category><![CDATA[Ненормальное программирование]]></category><category><![CDATA[Qt]]></category><category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[qt]]></category><category><![CDATA[qt quick]]></category><category><![CDATA[ocaml]]></category><category><![CDATA[melange]]></category><category><![CDATA[mpl]]></category><category><![CDATA[spl]]></category><category><![CDATA[сетевые протоколы]]></category><category><![CDATA[сериализация]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Реализация расширения Active Patterns для языка OCaml]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/JetBrains-education/articles/522076/</guid>
      <link>https://habr.com/ru/companies/JetBrains-education/articles/522076/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=522076</link>
      <description><![CDATA[<h3>О проекте</h3><br>
Весной 2020 года в рамках весенней практики в <a href="https://compscicenter.ru/" rel="nofollow">Computer Science Center</a> я занимался разработкой новой конструкции для языка программирования <a href="https://ocaml.org/" rel="nofollow">OCaml</a> под чутким руководством <a href="https://research.jetbrains.org/ru/researchers/kakadu" rel="nofollow">Дмитрия Косарева</a>.<br>
<br>
<h3>Почему OCaml</h3><br>
OCaml – это одна из самых успешных и развитых реализаций синкретизма промышленного программирования (отсюда мультипарадигмальность, мультиплатформенность, очень быстрый компилятор, высокая производительность генерируемого кода) и математики (отсюда state-of-the-art система типов с мощной реализацией вывода типов, выразительность и расширяемость языка, близость к математической нотации и семантике).<br>
<br>
При этом сообщество языка очень избирательно и не спеша добавляет в язык только крайне востребованные конструкции при условии, что те не привносят ограничений в существующий язык. Поэтому ядро языка очень маленькое и интуитивное, и OCaml с удовольствием используют как <a href="https://ocaml.org/learn/companies.html" rel="nofollow">промышленные разработчики</a>, так и, скажем, математики с <a href="https://www.math.spbu.ru/rus/mathematics-department/88-higher-algebra/103-algebra_chair.html" rel="nofollow">кафедры высшей алгебры и теории чисел СПбГУ</a>.<br>
<br>
Для более глубокого погружения в тему предлагаю взглянуть на статьи <a href="https://queue.acm.org/detail.cfm?id=2038036" rel="nofollow">OCaml for the masses</a> и <a href="https://www2.lib.uchicago.edu/keith/ocaml-class/why.html" rel="nofollow">Why OCaml</a>.<br>
<br>
Сейчас <a href="https://discuss.ocaml.org/t/multicore-ocaml-june-2020/6047" rel="nofollow">ведется работа</a> по реализации для OCaml multicore-системы вкупе с алгебраическими эффектами, что одновременно позволит поднять общую производительность языка и устранить существующие ограничения системы типов, связанные с тем, что язык допускает нечистые вычисления.<br> <a href="https://habr.com/ru/articles/522076/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=522076#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 05 Oct 2020 16:57:58 GMT</pubDate>
      <dc:creator><![CDATA[JetBrains_Education (Образовательные проекты JetBrains)]]></dc:creator>
      <category><![CDATA[Блог компании Образовательные проекты JetBrains]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[ocaml]]></category><category><![CDATA[active patterns]]></category><category><![CDATA[pattern matching]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Ocaml. Типы данных]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/74574/</guid>
      <link>https://habr.com/ru/articles/74574/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74574</link>
      <description><![CDATA[<h4>Введение</h4><br/>
В этом посте перейдем непосредственно к ознакомлению с языком Objective Caml. В этом посте будет рассказано об базовых типах данных Objective Caml.<br/>
Для начала вам необходимо скачать и установить Objective Caml, на этом этапе достаточно будет одного <a href="http://caml.inria.fr/ocaml/release.en.html">интерпретатора</a>. Запуск интерпретатора производится с помощью: команды <b>ocaml</b>, если дело происходит в *nix, либо запуска ocaml.exe если дело происходит в Windows.<br/>
После запуска интерпретатора мы увидим следующее: версию Ocaml, у меня это Objective Caml version 3.00, и ожидание ввода команд:#.<br/>
Каждая логическая единица кода — фраза, заканчивается в Objective Caml — ;; Выход из интерпретатора, осуществляется либо по нажатию Сtrl+D, либо после вызова функции exit типа int -&gt; int:<br/>
<b>exit 0;;</b><br/>
 <a href="https://habr.com/ru/articles/74574/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74574#habracut">Продолжение</a>]]></description>
      
      <pubDate>Sat, 07 Nov 2009 14:36:37 GMT</pubDate>
      <dc:creator><![CDATA[SHK]]></dc:creator>
      <category><![CDATA[Чулан]]></category>
      <category><![CDATA[ocaml]]></category><category><![CDATA[ФП]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Цепной квайн]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/74827/</guid>
      <link>https://habr.com/ru/articles/74827/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74827</link>
      <description><![CDATA[Один японец написал забавный цепной квай.<br/>
<a href="http://ru.wikipedia.org/wiki/Куайн_%28программирование%29">Что такое квайн?</a>.<br/>
<br/>
 <a href="https://habr.com/ru/articles/74827/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=74827#habracut">посмотреть,что он написал</a>]]></description>
      
      <pubDate>Tue, 10 Nov 2009 12:39:24 GMT</pubDate>
      <dc:creator><![CDATA[icCE]]></dc:creator>
      <category><![CDATA[Ненормальное программирование]]></category>
      <category><![CDATA[ruby]]></category><category><![CDATA[python]]></category><category><![CDATA[perl]]></category><category><![CDATA[lua]]></category><category><![CDATA[ocaml]]></category><category><![CDATA[haskell]]></category><category><![CDATA[java]]></category><category><![CDATA[brainfuck]]></category><category><![CDATA[whitespace]]></category><category><![CDATA[unlambda]]></category><category><![CDATA[quine]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[OCaml и RESTful JSON API с использованием Eliom]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/336336/</guid>
      <link>https://habr.com/ru/articles/336336/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=336336</link>
      <description><![CDATA[Привет, Хабр! Представляю вашему вниманию перевод руководства <a href="http://ocsigen.org/tuto/4.0/manual/rest">RESTful JSON API using Eliom</a>. <br>
<br>
В этом руководстве рассказывается, как создать простой, но полный REST API с использованием JSON в качестве формата сериализации.<br> <a href="https://habr.com/ru/articles/336336/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=336336#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Thu, 24 Aug 2017 15:19:23 GMT</pubDate>
      <dc:creator><![CDATA[nbytes]]></dc:creator>
      <category><![CDATA[Проектирование API]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Веб-разработка]]></category><category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[ocaml]]></category><category><![CDATA[ocsigen]]></category><category><![CDATA[eliom]]></category><category><![CDATA[web]]></category><category><![CDATA[api]]></category><category><![CDATA[rest api]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Приглашаем на конференцию FPConf 2017]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/railsclub/articles/341656/</guid>
      <link>https://habr.com/ru/companies/railsclub/articles/341656/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=341656</link>
      <description><![CDATA[Привет! <br>
<br>
2 декабря ждем всех, кто любит делать это функционально на третьей конференции <b><a href="http://fpconf.ru/">FPConf</a></b> — конференции о Haskell, Scala, Clojure, Elixir, Kotlin, F# и функциональных подходах в программировании фронтендов, бэкендов и чего угодно на чем угодно. Больше монад, лямбд, замыканий! Всем иммутабельность, друзья :)<br>
<br>
Традиционно, приглашаем как опытных функциональщиков, так и тех, кто только хочет получить вдохновение и расширить горизонты.<br>
<br>
Цена билета сейчас — 5000 рублей. <b>Регистрация <a href="http://fpconf.ru/">тут</a>.</b><br>
<br>
<b>Что в программе:</b><br>
 <br>
<img src="https://habrastorage.org/getpro/habr/post_images/3ad/0c1/92e/3ad0c192e00bb17746af25253ea09a45.jpg" alt="image" align="left"> <b>Arnaud Spiwack</b>, core-разработчик Coq Proof Assistant, старший архитектор в Tweag I/O<br>
<br>
<b>USING HASKELL TO GREAT EFFECT</b><br>
<br>
It is beyond cliché, nowadays, to say that testing is really important. This is even more so in I/O intensive applications because so many things can go wrong. Unfortunately, testing I/O intensive applications is particularly hard. We have to mock all our files, data-bases, and so on. But even so, we're only scratching the surface: so many things can go wrong. How do we test for absence of deadlocks? Of races? <br>
<br>
I came to the conclusion that Haskell's insistence on purity made it, paradoxically, one of the best languages to write I/O intensive programs. The reason for this is that Haskell makes it very easy to mock every single aspects of the I/O fabric, hence testing is more powerful. Up to checking for the absence of deadlocks and races. This talk will discuss the programming patterns which emerge from this point of view, and, of course, encourage you do use them in your programs.<br> <a href="https://habr.com/ru/articles/341656/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=341656#habracut">Смотреть всю программу</a>]]></description>
      
      <pubDate>Fri, 03 Nov 2017 19:32:48 GMT</pubDate>
      <dc:creator><![CDATA[vorona_karabuta (RubyRussia)]]></dc:creator>
      <category><![CDATA[Блог компании RubyRussia]]></category><category><![CDATA[Elixir/Phoenix]]></category><category><![CDATA[Haskell]]></category><category><![CDATA[Scala]]></category><category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[Конференции]]></category><category><![CDATA[haskell]]></category><category><![CDATA[scala]]></category><category><![CDATA[clojure]]></category><category><![CDATA[f#]]></category><category><![CDATA[ocaml]]></category><category><![CDATA[fprog]]></category><category><![CDATA[functional programming]]></category><category><![CDATA[функциональное программирование]]></category><category><![CDATA[elixir]]></category><category><![CDATA[erlang]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
