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

cpprefjp雑談部屋 #1273

Open
faithandbrave opened this issue May 8, 2024 · 73 comments
Open

cpprefjp雑談部屋 #1273

faithandbrave opened this issue May 8, 2024 · 73 comments

Comments

@faithandbrave
Copy link
Member

cpprefjp雑談部屋ルール

  • issueに起こすほどでもない雑多な議論をする場所です
  • 通知がうるさいと感じた方は、issue個別で通知をオフにできるので、そちらをご利用ください
  • 個人のつぶやきをゆるく投稿してもらってOKです
  • cpprefjpメンバー以外の投稿も歓迎します
  • X/Twitterなど、ほかの場所で発せられたcpprefjpの問題などがあったら、ここで教えてください (issueを起こしてもらってもOKです)
  • ここで始まった話題で詳細な議論が必要になってきたら、ぜひissueを起こして移動してください
  • 専門分野ごとの部屋が必要になってきたら、部屋を分けることを検討します
  • 質問掲示板というわけではないので、回答が得られることは期待しないでください
  • だれかが議論していても、気にせず別な話題を投稿してください
  • 攻撃的な批判、ハラスメント行為、ヘイトなどは禁止とします
@wx257osn2
Copy link
Member

だれかが議論していても、気にせず別な話題を投稿してください

前の議論が終わるのを待つのもアレなのでこれはそう運用されるべきというのは同意した上で、GitHub issueのUIでやるの結構大変そうだなという気持ちに…(GitLabみたいにスレッド形式だと同じ話題だけまとまって話せるんですけどねぇ…)(まぁある程度話が盛り上がってきたら別途issue切って引っ越しましょう、でなんとかなるかな)

@faithandbrave
Copy link
Member Author

一旦はアクティブユーザー数がそんなに多くないだろうという想定で、試しに運用してみる、という感じですかね

@onihusube
Copy link
Member

話題提供

3月に行われた東京でのWG21会議のトリップレポートがいくつか

大きな機能の追加はなさそうですが、個人的体感としては値ベース静的リフレクション(P2996)がにわかに盛り上がりつつあるのを感じています。

@yohhoy
Copy link
Member

yohhoy commented May 9, 2024

C++標準ライブラリでの[[nodiscard]]属性付与に関する P3201 もAprovedされたのですね。今後は nodiscard指定されることは原則なさそう...(既存関数はそのままかな?)

@onihusube
Copy link
Member

P2422R0 Remove nodiscard annotations from the standard library specification

が採択されると全部消えそうですね

この場合cpprefjp的には備考かどこかにこの関数は実装によって[[nodiscard]]指定される場合がある、みたいに書くことになるんですかね

@faithandbrave
Copy link
Member Author

リフレクションはstd::metaライブラリだけかと思ったら、^とか言語機能もいろいろ入るんですね

@onihusube
Copy link
Member

リフレクション、機能そのもののことと^Tすることと^Tして得られたmeta::infoのことをそれぞれreflectionって呼んでて、訳語大変そうだなって思ってます
というかややこしい・・・

@faithandbrave
Copy link
Member Author

https://cpprefjp.github.io/lang/cpp26/user-generated_static_assert_messages.html

ページタイトルにもキーワードリンクが貼られるのですが、これをよしとするかどうか、悩ましいところです

@akinomyoga
Copy link
Member

記憶余り定かじゃないですが、たしか、最初は見出しには適用しないようにして PR 作ったのですが、その後で誰かの指摘により見出しにも適用するように変更したような…。

@faithandbrave
Copy link
Member Author

見出し2以降は、キーワードリンクがあると便利な気はしますね

@akinomyoga
Copy link
Member

akinomyoga commented May 13, 2024

