世界を動かす技術を、日本語で。

Hacker NewsがCommon Lisp上で動作するようになりました

概要

  • Hacker News は以前 Arc (Racket上)で動作
  • 現在は SBCL 上の Clarc へ移行
  • パフォーマンス向上マルチコア対応 が主な理由
  • ページング廃止 などUIにも変化
  • Clarcのコード は未公開、セキュリティ上の事情

Hacker Newsの技術的変遷

  • Hacker NewsPaul Graham が開発した Arc というLisp方言で構築
  • Arc は当初 Racket 上で動作していたが、現在は SBCL (Steel Bank Common Lisp)へ移行
  • Clarc という新しいArc実装の登場が移行の決め手
  • Clarc はパフォーマンスが高く、 マルチコア対応 も容易
  • HN では長いスレッドの ページング機能 が廃止され、全コメントが一度に表示される仕様へ
  • 過去には「More」ボタンで次のページを読み込む方式を採用
  • 移行の公式アナウンスは少なく、UI変更に気付いたユーザーも多い状況

ClarcとArc実装の詳細

  • ClarcArc-to-Common Lisp のトランスパイラ
  • 他にも Arc-to-JSLilt というプロジェクトが存在
  • Arc実装は段階的に再設計され、 arc0 (最下層)、 arc1 (arc0上)、 arc2 (arc1上)という階層構造
    • arc0 のみ基盤言語(Racket, JS, CL)で記述
    • 上位層ほどArc本来の機能が充実
  • この設計により、異なる基盤への移植や再実装が容易

Clarcの未公開理由と今後

  • Clarc のコードは 未公開
  • 理由は HNのアンチアビューズ対策 が多く含まれ、公開すると効果が薄れるため
  • 秘密部分の切り離しには多大な作業が必要
  • 将来的に 他のArc実装公開時 に分離・公開を検討

まとめと今後の展望

  • Hacker News は技術基盤を刷新し、 性能・拡張性 を大幅に向上
  • UI/UX にも変化が現れ、今後もさらなる改善が期待
  • Clarc や関連技術の一般公開には課題が残るものの、開発は着実に進行

Hackerたちの意見

うーん。それってダークモードが来るってこと?

tampermonkeyとか、自分のスタイルシートを適用できるツールを使えばいいんじゃない?

https://news.ycombinator.com/item?id=23199062

uBlock originフィルター: ! Hacker Newsダークモード news.ycombinator.com##html:style(filter:invert(90%) hue-rotate(180deg)) news.ycombinator.com##body:style(background: white)

sbclは頼りになるやつだね。Racketの人たちは、Arcが実際の生産環境で使うには一般的すぎないって考えてたのかな?実際、Racketを本気で使ってるプロジェクトは他に知らないけど、Armed Bearにはずっと特別な思い入れがあるよ。あのJVMライブラリのエコシステムはすごく広いからね。 https://github.com/armedbear/abcl

Racketの人たちはいつも親切で、何かを直してほしいって頼んでも断られたことがないよ。

SchemeとCommon Lispの根本的な違いに関係してると思う。Schemeは教授たちによって教育用の言語として設計されたけど、Common Lispは商業的な利害に基づいて仕様が決められたんだ。だから、パフォーマンスや使いやすさはお金を意識して作られてる。例えば、大きな違いは、SchemeのREPLはライブシステムを変更するために設計されてないこと。Common LispのREPLはそうなんだ…これがClojureのインスピレーションになってる部分でもあるよ(Clojureは生産システム向けに作られてる)。Racketは素晴らしいエコシステムだけど、良くも悪くも学問的な追求に駆動されてる。だから、新しいプログラミング言語やデータのアイデアは、大学院生が論文の一部としてRacketモジュールとして実装することが多いけど、スケールのためのパフォーマンスエンジニアリングはあまり優先されないことが多いんだ。

つまり、Hacker NewsはCommon Lispで書き直されたわけじゃなくて、ArcのランタイムをCommon Lispで再実装したってことだね。

そういうのがLispの得意なところだよね。

Racketよりもずっと理にかなってると思うよ。Common Lispはもっと実用的だし、SBCLはまるで魔法みたい。

Arcのコードを元にしたウェブサイトを運営してる者としては、Clarcを使えるようになったら嬉しいな。

Hacker Newsは「悪い方が良い」というマントラがソーシャルエンジニアリングに適用された完璧な例だと思う。だって、スラッシュドットは1990年代後半にもっと多くの機能があったしね。HNがうまくいってるのは、ピンポイントな焦点と厳しいモデレーションのおかげだよ。

ついにLispシステムが「悪い方が良い」の王冠を手に入れた!

それに、金を稼ぐ必要がないのも大きいよね。

HNは機能が少ないかもしれないけど、それって必要なのかな?それが理由で悪くなるとは思わないよ。むしろミニマリスティックって呼べるから、ポジティブに見えるよね。:) 編集: 他の誰かが言ってたように「少ない方がより良い」って感じかな。

正直言って「悪くない」けど、HNはRedditがうまくやってた部分(少なくとも昔のReddit)を基にしてると思うし、Slashdotのような古いフォーラムの構造とは違って、もっとオンラインで早いインタラクションの文脈があるからだと思う。だからこそ、モデレーションがより正確で、アップボートには色がついてて、ユーザーの署名みたいなものもあったんだよね。ある意味、HNのユーザーや投稿は「家畜」であって、「ペット」じゃないんだ ;)

