- Hacker News は従来、Arcという Lisp系言語 で実装されていたが、ここ数か月で SBCL(Steel Bank Common Lisp) へ移行した
- 今回の移行の主な目的は、性能向上 とマルチコア対応の可能性の確保
- Arc-to-JS変換器の Lilt と、Arc-to-Common Lisp変換器の Clarc の開発により、構造がより体系化された
- Clarcのソースコード公開は比較的容易だが、HN全体のコードベースは セキュリティ上の理由 から公開が難しい
- 新しい構成によってHNは スムーズに移行 し、ユーザー体験が改善された
概要
性能と機能の変化
- ページ分割がなくなるなど、実利用の観点から 性能改善 が確認されている
- 以前は長いコメントスレッドでページングが必要だったが、現在は一度にすべて読み込まれる方式に変わった
- こうした変化は Clarc の導入によって可能になった
- Clarcは マルチコア環境 でHNが円滑に動作できるようにする
- Clarcの開発は何年にもわたって進められてきており、最近は仕上げの段階に近づいている
実装方式と構造
- Arcを JS に変換する Lilt と、Arcを Common Lisp に変換する Clarc が存在する
- 既存のArc実装の下位構造を再設計し、Arcを複数段階に分けて開発している
- arc0 はシステム言語(Racket, JS, CL)で記述
- arc1 はarc0上で、arc2 はarc1上で記述
- 上位段階(arc2)で全機能を実装し、下位段階は最小限に抑える
- この構造により、さまざまなランタイムでArcを 再実装 しやすくなった
ソースコード公開をめぐる課題
- Clarc(ArcのCommon Lisp実装)の オープンソース公開 は比較的容易である
- 既存のArcリリースをClarcへ移植すれば可能
- 初期バージョンのHNサンプルアプリはすでに含まれており、HN固有またはYC固有の部分はない
- しかし HN全体のコードベース には悪用防止のためのさまざまな セキュリティ機構 が組み込まれている
- コードが公開されると、この部分が無力化される危険がある
- セキュリティ関連部分を分離する作業は大きな負担となる
2件のコメント
GeekNews はどんな技術で動いているのか気になりますねw
Hacker Newsの意見
Hacker Newsは「Worse is better」という哲学がソーシャルエンジニアリングに適用された完璧な例だという考え。90年代末のSlashdotのほうがはるかに多様な機能と豊かさを備えていたが、HNの成功要因は極度に絞り込まれたフォーカスと強力なモデレーションシステムだという評価
Hacker NewsがCommon Lispで全面的に書き直されたのではなく、Arc RuntimeがCommon Lispで再実装されたという事実
ArcはRacket上に実装されており、もともとはMzScheme(当初はPLT Schemeのコアで、後にRacketへ改名)から始まり、kogirという開発者の貢献でRacketへ移行したという背景知識の共有
Dangがコードベースにも貢献していると聞いており、そのほかにもHNのために長年献身してきた人がいるのだろうという考え。HNコミュニティは自分にとって最も長く、そして最も楽しく残っているインターネットコミュニティだという体験から、単なる参加者であってもDangに何か役立つことをしたい、あるいはコーヒーでもおごりたいという気持ち
Clarcのほうがはるかに高速でマルチコア対応も優れているという説明を見て、HNが以前はすべてシングルコアで動いていたという事実に驚きを表明
オープンソースのArcコードで作ったウェブサイト運営者として、Clarcをぜひ使いたいという強い願望
sbcl(Steel Bank Common Lisp)は本当に実運用向けだという感嘆。Racket陣営ではArcの実運用を想定しておらず、バグ修正をしていなかったのではないかという推測。Racketを実運用で使うほかのプロジェクトを聞いたことがないという評価と、Armed Bearへの愛着(強力なJVMライブラリエコシステム)とともに Armed Bear Common Lisp へのリンク共有
「HN runs on top of SBCL since a few months」という文の言語的な不自然さの指摘。正しい英語は「HN has been running on top of SBCL for a few months now.」だという提案
いまだにPaul GrahamやRobert Morrisが開発に参加しているのか気になる、記事全体を読んだが言及を確認できず、CL(Common Lisp)にArcが何を付け加えているのか見てみたいという興味から、arclanguage.org へのリンクを提示
RacketよりもCommon Lispのほうがはるかに実用的で、SBCLはまるで魔法のようだという肯定的評価