すみません。経緯が少し違いました: cpprefjp/markdown_to_html#5 の時点では見出し除外 (akinomyoga/cpprefjp-markdown_to_html@a9086f4) は入っていました。その後で修正 cpprefjp/markdown_to_html@8f04104 が入っていますね (この追加変更は何となく記憶にあったのですが、実際に議論があったのだったかそれとも個人的に commit を見て知ってただけだったのか分かりません)。(追記: うーんでもやっぱり見出しにも適用した方が良いみたいな議論がどこかであったような気がします…が脳が勝手に作り出した虚偽記憶の可能性も…)

見出し2以降は、キーワードリンクがあると便利な気はしますね

そうですね。でしたら、該当箇所に h[2-6] h1 (訂正: ごめんなさい逆でした) を戻すだけで良さそう(?)ですね。

@faithandbrave
Copy link
Member Author

かんたんに直せそうなので、h1は除外してみます!

@faithandbrave
Copy link
Member Author

直しました!
cpprefjp/markdown_to_html@533bf5f

@wx257osn2
Copy link
Member

wx257osn2 commented May 13, 2024

@akinomyoga

うーんでもやっぱり見出しにも適用した方が良いみたいな議論がどこかであったような気がします

見つけました! #774 (comment) (複数リポジトリのissueだったりMRだったりに議論がとっ散らかってるから過去の議論を追いかけるのが中々大変ですね…)

@wx257osn2
Copy link
Member

過去の議論を追いかけるのが中々大変

GitHubはコミットに対してコメントが付けられることを思い出したので,試しにコミットから関連コメントへのリンクをはってみました いつか何かで遡ったときに議論が少しは追いやすくなりそう cpprefjp/markdown_to_html@533bf5f#commitcomment-141949065 cpprefjp/markdown_to_html@8f04104#commitcomment-141949048

@akinomyoga
Copy link
Member

akinomyoga commented May 13, 2024

おー、ありがとうございます! リンクのコメントもありがとうございます!

