41167


**「スカラー」と「プリミティブ」**  
・言語によって多少異なるとしても、基本的には何れのプログラミング言語にも存在しているのでしょうか？

**公式サイトにこの言葉が記述されていない場合**  
・その言語には存在しない？  
・あるいは単に、その言語ではそう呼ばないだけ？

**スカラー**  
・複合ではない値  
・データ型にはならない？  
・プリミティブよりマイナー？ 意味が通じないことはある？？

**プリミティブ**  
・「値」としても「データ型」としても用いる？  
・参照が絡むかどうかは、「言語」もしくは「文脈」あるいは「人」によって異なる？


CC BY-SA 3.0
2018-01-23T23:55:49.333
41164
2018-01-24T05:56:40.427
2018-01-24T01:55:42.850
7886
7886
question
プログラミング言語
「スカラー」と「プリミティブ」について


一般的英単語の解釈というか翻訳と言うか、と、特定のプログラミング言語の仕様書において定義された専門用語は違うものです。なので「特定言語」における専門用語は当該言語の仕様書を見なければどうこう言えないです。

* * *

  * 一般的英語としての `scalar`

（特に数学用語として）単一値、１次元の量  
対義語は `vector` など（大きさと向きなど複数の値、複数次元の量）

  * 一般的英語としての `primitive`

原始的、根源的、基本的

> 基本的には何れのプログラミング言語にも存在しているのでしょうか？

一般的概念は上記のとおりでしょう。言語によって詳細は異なるかもしれません。

オイラ個人の意見を言わせてもらうと  
\- よりソフト寄りなのが `scalar` (１つの値だがレジスタ複数個を使う可能性がある）  
\- よりハード寄りなのが `primitive` (レジスタ１つに格納される値)

* * *

特定言語の例  
[c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") ISO/IEC 14882:1998  
3.9 型 の 10 項にて [スカラ型] なる用語が定義されています。

> 算術型、列挙型、ポインタ型、メンバへのポインタ型、並びにそれらの `cv` 修飾付きのものをスカラ型と呼ぶ。

一方で `primitive` なる単語は特に定義されていません。出てくる文脈は例えば

20.1.5 割付け子に対する要件

> as well as the memory allocation and deallocation primitives for it.  
>  メモリの割付け及び解放の基本処理 (primitive) など

24 反復子

> 24.3 Iterator primitives  
>  24.3 反復子の基本的要素

[c99](/questions/tagged/c99 "'c99' のタグが付いた質問を表示") JIS X 3010:2003 (ISO/IEC
9899:1999)  
6.2.5 にて [スカラ型] なる用語が定義されています。

> 算術型及びポインタ型を総称して、スカラ型と呼ぶ。

一方で `primitive` なる単語は特に定義されていません。

> その言語ではそう呼ばないだけ

その言語の仕様としての「専門用語」として定義してない＝呼ばない、ということでしょう。  
ですがこれは、「規格マニアが規格の厳密な話をする」のでない文脈で、一般プログラマが一般的用語を使うことを妨げるものではありません。話者同士で誤解が無ければ問題ないでしょう。


CC BY-SA 3.0
2018-01-24T02:00:31.720
41167
2018-01-24T02:00:31.720
8589
41164
answer


言語によって定義が微妙に違ってくると思いますと前置きを入れておきます。

# スカラー

`スカラー`とは`単一の値`のことを示しています。  
`単一の値`ということは`複合的なデータ`ではないということです。

つまり、プログラマーにとってわかりやすい単語を使うなら、複数のデータを扱う`配列`や`ハッシュ`は`スカラー`ではありません。

私が`スカラー`というものを最も意識したPerlでは`scalar`の頭文字の`S`をからヒントを得て、スカラー値は`$`で始まる変数に代入します（`配列`は`@`,
`ハッシュ`は`%`)。  
これは、 **Perlの仕様** です。慣習的にこうするというようなことではありません。

`$c`という変数を見ればスカラー値が入っているとわかります。余談ですがPerlでは`配列の参照`は`参照という単一の値`という考えでやはりスカラー値です。

とにかく`単一の値`を示しているので、話者間でこのデータは単一の値だと認識していれば`スカラー`で会話が通じると思います。

# プリミティブ

私の理解では、`言語に元々備わっているデータ構造`という意味で理解しています（ただし絶対この意味であるとは思っていません）。

ここで混乱しやすいのがJavaです。  
Javaでは、`int`のことを`プリミティブ型`と呼んでいます。そして`クラス`である`Integer`は`プリミティブ型`ではありません。

(`Integer`もJava言語が元々備えている機能と考えて`プリミティブ型`なのではないのかと私も混乱していた時期がありますが、Javaでは`int`と`Integer`のデータの違いを示すために`プリミティブ`という単語が使われています。もちろん`int`に限った話ではなくJavaにとって`boolean`などもプリミティブ型です）

Javaでは基本的に`Integer`は参照として扱うので、本には`プリミティブ`という単語と`参照`という単語が近くに載っていたりして混乱してしまうかもしれないですね。


CC BY-SA 3.0
2018-01-24T05:31:00.180
41173
2018-01-24T05:56:40.427
2018-01-24T05:56:40.427
9008
9008
41164
answer