Advent of Swift

2025/12/15 5:04

Advent of Swift

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

要約

Japanese Translation:

**

著者は、Python 3.13 と互換性のあるプリビルトバイナリがないため、Void Linux 上で Swift 6.2 をソースからコンパイルして評価しています。インタープリタは単一ファイルスクリプトを高速に実行しますが、クラッシュ時のバックトレースは限定的です。デフォルトではコンパイル済みバイナリは標準ライブラリへ動的リンクし、静的リンクすると約10 MB増加します。
Swift の言語機能には、モダンな構文、optional/Result 型、Unicode 対応の

Character.wholeNumberValue
、および
split(whereSeparator:)
などの Sequence ユーティリティが含まれます。文字列処理は完全な Unicode セマンティクスに従い、オフセットや範囲インデックスを使うと面倒になるため、著者は一部の問題でコードポイント配列を使用しました。正規表現は Ruby より約 100 倍遅く(ループ内)、ホイスト後は 3 倍遅く、またプレフィックス/サフィックス演算子は式に「貼り付け」る必要があり (
if !condition
は無効) ます。関数パラメータは名前付きで、可読性は向上しますが OCaml のような再順序化やカリー化はできません。コレクションは値セマンティクスを採用し、コピーオンライトと
inout
最適化があります;サブストリングには専用の
Substring
型があり、
func parse<T>(_ str: T) where T: StringProtocol
のように別途関数シグネチャが必要です。著者は
swift‑algorithms
ライブラリを使用せず、自前でコレクションコードを書きました。型チェックは通常のコードでは高速ですが、遅く混乱しやすいケースもあります(例:上限より下限が大きい空範囲はエラーとして致命的に扱われます)。欠落している機能には Hashable タプル(2020 年に削除)と配列/パターンマッチングがあり、利便性を低減しています。

改善された要約(必要なら):
(上記の段落。)

本文

今年はアドベント・オブ・コードを使ってSwiftを学ぶことにしました。
2025年のタスクは12日間しかなかったため、ここで体験談と解答へのリンクをまとめました。

ツールチェーン
Void Linux 上で Swift 6.2 を自前でコンパイルし、Python 3.13 が必要な lldb と互換性のあるバイナリが無かったので仕上げました。Swift のベースは clang++ だけで構築できるため、Gentoo ebuild を参考に設定を行いましたが、エンドユーザーにはそれほど関係ありません。
ツール自体はまともです:インタプリタがあり、

swift foo.swift
で簡単な「スクリプト」を実行できます。起動時間が短く、手軽な実験に便利です。また REPL もあります(まだ試したことはありません)。インタプリタの欠点として、クラッシュ時に有用なバックトレースが得られない点があります。代わりにバイナリをコンパイルして lldb を使う必要がありました。
swift-format
が組み込まれており、デフォルトは 2 スペースですが、Swift コードの多くは 4 スペースです。
単一ファイルで書くだけなので
swift-build
は触れませんでした。デフォルトでは標準ライブラリを動的リンクしてコンパクトに保ちますが、静的リンクすると約 10 MB 増え、許容範囲です。

言語の感想
Swift はモダンで取り入れやすいと感じました。構文は C 系統に似ているものの Rust よりもシンボルが少なく、クロージャには Ruby スタイルのブロック構文があります。エラーハンドリングはチェック付き例外・オプショナル型・

Result
で行えますし、標準ライブラリに
Character.wholeNumberValue
のような便利関数が揃っています。配列上の
Sequence
抽象化により、
split(whereSeparator:)
のようなメソッドを利用できます。ドキュメントも充実しています。

文字列操作は強力ですが、Unicode を尊重するためオフセットや範囲でインデックス付けすると不便です(これは多くの場合メリットなので回避策としてコードポイント配列に変換しました)。正規表現は意外と遅い。ループ内でリテラル (

#/…/#
) を使うと毎回新しいインスタンスが生成され、定数化しても Ruby より 3 倍遅くなりました。最終的に正規表現を使わない実装へ書き直しました。プレフィックス/サフィックス演算子は式に「貼り付け」る必要があるため
if !condition
は書けません。Swift の関数はパラメータ名(Objective‑C 互換)を多用し、可読性は高いですが OCaml のラベル付き引数ほど柔軟ではありません。

コレクションは値セマンティクスで、コピーオンライトや inout パラメータで最適化します。ガベージコレクションは参照カウントです。