本来は (PR を介さずに) 議論の末に追加された変更に関してはできるだけ commit message に関連するリンク (単なる #番号 などではなくフルの URL) を入れておくのが良いですね。

@wx257osn2
Copy link
Member

そうですねぇ,ただ実際うっかりコミットメッセージにURL含めるの忘れてた!みたいなことは私もやりがちなので…(PR経由だとPR側にコメント残すなどでコミットからでも2hopでアクセスできることはわかっていたのですが,直接コミットでの取り返しの付け方が今まで(私が)わかってなかったのですよね)

@akinomyoga
Copy link
Member

私も前から git で後付け注釈を入れられる仕組みはないのかと何となく思っていたのですが、今調べたら git notes というものがあるみたいですね。

でも GitHub でのサポートは削除されたみたいです。理由はよく分かりませんが、たぶん色々と問題があるのでしょう。Commit hash で紐づけてるみたいなので、(勝手な予想ですが) rebase とか filter-branch とかしたら紐づけが切れそうですし、異なる複数の branch に cherry-picked された元々同じ commit にも反映されなそうですし…。

@yumetodo
Copy link
Member

https://twitter.com/wx257osn2/status/1610601153292828672

cpprefjpにどう立てつければいいかは浮かんでないですが、constexprみたいに初期仕様からドラスティックに仕様が変わっていったものを複数ページ見てマージして読むのはやっぱり辛いかもしれない、と思いました。

@ToruNiina
Copy link
Member

yumetodoさんのコメントと関連するのですが、私個人も似たような経験を何回かしていて、例えばどのattributeがどの時点で入ったかなどを簡単に確認したいときなどに年表のようなものがあると嬉しいと考えていました。

具体的には、各言語機能のページ(lang/cppXX)にある表の項目(「定数式」など)ごとにページを立てて、バージョンごとに節を作って対応する言語機能の表をコピーしてきて並べるだけでもそれなりに役に立つのではと考えています。もちろん、年表ページに行って表を眺めなければならない、という点でわかりやすさは言語機能の個別ページを書くよりも劣るでしょうが、コスト面で一考の余地はあるかと思います。

内容がほぼ既存のものの切り貼りで済み、ページの内容もほぼ表だけで短いので、「constexpr」のようなページを新たに作成して変遷の説明を書くことと比べると手間はかなり少ないはずです。メンテコストは少し上がってしまいますが、基本的に過去のバージョンにおける機能追加の数は増減しないと考えてよいので、言語機能の記事を追加する際にしか影響はないはずです(とはいえ言語機能の記事を書く時点でコストが高いので追加コストは避けるべき、という意見もあるかとは思います)。

ただ、パッと見バージョンごとに表の切り分けの粒度が少し違うように思えるので、それに応じて既存の言語機能ページの表の項目わけを少し調整する必要は出るかもしれません。

@faithandbrave
Copy link
Member Author

おそらく表だけであればすでにあるかと思います。

cpprefjpで初出の言語機能ページには、関連項目としてその機能に関連するアップデートへのリンクを記載しているので辿れるようになっています。

yumetodoさんがリンクを貼られた先の問題としては、constexprの初出ページで「できない」と書かれていたことが後のバージョンでは「できる」に変わっており、初出ページ内で書いてあることだけ読んでも、現在使っている言語バージョンでできることがわからない、ということかなと思います。
問題として理解はできますが、結局この問題は、対象となる言語機能のすべての仕様が書かれたページを用意しないと解決しない気がします。

それはいずれやらないといけない気はしますが、私には当面、余裕がないですね。
なので、リファレンス作成に余裕ができるか、完成のために尽力できる方がでてきて差分ではない言語機能の解説に取り組む表明をすれば、話が進むと思います。

@tshino
Copy link
Contributor

tshino commented May 15, 2024

言語機能のページタイトルの横に「C++11」などと書いてありますが、
そのC++バージョン以降でずっと通用するという誤解が生じやすいのは分かる気がします。

「このページはC++11時点での言語機能を解説しています」
「のちの規格で変更されている場合があるため関連項目を参照してください」

みたいな注意書きの定型文章をページの最初の方に書くのはどうでしょう?

@faithandbrave
Copy link
Member Author

「このページはC++11時点での言語機能を解説しています」
「のちの規格で変更されている場合があるため関連項目を参照してください」

これは暫定対応としてすぐにでき、ある程度の効果も期待できるので、よい気がします。
ページタイトルの下、概要の上に全ページ、機械的に載せてしまっていい気がします。
あとは、「## 関連項目」にアンカーをつけてページ内リンクを貼る、とかでしょうか。

あとは、以下のような対応も追加で検討してみましょうか。

  • 言語機能のページタイトルを提案文書の直訳的なものから、機能的・説明的なものにできるだけ変更する
  • 関連項目を箇条書きではなく表にしてページタイトルからは読み取れない情報を補完するか、箇条書きをネストして情報補完する

例として、C++14の「constexprの制限緩和」ページは、どう緩和されたのかページタイトルだけではわからないので、「constexpr関数内での条件分岐とループの文を許可」などのページタイトルに変更することが考えられます。
ページタイトルの変更だけでは対応しきれないものがあった場合に、表もしくは箇条書きのネストを検討するのでどうでしょう。

一旦は、「ページタイトルから具体的な変更内容がわかりにくいページを探す」issueを立てて、一通りチェックしてみるのはいかがでしょうか。

@akinomyoga
Copy link
Member

「このページはC++11時点での言語機能を解説しています」
「のちの規格で変更されている場合があるため関連項目を参照してください」

これは暫定対応としてすぐにでき、ある程度の効果も期待できるので、よい気がします。

よいと思いますが、例えば同じ C++11 の提案の間でも、初期の提案で取り込まれたものが後の提案・修正で変更されることもある(提案の内容がそのまま C++11 の確定した振る舞いになっているとは限らない) ので文言は調整した方が良い気がします。たとえば

「このページはC++11規格原稿に取り込まれた変更を解説しています」
「他の変更で上書きされている場合があるため関連項目を参照してください」

(あまり深く考えていないのでまだ問題があるかも)


ページタイトルには提案文書・バグ修正の番号 (複数関連するものがある場合は一番最後のもの) も付記されていると、例えば Web の検索結果一覧から特定しやすくて良いなと思います。

@faithandbrave
Copy link
Member Author

ページタイトルに提案文書の番号をつけるのは、タイトル末尾に以下のようにつけるのでどうでしょうか。先頭だと、Web検索結果で最も見せたいであろうタイトルが切れてしまう懸念があります。

「符号付き整数型が2の補数表現であることを規定 [P1236R1]」

@akinomyoga
Copy link
Member

ありがとうございます! その形式で良いと思います!

@yumetodo
Copy link
Member

目を離した隙に一気に話が進んでました・・・。

そうですね、今だと初見ではそのページに加えて何を読むべきなのか見抜けない可能性があるので、そういう警告をつけるのはいいかもしれません。

@faithandbrave
Copy link
Member Author

消しましたー

@faithandbrave
Copy link
Member Author

Compiler Explorer (godbolt.org) でVisual Studioのバージョン情報を取得しようとしましたが、とれませんでした。。。

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "version")

