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

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

  <channel>
    <title><![CDATA[Статьи]]></title>
    <link>https://habr.com/ru/users/tereshkov/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя tereshkov]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Tue, 05 May 2026 01:40:14 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[Метод конечных элементов своими руками]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/792464/</guid>
      <link>https://habr.com/ru/articles/792464/?utm_campaign=792464&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/94a/bf6/d80/94abf6d808b5e65584f2fca2323f573b.gif" /><p>Метод конечных элементов (МКЭ) применяют в задачах упругости, теплопередачи, гидродинамики — всюду, где нужно как-то дискретизировать и решить уравнения сплошной среды или поля. На Хабре было множество статей с красивыми картинками о том, в каких отраслях и с помощью каких программ этот метод приносит пользу. Однако мало кто пытался объяснить МКЭ от самых основ, с простенькой учебной реализацией, желательно без упоминания частных производных через каждое слово.</p><p>Мы напишем МКЭ для расчёта упругой двумерной пластины на прочность и жёсткость. <a href="https://github.com/vtereshkov/fem/tree/master" rel="noopener noreferrer nofollow">Код</a> займёт 1200 строк. Туда войдёт всё: интерактивный редактор, разбиение модели на треугольные элементы, вычисление напряжений и деформаций, визуализация результата. Ни одна часть алгоритма не спрячется от нас в недрах MATLAB или NumPy. Код будет ужасно неоптимальным, но максимально ясным. </p><p>Размышление над задачей и написание кода заняли у меня неделю. Будь у меня перед глазами такая статья, как эта, — справился бы быстрее. У меня её не было. Зато теперь она есть у вас. </p><p></p> <a href="https://habr.com/ru/articles/792464/?utm_campaign=792464&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 09 Feb 2024 13:30:14 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Алгоритмы]]></category><category><![CDATA[Математика]]></category><category><![CDATA[Физика]]></category>
      <category><![CDATA[мкэ]]></category><category><![CDATA[сопромат]]></category><category><![CDATA[прочность]]></category><category><![CDATA[триангуляция делоне]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Umka обрастает мясом: улучшения в языке, менеджер пакетов, применение в играх]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/788200/</guid>
      <link>https://habr.com/ru/articles/788200/?utm_campaign=788200&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/434/d68/6d0/434d686d0116b5dd7f1c7892407bf56b.png" /><p>Только что вышла новая версия 1.3 моего встраиваемого скриптового языка <a href="https://github.com/vtereshkov/umka-lang" rel="noopener noreferrer nofollow">Umka</a> со статической типизацией. С момента <a href="https://habr.com/ru/articles/732430/" rel="noopener noreferrer nofollow">выпуска версии 1.0</a> язык пополнился замыканиями, инструкцией выбора <code>switch</code> по фактическому типу интерфейса, тернарным условным оператором, более удобным API для взаимодействия с кодом на C, другими мелкими радостями.</p><p>Маленькое, но упрямое <a href="https://discord.com/invite/PcT7cn59h9" rel="noopener noreferrer nofollow">сообщество</a> пользователей Umka всерьёз озаботилось библиотеками, появился менеджер пакетов <a href="https://umbox.tophat2d.dev/" rel="noopener noreferrer nofollow">UmBox</a>, загружающий и устанавливающий библиотеки и отслеживающий их зависимости.</p><p>Umka живёт в ядре фреймворка <a href="https://tophat2d.dev/" rel="noopener noreferrer nofollow">Tophat</a> для создания 2D игр. На основе этого фреймворка развивается платформер-головоломка <a href="https://skejeton.itch.io/savescum" rel="noopener noreferrer nofollow">SaveScum</a>. Коллекция пробных уровней для игры была выпущена в декабре в виде адвент-календаря, принеся с собой дух простого геймерского счастья в наш проект.</p><p></p> <a href="https://habr.com/ru/articles/788200/?utm_campaign=788200&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 23 Jan 2024 14:36:23 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Разработка игр]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[C]]></category>
      <category><![CDATA[game engine]]></category><category><![CDATA[игровой движок]]></category><category><![CDATA[interpreter]]></category><category><![CDATA[интерпретатор]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Язык Umka 1.0 и игровой фреймворк Tophat]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/732430/</guid>
      <link>https://habr.com/ru/articles/732430/?utm_campaign=732430&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/3eb/657/13e/3eb65713e69e7cc98e3f22d4dcb70982.png" /><p>После трёх лет неторопливой разработки вышла версия 1.0 моего скриптового языка&nbsp;<a href="https://github.com/vtereshkov/umka-lang" rel="noopener noreferrer nofollow">Umka</a>. Это статически типизированный язык, предназначенный для встраивания в программы на C/C++. Синтаксис и некоторые особенности семантики Umka были вдохновлены языком Go, однако Umka никак не зависит от экосистемы Go и не требует для работы ничего, кроме стандартной библиотеки C.</p><p>Основным применением языка стал игровой фреймворк&nbsp;<a href="https://tophat2d.dev/" rel="noopener noreferrer nofollow">Tophat</a>, созданный Марком Машкаринцем. Версия Tophat 1.0 вышла одновременно с Umka. Это очень простой модульный фреймворк для создания 2D игр. Несколько мини-игр на нём были написаны для участия в джемах. Сейчас в разработке находятся два более крупных игровых проекта — платформер-головоломка и игра о диспетчеризации железнодорожного движения.</p> <a href="https://habr.com/ru/articles/732430/?utm_campaign=732430&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 01 May 2023 13:49:55 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Разработка игр]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[C]]></category>
      <category><![CDATA[интерпретатор]]></category><category><![CDATA[компилятор]]></category><category><![CDATA[игровой движок]]></category><category><![CDATA[2d-движок]]></category><category><![CDATA[2d-графика]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Заставляем компьютер выводить общие законы физики из наблюдений]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/570786/</guid>
      <link>https://habr.com/ru/articles/570786/?utm_campaign=570786&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/dc9/af9/22a/dc9af922a85e27606236297990a3cb43.png" /><p>Как правило, компьютеры в естественных науках занимаются либо получением чисел из чисел, либо выводом формул из формул. Попытаемся решить более экстравагантную задачу — из набора численных данных вывести формулы общих физических законов, причём не только неизвестные параметры формул, но и сам их вид. В качестве примера рассмотрим задачу о кеплеровых орбитах — в частности, о движении спутника вокруг Земли, и получим законы сохранения энергии и момента импульса, из которых в небесной механике и выводятся эллипсы орбит и законы Кеплера. </p><p>Вдохновением для этих занятий послужила замечательная <a href="http://fenn.freeshell.org/Science.pdf" rel="noopener noreferrer nofollow">статья из Science</a>, которая убедила меня и многих других в том, что к таким задачам в принципе можно подступиться. Как и у авторов статьи, наш пример будет немного игрушечным, хоть и для  совсем другой физической системы. Более того, мы ещё сильнее ограничим пространство поиска (до <img class="formula inline" source="2^{64}" alt="2^{64}" src="https://habrastorage.org/getpro/habr/upload_files/239/150/a52/239150a525d26dfd3e993619d5c74e91.svg"> формул, что тоже немало), зато обойдёмся без 32 процессорных ядер и без GPU, а решение получим меньше чем за минуту против десятков минут или даже пары дней, как в статье. Для всего этого нам понадобится лишь <a href="https://github.com/vtereshkov/conservation-laws-inference/blob/main/law.c" rel="noopener noreferrer nofollow">300 строк кода на C</a> — и никаких фреймворков.</p> <a href="https://habr.com/ru/articles/570786/?utm_campaign=570786&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 02 Aug 2021 09:47:19 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Машинное обучение]]></category><category><![CDATA[Физика]]></category><category><![CDATA[Астрономия]]></category>
      <category><![CDATA[теоретическая механика]]></category><category><![CDATA[небесная механика]]></category><category><![CDATA[законы кеплера]]></category><category><![CDATA[генетические алгоритмы]]></category><category><![CDATA[имитация отжига]]></category><category><![CDATA[виртуальная машина]]></category><category><![CDATA[интерпретатор]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Подсчёт ссылок не так прост, как кажется: опыт языка Umka]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/569450/</guid>
      <link>https://habr.com/ru/articles/569450/?utm_campaign=569450&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/e1f/dc2/80a/e1fdc280a724710c702b04bf78f79eb4.png" /><p>Подсчёт ссылок обычно предлагается как самый простой способ автоматического управления памятью в языках программирования. Он избавляет программиста от необходимости вставлять в свой код <code>free()</code>, <code>delete</code> и тому подобное, следить за висячими указателями и утечками памяти. Принцип действительно звучит очень просто: каждый выделенный в куче блок памяти наделяется счётчиком ссылок на него. Каждая переменная, через которую можно добраться до этого блока, олицетворяет одну ссылку. Блок освобождается тогда, когда счётчик ссылок доходит до нуля.</p><p>В своём статически типизированном скриптовом языке <a href="https://github.com/vtereshkov/umka-lang" rel="noopener noreferrer nofollow">Umka</a> я решил воспользоваться именно этим способом. Его простота подкупала. Альтернативы вроде трассирующего сборщика мусора отпугнули непредсказуемыми задержками при исполнении программ. Ну а теперь пришло время рассказать про подводную часть этого невинного айсберга. Не сомневаюсь, что где-то в тысячах опубликованных статей такие айсберги описаны во всех деталях, но найти их там непросто и небыстро, особенно когда уже полным ходом идёшь на ледяную глыбу.</p><p>Итак, обсудим четыре ключевых практических проблемы, с которыми пришлось столкнуться при реализации подсчёта ссылок в языке Umka.</p> <a href="https://habr.com/ru/articles/569450/?utm_campaign=569450&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 25 Jul 2021 09:56:05 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Разработка игр]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Lua]]></category><category><![CDATA[Go]]></category>
      <category><![CDATA[скриптовый язык]]></category><category><![CDATA[scripting language]]></category><category><![CDATA[встраиваемые языки]]></category><category><![CDATA[embedded languages]]></category><category><![CDATA[интерпретатор]]></category><category><![CDATA[interpreter]]></category><category><![CDATA[подсчёт ссылок]]></category><category><![CDATA[memory management]]></category><category><![CDATA[виртуальная машина]]></category><category><![CDATA[virtual machine]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Umka и трактор: первый опыт практического применения нового языка]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/532018/</guid>
      <link>https://habr.com/ru/articles/532018/?utm_campaign=532018&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/fab/e07/e2b/fabe07e2bd0387d7e8053c6adf3ab9e9.png" /><p>С весны нынешнего года я разрабатываю статически типизированный встраиваемый скриптовый язык <a href="https://github.com/vtereshkov/umka-lang" rel="noopener noreferrer nofollow">Umka</a>, о концепции которого в своё время была <a href="https://habr.com/ru/post/501002/" rel="noopener noreferrer nofollow">статья</a> на Хабре. При этом по своей основной профессии я занимаюсь алгоритмами систем автоматического руления тракторами — о некоторых подходах к комплексированию датчиков в этих системах я тоже <a href="https://habr.com/ru/post/438060/" rel="noopener noreferrer nofollow">писал</a>. Теперь эти два направления деятельности причудливо пересеклись.</p><p>Для исследования поведения трактора в некоторых специфических сценариях (например, на склонах при наличии бокового проскальзывания) понадобился программный симулятор трактора, который верно моделировал бы не только кинематику, но и динамику машины. При этом алгоритм контроллера руления предполагалось постоянно видоизменять и немедленно наблюдать эффект этих изменений. Для такой задачи тандем C++ и Umka выглядел вполне органичным: основной код симулятора, требующий высокого быстродействия, был реализован на C++, а логика контроллера была вынесена в скрипт на Umka.</p><p>Вероятно, читатель уже заподозрил во мне нездоровую тягу к изобретению велосипедов. Попробую объясниться и заодно рассказать, что вышло из этой немного странной затеи.</p> <a href="https://habr.com/ru/articles/532018/?utm_campaign=532018&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 09 Dec 2020 09:39:47 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Спутниковые системы навигации]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Lua]]></category><category><![CDATA[Робототехника]]></category>
      <category><![CDATA[embedded languages]]></category><category><![CDATA[scripting language]]></category><category><![CDATA[встраиваемые языки]]></category><category><![CDATA[скриптовые языки]]></category><category><![CDATA[интерпретаторы]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[автоматическое управление]]></category><category><![CDATA[gnss]]></category><category><![CDATA[imu]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Простой интерпретатор Lisp на Umka]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/520764/</guid>
      <link>https://habr.com/ru/articles/520764/?utm_campaign=520764&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/213/d3d/9be/213d3d9be1b2df633efe34130d99c439.png" /><p>Разработка моего статически типизированного скриптового языка <a href="https://github.com/vtereshkov/umka-lang" rel="noopener noreferrer nofollow">Umka</a> вошла в ту стадию, когда потребовалась проверка языковых возможностей на более сложных примерах, чем скрипты в пару десятков строк. Для этого я решил реализовать на своём языке <a href="https://github.com/vtereshkov/umka-lang/tree/master/examples/lisp" rel="noopener noreferrer nofollow">интерпретатор Lisp</a>. На это меня вдохновил педагогический эксперимент Роба Пайка, одного из создателей языка Go. Недавно Пайк опубликовал маленький <a href="https://github.com/robpike/lisp" rel="noopener noreferrer nofollow">интерпретатор Lisp на Go</a>. Особенно впечатлило замечание Пайка, что описание интерпретатора заключено на одной странице 13 древнего <a href="http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf" rel="noopener noreferrer nofollow">руководства по Lisp 1.5</a>. Учитывая синтаксическое родство Umka и Go, было трудно не поддаться соблазну построить такой интерпретатор на Umka, но не буквальным переносом кода Пайка, а полностью заново, от основ. Надеюсь, знатоки Lisp и функциональных языков простят мне наивное изумление от соприкосновения с прекрасным.</p> <a href="https://habr.com/ru/articles/520764/?utm_campaign=520764&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 26 Sep 2020 18:22:25 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Lisp]]></category><category><![CDATA[Компиляторы]]></category>
      <category><![CDATA[интерпретатор]]></category><category><![CDATA[компилятор]]></category><category><![CDATA[функциональное программирование]]></category><category><![CDATA[interpreter]]></category><category><![CDATA[compiler]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Umka. Жизнь статической типизации в скриптовом языке]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/507510/</guid>
      <link>https://habr.com/ru/articles/507510/?utm_campaign=507510&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/webt/-q/xq/yt/-qxqytsketbliixens_pw_gcxro.png"><br>
