- フランスのコンピュータ学校で5年間学び、20年間フリーランス開発者として活動
- 主にRuby on Railsでクライアント向けプロジェクトに従事
- Common Lispを学び始めたことをきっかけに、ASN.1パーサーを生成するサーバー管理プロトコルを作成
- Common LispからCコードを生成してSNMPサーバーを開発
- その後、Common Lispベースで複数のプロジェクトを開発:
- cl-unix-cybernetics – GitHubで最も多くスターを獲得したプロジェクト
- cl-streamsおよびcffi-posixを開発
- cl-facts – トリプルストアとして、Common Lispのグラフデータベースの役割を果たす
- 高速で、アトミックなトランザクションとネスト可能なトランザクションをサポート
unwind-protectと互換性あり
- わずか3つのマクロを学ぶだけで使用可能
- European Lisp Symposium (ELS)で発表
- Common Lisp開発に集中する中でクライアントは失ったが、Lispの可能性には大きな確信を持つようになった
仮想マシン(VM)とコンテナの限界
- 専門家たちはVMおよびコンテナの問題点を指摘:
- VMは不要なCPUと帯域幅を浪費する
- Linuxのcgroupsベースのコンテナには、リモートコード実行(RCE)や権限昇格の脆弱性がある
- 毎年新たなセキュリティ脆弱性が見つかる
- OpenBSDを好み、TerraformやAnsibleのようなDevOpsツールの問題を避ける
Common Lispの限界と性能問題
- ClojureなどではGC(ガベージコレクタ)によって性能問題が発生:
- 数千のユニットを処理するストラテジーゲーム開発で失敗事例が起きた
- JVMのGCは性能面とコスト面の問題を伴う
Cへの転換を決めた理由
- Common Lispの性能および移植性の限界を認識:
- Linux、OpenBSD、GTK+、GNOMEはいずれもCで書かれている
- 最終的に性能と移植性の問題を解決するため、Cへ移行
新しい言語KC3の開発
- libc3ユーティリティライブラリを開発 → C3言語 → KC3へ名称変更
- KC3の特徴:
- インタプリタ(ic3)とコンパイラ(c3c)を備える
- UTF-8バッファからデータ構造を生成し、逆変換も可能
- 防御的プログラミングにより、初期段階からバグを最小化
- セキュリティ問題がない
- enumでタグ付けされたunionベースのデータ型システム
KC3による成果
- cl-factsをC89へ移植:
- Covid-19期間中に開発を完了
- トリプルの追加、削除、再帰クエリシステム、トランザクション、ロギング、永続性などを実装
- アルゴリズム型のためのパーサーとジェネレーターを作成:
- 構造体、連結リスト、マップ、ハッシュテーブル、複素数、タプル、コードブロックなどを含む
- José Valim(Elixirの作者)から大きな影響を受けた
- ikc3 – KC3の評価結果を出力するREPL
- kc3_httpd – MVCフレームワークベースのWebサーバーを開発
- 現在のブログページもkc3_httpdで提供されている
- ドキュメント用Webサイトを作成 → KC3のMarkdownからHTMLへの変換器を使用
結論
- Common Lispで得た経験を土台にCへ移行
- KC3は性能、セキュリティ、移植性の面で優れた成果を上げている
- 今後はKC3に関する追加のマクロやサンプルを提供する予定
1件のコメント
Hacker Newsのコメント
私は反対の立場だ。若い頃にVBをたくさん使った後、大学でJava、C、C++を学び、主にCを使っていた。Xfceのコア開発者になり、5年間取り組んだ
その気持ちには完全に共感する。ここ数年、純粋なCで何かを開発したいという強い衝動を感じていた
ずっと昔にCでプログラミングを始めたし、今でも時々あの頃に戻りたくなる
ブログ記事を読んだ後、著者が何を伝えたかったのか混乱した
kc3のコード例が示されていた
Cは私の最初の言語で、簡単なコンソールアプリや小さなゲームを作った
時々、趣味でCを書くことがある。でも定型作業が多すぎて退屈だ
Cは実用的だったからこそ成功した
何も理解できなかった
この記事は、ハッピーエンドのない教訓話のように読める