Substring
は専用型なので、文字列とサブストリングの両方を受け取る関数を書くにはプロトコル指定が必要です。

func parse<T>(_ str: T) -> … where T: StringProtocol

swift‑algorithms
ライブラリはさらに多くのシーケンス・コレクションアルゴリズムを提供しますが、今回は使いませんでした。

欠点

  • LLVM ベースなのでコンパイルは速いですが、型チェック時にエラーが遅くて混乱しやすいです。
  • 型チェック以外のエラーメッセージは役立つことが多い(例:文字列に
    ''
    を使ったときや空のマップに
    []
    を渡したときの対処法を示してくれます)。
  • 範囲は inclusive (
    ...
    ) と exclusive (
    ..<
    ) があり、上限が下限より小さい範囲を作ると致命的エラーになります。ほか言語では空範囲として扱われます。
  • 「当たり前」だと思う機能が抜けている点もあります:
    Hashable
    値のタプルはハッシュ化できず(2020 年に提案が削除され、未解決)不便です。言語は代数型・タプルでパターンマッチをサポートしますが、配列やシーケンスでは未対応で制約があります。

Swift に慣れるまで多くの情報を検索しなければならず、古いバージョンへの参照が多く、10 年以上経っても頻繁に変更があることが分かりました。言語が安定化して欲しいです。

総じて、Swift はこれらの課題で楽しく簡単に使えました。非 macOS 系ではライブラリの可用性が課題です。

NP: Adrianne Lenker—Promise is a Pendulum

同じ日のほかのニュース

一覧に戻る →

2025/12/15 6:53

Anthropic Outage for Opus 4.5 and Sonnet 4/4.5 across all services

## Japanese Translation: アノマリーは複数のAnthropicサービスに影響を与え、特にSonnet 4.0、Sonnet 4.5、およびOpus 4.5モデルが対象でした。事件は2025年12月14日21:31(UTC)に初めて報告され、同日の21:46(UTC)に調査更新が行われました。この更新で問題は該当するモデルバージョンに起因することが確認されました。影響範囲は複数のAnthropicプラットフォームに及びます——claude.ai、platform.claude.com(旧console.anthropic.com)、Claude API(api.anthropic.com)およびClaude Codeです。タイムラインや次のステップについてはまだ発表されていません。

2025/12/15 6:05

2002: Last.fm and Audioscrobbler Herald the Social Web

## Japanese Translation: *変更は不要です。要約はすべての列挙された重要ポイントを正確に反映していますが、商業的実現可能性について小さな推測上の結論も追加されています。

2025/12/15 1:55

Hashcards: A plain-text spaced repetition system

## Japanese Translation: Hashcards は、すべてのフラッシュカードデータをプレーンマークダウンファイル(例:`Cards/Math.md` や `Chemistry.md`)として保持する軽量でローカル優先のスペースドリピテーションアプリです。ウェブ UI を起動すると (`hashcards drill <path>` が `localhost:8000` を開く)、レビュー履歴は SQLite データベースに保存されますが、カード自体は Git に対応し続けます。各カードはテキストのハッシュでコンテンツアドレス化されているためです。インターフェイスは作成をスムーズにすることを優先しており、クローズ削除は Mochi の冗長な `{{ }}` ではなく `[ ]` を使い、単一行ブロック(例:`Q: … A:` や `C: …`)でカードを定義します。 著者は Anki の煩雑な UI、“すべて期限切れを学習” ボタンの欠如、WYSIWYG エディティング、そして不安定なプラグインサポートを批判しています。Mochi は過度に冗長なクローズ構文、ノートタイプ自動化がないこと、および長期的には性能が劣る単純な倍率ベースのスケジューラーという欠点があります。Hashcards はこれらの痛みを解消し、最小限の摩擦、最適なスケジューリングのための高度な FSRS アルゴリズム、および任意のエディタや Unix ユーティリティ(例:`wc`、`awk`)でカードを編集できる機能を提供します。デッキは Git でバージョン管理・ブランチ化・マージが可能で、サードパーティサービスなしにユーザーがデータを完全にコントロールできます。 将来的には CSV ベースのカードインポート、Python で書かれたノートタイプロジック、および Git 主導の共有ワークフロー拡張をロードマップに含めています。これらの機能は協力を容易にし、コンテンツ生成を自動化するとともに、開発者が Hashcards を自身のプロジェクトへ拡張できるようにし、オープンソーススペースドリピテーション エコシステムを形成する可能性があります。