Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GLOBAL_DEFINED_WORDS: 適格要件以外の意味論要素も追加 #1359

Open
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

akinomyoga
Copy link
Member

#1273 (comment) by @akinomyoga

GLOBAL_DEFINED_WORDS.json の内容を見ていて思ったのですが "適格要件" の説明が気になります。cpprefjp では宣言に対する "Mandates:" の項目が "適格要件" に対応するのだと思いますが、

"適格要件": {
"desc": "満たさなければプログラムが不適格となる要件。`static_assert`や関数のdelete宣言などに相当する"
},

という説明 (特に後半) は間違ってはいないのかもしれないけれど、的確な説明ではない気がします。あと、[structure.specifications]/3 に載っている他の Preconditions だとか Constraints だとかに対応する項目も合って良いのでは? と思いました。

#1273 (comment) by @faithandbrave

確認します。 PreconditionsとかConstrainsは、関数の雛形として見出しは決まってます。事前条件と、テンプレートパラメータ制約です。これは用語として追加してもらってよいかと思います。

https://github.com/cpprefjp/site/blob/master/start_editing/function_template_page.md

#1273 (comment) by @faithandbrave

満たさなければプログラムが不適格となる要件。static_assertや関数のdelete宣言などに相当する

修正案を考えました↓

満たさなければプログラムが不適格となる要件。この要件は、オーバーロード解決によって選択された関数内でのstatic_assertの定数条件式や、関数に対するdelete宣言などで表現できる

#1273 (comment) by @akinomyoga

更に、一連の他の要素も加えると共に、頭に「関数の意味論を構成する要素の1つ。」などのようにどのようなカテゴリーの用語なのかわかるようにしたら良いのではないかと思っています。更に更に、適格要件 ⇔ Mandates の対応関係がわかりにくいので 「Mandates。」も tooltip に含まれているといいなと思っています。

#1273 (comment) by @faithandbrave

そうですね。その用語が使われる文脈もわかったほうがいいので、ご指摘の通りでよいかと思います。 PreconditionsとConstrainsの追加も含めてPull Requestで相談しましょう。

ちょっと私が向こう数日間は作業できなさそうなので、できそうであればどなたかやっていただければと思います。

@akinomyoga
Copy link
Member Author

akinomyoga commented Nov 7, 2024

(コメントしたつもりがボタン押していなかったみたいで、少し遅れましたが改めて)

"結果"・"例外"・"戻り値" などの語は、一般的すぎて関係ない文脈の語も着色すると混乱を招きそうなので、除外しています (以下、除外した語たちの commit。この PR のブランチには含まれていません)。

From c5aa91918cd1d34bade65c0bdea9fb109f83fbea Mon Sep 17 00:00:00 2001
From: Koichi Murase <[email protected]>
Date: Thu, 7 Nov 2024 20:08:41 +0900
Subject: [PATCH] =?UTF-8?q?[reject]=20GLOBAL=5FDEFINED=5FWORDS:=20?=
 =?UTF-8?q?=E4=B8=80=E8=88=AC=E7=9A=84=E3=81=AA=E8=AA=9E=E3=81=A8=E7=B4=9B?=
 =?UTF-8?q?=E3=82=89=E3=82=8F=E3=81=97=E3=81=84=E6=84=8F=E5=91=B3=E8=AB=96?=
 =?UTF-8?q?=E8=A6=81=E7=B4=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 GLOBAL_DEFINED_WORDS.json | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/GLOBAL_DEFINED_WORDS.json b/GLOBAL_DEFINED_WORDS.json
index ac556e34e..fc9c1da86 100644
--- a/GLOBAL_DEFINED_WORDS.json
+++ b/GLOBAL_DEFINED_WORDS.json
@@ -85,14 +85,38 @@
     "yomi": "じぜんじょうけん",
     "desc": "関数等の意味論を構成する要素の1つ。Preconditions。関数呼び出し時に満たされていると関数が想定する条件。満たさなければ未定義の動作。契約属性の`[[expects]]`に相当"
   },
+  "効果": {
+    "yomi": "こうか",
+    "desc": "関数等の意味論を構成する要素の1つ。Effects。関数内部で発生する効果"
+  },
+  "同期": {
+    "yomi": "どうき",
+    "desc": "関数等の意味論を構成する要素の1つ。Synchronization。関数に適用される同期操作"
+  },
   "事後条件": {
     "yomi": "じごじょうけん",
     "desc": "関数等の意味論を構成する要素の1つ。Postconditions。関数を実行後に満たされている条件。契約属性の`[[ensures]]`に相当。"
   },