<br>
В своё время посты на <a href="https://habr.com/ru/post/501002/">Хабре</a> и <a href="https://www.reddit.com/r/ProgrammingLanguages/comments/gf5w0p/umka_a_new_statically_typed_scripting_language/" rel="nofollow">Reddit</a> о статически типизированном скриптовом языке <a href="https://github.com/vtereshkov/umka-lang" rel="nofollow">Umka</a> вызвали весьма активную дискуссию. <br>
<br>
Прошедшие полтора месяца позволили мне избавиться от некоторых заблуждений, развить язык и дать чуть более вразумительные ответы на вопросы публики. Как и следовало ожидать, наиболее серьёзное испытание выпало на долю самой концепции статической типизации. Она осталась в основе языка, но потребовала компромиссов — в частности, для корректной сборки мусора. <br>
<br>
Появились первые замеры быстродействия интерпретатора в сравнении с Wren и Python — их результаты внушают оптимизм. Наконец, родился более реалистичный пример использования Umka по его основному назначению, т. е. как встраиваемого языка.<br> <a href="https://habr.com/ru/articles/507510/?utm_campaign=507510&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 21 Jun 2020 10:18:15 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[C]]></category><category><![CDATA[Go]]></category><category><![CDATA[Lua]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[static typing]]></category><category><![CDATA[scripting language]]></category><category><![CDATA[embedded languages]]></category><category><![CDATA[virtual machine]]></category><category><![CDATA[interpreter]]></category><category><![CDATA[статическая типизация]]></category><category><![CDATA[скриптовый язык]]></category><category><![CDATA[встраиваемые языки]]></category><category><![CDATA[виртуальная машина]]></category><category><![CDATA[интерпретатор]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Umka: новый статически типизированный скриптовый язык]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/501002/</guid>
      <link>https://habr.com/ru/articles/501002/?utm_campaign=501002&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/webt/dq/ug/mf/dqugmfwxgaoxca2y4b5rtckcpyu.png"><br>
