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

「Advent of Code」の解法を用いたAdaとRustの比較

2025年10月5日原文(github.com)

概要

johnperry-mathAoC2023 プロジェクトに関する GitHub通知設定 について解説。 通知設定変更 には サインイン が必要。 Fork数Star数 も記載。 プロジェクトの公開状態 について説明。 操作手順 を簡潔にまとめ。

johnperry-math / AoC2023の通知設定

  • GitHub 上の AoC2023 リポジトリ公開状態
  • 通知設定 の変更には GitHubアカウントへのログイン が必須
  • Fork数:1件
  • Star数:20件
  • 通知設定 は画面右上の Bellアイコン から選択
  • 未ログインの場合、通知設定のボタンがグレーアウト表示
  • 通知の種類 :全通知、参加中のみ、無効化などの選択肢
  • リポジトリのフォークスター での関心度の確認
  • Publicリポジトリ で誰でも閲覧可能
  • 通知設定の変更手順
    • サインイン
    • リポジトリページ右上の 通知アイコン をクリック
    • 希望する通知タイプを選択

Fork・Star・公開設定について

  • Fork :他ユーザーによる リポジトリの複製数
  • Star :ユーザーの お気に入り登録数
  • Public全ユーザー閲覧可能な状態
  • 通知設定個別リポジトリ単位 で管理
  • アクティビティの追跡更新情報の受け取り に便利

Hackerたちの意見

Adaがオープンソースのコンパイラを持ってるのは面白いね。数年前に見たときは、プロプライエタリなコンパイラしかないと思ってたから、あんまり調べなかったんだ。今、もう一度見てみようかな。

GNATは30年も前からあるんだ。GPLランタイム例外なしでリリースされたバージョンがあったから、リンクするにはプログラムもGPLでリリースしなきゃいけなかったんだけど、それはもうずいぶん前の話だよ。

GNATは90年代からあって、GCCをベースにしてる。私の大学ではコンパイラに関する作業をして、リアルタイムプログラミングのような学部の授業で使ってた。確か、プログラミング入門の授業でAdaを使おうとした試みもあったけど、結局Pascalを選んで、最終的にはC++になったと思う。

Adaには本当に良いアイデアがあるのに、主に安全性が重要なコミュニティ以外ではあまり使われなかったのが残念だよね。範囲が制限された数値型を作れるのは、特定のバグのクラスにはすごく役立つんだ。Spark Adaは比較的学びやすい基準で、SIL 4に準拠したソフトウェアを開発するのに役立ったよ。最近は、何でもありの30年間を経て、また安全なソフトウェアを作ろうという流れがある気がする。数十年の安全性の教訓を基にして、もっと良い言語を作ることができたらいいな。良いアイデアがマイナーな言語に埋もれて忘れ去られちゃうのはもったいないよね。

範囲が制限された数値型を作れるのは、特定のバグのクラスにはすごく役立つんだ。そうだよね!RustにAdaの数値範囲機能があったら最高だな!

範囲が制限された数値型を作れる能力は、特定のバグのクラスにとって本当に役立つよ。これはC++でよく使う機能なんだ。標準ライブラリの一部ではないけど、現代のC++では範囲制限された数値型をプログラムで生成するのは簡単だよ。いくつかの安全チェックは実行時ではなくコンパイル時に行えることもあるし、プログラミング言語の標準機能にすべきだと思う。

30年以上前にAdaでプログラミングしてたけど、今も同じ気持ちで、何度も失望してきた。今回は違うかもしれないね。

NimはAdaとModulaにインスパイアされていて、サブレンジもあるんだ。[1]: type Age = range[0..200] let ageWorks = 200.Age let ageFails = 201.Age で、コンパイル時にエラーが出るよ: $ nim c main.nim エラー: 201はAgeに変換できません [1] https://nim-lang.org/docs/tut1.html#advanced-types-subranges

Adaには本当に良いアイデアがたくさんあるのに、安全性が重要なコミュニティ以外ではあまり使われなかったのが残念だね。範囲が制限された数値型を作れるのは、特定のバグのクラスにはすごく役立つ。pjmlpが別のコメントで言ってるように、Pascalはこの機能を最初から持ってたはずだし、初期のバージョンからあったと思うよ。最初のTurbo Pascalのバージョンよりも前にね。

Ada、少なくともGNATは、コンパイル時の次元解析(単位チェック)もサポートしてるよ。私はエンジニアリングアプリケーションを主に扱ってるから偏見があるかもしれないけど、他の言語ではなぜそれがサードパーティのライブラリに委ねられているのか理解できないな。 https://docs.adacore.com/gnat_ugn-docs/html/gnat_ugn/gnat_ug...

C#はAdaやRustと同じ領域では競争していないけど、似たような範囲属性があるよ。ただ、唯一の欠点は、ASP.NETのように特定のタイミングで自動的に行わない限り、手動で検証関数を呼び出さなきゃいけないことだね。

個人的な経験から言うと、安全性だけじゃなくて、生成されるものの信頼性も大事な要素だよ。型システムで制約を表現できると、より高品質なコードが生まれるんだ。RustとGolangの経験からの簡単な例としては、ミューテックスの扱いがあるね。Rustはガードハンドルを漏らさせないけど、Golangはデッドロックに突っ込むことを許しちゃう。

Hacker Newsで議論の続きを見る