void 安全性( null 安全性とも呼ばれる) は、オブジェクト指向プログラミング言語内で、オブジェクト参照にnullまたはvoid値が含まれないことを保証するものです。
オブジェクト指向言語では、オブジェクトへのアクセスは参照(または、同等のポインタ) を通じて行われます。一般的な呼び出しは次の形式になります。
xf(a, ...)
ここで、f は操作を表し、x は何らかのオブジェクトへの参照を表します。ただし、実行時には、参照はvoid (またはnull ) になることがあります。このような場合、上記の呼び出しはvoid 呼び出しとなり、実行時例外が発生し、プログラムが 異常終了することがよくあります。
void 安全性は、void 呼び出しが発生しないことを静的に (コンパイル時に) 保証するものです。
歴史
2009 年の講演で、Tony Hoare 氏は、ヌル ポインタの発明がALGOL W言語の設計にまで遡り、それを「間違い」と呼びました。
私はこれを 10 億ドルのミスと呼んでいます。それは 1965 年のヌル参照の発明でした。当時、私はオブジェクト指向言語 (ALGOL W) における参照用の最初の包括的な型システムを設計していました。私の目標は、すべての参照の使用が絶対に安全で、チェックはコンパイラによって自動的に実行されるようにすることでした。しかし、実装が非常に簡単であるという理由だけで、ヌル参照を入れたいという誘惑に抗うことができませんでした。これにより、無数のエラー、脆弱性、システム クラッシュが発生し、過去 40 年間でおそらく 10 億ドルの苦痛と損害が発生しました。[1]
ベルトラン・マイヤーは「ボイドセーフティ」という用語を導入した。[2]
プログラミング言語では
void safety を保証するための初期の試みは、 Self プログラミング言語の設計でした。
Eiffel 言語は、ISO - ECMA標準に従って void 安全です。void安全メカニズムは、バージョン 6.1 以降の EiffelStudioに実装され、バージョン 6.4 以降の最新の構文を使用しています。
Microsoft Researchの研究用言語であるSpec#言語には、voidの安全性に対処する「非null型」の概念があります。.NETフレームワーク上で動作するMicrosoft Researchの機能優先言語であるF#言語は、他の.NET言語と相互運用する場合を除き、voidに対して安全です。[3]
ユニオン型に基づく null 安全性
2011 年以降、いくつかの言語では、ユニオン型と交差型をサポートしています。これらを使用すると、コンパイル時に、値 null がその一意のインスタンスである特別なクラス Null を使用して、可能性のある null ポインターを検出できます。
型に基づく null 安全性は、最初にCeylonで登場し、その後すぐにTypeScriptに続きました。
C #言語はバージョン8以降、コンパイル時のnull安全性チェックを実装しています。ただし、言語の古いバージョンとの互換性を保つために、この機能はプロジェクトごとまたはファイルごとにオプトインされています。[4]
GoogleのDart言語は、2018年8月のバージョン2.0からこれを実装している[5] [6]
デフォルトでnull安全な型を使用する他の言語には、JetBrainsのKotlin、[7] Rust、[8] AppleのSwiftなどがあります。
参照
参考文献
- ^ CAR Hoare: Null 参考文献: The Billion Dollar Mistake、2009年3月9~12日にロンドンで開催されたQConでの講演の要約、オンラインで入手可能
- ^ Bertrand Meyer: Attached Types and their Application to Three Open Problems of Object-Oriented Programming、ECOOP 2005 (Proceedings of European Conference on Object-Oriented Programming、エジンバラ、2005 年 7 月 25 ~ 29 日)、Andrew Black 編、Lecture Notes in Computer Science 3586、Springer Verlag、2005 年、1 ~ 32 ページ、オンラインでも入手可能
- ^ Syme, Don. 「今週の名言: 「C# でできて F# ではできないことは何ですか?」」 。 2018 年9 月 7 日閲覧。
- ^ 「Null 許容参照型 | Microsoft Docs」 。2021年3 月 12 日閲覧。
- ^ Moore, Kevin (2018-08-07). 「Announcing Dart 2 Stable and the Dart Web Platform」. Dart . 2018-08-08閲覧。
- ^ 「Sound null safety | Dart」 。 2021年3月12日閲覧。
- ^ 「Null 安全性 - Kotlin」。2021 年3 月 12 日閲覧。
- ^ 「Enum の定義 - Rust プログラミング言語」. doc.rust-lang.org . 2021 年 6 月 26 日閲覧。