Только что вышла первая версия разработанного мной статически типизированного встраиваемого скриптового языка <a href="https://github.com/vtereshkov/umka-lang" rel="nofollow">Umka</a>. Он призван сочетать гибкость привычных скриптовых языков с защитой от ошибок типов на этапе компиляции в байт-код. Основная идея языка — <i>Explicit is better than implicit</i> — позаимствована из «дзена Python», однако должна приобрести здесь несколько иной и более очевидный смысл. <br>
<br>
Сколь бы частными и субъективными ни были впечатления, побудившие меня взяться за разработку языка, я надеюсь, что замысел оказался не наивным. Под катом я кратко расскажу о возможностях языка и мотивах его создания.<br> <a href="https://habr.com/ru/articles/501002/?utm_campaign=501002&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sat, 09 May 2020 09:11:25 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[C]]></category><category><![CDATA[Go]]></category><category><![CDATA[Lua]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[embedded languages]]></category><category><![CDATA[scripting language]]></category><category><![CDATA[встраиваемые языки]]></category><category><![CDATA[скриптовые языки]]></category><category><![CDATA[интерпретаторы]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[виртуальная машина]]></category><category><![CDATA[c]]></category><category><![CDATA[go]]></category><category><![CDATA[lua]]></category><category><![CDATA[wren]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Самодельный компилятор и игровая библиотека Raylib. Опыт стыковки]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/492360/</guid>
      <link>https://habr.com/ru/articles/492360/?utm_campaign=492360&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/webt/8t/_f/bp/8t_fbpm_rwroajowpikfyrhm17w.png" alt="image"><br>
<br>
Говорят, что успех того или иного языка программирования или компилятора во многом зависит от его умения взаимодействовать со сторонним кодом. Конечно, «успех» любительского компилятора нужно понимать с известной долей условности и даже иронии. Однако и здесь интеграция с внешними библиотеками, написанными на С, может стать неплохой школой жизни.<br>
<br>
О моём компиляторе <a href="https://github.com/vtereshkov/xdpw" rel="nofollow">XD Pascal</a> уже было <a href="https://habr.com/ru/users/tereshkov/posts/">несколько постов</a> на Хабре. Компилятор написан предельно просто и целиком вручную, при этом язык имеет весьма нетипичные расширения — <a href="https://medium.com/@vtereshkov/how-i-implemented-go-style-interfaces-in-my-own-pascal-compiler-a0f8d37cd297" rel="nofollow">методы и интерфейсы, позаимствованные из Go</a>. На сегодняшний день базовый язык реализован полностью, работает самокомпиляция, введены простейшие оптимизации. Тут и возникло естественное желание наладить взаимодействие компилятора с какой-нибудь несложной игровой библиотекой. Выбор пал на <a href="https://www.raylib.com/" rel="nofollow">Raylib</a> — но никогда бы он на неё не пал, если бы я сразу предвидел её подводные камни. Невинная затея превратилась в борьбу с соглашениями о вызове.<br> <a href="https://habr.com/ru/articles/492360/?utm_campaign=492360&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 15 Mar 2020 08:54:19 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[C]]></category><category><![CDATA[Delphi]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Разработка игр]]></category><category><![CDATA[Windows]]></category>
      <category><![CDATA[паскаль]]></category><category><![CDATA[pascal]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[игровой движок]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Паскаль играет в Go. Реализация методов и интерфейсов в любительском компиляторе]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/478630/</guid>
      <link>https://habr.com/ru/articles/478630/?utm_campaign=478630&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<i>If I could export one feature of Go into other languages, it would be interfaces.</i> — Russ Cox<br>