君のコメントは、機能や特徴が良いものだと仮定してるね。「悪い方が良い」ってのはここには当てはまらないよ。「悪い方が良い」ってのは、Pythonのこういう足元をすくうようなものに耐えてる人たちのことを指してるんだ。Pythonの仕事を見つけるのが簡単だと思われてるからね: def fun(a = []): HNは「少ない方が良い」って感じで、「悪い方が良い」じゃないんだ。

見た目の悪さがほとんどの人を遠ざけるか、少なくとも偶然引き寄せることはないね。

そして厳しいモデレーション。伝統的な意味での厳しいモデレーションはないと思うよ。明らかな悪用行為を除いて、主にユーザー主導だし。ダウンボートやフラグ機能が大きな役割を果たしてる。議論の数に対するアップボートの比率を検出するヒューリスティックは、時々イライラすることもあるけど、怒りを煽るコンテンツをすぐにフロントページから排除するのにはいい仕事してる。モデレーターも見落とされたストーリーを救って、ユーザーが再検討できるセカンドチャンスプールに入れるのが上手で、モデレーターが無理やりフロントページに載せるよりずっといい感じ。関連性がある場合、モデレーターがストーリーをフロントページから外すアクションを元に戻すこともあるみたい。フラグが付いたストーリーが復活したり、炎上コメントセクションがモデレーターの注釈付きでフロントページに再登場するのを見たこともある。スラッシュドットの時代を思い出すけど、理由もなく複数のアカウントを使い回して、ランダムに与えられるモデレーションポイントを武器として使うためにそれを増やそうとしてた人たちがいたな。あの頃は全然違う時代だったね。

20年経っても、+5の洞察に満ちたコメントだけを読むことができないのが寂しい。今のLLMの混沌とした世界で、スラッシュドットのポイントシステムやメタモデレーションが復活すると思ってたけど、もう誰もそれを知らないんだよね。Steamはレビューでそれを再発見したみたいで、もしかしたらそれにインスパイアされたのかも(願ってる…)。

完璧さは、何かを追加することではなく、何も取り除くものがなくなったときに達成される。 —アントワネット・ド・サン=テグジュペリ

Slashdotのモデレーションシステムの天才的なところは、限られたモッドポイントをどう使うかに細心の注意を払わせたことだよ。本当にそれに値する投稿にだけ使うようにね。反対意見に対してスレッドを無闇にダウンボートするのとは違って、Slashdotはもっとポジティブなモデレーションを促してた。明らかにトロールしてる場合を除いてね。メタモデレーターがモデレーションの乱用を抑えてたのも良かった。今はこのモデルから退化してしまって、会話がより有毒で極端になってしまったのが悲しいよ。(異論はすぐに隠されて、既存のノームを強化するものが上に浮かび上がる。)HNは手動のモデレーションやキュレーションに頼ってこれらの問題を誤魔化してると思うけど、すごく労力がかかりそうだよね。一方で、Slashdotは意図的に手を出さず、権力を人々に委ねてたんだ。

[Clarc]はすごく速いし、HNを複数コアで動かすのも簡単だよ。これ、全部一つのコアで動いてたの?

現代のCPUは、正しい使い方をすればめちゃくちゃ速いよ。スケールアップをかなり進められるし、スケールアウトを強いられるのは、複数コアで動かすくらいの控えめなことでも意外と遅いんだよね。

https://news.ycombinator.com/item?id=30067997 https://news.ycombinator.com/item?id=5229548 https://news.ycombinator.com/item?id=28478379 https://news.ycombinator.com/item?id=27452276

現代のCPUはマジで速いよね。4chanは1台のサーバーで400万人を捌いてたし、PHPの10年前のバージョンと1万行くらいのスパゲッティコードで動いてたんだ。基本的なコードの質やプロファイリング、最適化をやれば、CPUコアのほんの一部で大量のユーザーを捌けるよ。I/Oがボトルネックになりがちだけど(ディスクのIOPSやスループット、ネットワーク接続、IOPSやスループット)、HNはテキストだけだから、そこは比較的簡単な問題だね。

これってウェブアプリには結構よくあることだよね、例えばNodeJSや多くのPythonアプリもマルチスレッドを使わず、代わりに並行して動く別プロセスを立ち上げるだけなんだ。でも、HNは1台のマシンで1プロセス、1コアで動いてたらしいよ(https://news.ycombinator.com/item?id=5229548)O_O

ArcはRacketの上に実装されたんだ。最初はMzSchemeで、後にPLT Schemeになった。確か、偉大なkogirがRacketに移植したんだよね。

MzScheme、PLT Scheme、Racketって同じものじゃないの?

MzSchemeはPLT Schemeのコア部分(GUIなし)だけだと思うよ。それがRacketに名前を変えたんだ。あと、当時のメーリングリストの活動から見ると、pgがScheme48でArcを実装し始めたんじゃないかな。PLTに切り替えた理由にはずっと興味があったんだ!

すべてのLisp実装を巡ってるの?テセウスの船の奇妙なバリエーションだね。

Arcのままにしておく価値があるってことかな?もっと広く使われている言語に書き直さない方がいいってこと?

https://news.ycombinator.com/item?id=23483715

記事を読むと、Dangもコードベースに関わってるみたいだね。他にもいるだろうけど、Dangはここ数年見かけてる人だよ。僕は多くのオンラインコミュニティにメンバーとしてもモデレーターとしても参加してきたけど、Hackernewsが一番長くいて、一番楽しいコミュニティなんだ。Dang、僕みたいなランダムな人間が君のために何かできることある?せめてコーヒーでも奢らせて!