なぜジェネットなのか?(2023)

2026/06/02 18:34

なぜジェネットなのか?(2023)

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Janet は、お楽しみ用のサイドプロジェクトのために作成されたコンパクトで高性能な命令型言語であり、現在は独立した教育資源へと成長しており、それらに捧げられた無料の本全体が存在します。その最小限のコアは正確に 8 つの命令(do、def、var、set、if、while、break、fn)のみから構成されており、標準ライブラリも 1 ページに収まるため、午後のうちにランタイムの意味論——第一級関数、識別子の単一ネームスペース、およびレキシカルなブロックスコープ——を学ぶことができます。Janet はプログラムをtiny なネイティブ実行ファイルへコンパイルし、その中にガベージコレクターやバイトコードコンパイラーを含む完全なランタイムを静的にリンクさせます(例:「hello world」バイナリが 784K)。これにより依存関係のない共有および新しいコードのランタイム評価が可能になります。

従来の Lisp のフォームとは異なり、Janet は CAR/CDR プライミティブを使用せず、代わりにリストには角括弧、テーブルには花かっこを多用します。さらに、可変なリテラルには

@
プレフィックス、エスケープなしの文字列にはバッククォート、rest パラメータには
&
を使用します。標準ライブラリに組み込まれた集合型は、単一空間の可変(参照意味論)と不変(値意味論)をユニークにバランスさせており、正規表現の制約なしでマルチラインテキスト、HTML、JSON、バイナリ形式などを処理するパージングエクスプレッショングラマー (PEGs) による高度なテキスト処理をサポートしています。サードパーティ製の
sh
ライブラリはパイプやリダイレクトへのネイティブサポートを含むシェルスクリプティング DSL を提供しており、Janet を Bash の代替位置づけとしています。その小さな C ライブラリにより、静的サイトやカスタムプログラマブル DSL への埋め込みが容易になります。また、Janet のマクロシステムでは、非引用されたリテラル関数により参照透過性を保ちながらコードを書くコードを記述することができ、トップレベルの状態をディスクへシリアライズすることでコンパイル時からランタイム時の値の渡しが可能にされ、共有参照、可変状態、ジェネレーター、クロージャが保持されます。

本文

なぜ今、Janet という言語を学ぶべきなのか

私は過去に Lisp 系言語の経験がなくても良いと考えていましたが、娯楽目的のサイドプロジェクトにおいてJanet(ジェネット)を採用することでその思いが変わりました。以下の理由から、皆様にも Janet を一度試していただきたいです。

1. シンプルさと学習の容易さ

  • 命令型かつ関数型: 1 等関数を持ち、識別子は単一のネームスペース、スコーピングはブロックスコーピングを採用しています。
  • 最小限のコア: 言語の中核は極めて小さく、以下の 8 つの命令で構成されています。
    • do
      ,
      def
      ,
      var
      ,
      set
      ,
      if
      ,
      while
      ,
      break
      ,
      fn
    • : マクロにより高レベルな制御フローが提供可能です。
  • 短い学習曲線: 1 日午後 1 時間で十分習得可能。理由は以下です。
    • JavaScript の文法ベースでありつつ、値型を持ち、例外処理などの欠点を排除しています(※原文の「ワットスを排除」は文脈より「例外を排除する意図」と解釈して整理)。
    • ライブラリが軽量で、標準ライブラリ全体が1 ページに収まります。

2. 配布と展開の容易さ

  • 単一実行ファイル: コンパイルすれば NATIVE のバイナリとして動作します。
    • Janet ランタイムが静的にリンクされているため、受入先には事前インストール不要です。
    • 「Janet で書かれたものだ」と明言せずともそのまま共有可能です。
  • 高度なコンパイル戦略:
    1. ソースコードをバイトコードへコンパイル。
    2. バイトコードを C コンパイラで扱いやすい
      .c
      ファイルへ書き出す。
    3. その結果、C ランタイムと埋め込み済み機能を含む1MB 未満のバイナリが生成されます(例: macOS arm64 で約 784KB)。
  • 適用シーン: 特に小さなコマンドラインツールの開発に最適です。