+  "結果": {
+    "yomi": "けっか",
+    "desc": "関数等の意味論を構成する要素の1つ。Results。結果の型についての記述"
+  },
+  "戻り値": {
+    "yomi": "もどりち",
+    "desc": "関数等の意味論を構成する要素の1つ。Returns。戻り値についての記述"
+  },
+  "例外": {
+    "yomi": "れいがい",
+    "desc": "関数等の意味論を構成する要素の1つ。Throws。例外送出の有無・条件・内容・効果"
+  },
   "計算量": {
     "yomi": "けいさんりょう",
     "desc": "関数等の意味論を構成する要素の1つ。Complexity。関数が使うアルゴリズムの空間計算量・時間計算量"
   },
+  "備考": {
+    "yomi": "びこう",
+    "desc": "関数等の意味論を構成する要素の1つ。Remarks。追加の意味論的制約"
+  },
   "エラー条件": {
     "yomi": "えらーじょうけん",
     "desc": "関数等の意味論を構成する要素の1つ。Error conditions。関数が各エラーコードを返す条件"
--
2.46.0

@akinomyoga akinomyoga force-pushed the dfn-semantic-elements branch from 7161a2d to 5a30c9a Compare November 7, 2024 11:48
@faithandbrave
Copy link
Member

同期については見出し以外の文脈でも使われるので、マルチスレッド用語としての説明もあったほうがよいかもです

@faithandbrave
Copy link
Member

戻り値とか例外も、言語解説では見出し以外で使われるので、これも用語としての説明が必要そうです

@akinomyoga akinomyoga force-pushed the dfn-semantic-elements branch from fc00171 to 2400ca7 Compare November 7, 2024 12:27
@akinomyoga
Copy link
Member Author

2400ca7 同期・戻り値・例外についての説明を追加しました。同期と例外については規格にあったそれっぽい説明を要約しました。戻り値の説明については、さすがに規格に関連する説明を見つけることができなかったので、適当に作りました。

@akinomyoga akinomyoga force-pushed the dfn-semantic-elements branch from 2400ca7 to 2cb9f57 Compare November 7, 2024 12:30
},
"同期": {
"yomi": "どうき",
"desc": "マルチスレッド実行時にリソースの所有権に基づいて実行順序を制御する仕組み"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

弱い意見として、「同期」の説明はしなくても良い気がしています。

  • C++標準ライブラリ仕様記述の Synchronization は、マルチスレッドプログラミングの文脈でいう同単語の一般的な用法とニュアンスが異なる。(C++では"happens before"関係を保証する、という意味で使われる)
  • (少なくとも自分の感覚では)「リソースの所有権」はスレッド間同期との直接的な関係を持たない。

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

スレッド関係の見出しで使ってる「## 同期」にポップアップをつけようとすると、見出し以外にも見出しの説明が入ってしまうので一般的な説明が入ってる、という状況ですね。

site % git grep "## 同期"
reference/future/packaged_task/get_future.md:## 同期
reference/future/promise/get_future.md:## 同期
reference/memory/shared_ptr/use_count.md:## 同期
reference/syncstream/basic_syncbuf/emit.md:## 同期
reference/thread/jthread/join.md:## 同期
reference/thread/jthread/op_constructor.md:## 同期
reference/thread/jthread/op_constructor.md:## 同期
reference/thread/this_thread/sleep_for.md:## 同期
reference/thread/this_thread/sleep_until.md:## 同期
reference/thread/this_thread/yield.md:## 同期
reference/thread/thread/join.md:## 同期
reference/thread/thread/op_constructor.md:## 同期

Copy link
Member

@faithandbrave faithandbrave Nov 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

乱数でも「## 乱数列の周期」とかありますが、見出しの説明はなくていいと言えばいい気もしますが、あって困るものでもなさそうな気もするという感じはします

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

弱い意見として、「同期」の説明はしなくても良い気がしています。

そんな気がします。

  • C++標準ライブラリ仕様記述の Synchronization は、マルチスレッドプログラミングの文脈でいう同単語の一般的な用法とニュアンスが異なる。

なので、 ライブラリ仕様記述の Synchronization の説明は除外したのでした。代わりに、より一般の同期の説明をしてはどうかという提案だったので、C++ 全体で広く使われている同期 (synchronization) の説明を別 commit で試みたのでした ("意味論要素を追加" という名前の PR の下で異なる修正を混ぜてしまってわかりにくくてすみません)。

つまり、上の部分の説明は、ライブラリ仕様記述としての同期の説明を意図したものではなくて、C++ における同期の概略の説明を試みたものでした。特に、同期に関する初出の記述がある [intro.races]/3 を ("リソースの所有権" という曖昧な言葉を使って) 無理やり縮めたものです。

C++ の同期の全容について全くフォローしていないのでわかっていないのですが、 [intro.races]/3 的な考えが根底にあって、その上で、規格としての具体的な規定の手段・扱いやすいまとまりとして一連の synchronizes-withhappens-before などの関係が導入されている、みたいな話ではないんでしょうか。

C++では"happens before"関係を保証する、という意味で使われる)

  • (少なくとも自分の感覚では)「リソースの所有権」はスレッド間同期との直接的な関係を持たない。