<br>
<img src="https://habrastorage.org/webt/lp/5j/z2/lp5jz2lp6fj7kbw_zfjelevcm-e.png"><br>
<br>
Мой предельно простой <a href="https://github.com/vtereshkov/xdpw" rel="nofollow">компилятор Паскаля</a> уже становился предметом <a href="https://habr.com/ru/post/436694/">двух</a> <a href="https://habr.com/ru/post/462889/">публикаций</a> на Хабре. Со времени их написания язык обзавёлся всеми недостающими средствами, положенными стандартному Паскалю, и многими плюшками, добавленными в Паскаль компанией Borland в её золотую пору. Компилятор также научился ряду простейших локальных оптимизаций, достаточных хотя бы для того, чтобы глаза не кровоточили при взгляде на листинг дизассемблера.<br>
 <br>
Тем не менее дебри объектно-ориентированного программирования остались совершенно нетронутыми. Так почему бы компилятору не послужить теперь полигоном для экспериментов в этой области? И почему бы нам не почерпнуть вдохновение из слов Расса Кокса, вынесенных в эпиграф? Попробуем реализовать в Паскале методы и интерфейсы в стиле Go. Затея интересна хотя бы тем, что все популярные в прошлом компиляторы Паскаля (Delphi, Free Pascal) по сути заимствовали объектную модель из C++. Любопытно посмотреть, как на той же почве приживётся совсем иной подход, позаимствованный из Go. Если вы вслед за мной готовы запастись изрядной долей иронии, отбросить вопрос «Зачем?» и воспринять происходящее как игру, добро пожаловать под кат.<br> <a href="https://habr.com/ru/articles/478630/?utm_campaign=478630&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Thu, 05 Dec 2019 09:28:47 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Delphi]]></category><category><![CDATA[Go]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Ненормальное программирование]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[pascal]]></category><category><![CDATA[паскаль]]></category><category><![CDATA[go]]></category><category><![CDATA[golang]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[ооп]]></category><category><![CDATA[виртуальные функции]]></category><category><![CDATA[полиморфизм]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[История с продолжением: собственный компилятор Паскаля для Windows с чистого листа]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/462889/</guid>
      <link>https://habr.com/ru/articles/462889/?utm_campaign=462889&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Неожиданно тёплый приём, оказанный публикой Хабра <a href="https://habr.com/ru/post/436694/">моему посту</a> о самодельном компиляторе XD Pascal для MS-DOS, заставил меня задуматься. Не досадно ли, что любительский проект, которому я отдал немало сил, лежит у меня мёртвым грузом с тех самых пор, как из Windows полностью исчезла виртуальная машина DOS? Итогом размышлений стал <a href="https://github.com/vtereshkov/xdpw">компилятор XD Pascal для Windows</a>. Возможно, он лишился некоторой доли ностальгического шарма и утратил возможность наивной работы с графикой через прерывания BIOS. Однако переход на Windows вдохнул новую жизнь в проект и открыл дорогу к давней мечте — самокомпиляции.<br>
