2 ポイント 投稿者 GN⁺ 2025-03-14 | 1件のコメント | WhatsAppで共有
  • フランスのコンピュータ学校で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件のコメント

 
GN⁺ 2025-03-14
Hacker Newsのコメント
  • 私は反対の立場だ。若い頃にVBをたくさん使った後、大学でJava、C、C++を学び、主にCを使っていた。Xfceのコア開発者になり、5年間取り組んだ

    • その後バックエンド開発に転向し、Java、Scala、Pythonを使った。これらの言語には別の問題もあるが、標準ライブラリと依存関係管理システムは気に入っていた
    • 12年後にXfceへ戻ったが、Cは依然として難しい。メモリリーク、NULLポインタ参照、データ競合などの問題が多い
    • Rustを使うようになってから、Cより生産性が高くなった
  • その気持ちには完全に共感する。ここ数年、純粋なCで何かを開発したいという強い衝動を感じていた

    • 主言語はC++だが、古いCライブラリを使うのは本当に楽しい。インターフェースが単純で基本的だ
    • 純粋なCでメソッドを開発しているときは、アルゴリズムに100%集中できるのが良い
    • Cは私に自分で作業することを強いる。魔法や複雑さを隠さない
    • 周囲の人たちは最新のC++機能を使おうとするが、私はむしろC++の機能をどんどん削ぎ落とそうとしている
  • ずっと昔にCでプログラミングを始めたし、今でも時々あの頃に戻りたくなる

    • しかし実際にCで本番品質のアプリケーションを書こうとすると、なぜやめたのかを思い出す
    • コンピュータの支援なしに自分でやらなければならないことが多すぎる
    • 今日低レベル言語を選ぶなら、Adaを選ぶと思う。Cに似ているが、コンパイラの支援がもっと多い
  • ブログ記事を読んだ後、著者が何を伝えたかったのか混乱した

    • 著者のプログラムが使われていない理由は、言語のせいなのか疑問に思った
    • メモリ消費に関する問題があるのかもしれない
    • 著者は得た教訓やユーザー統計について言及していなかった
    • 新機能は追加されておらず、単に練習として書き直したように見える
  • kc3のコード例が示されていた

  • Cは私の最初の言語で、簡単なコンソールアプリや小さなゲームを作った

    • しかし、もう戻りたいとは思わない。ビルドツールと依存関係管理が時代遅れだ
    • Zigは私にとって新しいCだ。Cコンパイラを内蔵しており、Cヘッダをラッパーなしで使える
    • Goは単純な言語が必要なときに、Rustは性能と安全性が必要なときに使っている
  • 時々、趣味でCを書くことがある。でも定型作業が多すぎて退屈だ

    • Cでコンパイラを書くのは、タグ付きユニオンを扱うようなものだ
    • 定型作業を減らすためにジェネレータを書こうかと考えたが、まだやっていない
    • Cでプロジェクトを開発するとき、プロトタイピングのために埋め込み言語を使うことを考えた
  • Cは実用的だったからこそ成功した

    • 安全ではないが、やりたいことができる
  • 何も理解できなかった

    • キラーアプリが何なのか、CLに関する問題、そしてCが唯一の選択肢なのか疑問だ
    • KC3のコード実行にセキュリティ上の問題がないと本当に確信しているのか疑問だ
  • この記事は、ハッピーエンドのない教訓話のように読める