3. 優れたテキスト解析能力

  • PEG パースング: 正規表現の代わりに、PEG (Parsing Expression Grammar) を採用しています。
    • シンプルでありながら強力かつ予測可能。
    • 行指向ではないため、マルチラインテキストや HTML/JSON/バイナリファイルなど多様な形式を解析できます。
  • 構造化されたパーサー: 「パーサー」として設計されており、組み合わせ容易で学習負担が低いです。

4. シェルスクリプティング用 DSL

  • sh
    というライブラリにより、シェルスクリプティング向けに最適化された DSL を提供します。
  • パイプやリダイレクトなどをネイティブに表現可能(例:
    ($ find . -name *.janet | say)
    )。
  • この高品質な DSL により、Perl や Bash の代替として多くの用途で活躍します。

5. 埋め込み言語としての活用

  • Lua のように C ライブラリを通じて他の言語から容易に使用できます。
  • 実装が簡単: Janet ランタイムは小さな C ライブラリであり、リンクするだけで完了します。
    • 通常の C 関数を呼び出して Janet 値を操作可能。
    • ウェブサイトへの埋め込みや、静的サイトの作成にも利用可能です。

6. 不変と可変コレクションの両立

  • 両方の型をサポート: 不変(Immutable)と可変(Mutable)のコレクションが存在します。
    • 不変: 値セマンティクスを持つ(メモリアドレスが違う場合でも同値)。例:
      [1 2]
      (take 2 [1 2 3])
      と同等。
    • 可変: 参照セマンティクスを持つ。別々のハッシュテーブルは別個のオブジェクトとして扱われます。
  • 標準ライブラリに不変な合成値を組み込んでいる言語は稀であり、この点は特筆に値します。

7. マクロ機能

  • 学習不要でも使える: マクロを習得しなくても十分動作しますが、書くのが楽しいです。
  • 思考プロセスの向上:
    • コードを書きつつコードを書いているため、「コンパイル時」と「実行時」を同時に考えられます。
  • 衛生的なマクロとリテラル関数:
    • 独立したネームスペースを持たない代わりに、リテラル関数のアンクォートにより参照的透明なマクロ記述が可能です。

8. コンパイル時とランタイムの境界突破

  • 値のシリアライズ化: コンパイル時にディスク上に状態を保存し、後から読み込むことが可能です。
    • シリアライズは自動的に発生します(トップレベルで指示が実行され、状態スナップショットが書き出される)。
  • フルな状態再開: 共有参照や可変値も保持され、クロージャの閉じ込めも正しく動作します。
    • ジェネレータの状態維持や、ゲーム開発でのアセット埋め込み・スプライン計算などに活用できます。

9. シンタックスの手触り(使いやすさ)

  • シンプルで一貫性がある:
    • リストは
      []
      、テーブルは
      {}
      で囲みます。
    • 可変リテラルは
      @
      で統一(例:
      @"string"
      ,
      {:table}
      )。
    • 匿名関数は
      (fn [x] ...)
      またはアップカール記法
      |...
      を使用します。
    • スパイト展開やスプレッド展開をサポートし、
      ;
      を使用可能です。
    • リテラル文字列はバッククォートで囲み、エスケープ処理を最小限に抑えられます(例:
      \n
      の考慮不要)。
    • 可変な引数は
      &
      で表現します(例:
      (defn foo [x & rest] ...)
      )。
  • リーダマクロなし: シンタックスは固定されており、学習すれば全てのプログラムが読めます。

10. 古の慣習からの離脱(現代への適応)

  • Lisp などの古い慣習に固執せず、直感的な命名と機能を採用しています。
    • car
      first
    • progn
      do
    • lambda
      fn
    • setq
      def
  • 独自な設計:
    • nil
      は空リストではなく独自の型です。
    • 1 等としての Boolean を持っています(EQ/EQL/EQUAL など不要な区別なし)。
    • リストと連結リストを同一視しません。

結論: Janet は、分布の容易さ、パース能力の優位性、モダンな設計思想により、様々な開発タスクにおいて強力なツールとなります。まずは Hello World をコンパイルし、その可能性を体感してみてください。

同じ日のほかのニュース

一覧に戻る →

2026/06/03 3:47

MAI コード 1 のフラッシュ処理