#include <print>

#include <windows.h>

int main() {
  char fileName[MAX_PATH + 1];
  ::GetModuleFileNameA(nullptr, fileName, sizeof(fileName));
  DWORD size = ::GetFileVersionInfoSize(fileName, nullptr);
  BYTE* version = new BYTE[size];
  if (::GetFileVersionInfoA(fileName, 0, size, version)) {
    VS_FIXEDFILEINFO* fileInfo;
    UINT queryLen;
    ::VerQueryValueA(version, "\\", (void**)&fileInfo, &queryLen);
 
    std::println("{}.{}.{}.{}",
                 HIWORD(fileInfo->dwFileVersionMS),
                 LOWORD(fileInfo->dwFileVersionMS),
                 HIWORD(fileInfo->dwFileVersionLS),
                 LOWORD(fileInfo->dwFileVersionLS) );
  }
  else {
    std::println("Can't get visual studio version"); // こっちにくる
  }
  delete[] version;
}

@yohhoy
Copy link
Member

yohhoy commented Aug 6, 2024

ふと気づいたのですが、C++26 2024-04 Mailingの対応チケットが漏れているでしょうか?
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/n4982.html

@faithandbrave
Copy link
Member Author

確認します!

@yohhoy
Copy link
Member

yohhoy commented Aug 7, 2024

Compiler Explorer (godbolt.org) でVisual Studioのバージョン情報を取得しようとしましたが、とれませんでした。

当該コード片だと「生成された実行可能ファイル(exe)のバージョン情報リソース」の取得を試みており、この情報が不在のためにエラーとなりますね。
(同リソースは明示的に実行可能ファイルに埋め込まない限り存在しないもの)

VC++コンパイラのバージョン確認は マクロ_MSC_VER_MSC_FULL_VER をダンプするしかないと思います。

#include <print>
int main() { std::println("{} {}", _MSC_VER, _MSC_FULL_VER); }

@faithandbrave
Copy link
Member Author

パッチバージョンだけ上がった場合、_MSC_VERは変更されず_MSC_FULL_VERだけが変更されますが、_MSC_FULL_VERからどのパッチバージョンなのかをたどる方法がないのですよね…

@faithandbrave
Copy link
Member Author

2024-04 mailingの対応完了しました

@yumetodo
Copy link
Member

まあパッチバージョンだけ上がった場合については私をメンションしていただけたら多分対応します・・・。

@yumetodo
Copy link
Member

@yohhoy
Copy link
Member

yohhoy commented Aug 14, 2024

UB ODR 違反: 例えば §3.2 [basic.def.odr]/¶6
いつの間にかUBの記述が消えてるんですね・・・

気になって調べてみたら、CWG 2300. Lambdas in multiple definitions 適用によって "behavior is undefined" から "program is ill-formed, no diagnostic required" に変わったようです。同CWG 2300は Accepted as a DR とのことですから、ODR違反は未定義動作ではなくなったのか...