<br>
Как и прежде, никакими вспомогательными инструментами для автоматической генерации компиляторов я не пользовался. Такое упрямство может выглядеть странным, однако проект имел единственную цель — моё собственное удовольствие, и дополнительные инструменты послужили бы здесь лишь помехой. В этом смысле компилятор разрабатывался с чистого листа.<br>
<br>
<img src="https://habrastorage.org/webt/sj/ph/_5/sjph_5nwamax8td4bfxs_zmwuys.jpeg"><br> <a href="https://habr.com/ru/articles/462889/?utm_campaign=462889&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Sat, 10 Aug 2019 09:45:11 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Delphi]]></category><category><![CDATA[Алгоритмы]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Windows]]></category>
      <category><![CDATA[компилятор]]></category><category><![CDATA[pascal]]></category><category><![CDATA[паскаль]]></category><category><![CDATA[delphi]]></category><category><![CDATA[free pascal]]></category><category><![CDATA[windows]]></category><category><![CDATA[bootstrap]]></category><category><![CDATA[self-hosting compiler]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как Эдисон изобрёл беспроводную связь и ничего в ней не понял]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/454450/</guid>
      <link>https://habr.com/ru/articles/454450/?utm_campaign=454450&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Мы так привыкли ассоциировать беспроводную связь с радиоволнами, что нам кажется невозможным изобретение беспроводного телеграфа до знаменитых опытов Герца 1887 года. Беспроводная электромагнитная связь будто бы автоматически подразумевает радио и возвращает нас к вечному спору о приоритете Маркони — Лоджа — Попова. <br>
