型システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/06 04:25 UTC 版)
型システム(かたシステム、英: type system)は、コンピュータプログラミングの数々の構成要素および値に対して、型(type)と呼ばれる特性を付与するための数々の規則群から成立している形式体系である[1]。型の付与は、型付け(typing)と言われる。例えば、変数・式・関数・モジュール・オブジェクトなどが型の付与対象になり、それらの型付け要素を規則的な関係でまとめたデータ構造にも型は付与されてカテゴライズされる。
注釈
出典
- ^ Pierce 2002, p. 1: "A type system is a tractable syntactic method for proving the absence of certain program behaviors by classifying phrases according to the kinds of values they compute."
- ^ Cardelli 2004, p. 1: "The fundamental purpose of a type system is to prevent the occurrence of execution errors during the running of a program."
- ^ 『型システム入門』 p. 1
- ^ 6-1. バッファオーバーラン その1「こうして起こる」
- ^ 非Java言語のサポート | Oracle Help Center | Java SE 11 | Java仮想マシン・ガイド
- ^ a b Benjamin C. Pierce「19.3 名前的型システムと構造的型システム」 『型システム入門 −プログラミング言語と型の理論−』オーム社、2013年3月26日。ISBN 978-4274069116。
- ^ http://web.cecs.pdx.edu/~harry/musings/SmalltalkOverview.html
- ^ Duck Typing vs Structural Typing vs Nominal Typing | by Saurabh Nayar | Higher-Order Functions | Medium
- ^ Structural Typing: Compile Time Duck Typing
- ^ typing --- 型ヒントのサポート — Python 3.9.4 ドキュメント
- ^ C# Coding Conventions | Microsoft Docs
型システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2017/03/05 01:46 UTC 版)
「XL (プログラミング言語)」の記事における「型システム」の解説
XL1の型システムは静的型付けだが、ジェネリックプログラミングの方式がAbaやC++などの言語とは異なる。配列やポインタなどは、C++ではプリミティブ型であるが、XLではライブラリで定義される。以下に一次元配列の定義を例示する。 generic [Item : type; Size : integer] type array 有効なジェネリック型(validated generic type)とは、その型がどのように使われるかを自身で表せる型であり、このような型にはジェネリック引数が必要ない。例として、不等号を含むときに型をorderedと宣言するものを示す。 // A type is ordered if it has a less-than relationshipgeneric type ordered if A, B : ordered Test : boolean := A < B これによって、ordered自身がジェネリックとなるから、潜在的にジェネリックとなる関数を定義することが可能となる。 // Generic function for the minimum of one itemfunction Min(X : ordered) return ordered is ... compute Y of type ordered ... return Y さらに、arrayのようなパラメータを持つジェネリック型にも適用できる。任意の配列(array)の和を計算する関数を以下に示す。 function Sum(A : array) return array.Item is for I in 0..array.Size-1 loop result += A[I]
※この「型システム」の解説は、「XL (プログラミング言語)」の解説の一部です。
「型システム」を含む「XL (プログラミング言語)」の記事については、「XL (プログラミング言語)」の概要を参照ください。
型システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/05 19:25 UTC 版)
「Rust (プログラミング言語)」の記事における「型システム」の解説
Rust言語が備える型システムは、impl(実装)、trait(トレイト)、struct(構造体)およびenum(列挙型)を基本として構成される。implが他の言語におけるクラスに近い役割を果たし、継承とポリモーフィズムはtraitによって提供される。traitにはメソッドを定義することができ、traitで宣言されたメソッドはimplによってstructへミックスインされる。structにはフィールドが定義可能で、traitとimplはそれ自身にはフィールドは定義できない。enumには複数種類の型のカテゴリ変数が定義可能で、数値型、文字列型、オブジェクト型などの複数の状態を選択的に持ちうる。菱形継承問題を回避するためにtraitのみが継承が可能である。 変数の型を決定する型システムは静的型付けかつ強い型付けである。静的型付けと動的型付けの区分においての型付けは、コンパイル時に全ての変数に対して型を決定する静的型付けのみをサポートしている。そのため、Perl、Pythonのようなインタプリタ言語で見られるような、実行時に変数の型を動的に上書きすることはできない。強い型付けと弱い型付けの区分においての型付けは、実行時に変数の型を型変換(アップキャスト、ダウンキャスト、クロスキャスト)およびボクシングをすることを許さない強い型付けのみをサポートしている。C言語、Javaは実行時に型変換をすることを許す弱い型付けをサポートしているが、Rust言語ではそのような型変換は認められていない。これら二点の静的型付けかつ強い型付けの特性により、変数の型は宣言時のもので決定的に固定される。
※この「型システム」の解説は、「Rust (プログラミング言語)」の解説の一部です。
「型システム」を含む「Rust (プログラミング言語)」の記事については、「Rust (プログラミング言語)」の概要を参照ください。
型システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/01/06 04:20 UTC 版)
「関数型プログラミング」の記事における「型システム」の解説
詳細は「型システム」を参照 Hindley–Milner型システムの登場以降の関数型プログラミングは、型付きラムダ計算を背景にした静的型付けが標準になっている。Lisp系で実践されていた型無しラムダ計算を背景にした動的型付けは、その対極に位置付けられている。Hindley–Milner型システム(英語版)がもたらした型推論もまた関数型プログラミングの標準になっている。型推論ルールでの各変数の型は、それに束縛される値を導出した各項と各評価値から演繹的に判別されるので、各変数への型説明や型注釈の表記を省略できる。 項の直積および項の直和の形式的な組み合わせ構造である代数的データ型は、型推論ルールに適したデータ構造の表現方法として関数型プログラミングの標準になっている。代数的データ型はパラメトリック多相(英語版)で総称化されているのが標準であり、Hindley–Milner型システムはその型変数化された項への型推論にも対応可能である。
※この「型システム」の解説は、「関数型プログラミング」の解説の一部です。
「型システム」を含む「関数型プログラミング」の記事については、「関数型プログラミング」の概要を参照ください。
型システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/08 01:14 UTC 版)
詳細は「型システム」を参照 型システムは、プログラミング言語において式の値となるデータ型について、型理論にもとづいて分類しどう扱うかを示すものである。 また、内部的には、ディジタルコンピュータでは全てのデータはバイナリ(二進法)で保持される。
※この「型システム」の解説は、「プログラミング言語」の解説の一部です。
「型システム」を含む「プログラミング言語」の記事については、「プログラミング言語」の概要を参照ください。
型システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/30 03:37 UTC 版)
「Cypher (問い合わせ言語)」の記事における「型システム」の解説
Cypherのデータ型は、他のプログラミング言語やクエリ言語で使用される一般的な型の多くが含まれています。サポートされる型は、ブール、文字列、数値、整数、浮動小数点数などのスカラー値の型が含まれます。また、datetime、localdatetime、date、time、localtime、durationなどの時間型もサポートしています。
※この「型システム」の解説は、「Cypher (問い合わせ言語)」の解説の一部です。
「型システム」を含む「Cypher (問い合わせ言語)」の記事については、「Cypher (問い合わせ言語)」の概要を参照ください。
型システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/27 00:27 UTC 版)
Haxeでは細かい型宣言が可能である。 function func1(threeDimensionalArray:Array
※この「型システム」の解説は、「Haxe」の解説の一部です。
「型システム」を含む「Haxe」の記事については、「Haxe」の概要を参照ください。
型システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/24 14:08 UTC 版)
GObjectフレームワークの基盤として、汎用の動的型システム GType がある。GTypeシステムは全オブジェクトの実行時記述を保持し、各種言語バインディングを実現するグルーコードからそれを使うことができる。型システムは任意の単一継承クラス階層を扱え、同時にクラスでないデータ型も扱える(不透明ポインタ、文字列、各種サイズの整数と浮動小数点数など)。 GTypeは登録されている型に属する値のコピー、代入、破棄の方法を知っている。整数などの型ではこれらは自明だが、複雑なオブジェクトには参照カウントがあるものもあれば、(一部だが)参照カウントのないものもある。型システムが参照カウントのあるオブジェクトを「コピー」するとき、一般に単に参照カウントをインクリメントするだけである。しかし、参照カウントのないオブジェクト(例えば文字列)のコピーでは、メモリを確保して実際にコピーを生成する。 この基本機能を使って GValue が実装されている。これは汎用コンテナ型であり、型システムが把握している任意の型の値を保持できる。このようなコンテナは、全てのネイティブ値をそのような型タグコンテナに格納する動的型付き言語とやりとりする際に特に便利である。
※この「型システム」の解説は、「GObject」の解説の一部です。
「型システム」を含む「GObject」の記事については、「GObject」の概要を参照ください。
型システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/16 08:53 UTC 版)
詳細は「型システム」を参照 型システムの定義は様々だが、プログラミング言語理論の世界では Benjamin C. Pierce の定義が一般に受け入れられている。 (型システムは)プログラムが計算する値の種類に従って句(phrase)を分類することで、そのプログラムがある動作をしないことを証明する扱いやすい文法的手法である。 (Pierce 2002) 換言すれば、型システムはプログラムの値を「型」と呼ばれる集合に分類し(これを「型設定」あるいは「型割り当て」と呼ぶ)、特定のプログラムの動作が不正であることを示す。例えば、"hello" という値を文字列型、5 という値を整数型としたとき、プログラマに "hello" と 5 を加算できないといった制限を課すのである。このような型システムでは、次のプログラム "hello" + 5 は不正である。もちろん、文字列と整数を加算することを許す型システムもありうる。 型システムの設計と実装は、プログラミング言語そのものと同じ程度に広がりを持った話題である。実際、プログラミング言語の最大の基盤は型システムであるとも言われ、「型システムを正しく設計すれば、言語は自分自身で設計される」と言われている[要出典]。
※この「型システム」の解説は、「型理論」の解説の一部です。
「型システム」を含む「型理論」の記事については、「型理論」の概要を参照ください。
固有名詞の分類
- 型システムのページへのリンク