## Japanese Translation: 以下の内容は、Key Points List に含まれていた欠落していた具体的な指標およびデータポイントを統合しつつ、明瞭さを維持した改良されたバージョンです。 **Improved Summary:** MAI-Code-1-Flash は、実稼働環境で使用される GitHub Copilot harness を直接トレーニングによって訓練され、現実世界の agentic タスクを処理するコーディング AI における画期的な進歩を表します。以前の手法では正確性と効率性は排他的なものとして扱われていましたが、本モデルはこれらがシームレスに共存できることを実証しました。適応的なソリューション長制御を活用し、推論の深さを動的に調整することで、単純なリクエストには簡潔に応答し、複雑な問題にはより多くの予算を割く仕組みです。その結果、開発者は競合製品である Claude Haiku 4.5 に比べて最大 60% も少ないトークンで有用な出力をより早期に受け取り、レイテンシと運用コストを大幅に削減できます。 同じプロダクション harness 内での多様なデータセット(SWE-Bench Verified、SWE-Bench Multilingual、SWE-Bench Pro、Terminal Bench 2)を含む評価が、優位性の高いパフォーマンスを確認しました。MAI-Code-1-Flash は、テストされたすべてのコアコーディングベンチマークにおいて Claude Haiku 4.5 を凌駕し、多様で現実世界のタスクである SWE-Bench Pro で注目される +16 ポイントのリード(51.2% vs. 35.2%)を達成しました。これらの結果は、MAI-Code-1-Flash を使用する場合、より高い正確性と更大なる効率がもはやトレードオフではないことを検証し、インタラクティブなコーディングワークフローを滑らかにしつつ、全体の生産性を最適化するためのトークン投資を実現します。

2026/06/03 5:30

BYD の車部品 CT 走査検査

## Japanese Translation: 主な洞察は、現代のペットボトルが数十年前進化する工学によって最適化されており、シュリンクラップ、積み重ね、粗悪な取扱いなどに対して耐え抜き、産業物流に適合するように設計されているにもかかわらず、開封した後は実用的な使用時間がわずか数秒しかないという点にあります。この耐久性のパラドックスは、長距離輸送での耐久性に大規模な投資を行いながら製品を瞬時に廃棄するという重大な非効率性を浮き彫りにしています。重量のあるガラス(コカ・コーラの 1899 年の製瓶;エビアンが数世紀の陶器製の壺の使用の後、1908年にガラスへ転換)からプラスチックへの進化は、コスト、安全性、重量削減によって推進されました。初期のプラスチック試作には、モンサント社の「Easy-Goer」アクリロニトリルコポリマー(1975 年)があり、それが漏出と動物毒性に関する懸念から 1977年にFDA にて禁止されました。これにより、デュポン社が Polyethylene Terephthalate(PET)を導入した 1967–1973 年へと道が開かれました。1970年代後半には、大型の 2リットルボトル用の PET 生産が始まり、初期デザインは最大 96 g の重量を持ち、接着剤を用いたベースと 0.3–0.4 mm の壁厚を特徴としていました。1990年代初頭の革新としては、接着剤を使用しない「Petaloid」ベースや、より薄い壁(例:アクアフィナで約 0.2 mm)を採用するものがあり、材料使用量を大幅に削減しました。それ以降のさらなる進歩—例えば、ニージャラ・ボトルリング社の Eco-Air デザインが厚さ 0.17 mm 以下を達成し、1998年から現在にかけてプラスチック使用量を 60%削減した事例や、半リットルボトルが 2000年代中期のバージョンと比較して 75%少ないプラスチックを使用した事例—は、継続的な効率向上を反映しています。これらの進歩は企業の戦略とも整合しており、ネスレ社がペリエ社を買収(1992年)や、ペプシ/コカ・コーラがアクアフィナとダサニを中〜後半の 1990年代に発売したことは、ソーダ販売の減少への対応として行われました。しかし環境上の課題は依然として残っています。リサイクルシステムが材料の分離や汚染管理—if 特に破砕されたガラスが多材料ストリームに混入し、新しい容器にとって使用不可能になる—を失敗した場合、これらの良質に設計されたボトルは多くが埋め立て地に行き着いたり、下位利用されたりします。将来の進歩には、スマートなデザイン、厳格な材料分離プロトコル、改善されたリサイクルインフラストラクチャを通じて、サプライチェーンの耐性と廃棄物削減を調和させる必要があります。 ## Text to translate: The primary insight is that modern water bottles represent decades of advanced engineering optimized for robust industrial logistics—surviving shrink-wrapping, stacking, and rough handling—even though they have only seconds of practical use once opened. This durability paradox highlights a major inefficiency: investing heavily in long-haul resilience while discarding the product instantly. The evolution from heavy glass (Coca-Cola's 1899 bottling; Evian's switch to glass in 1908 after decades of earthenware jugs) to plastics was driven by cost, safety, and weight reductions. Early plastic attempts included Monsanto's "Easy-Goer" acrylonitrile copolymer (1975), which faced FDA bans in 1977 due to leaching and animal toxicity concerns, paving the way for DuPont's Polyethylene Terephthalate (PET) introduced around 1967–1973. By the late 1970s, PET production for large two-liter bottles began, with early designs weighing up to 96 g, featuring glued bases and wall thicknesses of 0.3–0.4 mm. Innovations in the early 1990s, such as "Petaloid" bases that eliminated glue and thinner walls (e.g., Aquafina at ~0.2 mm), cut material use significantly. Further advances since then—such as Niagara Bottling's Eco-Air designs under 0.17 mm thickness, which achieved a 60% plastic reduction from 1998 to today, and half-liter bottles using 75% less plastic than mid-2000s versions—reflect ongoing efficiency gains. These advances also align with corporate strategy: Nestlé's acquisition of Perrier (1992), and Pepsi/Coke launching Aquafina and Dasani in the mid-to-late 1990s, all in response to declining soda sales. Yet environmental challenges remain. If recycling systems fail to separate materials or manage contamination—especially with crushed glass mixed into multimaterial streams that become unusable for new containers—these well-engineered bottles often end up landfilled or downcycled. Future progress must reconcile supply chain resilience with waste reduction through smarter design, stricter material separation protocols, and improved recycling infrastructure.

