0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ムーブセマンティクスってなに

Last updated at Posted at 2020-04-08

本稿はコメントにて種々の誤りが指摘されています。コメントを参照してください。


恥ずかしながら、ムーブセマンティクスという言葉で初めてセマンティクスという言葉の意味を疑問に思いまして、調べました。タグにRustがありますが、便宜上つけただけです。詳しくはありません。

1.wikipediaを調べる

英語版wikipediaにはこう書いてありました。

In programming language theory, semantics is the field concerned with the rigorous mathematical study of the meaning of programming languages. It does so by evaluating the meaning of syntactically valid strings defined by a specific programming language, showing the computation involved. In such a case that the evaluation would be of syntactically invalid strings, the result would be non-computation. Semantics describes the processes a computer follows when executing a program in that specific language. This can be shown by describing the relationship between the input and output of a program, or an explanation of how the program will be executed on a certain platform, hence creating a model of computation.

DeepLさんに聞いてみましょう。

プログラミング言語理論において、意味論はプログラミング言語の意味を厳密に数学的に研究する分野である。意味論は、特定のプログラミング言語で定義された構文的に有効な文字列の意味を評価し、それに伴う計算を示すことによって行う。このような評価が構文的に無効な文字列の評価である場合、その結果は非計算となる。**セマンティクスは、特定の言語でプログラムを実行する際にコンピュータがどのような処理を行うかを記述します。**これは、プログラムの入力と出力の関係を記述したり、特定のプラットフォーム上でプログラムがどのように実行されるかを説明したりすることで、計算のモデルを作成することで示すことができます。

意味論と言う意味があるようですね。

実践Rust入門を引いて調べてみると

wikipediaさんに聞いてもピンと来なかったので、入門書を引いて調べると、普通にわかりやすく書いてありました。

“さてここでムーブは移動の意味ですが、セマンティクスはなんでしょうか? これは意味論などと訳され、プログラミング言語ではソースコードがどういう意味を持つかを決めるルールを指します。これと対比される用語にシンタックス(syntax、構文)があります。こちらはソースコードをどう記述するかを決めるルールです。
要するにlet p2 = p1というシンタックスで書くと所有権がムーブするという意味になるのがムーブセマンティクスです。”抜粋:: κeen、河野達也、小松礼人 “実践Rust入門 [言語仕様から開発手法まで]”

シンタックスとセマンティクスは対応する概念なんですね。

  • コードをコンパイラがどう解釈するかという、コード->意味
    という概念はシンタックス コメントで指摘あり

  • 人間がコード(コンパイラ)をどう設計して意味とコード(構文)を対応付けるか、意味->コードという概念がセマンティクス

追記(2020/04/08 20:11)

シンタックスはコードが形式的に言語仕様に従って記述されているかどうかを表す概念 http://e-words.jp/w/シンタックス.html

コード->意味というよりもむしろコード->言語仕様のほうが近いようですね。
シンタックスエラーは構文の間違いという意味なのでそのほうが自然な解釈です。

上記の"コード->意味"といった表現は本質的な理解ではないことがコメントで指摘されています。
また、シンタックスとセマンティクスが二者択一のような概念というわけではないことが指摘されています。

結論

セマンティクスはソースコードの意味を決めること、あるいはその学問という意味合いで使われるようです。

追記2020/04/08 20:53

セマンティクスは意味論と訳します。
コードが表す意味(挙動)に注目する必要がある場合に使われます。

Rustにはムーブセマンティクスとコピーセマンティクスがあります。
ムーブセマンティクスとコピーセマンティクスは、所有権を移しスタック領域を解放する(move)か開放せずに別のスタック領域に値を複製する(copy)という点でセマンティクス(意味論)上、全く異なります。
しかし、シンタックス(構文)上は同じ(似ている)であるため、"セマンティクス"とつけて意味が異なることを強調します。

(以下はコメントで誤りを指摘されています。)
ムーブセマンティクスは、スタック領域に確保されていたデータの所有権が移動することで、もともとの変数はスタック領域上では破棄されるなどの諸々の役割をこの構文に持たせるよという意味だと私は理解しました。(違ったらご指摘ください。)

しかし、それをムーブと組み合わせて"所有権を移動する式という意味"を持つ言葉として使うのはなにか大仰すぎるような気がします。ムーブだけと一般的過ぎるからかもしれません。

参考文献

https://en.wikipedia.org/wiki/Semantics_(computer_science)
実践Rust入門 [言語仕様から開発手法まで]

0
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?