HTMLに新機能登場!commandとcommandforがもたらすインタラクティブな未来とは
引用元:https://news.ycombinator.com/item?id=43292056
プログラミング言語理論の研究者たちは80年代から“goto”のより強力な兄貴分“comefrom”について語ってたけど、Intercal でようやく実装されたんだ。Cみたいな言語よりは安全性、パフォーマンス、使いやすさが明らかに優れてるけど、商業市場に浸透するのが難しかったみたい。悪い方が良いってのが理由かも。Javascript がこの機能を取り入れたのは嬉しいし、これが丁寧なプログラミングの流行につながってくれたらいいな。
Haha、Intercal と“comefrom”をすっかり忘れてたよ。ほんと天才的な考えで、良いプログラミングデザインパターンを維持・サポートするのに苦労してた問題を40年も前に予測してるね。
C#にも COMEFROM があるよ: https://github.com/dotnet/roslyn/blob/main/docs/features/int… 使うのは面倒だけど、不可能ではないね。
>“丁寧なプログラミングの流行に繋がるといいな”とは言ったけど、でもあまり丁寧すぎるのもダメだね。コンパイラはそれを好まないよ。
最近は“控えめ”がトレンドらしいよ。
まるでガチの Sigma が、いいとも、そんなんだ。
お母さんによろしく。
うん。
まあ、少なくともBooコンパイラは好まないだろうね。 https://en.m.wikipedia.org/wiki/Boo_(programming_language)
もちろんそうだね。おべっかを使うコードは本当にうるさい。
ダウンロードサイトはどこ?Psycho fanatic言語、お願い!
commandとcommandforってcomefromと似てるのかな?gotoとも似てる気がする。gotoはトリガーが何をするかを指定するけど、commandとcommandforもそれと同じだよね。comefromは何をするかがトリガーを指定する。これはJavascriptのdocument.addEventListener()と似てる。
いや、似てないと思う。gotoとは全く違うし、単なるメソッド呼び出しって感じで、gotoとは関係ないよ。
古いけど、comefromとgotoのPython実装(俺のじゃない)。これはpypyパッケージよりも前のやつだよ。やっぱり理由があるね!
Perlは数十年前からcomefromをサポートしてるよ!
え、Perlはサンスクリットをサポートしてるの?それともRakuは?文法機能があるから、もしかするとサポートするかも。
サンスクリットはデーヴァナーガリー文字で書かれていて、これを使う人は10億人近いから、Unicode識別子を扱える言語なら問題ないよ。挑戦したいならRongorongoやクシンゴンでどう?俺は実際のヒエログリフでコーディングしたい。
サンスクリットはデーヴァナーガリー文字で書かれる(今はほとんどそう)。ただ、ネイティブ文字はないんだって。Unicodeのスクリプトであれば大丈夫だよ。
TeXはパーサーを再構築でき(ala TeXInfo)、Unicodeエンジンを使えばUTFも使える。TeXはフォントの埋め込みもできるし、Lyxを使えば埋め込んだフォントを書いて見ることができる。
コメントにたくさんの誤りがあるね。インドに住んでるインディアンと話してるってこと、理解してる?サンスクリットの勉強もしてるんだから、意見をちゃんと考えた方がいいよ。まあ、Googleで調べてもいいけどね。Smartでデータを見てみるといいよ。
お前、冗談が通じてないんじゃね?治療を受けた方がいいぞ。 お前の考え方は弱すぎるし、自分に劣等感があるのが丸見えだ。俺のコメントにいきなり攻撃してきたけど、みんなお前に何も期待してないから。お前みたいなクズの意見を気にするやつなんていない。社会人としての自覚を持てよ、そんなことで人を攻撃してる場合じゃないぞ。 それ面白い、俺はそれを冗談だと思ったよ。 同意だ。ちょっとオタクすぎる感じがする。 全体の理論がわからないけど、非JSデベの俺にはイベントにちょっとオブジェクト指向の甘さを加えただけに見える。ちょっと冗長な気もするけど、グローバルリスナーよりは良いかも。 COMEFROMはIntercal言語の面白いジョークの一つだ。言語仕様書を読むことを勧めるよ。 Intercalのプログラミングマニュアルを探してみたけど、comefromの記載が見当たらなかった。 C-INTERCALと呼ばれる方言から来ていて、スペースを入れて書くと『COME FROM』になる。 逆計算の『gofrom』や『cometo』だって忘れちゃいけないよ。 俺の新言語には『thataway』や『overyonder』『uptown』の構文を含めるつもり。 2のブギー、さあ跳んでみろ 呼んでるかい どこから来たのか >”オプションの同義語について” 継続についての理解が始まる前に止まったわ 真剣かどうか分からないけど、継続は面白いから、誰かの役に立つかもと思って投稿するね。混乱するけど、慣れればそうでもないよ。スタックフレームを独立した状態としてモデル化するんだ。戻るとき、スタックフレームが残ることを考えてみて。その後、戻ったフレームにスタックポインターを戻そうとする。引数を渡すための規則も加えると、継続が分かるようになるよ。 戻ったフレームにスタックポインターを戻す?そこが継続が分からなくなるポイントだよね。 その部分が難しいよね。もうスタックはないんだ。関数のアクティベーションレコードはヒープに割り当てられて、必要なだけ残ることができる。 >ボタンはウェブでのインタラクティビティの基盤だっていうのはすごくうまいまとめだと思う。確かに、インタラクティビティの基盤を提供するのはハイパーリンクだよね。 ハイパーリンクはインタラクティブじゃない気がする。あれはブックマークのようなもので、リンクをクリックしてページ間を移動するだけだし。 ハイパーリンクとクエリパラメータでインタラクティビティを実現する例もあるよ。例えば、テーブルをソートする時にカラムヘッダーをリンクにして、?sort_by={colname}を追加してサーバーに知らせる、とか。 確かに厳密に言えば、GETリクエストはサーバーの可視状態を変更すべきじゃないから、ソートはインタラクティブとは言えないかも。新しいコンテンツを追加するにはPOSTが必要だし。 GETパラメータでのソートはサーバーの状態には影響しないけど、クライアントから見るとソートしたデータは意味があるよね。切り分けが難しいけど、このルールについてもっと知りたい。 ごめん、ソートを忘れてた。クエリの結果をソートするのはサーバーサイドでGETリクエストでも問題ない。ただし、デフォルトのソート順を設定するのはNG。 GETリクエストはログが残るから、サーバーの状態が変わることもあると思う。ログの解析でエラーも起こるから、注意が必要。 GETリクエストはサーバーでの可視的な状態を変更すべきじゃない。例えば、GETで投稿を追加するとルール違反になるんだ。 技術的なことで言うと、ボタンとJSの結果は同じ体験だと思う。ただし、遅延があるけど。 >ハイパーリンクとクエリパラメータを使うって、サーバー処理なしでもできるよね。ページが返ってきた後、クライアントで処理してテーブルを並べ替えられるし。 そうだよね、でもそれもボタンとして実装されてたんじゃない?input type=”submit”は1993年にはボタンを表示してたと思う。JavaScriptなしでリンクのように動作して、でもボタンだったんだよね。 当時の一番目立つ違いは、リンクの行き先がブラウザに明示されてたのに対し、inputボタンは完全に不透明だったことだよね。画像を使ったボタンをa hrefタグの中に作って、GETリクエストを発生させてた。POSTリクエストをする唯一の方法は、フォームの中のボタンだった。 著者が言いたいのはおそらくハイパーメディアのことだね。ボタンとリンクはただの手段で、ユーザーがクリックしたりマウスを動かさない限りインタラクティビティは発生しない。クライアントだけのインタラクティビティについても話せるけど、その話題ではないね。 例外として考えられるのは、 それらは単にハイパーリンクがボタンのように振る舞うための追加機能だよ。ただし、厳密な定義では「ハイパーリンク」は二つのウェブページをつなぐリンクだからね。 著者がウェブのインタラクティビティの基礎について考えたのか、ただAIにいい感じのイントロを書かせたのかはよく分からないな。 InvokersはChromeだけのものじゃないよ、気になってる人のために言っておくけど、すでにFirefoxのナイトリービルドにも入ってるからね。 WebKitは「サポート」立場を取ったみたいだね。 仕様について: これはほんとにNextやBe、Appleが30年前に使用したアクション/メッセージングパターンなの?それとも何か見落としてた?有用だったけど、結局はインターフェースベースのコントローラーパターンに進化したと思う。多くの改善要求が出てくるだろうね。 Webが15年遅れてると思ってたけど、実は30年古い技術に追いついてるんだなって感じ。こんなニュースはムカつくね。自分が使えるものになると思ってたけど、膝の変形性関節症になっちゃって、まだ使い物にならない。悲しい気持ちだわ。 何が役立つものになる可能性があったのかな? 新しいアイデアではなく、ChromeとWebの仕様に実装されたってだけだよ。 >”新しいcommandとcommandfor属性が、popovertargetactionとpopovertarget属性を強化・置き換える。” 私もそれは変だと思った。先にメディアコントロール向けに実装してから、後でpopovertarget属性を統合する方が理にかなった気がする。これってウェブ機能の最速廃止記録かも。 私の脳の働きなのか、美的な問題なのか分からないけど、文字列でプログラミングするのが全然ダメ。特にアクセシビリティの利点は理解できるけど、要素IDを使うことにはあまりワクワクしないな。 文字列のコードは私のお手本のようなコード臭。できるし、正しく書けばうまくいくけど、結局は問題を先延ばしにしてるだけ。HTML要素は文書を表すものなので、自然に文字列的だけど、複雑なアプリケーションでは物足りない。これはハックだよ。とはいえ、話題の機能が悪いわけではない。ただのハックだと思う。 それには同意するけど、少なくとも一貫性はあるよね。’for’、’list’、’aria-labelledby’、’aria-describedby’などの属性もこういう風に機能するから。 私もあまり好きじゃないけど、フレームワークでカバーできるし、フレームワークが合わなければ良い構成要素にはなると思うよ。 そうだね、間違いない。ただし、イベントは素晴らしいと思うし、これは既存のフレームワークあってもシンプルになると思う。テンプレートを使わない限り、Epipenをしまえるよ。 あなたの言いたいこと、わかるよ。 2025:>”HTMLはボタン用にonclickハンドラーを提供するけど、これらはCSPルールの関係でデモやチュートリアル以外では禁止されることが多い。” 僕の失読症の自分は、HTMLのcommandにワクワクしたよ。 今日、Red AlertをThree.jsに移植しているプロジェクトを見つけたよ: 僕もそう思った。ボタンについて読んでいて、ゲームはどこにあるんだろうって思ったよ。でもボタンは面白いね。 ボタンについて読んでいる時、これがCommand and Conquerを新しい形でトランスパイルするのにどう機能するのかを期待してたよ。新機能は本当にありがたいけど。 完全なAPIなしで実装したのはどうかと思う。5つのコマンドだけじゃなくて、HTML経由で全てのJavaScript機能を実装できる可能性があるから、数千のコマンドにもなるかもしれない。 実装は難しくないと思うよ。コマンド文字列をこう変換すればいいんじゃないかな: これはインラインJSの安全な代替品を目指しているから、任意のJSを実行するのは逆効果だと思う。 実際の力はカスタムコマンドとそれを実装する標準的な方法にあると思う。標準のコマンドは常に便利なだけで、多くの人が複雑さが増すとカスタム版に変えるからね。閉じるコマンドのようなものも、–my-closeみたいになるし、dialogEl.close()を呼ぶ前にいくつかのチェックが入るよ。 確かにそう思う。複雑なUIでもJSが必要なケースが思いつかないな。段階的に導入できる道筋を示してるのかも。 HTMLが改善されているのは良いけど、まだまだ先は長いね。HTMXの人たちには面白いアイデアがいくつかあるね。もっとコメントを表示(1)
Leaveは分かるけど、「return from」は続きとして正しく描写されてると思うよ。対して「come from」は非局所のgotoじゃない?もっとコメントを表示(2)
- URLハッシュリンクとCSSの:target擬似クラス。
- iframeをターゲットにするリンク。
これらのパターンを乱用することを勧めるわけじゃないけど、軽いインタラクティビティには使えるよ。
https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonE…
https://github.com/WebKit/standards-positions/issues/264
button要素, commandfor属性:
https://html.spec.whatwg.org/multipage/form-elements.html#at…
button要素, command属性:
https://html.spec.whatwg.org/multipage/form-elements.html#at…もっとコメントを表示(3)
これって新しい基本機能になったってこと?置き換えるってどういう意味?将来的に不要になったら消されたりするのかな?今後追加されるものについて、開発者たちは本当にその影響を考えてるんだろうかって疑問に思う。
2033:>”HTMLはボタン用にcommandとcommandforハンドラーを提供するけど、これらはCSPルールの関係でデモやチュートリアル以外では禁止されることが多い。”
https://github.com/chongdashu/CnC_Red_Alert-ThreeJs
1. ダッシュで分割して配列にする
2. 最初の配列の最初の文字を小文字、他は大文字にする
3. くっつける
4. document.getElementById(element.commandfor)[concatenated]()
を使う。もちろん、要素が存在するか、メソッドが存在するか、パラメータがないかのチェックはしてないけど。でも、カスタムコマンドも簡単にできるようになるよ。