AI時代のプログラミング言語のあり方を考える

去年ぐらいから、自律的にコードを書いてくれるAIエージェントが複数登場しています。mizchi氏の「CLINEに全部賭けろ」という記事は日本のプログラマーの間ではあまりにも有名でしょう。

Clineを使うかはともかく、AIエージェントにコマンド実行の権限を与えて、自律的にコーディング・ビルド・テストさせるのは当たり前になりました。最近はClaude Codeが人気のようです。

私はそういう動きを横目で見つつプログラムをせっせと手書きしていたわけですが、今年の正月に重い腰を上げてClaude Codeを使い始めてみました。私自身はそういうAIエージェントをまだそこまで使い込めていないので、感覚が掴みきれていないかもしれませんが、この記事は現段階での使用感と見聞きした内容に基づいて書いています。

例によって私はプログラミング言語というものに関心があるので、この記事ではAI時代のプログラミング言語のあり方について考えてみます。

続きを読む

関数に色をつけるべきか:LunarMLの場合

function coloring problem(関数色付け問題)という概念がある。知らない人のために説明すると、こういうことだ:

とあるプログラミング言語では、関数に色がついている。どの関数も、「青」か「赤」のいずれかの色を持つ。関数呼び出し構文にも色がついている。青い関数の呼び出し元の色はどちらでも良いが、赤い関数は赤い関数からしか呼び出せない。赤い関数の呼び出しには何らかの煩雑さが伴う。いくつかの重要な関数は赤い。

このような言語では、例えば map のような高階関数は色ごとに2通り書く必要があるだろう:

red_function red_map(f: a -(red)-> b, array: a[]): b[]
{
    let result = [];
    for (let i = 0; i < array.length; ++i) {
        result.push(f(array[i])red);
    }
    return result;
}
blue_function blue_map(f: a -(blue)-> b, array: a[]): b[]
{
    let result = [];
    for (let i = 0; i < array.length; ++i) {
        result.push(f(array[i])blue);
    }
    return result;
}

(この言い回しの初出はこの記事と思われる:「What Color is Your Function? – journal.stuffwithstuff.com」)

この概念を初めて聞いた人は、「そんな面倒くさい概念のある言語は実用的ではない」と思うかもしれない。しかし、勘の鋭い人はピンとくるだろう:「通常の関数とasync関数のことか」、と。

非同期処理を書きやすくするためにいくつかの言語に導入されているasync関数では、async関数を呼び出して結果を利用するには呼び出し元もasyncである必要がある。

この記事では、私が開発しているLunarMLという言語処理系で関数色付け問題をどう扱うかを検討する。

続きを読む

GHCへの私の貢献2025

私はここ数年、Haskellの主要な処理系であるGHCに趣味で貢献しています。この記事では、今年(2025年)行なった貢献を紹介します。バグ報告のみ(修正は他の人)のものも含みますが、その場合はその旨を書いています。

去年の記事は「GHCへの私の貢献2024」です。今年は「GHCデバッグ日誌 CI編」という記事も書きました。

続きを読む

LunarMLの進捗2025

LunarMLの今年の進捗を振り返ります。昨年の振り返り記事と、今年のLunarML関連記事は以下の通りです:

続きを読む

Mac miniに外付けSSDをつける

私が2020年に買ったMac mini (Apple M1) は内蔵ストレージが512GBのものを選択してしまったせいで、苦労した。普段使いには最低1TBは必要だった。

そういうわけで、M1 Mac miniには「Mac mini向け・SSDエンクロージャーとUSBハブとSDカードリーダーが一体になったやつ」を買って、外付けSSDをつけていた。この時は、発熱を心配して、2.5インチSATA接続の1TB SSDを使った。

続きを読む

新しいNASを買った

家に複数のPCがあって共有フォルダーみたいなものを用意したい場合、あるいはPCのストレージが狭くなって外付けのストレージが欲しいがノートパソコンにSSD等をぶら下げると邪魔な場合は、ネットワーク越しにアクセスできるストレージ、NAS(Network Attached Storage)があると便利だ。私も10年前にQNAPというメーカーのNASを導入した。

しかし、この時買ったTS-212Pはいくつかの観点で見劣りするようになってきた。具体的には以下だ:

  • ソフトウェア更新がほぼ終焉している(セキュリティー更新のみ)
  • Tailscaleが使えない
  • 2.5GbEが使えない
    • 家のネットワークは2.5GbEになっている(その時の記事:自宅に10ギガの光回線を導入した)。2.5GbEが使えると、内蔵HDDに近い水準の読み書き速度が出るかもしれない

そこで、「新しいNASを買いたい」とここ数年考えていた。同じQNAP製のNASであればHDDを差し替えるだけで利用できるので、QNAP製のものにしたい。

先日のAmazonのブラックフライデーセールで、狙っていたTS-264 [Amazon] が安くなっていたので(7万円くらい)、買った。本当はワンランク下のTS-262でも良かったのだが、販売終了感が出ていたので。

続きを読む

シンガポール日記

先月の記事に書いたように、10月にML Family Workshopで発表するためにシンガポールに行きました。

この記事は、現地でしたこと、感じたことなどをまとめます。

文中の「ドル」は「シンガポールドル(SGD)」のことで、滞在当時は1ドル122円程度で両替できました。

続きを読む

LunarMLでのUnicode文字列の扱い/文字列型はいくつ用意すれば十分か

先日、「新しくプログラミング言語を作る際に文字列型をどうするべきか」という記事に私の文字列型についての持論を書きました。

この記事では、私が作っているLunarMLというStandard ML処理系で文字列をどう扱っているか(あるいは、どう扱う予定であるか)を紹介します。

続きを読む