<br>
Однако ещё с 1831 года физикам был известен закон электромагнитной индукции. Хотя он и является необходимым условием существования радиоволн, но может применяться и самостоятельно, даже если о волнах ничего не известно. В частности, его можно употребить для создания беспроводного телеграфа. Одним из пионеров этого вида связи, задолго до Маркони, оказался Эдисон, проявив себя блестящим практиком — и, увы, совершенно безнадёжным теоретиком.<br>
<br>
<div style="text-align:center;"><img src="https://habrastorage.org/webt/vh/i3/zy/vhi3zyrcvmyjh_swazdoxly_u3y.jpeg" alt="image"></div><i>Scientific American</i><br> <a href="https://habr.com/ru/articles/454450/?utm_campaign=454450&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Sun, 02 Jun 2019 11:43:17 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[История IT]]></category><category><![CDATA[Научно-популярное]]></category><category><![CDATA[Физика]]></category><category><![CDATA[Электроника для начинающих]]></category>
      <category><![CDATA[радио]]></category><category><![CDATA[электромагнитные волны]]></category><category><![CDATA[эдисон]]></category><category><![CDATA[поляризация]]></category><category><![CDATA[телеграф]]></category><category><![CDATA[железнодорожный транспорт]]></category><category><![CDATA[изобретение]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[My Pascal compiler and Polish contemporary art]]></title>
      <guid isPermaLink="true">https://habr.com/en/articles/440372/</guid>
      <link>https://habr.com/en/articles/440372/?utm_campaign=440372&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<h2>Origins</h2><br/>
Several years ago I wrote a Pascal compiler. The motivation was simple: as a teenager, I had learnt from my first programming textbooks that a compiler is a very sophisticated thing. This claim eventually became a challenge and required to be tested by experience. <br/>
<br/>
<img src="https://habrastorage.org/webt/b2/ki/kn/b2kiknbgwl4rcqwjgtbex6ucfn8.jpeg" alt="image"/><br/>
<i>ha.art.pl</i><br/>
 <br/>
First, a simplistic <a href="https://en.wikipedia.org/wiki/PL/0">PL/0</a> compiler came into being, and later an almost fully-functional Pascal compiler for MS-DOS has grown from it. My source of inspiration was the <a href="http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf">Compiler Construction</a> book by Niklaus Wirth, the inventor of the Pascal language. I don't care if Wirth's views are now considered obsolete and have no direct connections to the IT mainstream, or if the compiler design fashion has changed. It is enough to know that his techniques are still simple, elegant, and — last but not least — <i>bring much fun</i>, since it is more appealing to parse a program source with a handwritten recursive descent parser and generate the machine code, rather than to call <a href="https://en.wikipedia.org/wiki/Yacc">yaccs</a>, <a href="https://en.wikipedia.org/wiki/GNU_Bison">bisons</a> and all their descendants.<br/>
 <br/>
My compiler's fate was not so trivial. It has lived two lives: the first one in my own hands, and the second in the hands of computer antiquarians from Poland. <br/>
 <a href="https://habr.com/ru/articles/440372/?utm_campaign=440372&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut"></a>]]></description>
      
      <pubDate>Fri, 15 Feb 2019 09:27:02 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Delphi]]></category><category><![CDATA[Игры и игровые консоли]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Старое железо]]></category>
      <category><![CDATA[compiler]]></category><category><![CDATA[ms dos]]></category><category><![CDATA[atari]]></category><category><![CDATA[pascal]]></category><category><![CDATA[delphi]]></category><category><![CDATA[art]]></category><category><![CDATA[literature]]></category><category><![CDATA[fiction]]></category><category><![CDATA[show]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Оценивание пространственной ориентации, или Как не бояться фильтров Махони и Маджвика]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/438060/</guid>
      <link>https://habr.com/ru/articles/438060/?utm_campaign=438060&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<h2>О чём речь</h2><br>
Появление на Хабре <a href="https://habr.com/ru/post/255661/">поста о фильтре Маджвика</a> было по-своему символическим событием. Видимо, всеобщее увлечение дронами возродило интерес к задаче оценивания ориентации тела по инерциальным измерениям. При этом традиционные методы, основанные на фильтре Калмана, перестали удовлетворять публику — то ли из-за высоких требований к вычислительным ресурсам, неприемлемых для дронов, то ли из-за сложной и неинтуитивной настройки параметров. <br>
<br>
Пост сопровождался весьма компактной и эффективной реализацией фильтра на C. Однако судя по комментариям, физический смысл этого кода, а равно и всей статьи, для кого-то остался туманным. Что ж, признаем честно: фильтр Маджвика — самый замысловатый из группы фильтров, основанных в общем-то на очень простых и элегантных принципах. Эти принципы я и рассмотрю в своём посте. Кода здесь не будет. Мой пост — не рассказ о какой-то конкретной реализации алгоритма оценивания ориентации, а скорее приглашение к изобретению собственных вариаций на заданную тему, которых может быть очень много.<br>
<br>
<img src="https://habrastorage.org/webt/lp/cl/le/lpclleof90lpwd-hoqa4kl5btpi.png" alt="image"><br> <a href="https://habr.com/ru/articles/438060/?utm_campaign=438060&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 04 Feb 2019 08:26:43 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Алгоритмы]]></category><category><![CDATA[Спутниковые системы навигации]]></category><category><![CDATA[Математика]]></category><category><![CDATA[Мультикоптеры]]></category><category><![CDATA[Робототехника]]></category>
      <category><![CDATA[imu]]></category><category><![CDATA[gnss]]></category><category><![CDATA[углы эйлера]]></category><category><![CDATA[матрица вращения]]></category><category><![CDATA[кватернионы]]></category><category><![CDATA[инерциальные датчики]]></category><category><![CDATA[гироскоп]]></category><category><![CDATA[акселерометр]]></category><category><![CDATA[магнитометр]]></category><category><![CDATA[квадрокоптер]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Мой компилятор Паскаля и польское современное искусство]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/436694/</guid>
      <link>https://habr.com/ru/articles/436694/?utm_campaign=436694&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<h2>Истоки</h2><br/>
Несколько лет назад я написал компилятор Паскаля. Мотивация была простой: в юности я узнал из своих первых книжек по программированию, что компилятор — вещь чрезвычайно сложная. Это утверждение засело занозой в мозгу и в конце концов потребовало проверки на опыте.<br/>
<br/>
<img src="https://habrastorage.org/webt/b2/ki/kn/b2kiknbgwl4rcqwjgtbex6ucfn8.jpeg" alt="image"/><br/>
<i>ha.art.pl</i><br/>
 <br/>
Сперва родился простейший компилятор <a href="https://en.wikipedia.org/wiki/PL/0">PL/0</a>, а из него постепенно вырос почти полнофункциональный компилятор Паскаля для MS-DOS. Вдохновением мне служила книга <a href="http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf">Compiler Construction</a>, написанная создателем языка Паскаль Никлаусом Виртом. И пусть взгляды Вирта уже устарели и утратили всякую связь с реалиями ИТ, а компиляторы делают совсем не так, как учил Вирт. Однако его методы по-прежнему просты, изящны, а главное — <i>приносят радость</i>, ведь самостоятельно разобрать текст программы рекурсивным спуском и сгенерировать машинный код намного заманчивее, чем призывать на помощь <a href="https://en.wikipedia.org/wiki/Yacc">яков</a>, <a href="https://en.wikipedia.org/wiki/GNU_Bison">бизонов</a> и всех их преемников.<br/>
<br/>
Судьба моего компилятора оказалась не самой тривиальной. Он прожил две жизни: первую — в моих руках, вторую — в руках польских ценителей компьютерных древностей. <br/>
 <a href="https://habr.com/ru/articles/436694/?utm_campaign=436694&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut"></a>]]></description>
      
      <pubDate>Sat, 19 Jan 2019 09:05:29 GMT</pubDate>
      <dc:creator><![CDATA[Tereshkov]]></dc:creator>
      <category><![CDATA[Delphi]]></category><category><![CDATA[Игры и игровые консоли]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Старое железо]]></category>
      <category><![CDATA[компилятор]]></category><category><![CDATA[ms dos]]></category><category><![CDATA[atari]]></category><category><![CDATA[pascal]]></category><category><![CDATA[паскаль]]></category><category><![CDATA[delphi]]></category><category><![CDATA[искусство]]></category><category><![CDATA[художественная литература]]></category><category><![CDATA[перформанс]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