For any definable item D with definitions in multiple translation units,

  • if D is a non-inline non-templated function or variable, or
  • if the definitions in different translation units do not satisfy the following requirements,

the program is ill-formed; a diagnostic is required only if the definable item is attached to a named module and a prior definition is reachable at the point where a later definition occurs.

最新ドラフトのWordingCWG 2494. Multiple definitions of non-odr-used entities 由来でした。C++20モジュール導入と相まって診断基準(diagnostic is required only if ...)がよくわからないことになってますね。

@akinomyoga
Copy link
Member

情報ありがとうございます。Qiita の記事は EB の和訳が定まった辺りで cpprefjp の標準規格と処理系と一緒にまとめて更新することにしますね。

まあ、翻訳時のいわば "動作保証外" が ill-formed; NDR で実行時の "動作保証外" が UB だってことを考えると、そもそもとして翻訳時の規則のはずの ODR に対して UB があったのが変だったといえば変でした。CWG 2300 は、特にこの UB の記述の修正を目的としたものではなくて、他の変更の序でにしれっと UB を ill-formed; NDR にしているみたいですね。ちなみに規格的な取り扱いは、NDR も UB も「診断対象外」かつ「規格は処理系に対して何の制限もおかない」という感じなので、UB が NDR に変わったと言っても、単に名前が変わっただけで鼻から悪魔なのは変わりないです。

@faithandbrave
Copy link
Member Author

2024年度の貢献度の集計をそろそろ始めないと・・・。週明けからがんばります

@akinomyoga
Copy link
Member

EB の和名が決まったので #1273 (comment) の更新も含めつつ、 標準規格と処理系 - cpprefjp C++日本語リファレンス 用の画像の更新案です。

overview

@faithandbrave
Copy link
Member Author

ありがとうございます!そのページの更新はどうしようかと思っていたところでした

@akinomyoga
Copy link
Member

akinomyoga commented Nov 7, 2024

実は手元に "標準規格と処理系" のページに "エラー性の動作" を加えた commit もあります…

edit: どのように提出するのが良いでしょうか。 #1349 がマージされてから別の PR にする? もしくは #1349 のブランチに直接 commit を追加する?

edit2: 追加 commit 了解です! #1348 ではなくて #1349 でしょうか?

@faithandbrave
Copy link
Member Author

faithandbrave commented Nov 7, 2024

このPull Requestに追加コミットしてもらってもいい気はします。近々マージできそうな気はしますが

@faithandbrave
Copy link
Member Author

PR番号直しました

@akinomyoga
Copy link
Member

"標準規格と処理系" の画像の原本は pptx (Power Point) で overview.pptx です (附録: 中に C++98, C++11, C++17, C++20 versions もあり)。画像の形が固まってきた時点で cpprefjp/image に、png & pptx の PR を出します。

@akinomyoga
Copy link
Member

akinomyoga commented Nov 7, 2024

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

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

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

@faithandbrave
Copy link
Member Author

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

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

@faithandbrave
Copy link
Member Author

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

修正案を考えました↓

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

@akinomyoga
Copy link
Member

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

@faithandbrave
Copy link
Member Author

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

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

@faithandbrave
Copy link
Member Author

今年の貢献ポイントの集計についてです。

去年はPull Request上で各人の貢献ポイントをレビューしてもらいましたが、Webサイト上で貢献の表を見られたほうがよいと思うので、集計はPull Requestでやりますが、レビューはissue上で相談させていただければと思います。

@faithandbrave
Copy link
Member Author

commit idの列挙がMarkdownベタ書きだと大変つらくて効率悪いので、こういう記法を導入して従来のリンクに変換しようかと思います

[commit cpprefjp/site, 4f16a60, 469297f, a235d11, dfae477, e388ca6, 0bd721d, 88c0244, bc47b38, a689c6b]

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

No branches or pull requests

10 participants