Copy link
Member Author

@akinomyoga akinomyoga Nov 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

うーん。synchronizes with の訳語として、既に太字 **同期する** というのが使われているみたいですね (でも、単に "同期" だったら cpprefjp 内で雑多な意味で使われている印象)。

この A は B と**同期する** というのは単なる一般の同期の話ではなくて、特に定義された関係 synchronizes with を表すので配慮が必要ですね。"同期する" も GLOBAL_DEFINED_WORDS に登録する? でも "同期する" はストリームが同期するなど別の文脈でも使われている?

Edit: happens before の訳は散らかっています:

この PR で "同期" を入れるか入れないかに関わらず、 synchronizes with および happens before の訳統一と訳語表と GLOBAL_DEFINED_WORDS への登録は独立に実施する必要がある気がします。

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

単に "同期" だったら cpprefjp 内で雑多な意味で使われている印象

私の実感としても同意見です。「同期」は各所で都合よく使われている気がします。

見出し Synchronization の対訳語が必要ならば、"synchronization operations"に対応させた「同期操作」とする案はいかがでしょう。専門用語風なので他文脈との衝突リスクも低いと思います。


... [intro.races]/3 的な考えが根底にあって、その上で、規格としての具体的な規定の手段・扱いやすいまとまりとして一連の synchronizes-with や happens-before などの関係が導入されている...

個人的にはC++標準ライブラリ仕様で言及される Synchronization はあまりに形式的すぎるため、cpprefjpサイトの解説としては相応しくない(≒専門家向けすぎて理解されない)気がしています。ある程度噛み砕いた利用者向けの説明が必要になるため、Synchronization 見出し自体が不要なのではとも感じています(実際に自分で書いた箇所は平文での説明を行った...記憶)。

例えばmutexファミリのlockunlockメンバ関数では Synchronization が仕様規定されますが、mutexの利用者からみると到底役立つ/正しく理解されるとは思えない定義になっています。mutex利用者はlock〜unlock区間の排他制御を期待しますが、仕様上は前のunlock操作→lock操作の同期関係(synchronize with)のみが規定されます。

The expression m.lock() is well-formed and has the following semantics:
 Synchronization: Prior unlock() operations on the same object synchronize with this operation.

The expression m.unlock() is well-formed and has the following semantics:
 Synchronization: This operation synchronizes with subsequent lock operations that obtain ownership on the same object.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

見出し Synchronization の対訳語が必要ならば、"synchronization operations"に対応させた「同期操作」とする案はいかがでしょう。専門用語風なので他文脈との衝突リスクも低いと思います。

今はこの方針で commit 8208424 を入れています。ただし、本来は synchronization operations 自体が独立した意味を持っていることも考えて「関数等の意味論を構成する要素の1つ。Synchronization。」 のような説明は入れていません。

@faithandbrave
Copy link
Member

このPull Requestはなにが要因で止まってますか? @yohhoy さんのapprove待ち?

@akinomyoga akinomyoga force-pushed the dfn-semantic-elements branch from 8208424 to 987d540 Compare December 18, 2024 11:37
@yohhoy
Copy link
Member

yohhoy commented Dec 20, 2024

失礼。これ以上の追加コメントはありませんので、マージしてしまってもよいと思います。

akinomyoga and others added 8 commits December 20, 2024 17:49
規格原文は "The actions performed by the function" だが、action を効果
と訳す場合、perform を行うと訳すと日本語として違和感がある。ここでは "
効果" に合わせて "発生する" と訳すことにする。
効果・同期・結果・戻り値・例外・備考などの一般的な語と同じになるものは、
誤って着色されると混乱の元なので除外している。
@akinomyoga akinomyoga force-pushed the dfn-semantic-elements branch from fea8157 to 8e59cd6 Compare December 20, 2024 08:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants