プリミティブ型

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動

プリミティブ型(プリミティブがた 英語: primitive data type、プリミティブデータ型)は、データ型の1分類である。理論計算機科学的に代数的データ型によって考えれば「そのデータ型の定義の中に部分として他の[1]型を含まないような型」がプリミティブ型であるが、Javaにおいて型が「primitive types(プリミティブ型)とreference type(参照型)」に二分されることにひきずられたと思われる2分法などが信じられていることも多い[要出典]

この記事におけるここから先の説明は、最初に説明した理論的な分類に従ったものではなく、よく信じられているらしい「プログラミング言語によって提供されるデータ型であり基本的な要素である。対する語は複合型という。言語やその実装に依存して、プリミティブ型がコンピュータメモリ上のオブジェクトと一対一対応のときもあれば、そうでないときもある。組み込み型もしくは基本型とも呼ぶ。」という解釈に従ったものである。

代表的なプリミティブ型を一部列挙:

プリミティブ型にもなりうる、より高度な型を一部列挙:

プリミティブ型が最も高速な演算を行える言語構成要素である場合が多い。例として整数の加算は、単一マシン命令として演算され、プロセッサによっては単一マシン命令で文字列を処理する具体的な命令を提供している。特に、C言語標準では「plainなint型オブジェクトのサイズは実行環境のアーキテクチャに依存する」とされている。これは、32ビットアーキテクチャではint型が32ビットになってしまうことを意味する(ここで、「なってしまう」というのは16ビット脳による主観であり、VAX脳(vaxocentrism[2])では32ビット以外はありえない。64ビットになってしまうCray脳もある(CrayのスーパコンピュータはILP64である))。

Smalltalkではプログラムによって拡張されたプリミティブデータ型を許可しており、それらの型の演算命令を追加することもでき、場合によっては言語固有の演算命令を再定義することもできる。

.NET[編集]

.NET Framework共通言語ランタイム (CLR) では、System.Type.IsPrimitiveプロパティによって、型がCLRプリミティブ型であるかどうかを判定できる[3]。.NET言語組み込みの値型は必ずしもCLRプリミティブ型ではないが、CLRプリミティブ型はすべて値型である。

例えば、十進浮動小数点数型System.Decimalは値型(構造体)であり、C#の組み込み型decimalでもあるが、CLRプリミティブ型ではない。

CLRプリミティブ型は共通中間言語 (CIL) 上で専用の命令を持つなどの特別な性質がある。

[編集]

  1. ^ 正確には「他の型(自身を含む)を含まない」である(再帰データ型の考慮)。
  2. ^ http://catb.org/jargon/html/V/vaxocentrism.html
  3. ^ Type.IsPrimitive Property (System) | Microsoft Docs