<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blogs on The Hare programming language</title>
    <link>https://harelang.org/blog/</link>
    <description>Recent content in Blogs on The Hare programming language</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 13 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://harelang.org/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Hare 0.26.0 released</title>
      <link>https://harelang.org/blog/2026-02-13-hare-0.26.0-released/</link>
      <pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2026-02-13-hare-0.26.0-released/</guid>
      <description>&lt;p&gt;I am proud to announce the release of Hare 0.26.0 today. 🎉 This is the latest&#xA;stable Hare release since last year&amp;rsquo;s release of Hare 0.25.2. This new release&#xA;includes a handful of new features and a modest number of bug fixes and minor&#xA;improvements.&lt;/p&gt;&#xA;&lt;p&gt;We were also pleased to welcome Joe Finney as the latest Hare maintainer during&#xA;this release cycle! Joe has been a steadfast contributor and code reviewer for&#xA;Hare for some time now and it&amp;rsquo;s a pleasure to formally invite him to the&#xA;maintainer team.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hare meetup at FOSDEM 2026</title>
      <link>https://harelang.org/blog/2026-01-22-hare-meetup-at-fosdem/</link>
      <pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2026-01-22-hare-meetup-at-fosdem/</guid>
      <description>&lt;p&gt;The Hare community is hosting a meetup at FOSDEM 2026 and we would love to meet&#xA;you there and discuss your projects and the direction of the Hare programming&#xA;language in the coming year.&lt;/p&gt;&#xA;&lt;p&gt;We will be meeting in UA4.228 at 14:00 on Saturday:&#xA;&lt;a href=&#34;https://fosdem.org/2026/schedule/event/EKCFEH-hare_community_meetup/&#34;&gt;check the schedule&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;See you there!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing builtwithhare.org</title>
      <link>https://harelang.org/blog/2025-08-22-builtwithhare.org/</link>
      <pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2025-08-22-builtwithhare.org/</guid>
      <description>&lt;p&gt;One of the Hare community&amp;rsquo;s shared values is a belief in the importance of good&#xA;documentation. &lt;a href=&#34;https://harelang.org/documentation/usage/documentation.html&#34;&gt;haredoc&lt;/a&gt; is a great and accessible resource both for writing and&#xA;reading documentation &amp;ndash; you can just comment your code to produce docs, and&#xA;reading them is just a few keystrokes away in your terminal emulator.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-hare&#34; data-lang=&#34;hare&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;haredoc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Creates a new file with the given mode if it doesn&amp;#39;t already exist and opens&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// it for writing.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Only the permission bits of the mode are used. If other bits are set, they&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// are discarded.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// The return value is an unbuffered [[io::file]]. For buffered I/O, see&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// [[create_buffered]]. To create a file without opening it, see [[mkfile]].&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flag&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WRONLY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TRUNC&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Docs written with haredoc can also be formatted for the web, and &lt;a href=&#34;https://docs.harelang.org&#34;&gt;the standard&#xA;library documentation&lt;/a&gt; available here on harelang.org&#xA;is based on this approach. However, this can only get you so far &amp;ndash; publishing&#xA;haredocs on the web requires having a place to &lt;em&gt;host&lt;/em&gt; it, a domain name and some&#xA;kind of web hosting &amp;ndash; and haredocs are not a comprehensive solution for good&#xA;documentation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Upcoming changes to Hare&#39;s event loop library</title>
      <link>https://harelang.org/blog/2025-07-30-coming-changes-to-hare-ev/</link>
      <pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2025-07-30-coming-changes-to-hare-ev/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://git.sr.ht/~sircmpwn/hare-ev&#34;&gt;hare-ev&lt;/a&gt; is an important Hare library that provides an event loop for Hare&#xA;programs, similar to &lt;a href=&#34;https://libuv.org/&#34;&gt;libuv&lt;/a&gt;, which most Hare programs which perform&#xA;asynchronous I/O depend on for that purpose. I&amp;rsquo;ve been working on some design&#xA;improvements over the past couple of weeks which will introduce major breaking&#xA;changes, but also bring many important features &amp;ndash; I&amp;rsquo;d like to share these with&#xA;you now.&lt;/p&gt;&#xA;&lt;p&gt;Highlights include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;More direct control over ev&amp;rsquo;s memory management&lt;/li&gt;&#xA;&lt;li&gt;Support for multiple uniform I/O requests in-flight at once&lt;/li&gt;&#xA;&lt;li&gt;Support for parallelization of certain non-uniform I/O requests, e.g. send and recv&lt;/li&gt;&#xA;&lt;li&gt;Idempotency of request cancellation and reuse of request objects&lt;/li&gt;&#xA;&lt;li&gt;Improved support for high-level I/O requests, e.g. DNS queries or HTTP requests&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;To assist in migrating your code to adapt to the changes, and to introduce these&#xA;new features, let&amp;rsquo;s go over them in detail now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hare 0.25.2 released</title>
      <link>https://harelang.org/blog/2025-06-21-hare-0.25.2-released/</link>
      <pubDate>Sat, 21 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2025-06-21-hare-0.25.2-released/</guid>
      <description>&lt;p&gt;I am pleased to announce the release of Hare 0.25.2 today. 🎉 It has been almost&#xA;one year since the previous release, &lt;a href=&#34;https://harelang.org/blog/2024-07-13-hare-0.24.2-release/&#34;&gt;Hare 0.24.2&lt;/a&gt;, and the new release is&#xA;packed with the numerous language features, standard libarary features, and&#xA;countless bugfixes and small improvements which have been implemented since. I&amp;rsquo;m&#xA;excited to share the highlights with you today.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hare 0.25.2&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;dl&gt;&#xA;&lt;dt&gt;Release notes&lt;/dt&gt;&#xA;&lt;dd&gt;&lt;a href=&#34;https://git.sr.ht/~sircmpwn/hare/refs/0.25.2&#34;&gt;Hare 0.25.2&lt;/a&gt;&lt;/dd&gt;&#xA;&lt;dt&gt;Download&lt;/dt&gt;&#xA;&lt;dd&gt;&#xA;  compiler &lt;a href=&#34;https://git.sr.ht/~sircmpwn/harec/archive/0.25.2.tar.gz&#34;&gt;harec-0.25.2.tar.gz&lt;/a&gt;&#xA;  &amp;bullet;&#xA;  stdlib &lt;a href=&#34;https://git.sr.ht/~sircmpwn/hare/archive/0.25.2.tar.gz&#34;&gt;hare-0.25.2.tar.gz&lt;/a&gt;&#xA;&lt;/dd&gt;&#xA;&lt;/dl&gt;&#xA;&lt;p&gt;&lt;em&gt;Hare 0.25.2 is compatible with version 1.2 of &lt;a href=&#34;https://c9x.me/compile/&#34;&gt;qbe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>hare-update assists in addressing breaking changes in your code</title>
      <link>https://harelang.org/blog/2025-06-11-hare-update/</link>
      <pubDate>Wed, 11 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2025-06-11-hare-update/</guid>
      <description>&lt;script src=&#34;https://harelang.org/asciinema-player.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;p&gt;We&amp;rsquo;re working on a new tool to release along the next upcoming stable release of&#xA;Hare (likely Hare 0.25.2, or 0.25.3, following our &lt;a href=&#34;https://harelang.org/blog/2024-02-16-hare-0.24.0-released/&#34;&gt;release policy&lt;/a&gt;) &amp;ndash;&#xA;hare-update. The coming Hare release includes a number of small breaking&#xA;changes, as per usual during Hare&amp;rsquo;s development phase, but one in particular is&#xA;relatively odious for users to deal with: nomem.&lt;/p&gt;&#xA;&lt;p&gt;Handling error cases is mandatory in Hare, even if you just assert on error&#xA;(terminating the program) &amp;ndash; you have to do &lt;em&gt;something&lt;/em&gt; about errors. However,&#xA;failure to allocate memory has long been an exception to this rule, and in many&#xA;cases it was not possible for Hare programs to handle this sort of failure&#xA;properly. The &amp;ldquo;nomem&amp;rdquo; patches which Pasta landed in Hare master several months&#xA;ago addresses this oversight, but in so doing all allocations throughout the&#xA;Hare ecosystem can now return errors that they previously would not and which&#xA;programmers are required to modify their code to address.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A tour of upcoming RFCs</title>
      <link>https://harelang.org/blog/2025-06-02-planned-breaking-changes/</link>
      <pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2025-06-02-planned-breaking-changes/</guid>
      <description>&lt;p&gt;As part of &lt;a href=&#34;https://harelang.org/blog/2023-11-08-100-year-language/&#34;&gt;our goal&lt;/a&gt; to become a 100-year programming language, Hare&amp;rsquo;s&#xA;grammar and semantics will be frozen upon reaching version 1.0. But, before that&#xA;point in time, we will make occasional breaking changes to introduce new&#xA;features and fix Hare&amp;rsquo;s present shortcomings. This process allows us to become&#xA;more confident in Hare&amp;rsquo;s long-term viability now, before we commit to the same&#xA;design indefinitely. To make this easier on Hare programmers, we are working on&#xA;a tool to assist in migrating codebases to address breaking changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hare 0.24.2 released</title>
      <link>https://harelang.org/blog/2024-07-13-hare-0.24.2-release/</link>
      <pubDate>Sun, 14 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2024-07-13-hare-0.24.2-release/</guid>
      <description>&lt;p&gt;I am pleased to announce the release of Hare 0.24.2 🎉. This release comes with&#xA;new language features, improvements to the standard library, and a healthy dose&#xA;of breaking changes. Let&amp;rsquo;s go through the highlights together.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hare 0.24.2&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;dl&gt;&#xA;&lt;dt&gt;Release notes&lt;/dt&gt;&#xA;&lt;dd&gt;&lt;a href=&#34;https://git.sr.ht/~sircmpwn/hare/refs/0.24.2&#34;&gt;Hare 0.24.2&lt;/a&gt;&lt;/dd&gt;&#xA;&lt;dt&gt;Download&lt;/dt&gt;&#xA;&lt;dd&gt;&#xA;  compiler &lt;a href=&#34;https://git.sr.ht/~sircmpwn/harec/archive/0.24.2.tar.gz&#34;&gt;harec-0.24.2.tar.gz&lt;/a&gt;&#xA;  &amp;bullet;&#xA;  stdlib &lt;a href=&#34;https://git.sr.ht/~sircmpwn/hare/archive/0.24.2.tar.gz&#34;&gt;hare-0.24.2.tar.gz&lt;/a&gt;&#xA;&lt;/dd&gt;&#xA;&lt;/dl&gt;&#xA;&lt;p&gt;&lt;em&gt;Hare 0.24.2 is compatible with version 1.2 of &lt;a href=&#34;https://c9x.me/compile/&#34;&gt;qbe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;New here? Hare is a systems programming language designed to be simple and&#xA;robust, using a static type system, manual memory management, and a minimal&#xA;runtime. You can learn about it &lt;a href=&#34;https://harelang.org/&#34;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing for-each loops for Hare</title>
      <link>https://harelang.org/blog/2024-04-01-introducing-for-each-loops-in-hare/</link>
      <pubDate>Tue, 02 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2024-04-01-introducing-for-each-loops-in-hare/</guid>
      <description>&lt;p&gt;Today, for-each loops were merged into Hare&amp;rsquo;s development branch! This includes&#xA;patches for the compiler, standard library, specification and tutorial. I want&#xA;to give some background on how we designed for-each loops and what challenges&#xA;are associated with implementing them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-kind-of-for-each-loops-do-we-want&#34;&gt;What kind of for-each loops do we want?&lt;/h2&gt;&#xA;&lt;p&gt;Before for-each loops, you could iterate over an array/slice like so:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-hare&#34; data-lang=&#34;hare&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0z&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;printfln&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Having an index can be very powerful if you require it. However, in most cases,&#xA;you will not, and I&amp;rsquo;ve found that using indices makes code less readable. This&#xA;is how a for-each loop over an array/slice could look:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Online documentation improvements for harelang.org</title>
      <link>https://harelang.org/blog/2024-02-26-docs-overhaul/</link>
      <pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2024-02-26-docs-overhaul/</guid>
      <description>&lt;p&gt;This morning, I put the finishing touches on and shipped a new set of online&#xA;docs for harelang.org — check it out! The bulk of the changes live at&#xA;&lt;a href=&#34;https://harelang.org/documentation/&#34;&gt;harelang.org/documentation/&lt;/a&gt;, and include a shoring up of many&#xA;under-documented areas of Hare usage, such as cross-compiling and freestanding&#xA;support, pulls together a disparate patchwork of documentation littered across&#xA;Hare&amp;rsquo;s ecosystem into a cohesive quilt, and presents it all in a much more&#xA;accessible and navigable manner.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hare 0.24.0 released, and Hare&#39;s new release policy</title>
      <link>https://harelang.org/blog/2024-02-16-hare-0.24.0-released/</link>
      <pubDate>Fri, 16 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2024-02-16-hare-0.24.0-released/</guid>
      <description>&lt;p&gt;Hare&amp;rsquo;s first versioned release, 0.24.0, was tagged and shipped today. 🎉 We have&#xA;written up a new &lt;a href=&#34;https://harelang.org/documentation/process/release.html&#34;&gt;release policy&lt;/a&gt; for Hare to govern this and future&#xA;releases. Here&amp;rsquo;s the rundown on how this is going to work.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;New here? Hare is a systems programming language designed to be simple and&#xA;robust, using a static type system, manual memory management, and a minimal&#xA;runtime. You can learn about it &lt;a href=&#34;https://harelang.org/&#34;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hare is currently at a level of sophistication where it is useful for many kinds&#xA;of projects, and is being used for those projects. Many Hare users want to ship&#xA;their Hare projects to users, and as such, software written in Hare is making&#xA;its way into Linux distributions and the like. However, due to Hare&amp;rsquo;s unstable&#xA;nature, we have not provided any versioned releases, forcing any distributions&#xA;who want to package Hare to package Hare&amp;rsquo;s master branch, which is less than&#xA;ideal. We also have no good means of distributing news of breaking changes, or&#xA;tracking which versions of Hare are affected by which changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New debugging features coming to Hare</title>
      <link>https://harelang.org/blog/2024-02-01-debugging-features/</link>
      <pubDate>Thu, 01 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2024-02-01-debugging-features/</guid>
      <description>&lt;p&gt;We just merged a series of patches for Hare that adds a number of nice features&#xA;for debugging Hare programs. I want to introduce these features to you, and&#xA;share a bit about what&amp;rsquo;s going on that makes them possible. Let&amp;rsquo;s look at some&#xA;kinds of problems which invoke these new debugging features.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s start with a simple case: your program has an assertion failure. You get a&#xA;pretty backtrace now:&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Happy fourth birthday, Hare!</title>
      <link>https://harelang.org/blog/2023-12-27-hare-4th-birthday/</link>
      <pubDate>Wed, 27 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2023-12-27-hare-4th-birthday/</guid>
      <description>&lt;p&gt;Happy birthday, Hare! Today is December 27th, 2023 &amp;ndash; four years after the&#xA;initial commit of the original Hare prototype repository. Let&amp;rsquo;s take this&#xA;opportunity to celebrate Hare&amp;rsquo;s birthday and look over some ancient history&#xA;together, in particular the early prototype implementation of Hare and all of&#xA;its good old &lt;a href=&#34;https://tvtropes.org/pmwiki/pmwiki.php/Main/EarlyInstallmentWeirdness&#34;&gt;early installment weirdness&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;commit d8941a4d35d109030250f8f017d771df5ad69a66&#xA;Author: Drew DeVault &amp;lt;sir@cmpwn.com&amp;gt;&#xA;Date:   Fri Dec 27 14:07:08 2019 -0700&#xA;&#xA;    Initial commit&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This commit from the old git repository introduced a few&#xA;early pieces of Hare, not all of which survive to this day. It included:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Porting Hare to OpenBSD</title>
      <link>https://harelang.org/blog/2023-12-01-porting-hare-to-openbsd/</link>
      <pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2023-12-01-porting-hare-to-openbsd/</guid>
      <description>&lt;p&gt;&lt;em&gt;OpenBSD support is the first new platform added to Hare since it was made&#xA;available to the public in April 2022, initially supporting Linux and FreeBSD.&#xA;Hare contributor Pasta writes for the Hare blog today about how the port was&#xA;done.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I was always very interested in OpenBSD and a few months ago, I decided to give&#xA;it a try. I&amp;rsquo;ve quickly fallen in love with it! There is, however, a big problem:&#xA;Hare does not fully support OpenBSD! So, I decided to port it and I am happy to&#xA;announce that my work was merged yesterday and OpenBSD is now fully supported by&#xA;Hare. Let me show you some of the tricky stuff that was involved in the port.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hare aims to become a 100-year programming language</title>
      <link>https://harelang.org/blog/2023-11-08-100-year-language/</link>
      <pubDate>Wed, 08 Nov 2023 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2023-11-08-100-year-language/</guid>
      <description>&lt;p&gt;There are a number of languages attempting something similar to what Hare is&#xA;doing by positioning itself as an alternative to C. However, there is an&#xA;important trait which I think is necessary to understand Hare&amp;rsquo;s ambitions in&#xA;this space: Hare is explicitly attempting to emulate C&amp;rsquo;s 50+ year staying power.&#xA;One of Hare&amp;rsquo;s explicit design goals is to produce a programming language which&#xA;will be stable over a very long period of time, exceeding the lifetime of its&#xA;authors: I think of Hare as a 100-year programming language.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scaling the Hare community</title>
      <link>https://harelang.org/blog/2023-08-28-scaling-the-community/</link>
      <pubDate>Mon, 28 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2023-08-28-scaling-the-community/</guid>
      <description>&lt;p&gt;I started the Hare project on December 27th, 2019, with a small commit&#xA;introducing a lexer and a yacc parser for prototyping the grammar. In the nearly&#xA;four years since then, a community of over one hundred contributors has grown&#xA;around the project, including some eight co-maintainers working together to&#xA;incorporate dozens of patches every week.&lt;/p&gt;&#xA;&lt;p&gt;Over the past several weeks, I have been working with the other maintainers and&#xA;project leaders to discuss possible reforms to the community structure and&#xA;workflow to reduce bottlenecks and streamline the work, to reduce frustration&#xA;with slow patch approval and make it easier for people to work autonomously&#xA;— and to reduce the, uh, &amp;ldquo;Drew bottleneck&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>All rabbits welcome</title>
      <link>https://harelang.org/blog/2023-07-03-all-rabbits-welcome/</link>
      <pubDate>Mon, 03 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2023-07-03-all-rabbits-welcome/</guid>
      <description>&lt;p&gt;We are the maintainers of the Hare programming language, and we support the&#xA;right of all people to self-expression, and are building a community in which&#xA;all forms of self-expression and identity are welcome, with the exception of&#xA;expressions of hate and intolerance.&lt;/p&gt;&#xA;&lt;p&gt;The Hare community values its professional tone, in which all members are&#xA;treated with respect and tolerance as we work towards our shared goals. We&#xA;celebrate each other and the role we each play in making this community&#xA;welcoming and successful, and the value each of our personal identities brings&#xA;to the project and each other. We also provide a safe space in which each&#xA;individual&amp;rsquo;s challenges in participating in our community can be heard, and&#xA;addressed, to ensure that participants of all backgrounds and experiences are&#xA;welcome here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hare is a boring programming language</title>
      <link>https://harelang.org/blog/2022-11-27-hare-is-boring/</link>
      <pubDate>Sun, 27 Nov 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-11-27-hare-is-boring/</guid>
      <description>&lt;p&gt;Hare is a boring programming language. It has relatively few features,&#xA;exhaustively detailed in a short 67-page &lt;a href=&#34;https://harelang.org/specification.pdf&#34;&gt;language specification&lt;/a&gt;. There&#xA;are no macros, generics, or metaprogramming features. You just write the code&#xA;and it does what you said to. Hare aims to never surprise you.&lt;/p&gt;&#xA;&lt;p&gt;Many new systems programming languages are exploring big ideas and novel tools.&#xA;Zig has comptime, Rust has procedural macros, and so on — but Hare lacks&#xA;any grand ideas. Our biggest idea is ad-hoc tagged unions, which is not&#xA;particularly interesting or innovative.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making Hare more debuggable</title>
      <link>https://harelang.org/blog/2022-11-04-making-hare-debuggable/</link>
      <pubDate>Fri, 04 Nov 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-11-04-making-hare-debuggable/</guid>
      <description>&lt;p&gt;Hare programs need to be easier to debug. This blog post outlines our plans for&#xA;improving the situation. For a start, we&amp;rsquo;d like to implement the following&#xA;features:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Detailed backtraces&lt;/li&gt;&#xA;&lt;li&gt;Address sanitization&lt;/li&gt;&#xA;&lt;li&gt;New memory allocator&lt;/li&gt;&#xA;&lt;li&gt;DWARF support&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;These are roughly ordered by complexity — let&amp;rsquo;s take a look at each one in&#xA;detail.&lt;/p&gt;&#xA;&lt;h2 id=&#34;detailed-backtraces&#34;&gt;Detailed backtraces&lt;/h2&gt;&#xA;&lt;p&gt;Hare programs are always compiled with frame pointers. On x86_64, this involves&#xA;generating the following entry point for each function:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cross-compiling Hare programs is easy</title>
      <link>https://harelang.org/blog/2022-09-06-cross-builds-with-hare/</link>
      <pubDate>Tue, 06 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-09-06-cross-builds-with-hare/</guid>
      <description>&lt;p&gt;Cross-compiling in Hare couldn&amp;rsquo;t be easier:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ uname -m&#xA;x86_64&#xA;$ hare build -o main -t riscv64 main.ha&#xA;$ file main&#xA;main: ELF 64-bit LSB executable, UCB RISC-V, double-float ABI, version 1 (SYSV), statically linked, with debug_info, not stripped&#xA;$ qemu-riscv64 ./main&#xA;Hello world!&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That&amp;rsquo;s it! As a bonus, since Hare programs are statically linked, you don&amp;rsquo;t even&#xA;need to set up a sysroot to run this program in an emulator like qemu-riscv64.&lt;/p&gt;</description>
    </item>
    <item>
      <title>powerctl: A small case study in Hare for systems programming</title>
      <link>https://harelang.org/blog/2022-08-28-powerctl-a-hare-case-study/</link>
      <pubDate>Sun, 28 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-08-28-powerctl-a-hare-case-study/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is mirrored from &lt;a href=&#34;https://drewdevault.com/2022/08/28/powerctl-a-hare-case-study.html&#34;&gt;Drew DeVault&amp;rsquo;s blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sr.ht/~sircmpwn/powerctl/&#34;&gt;powerctl&lt;/a&gt; is a little weekend project I put&#xA;together to provide a simple tool for managing power states on Linux. I had&#xA;previously put my laptop into suspend with a basic &amp;ldquo;echo mem | doas tee&#xA;/sys/power/state&amp;rdquo;, but this leaves a lot to be desired. I have to use doas to&#xA;become root, and it&amp;rsquo;s annoying to enter my password — not to mention&#xA;difficult to use in a script or to attach to a key binding. powerctl is the&#xA;solution: a small 500-line Hare program which provides comprehensive support for&#xA;managing power states on Linux for non-privileged users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Martian time in Hare</title>
      <link>https://harelang.org/blog/2022-08-01-martian-time-in-hare/</link>
      <pubDate>Mon, 01 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-08-01-martian-time-in-hare/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;This is a republication from &lt;a href=&#34;https://torresjrjr.com/archive/2022-08-01-hare-martian-time/&#34;&gt;Byron Torres&lt;/a&gt;&amp;rsquo;s blog.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;preface&#34;&gt;Preface&lt;/h2&gt;&#xA;&lt;p&gt;Development of the &lt;a href=&#34;https://torresjrjr.com/archive/2022-05-02-welcome-harelang/&#34;&gt;Hare programming langauge&lt;/a&gt; is chugging along.&#xA;From what I&amp;rsquo;ve gathered from IRC, Drew Devault has been spending most of&#xA;his hare-dev time on &lt;a href=&#34;https://drewdevault.com/2022/06/13/helios.html&#34;&gt;Helios&lt;/a&gt;, in an effort to throw real code at&#xA;Hare and scrutinize its design choices. For example, since then, a&#xA;&lt;code&gt;@threadlocal&lt;/code&gt; keyword has come into consideration.&lt;/p&gt;&#xA;&lt;p&gt;My focus area is naturally the &lt;a href=&#34;https://docs.harelang.org/datetime&#34;&gt;datetime&lt;/a&gt; and &lt;a href=&#34;https://docs.harelang.org/time/chrono&#34;&gt;time::chrono&lt;/a&gt;&#xA;modules of the standard library, both of which I primarily wrote, and&#xA;which I maintain and intend to for a long time. These modules too have&#xA;been made with unique design choices.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Safety features of the Hare programming language</title>
      <link>https://harelang.org/blog/2022-06-21-safety-features/</link>
      <pubDate>Tue, 21 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-06-21-safety-features/</guid>
      <description>&lt;p&gt;Hare offers many important advances over its main inspiration, C, when it comes&#xA;to safety features. These features prevent the programmer from making mistakes,&#xA;ideally without preventing them from doing what they want to do. Some of these&#xA;features reduce the risk of classic security problems, such as buffer overflows,&#xA;but they are generally designed with the broader hope of reducing the risk of&#xA;your program having bugs of any kind. After all, any bug can become a security&#xA;vulnerability under the right conditions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing regular expressions in Hare</title>
      <link>https://harelang.org/blog/2022-06-03-implementing-regular-expressions-in-hare/</link>
      <pubDate>Fri, 03 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-06-03-implementing-regular-expressions-in-hare/</guid>
      <description>&lt;p&gt;Regular expressions are one of those tools that we kind of take for granted.&#xA;They&amp;rsquo;re really powerful and useful in so many situations, but most people don&amp;rsquo;t&#xA;quite understand how they work under the hood. I&amp;rsquo;m Vlad, the developer who&#xA;implemented Hare&amp;rsquo;s regular expression engine, and I thought I&amp;rsquo;d show you why&#xA;regular expressions aren&amp;rsquo;t as scary as they might seem at first sight. In this&#xA;post, I&amp;rsquo;d like to take a look at how Hare&amp;rsquo;s implementation works, as well as how&#xA;an end-user would go about using it. Let&amp;rsquo;s get started.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Hare code generator for finding ioctl numbers</title>
      <link>https://harelang.org/blog/2022-05-14-generating-ioctls/</link>
      <pubDate>Sat, 14 May 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-05-14-generating-ioctls/</guid>
      <description>&lt;p&gt;Modern Unix derivatives have this really bad idea called &lt;a href=&#34;https://pubs.opengroup.org/onlinepubs/9699919799/functions/ioctl.html&#34;&gt;ioctl&lt;/a&gt;. It&amp;rsquo;s a&#xA;function which performs arbitrary operations on a file descriptor. It is&#xA;essentially the kitchen sink of modern Unix derivatives, particularly Linux, in&#xA;which they act almost like a second set of extra syscalls. For example, to get&#xA;the size of the terminal window, you use an ioctl specific to TTY file&#xA;descriptors:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-hare&#34; data-lang=&#34;hare&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wsz&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;winsize&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;match&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ioctl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TIOCGWINSZ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wsz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;errno&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;switch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EBADFD&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;invalid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ENOTTY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unsupported&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;abort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Unexpected error from ioctl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ttysize&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&#x9;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rows&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wsz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ws_row&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&#x9;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;columns&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wsz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ws_col&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This code performs the ioctl syscall against the provided file descriptor &amp;ldquo;fd&amp;rdquo;,&#xA;using the &amp;ldquo;TIOCGWINSZ&amp;rdquo; operation, and setting the parameter to a pointer to a&#xA;winsize structure. There are thousands of ioctls provided by Linux, and each of&#xA;them is assigned a constant like TIOCGWINSZ (0x5413). Some constants, including&#xA;this one, are assigned somewhat arbitrarily. However, some are assigned with&#xA;some degree of structure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing an SSH agent in Hare</title>
      <link>https://harelang.org/blog/2022-05-09-hare-ssh/</link>
      <pubDate>Mon, 09 May 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-05-09-hare-ssh/</guid>
      <description>&lt;p&gt;In the process of writing an SSH agent for &lt;a href=&#34;https://sr.ht/~sircmpwn/himitsu&#34;&gt;Himitsu&lt;/a&gt;, I needed to implement many&#xA;SSH primitives from the ground up in Hare, now available via &lt;a href=&#34;https://sr.ht/~sircmpwn/hare-ssh&#34;&gt;hare-ssh&lt;/a&gt;. Today,&#xA;I&amp;rsquo;m going to show you how it works!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: This blog post deals with cryptography-related code. The code&#xA;you&amp;rsquo;re going to see today is incomplete, unaudited, and largely hasn&amp;rsquo;t even seen&#xA;any code review. Let me begin with a quote from the &amp;ldquo;crypto&amp;rdquo; module&amp;rsquo;s&#xA;documentation in the Hare standard library:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Will Hare replace C? Or Rust? Or Zig? Or anything else?</title>
      <link>https://harelang.org/blog/2022-05-02-what-is-hares-scope/</link>
      <pubDate>Mon, 02 May 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-05-02-what-is-hares-scope/</guid>
      <description>&lt;p&gt;Nope.&lt;/p&gt;&#xA;&lt;p&gt;If the short answer leaves you wanting, keep reading. I must admit that this&#xA;sentence from the &lt;a href=&#34;https://harelang.org/blog/2022-04-25-announcing-hare/&#34;&gt;Hare announcement&lt;/a&gt; may have caused some confusion:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Hare is most similar to C, and almost all programs written in C can also be&#xA;written in Hare.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is especially true in the context of the rising and competing compliment of&#xA;&amp;ldquo;C replacement&amp;rdquo; languages, of which some are explicit about their goals to&#xA;replace C, such as Rust. There is a movement to rewrite existing C code in Rust&#xA;and by such means take over the world, mwahahaha. Hare is not interested in&#xA;taking over the world, and I do not recommend that programmers start rewriting&#xA;their C programs in Hare.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing the Hare programming language</title>
      <link>https://harelang.org/blog/2022-04-25-announcing-hare/</link>
      <pubDate>Mon, 25 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-04-25-announcing-hare/</guid>
      <description>&lt;p&gt;Hare is a systems programming language designed to be simple, stable, and&#xA;robust. Hare uses a static type system, manual memory management, and a minimal&#xA;runtime. It is well-suited to writing operating systems, system tools,&#xA;compilers, networking software, and other low-level, high performance tasks.&lt;/p&gt;&#xA;&lt;p&gt;Here is my favorite example program, which computes its own SHA-256 hash:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-hare&#34; data-lang=&#34;hare&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;crypto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encoding&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hash&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha256&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;main.ha&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;defer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha256&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SIZE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;u8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hash&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#x9;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We have been developing Hare in private for about two and a half years, and&#xA;have decided that it&amp;rsquo;s now time to offer it to you to play with. Hare is a&#xA;reasonably (though not entirely) complete programming language that you can pick&#xA;up today and start writing interesting and useful systems software with. If&#xA;you&amp;rsquo;d like to try it out, check out the &lt;a href=&#34;https://harelang.org/documentation/install/&#34;&gt;installation procedure&lt;/a&gt;, then the &lt;a href=&#34;https://harelang.org/tutorials/introduction/&#34;&gt;Hare&#xA;tutorial&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chronology in Hare</title>
      <link>https://harelang.org/blog/2022-04-17-chronology-in-hare/</link>
      <pubDate>Sun, 17 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-04-17-chronology-in-hare/</guid>
      <description>&lt;p&gt;Date and time support has come to Hare, with the introduction of two new&#xA;modules to the standard library, written by Hare contributors Byron&#xA;Torres (Hi, there! Today&amp;rsquo;s blog guest) and Vlad-Stefan Harbuz.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.harelang.org/time/chrono&#34;&gt;time::chrono&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.harelang.org/datetime&#34;&gt;datetime&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With these, we are now able to handle human notions of time: dates, the&#xA;Gregorian calendar, wall-times, timezones, the &amp;ldquo;Olson&amp;rdquo; Timezone&#xA;database, timezone transitions (daylight saving time, etc.), and&#xA;timescales (leap seconds, etc.). We can also parse, format, and&#xA;programmatically construct datetimes of high precision, and perform&#xA;elementary calendrical arithmetic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing a MIME database in Hare</title>
      <link>https://harelang.org/blog/2022-01-28-implementing-mime-in-hare/</link>
      <pubDate>Fri, 28 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2022-01-28-implementing-mime-in-hare/</guid>
      <description>&lt;p&gt;Recently, I have been working on implementing a parser for media types (commonly&#xA;called MIME types) and a database which maps media types to file extensions and&#xA;vice-versa. I thought this would be an interesting module to blog about, given&#xA;that it&amp;rsquo;s only about 250 lines of code, does something useful and interesting,&#xA;and demonstrates a few interesting Hare concepts.&lt;/p&gt;&#xA;&lt;p&gt;The format for media types is more-or-less defined by &lt;a href=&#34;https://datatracker.ietf.org/doc/html/rfc2045&#34;&gt;RFC 2045&lt;/a&gt;, specifically&#xA;&lt;a href=&#34;https://datatracker.ietf.org/doc/html/rfc2045#section-5.1&#34;&gt;section 5.1&lt;/a&gt;. The specification is not great. The grammar shown here is copied&#xA;and pasted from parts of larger grammars in older RFCs, RFCs which are equally&#xA;poorly defined. For example, the quoted-string nonterminal is never defined&#xA;here, but instead comes from RFC 822, which defines it but also states that it&#xA;can be &amp;ldquo;folded&amp;rdquo;, which technically makes the following a valid Media Type:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using &#34;hare release&#34; to ship Hare software</title>
      <link>https://harelang.org/blog/2021-11-22-hare-release/</link>
      <pubDate>Mon, 22 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2021-11-22-hare-release/</guid>
      <description>&lt;p&gt;The &amp;ldquo;hare&amp;rdquo; command now includes a new sub-command, &amp;ldquo;hare release&amp;rdquo;, which can be&#xA;used to manage releases for software written in Hare. This tool checks for&#xA;common mistakes and establishes common packaging standards for use throughout&#xA;the Hare ecosystem, making releases easy, consistent, and &lt;a href=&#34;https://drewdevault.com/2019/10/12/how-to-fuck-up-releases.html&#34;&gt;difficult to screw&#xA;up&lt;/a&gt;. Let me explain how it works, and how to use it for your own releases.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: We&amp;rsquo;ve now gotten rid of hare release. This blog post is still here for&#xA;historical purposes, but it no longer reflects the current state of Hare.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How reflection works in Hare</title>
      <link>https://harelang.org/blog/2021-10-05-reflection/</link>
      <pubDate>Tue, 05 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2021-10-05-reflection/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve just merged support for reflection to Hare. Here&amp;rsquo;s how it works!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This feature didn&amp;rsquo;t make the cut, we rolled it back a few months&#xA;later. Neat to see how it might have worked, though!&lt;/p&gt;&#xA;&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;&amp;ldquo;Reflection&amp;rdquo; refers to the ability for a program to examine the type system of&#xA;its programming language, and to dynamically manipulate types and their values&#xA;at runtime. You can learn more at &lt;a href=&#34;https://en.wikipedia.org/wiki/Reflective_programming&#34;&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;reflection-from-a-user-perspective&#34;&gt;Reflection from a user perspective&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s start with a small sample program:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Strategies for handling OOMs in Hare programs</title>
      <link>https://harelang.org/blog/2021-04-28-oom-strategies/</link>
      <pubDate>Wed, 28 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2021-04-28-oom-strategies/</guid>
      <description>&lt;p&gt;For most programs, an OOM (out-of-memory) scenario is unlikely, and handling&#xA;them is annoying. For this reason, the &amp;ldquo;default&amp;rdquo; expectation for Hare programs&#xA;is that they will abort when the system runs out of memory. Your memory usage is&#xA;still your responsibility — and we provide tools for understanding it (to&#xA;be described in a future post) — but the typical program doesn&amp;rsquo;t need to&#xA;worry about running out.&lt;/p&gt;&#xA;&lt;p&gt;However, Hare is a systems programming language, and some systems do care. One&#xA;example of such a situation is a kernel: it&amp;rsquo;s never acceptable to simply crash&#xA;the kernel if you run out of memory. So how does someone working in one of these&#xA;memory-critical domains use Hare effectively?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Future research areas</title>
      <link>https://harelang.org/blog/2021-03-30-future-research-areas/</link>
      <pubDate>Tue, 30 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2021-03-30-future-research-areas/</guid>
      <description>&lt;p&gt;Right now, development is focused on refining our basic language design,&#xA;populating the standard library, and writing a hosted compiler. However, there&#xA;are a three research areas planned for the future which may cause major changes&#xA;to the language, prior to its public release. These research areas are set aside&#xA;for us to evaluate how they fit (or don&amp;rsquo;t) into the language design, come up&#xA;with working prototypes, and incorporate them into Hare before it&amp;rsquo;s public, so&#xA;that we can address these issues without making any major breaking changes after&#xA;programs in the wild start to depend on Hare.&lt;/p&gt;</description>
    </item>
    <item>
      <title>High-level data structures in Hare</title>
      <link>https://harelang.org/blog/2021-03-26-high-level-data-structures/</link>
      <pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2021-03-26-high-level-data-structures/</guid>
      <description>&lt;p&gt;Hare does not support generics, and our approach to data structures is much like&#xA;C: &lt;abbr title=&#34;do-it-yourself&#34;&gt;DIY&lt;/abbr&gt;. Hare supports the following basic&#xA;data structures:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Arrays&lt;/li&gt;&#xA;&lt;li&gt;Slices&lt;/li&gt;&#xA;&lt;li&gt;Tuples&lt;/li&gt;&#xA;&lt;li&gt;Structs and unions&lt;/li&gt;&#xA;&lt;li&gt;Tagged unions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That&amp;rsquo;s the complete list of aggregate type classes defined by the specification.&#xA;You can build arbitrarily complex data structures out of these, but, like C,&#xA;Hare puts the ball in your court. For most of your application&amp;rsquo;s day-to-day data&#xA;processing needs, these types are sufficient, shunting data from A to B without&#xA;much fuss. For most of your data processing, these limitations will not be your&#xA;bottleneck, and simpler (but slower) data structures won&amp;rsquo;t have much of an&#xA;impact on your program.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hare standard library development</title>
      <link>https://harelang.org/blog/2021-03-19-stdlib-development/</link>
      <pubDate>Fri, 19 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2021-03-19-stdlib-development/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m happy to see more contributors getting on board with standard library&#xA;development! The standard library is extremely important to Hare&amp;rsquo;s success, and&#xA;building it is a lot of work, which means we need a lot of help to get it done.&#xA;This article should serve as an introduction to the standard library development&#xA;process for new contributors. As a pre-requisite, please complete the&#xA;&lt;a href=&#34;https://harelang.org/documentation/install/&#34;&gt;Installation procedure&lt;/a&gt; and the &lt;a href=&#34;https://harelang.org/tutorials/introduction&#34;&gt;Hare language&#xA;introduction&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The standard library lives in the main &lt;a href=&#34;https://git.sr.ht/~sircmpwn/hare&#34;&gt;Hare source&#xA;tree&lt;/a&gt;, and tickets for it are marked with the&#xA;&amp;ldquo;stdlib&amp;rdquo; label on the &lt;a href=&#34;https://todo.sr.ht/~sircmpwn/hare&#34;&gt;bug tracker&lt;/a&gt; (if you&#xA;need access to this, ask on IRC). I also recommend reading the &lt;a href=&#34;https://git.sr.ht/~sircmpwn/hare/tree/master/item/docs/stdlib.md&#34;&gt;standard library&#xA;mandate&lt;/a&gt;,&#xA;which establishes the scope and goals.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hare&#39;s path to a self-hosting toolchain</title>
      <link>https://harelang.org/blog/2021-03-14-a-self-hosting-toolchain/</link>
      <pubDate>Sun, 14 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2021-03-14-a-self-hosting-toolchain/</guid>
      <description>&lt;p&gt;Last night I applied Ember Sawady&amp;rsquo;s latest patch, implementing forward references&#xA;for the bootstrap compiler. With this completed, the hosted build driver is&#xA;operational.  Compiling a Hare program is now one &lt;code&gt;hare build&lt;/code&gt; command away,&#xA;rather than a complex series of hacks to patch together a working toolchain on&#xA;the fly. Said hacks are still in place — for bootstrapping the language&#xA;from scratch — but are not necessary for the daily workflow of using Hare&#xA;to write useful programs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hare&#39;s advances compared to C</title>
      <link>https://harelang.org/blog/2021-02-09-hare-advances-on-c/</link>
      <pubDate>Tue, 09 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://harelang.org/blog/2021-02-09-hare-advances-on-c/</guid>
      <description>&lt;p&gt;The Hare programming language makes a number of improvements compared to the&#xA;language from which it draws much of its inspiration. Like C, Hare has a very&#xA;small runtime, manual memory access, direct access to pointers, and dangerous&#xA;features which you are free to point at your feet and shoot, albeit only after&#xA;signing a waiver.&lt;/p&gt;&#xA;&lt;p&gt;Despite the veneration with which we look upon C, those who look upon it with&#xA;scorn do have some valid concerns. A complete lack of memory-safe features and a&#xA;miserable error handling experience both make it pretty easy to make mistakes in&#xA;C that are not possible elsewhere. Some of this also makes it possible to do&#xA;desirable things which are not possible in those other languages, but it would&#xA;be nice to have options for when you don&amp;rsquo;t need to do those things and just want&#xA;to write reliable code.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