2026/06/03 4:27

「グメールが私をおろかに思っている」と感じたので、退社しました。

## Japanese Translation: 著者は、嫌悪感と軽慢さを感じてしまう強制的な AI 機能のため、16 年使用してきた Gmail アカウントを恒久離脱することにした。具体的な問題は、不要なメッセージの要約、自動補填された返信文、そして「メールを書いてください」、「Tab で改善する」など、ユーザー自身がメールを作成できないか、あるいは受信者への時間の価値が低いことを示唆するような常駐的なプロンプト(促し)が含まれる。一部の AI 機能はオフにすることもできるが、それを行うことで自動的なスレッド分類といった長く使い続けられ有用な機能を犠牲にせざるを得なくなる。著者は、これらの強制的な機能が真のユーザーニーズを満たすためではなく、言語モデルの利用指標を人為的に高めるための意図的な戦術であることを疑っている。Google の従来からある安定したサービスや、fediverse を通じて独自ドメインと接続して使用している Fastmail での良好な第一印象とは裏腹に、著者はこの移行を Google エコシステムからの故意の断絶——単なるクライアントの切り替えではない——と捉えている。著者は連絡先を移す予定だが、歴史のあるメールスレッドはインポートせず、「不快な経験」として記述する後に「きれいな決別」を図る打算である。この状況はより広範な懸念を示している:技術企業は、ユーザーの自律性や長期的な信頼よりもエンゲージメントデータを優先することで、忠実な顧客を失うリスクを抱えている。 ## Text to translate: Improved Summary: The author is permanently leaving their 16-year-old Gmail account due to mandatory AI features they find intrusive and disrespectful. Specific issues include unsolicited message summaries, pre-filled replies, and persistent prompts ("help me write," "Tab to improve") that imply the user cannot compose emails themselves or that recipients do not deserve their time. While some AI features can be disabled, doing so forces users to sacrifice long-standing, useful functions like automatic thread categorization. The author suspects these unsolicited features are intentional tactics to artificially inflate language model usage metrics rather than serve genuine user needs. Despite Google's historically stable service and positive first impressions with Fastmail (which they have connected their custom domain to and use via the fediverse), the author views this move as a deliberate break from Google's ecosystem—not merely a client switch. They plan to migrate their contacts but will not import historical email threads, seeking a "clean break" after what they describe as a "bad taste" experience. The situation highlights a broader concern: tech companies risk losing loyal customers by prioritizing engagement data over user autonomy and long-term trust.