【node.js】サーバサイドjavascript 5【Nashorn】 (796レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
730(1): デフォルトの名無しさん [sage] 2021/12/27(月) 00:11:53.01 ID:Btn3kp2t(1/3) AAS
>>729729(1): デフォルトの名無しさん [sage] 2021/12/26(日) 23:27:54.98 ID:S+a9i6vw(6/6) AAS
>>727
最終的に何が言いたいのかさっぱり分からんが、既に言ったとおり、
IDEの都合でプログラミング言語の仕様を決めるものではない。それは逆だ。
プロトタイプベースではIDEを構成出来ないからクラスベースを導入した、と考えてるのなら、上記の通り。
IDEの為にプロトタイプベースを廃止してクラスベースに一本化すべき、でも上記の通りだし、JSでは無理。
IDEの為にクラス構文なんてそもそも導入すべきではなかった、と考えてるのなら、それもありだし個人的には賛成だが、
一般論としては現在の、メジャー言語でほぼクラス導入済みの状況で、JSだけ不採用も、メジャー言語としては難しい。
GoやRustは今も今後ともマイナー言語でしかないし、勝手にやってろでしかない。
静的解析自体はクラスの方が簡単だろうけど、だからどうしたでしかない。
実行エンジンはあるのだから、実装難易度の上限は実行エンジンを実装する程度でしかなく、出来る範囲だ。
最悪、実行エンジンをそのままコールして結果を得る事も出来る。Flycheckとかそういう構造のように見えるけど。
ちなみにTSが型を導入したのも、IDEを作るためではなく、
プログラマが型を明示的に示す事によって、間抜けなエラーを静的に検出するためだぞ。
そこにIDEが勝手に乗っかっただけであって、IDEが無くとも型の導入自体は意味も効果もある。
型無し言語出身者は型をIDEでの補完をするための物だと勘違いしてるが、そうじゃない。
言いたかったこととしてはプロトタイプベースがクラスベースの機能包含しているとしても
静的解析のこと考えるとプロトタイプベースが必ずしもクラスベースのスーパーセットではないよねということ
実行エンジンを実装してもあらゆるパスが評価できるわけでないので宣言的記法の方に軍配が上がると思うが
実行エンジン内包する方式で宣言的記法と同等の静的解析できてる例ってあるの?
flycheckってemacsのパッケージのことだと思うけどあれも静的解析走らせてるだけで実際にJS評価してるわけじゃないでしょ?
IDEのためだけではないというのはその通りで、途中から略して書いてしまっているが >>720 ではIDEや静的解析といっている
732(1): デフォルトの名無しさん [sage] 2021/12/27(月) 08:32:17.24 ID:Btn3kp2t(2/3) AAS
>>731731(1): デフォルトの名無しさん [sage] 2021/12/27(月) 05:27:18.08 ID:5b2Vj92V(1/3) AAS
>>730
> 静的解析のこと考えるとプロトタイプベースが必ずしもクラスベースのスーパーセットではないよねということ
IDEの「実装」をプログラミング言語の「仕様」比較(スーパーセットかどうか)に含めるのがおかしい。
それは「○○は△△のスーパーセットではない。なぜなら『僕が』それを『実装』出来ないから」と言ってるのと同じだろ。
IDEは開発をサポートする道具であり、サポート対象はプログラミング言語だ。
よって、仕様上どんなに構文解釈が難しかろうが、必要ならやるしかないし、それだけだよ。
上下関係で言えばプログラミング言語の『仕様』が完全に上であって、
IDEの『実装』の都合をプログラミング言語側に押しつける事は出来ない。
> 静的解析走らせてるだけで実際にJS評価してるわけじゃないでしょ?
俺が使ったのはGoだけど、見た目は実際にコンパイルを走らせてそれをアノテートしてただけ。
でも確かにこれが一番生産性が高いんだよ。
当たり前だが、コンパイラはエラー時には何行目の何文字目でこけた、という情報を持ってる。
だから静的解析が目的ではなく、ソースコード作成時にエラーを表示する事が目的なら、これでいいんだよ。
最大のメリットは構文解釈を自前で実装する必要がない事。
構文解釈機の再開発をやめ、本体コンパイラのエラー情報をより詳細に出す事にリソースを突っ込み、
IDE側はその詳しいエラー情報を解釈してアノテートするだけに徹する。
これで言語側の仕様変更に自動的に追従するようになる。
IDEの数だけ構文解釈機を再開発するのは手段が目的化してる。
> 実行エンジン内包する方式で宣言的記法と同等の静的解析できてる例ってあるの?
Flycheckは外部から呼んでるだけ。でもそれでコンパイラが吐くエラー(=静的エラー)は全て検出出来る。
しかも自前の実装もなしだから、最も生産性が高い。
自前の構文解釈機でコンパイラ/ビルドシステム以上のエラーを検出する気なら、
それはIDEではなくリンターと呼ぶべきだが、
それが出来るのなら、コンパイラ/ビルドシステムにそのリンターを内包して、
IDEはそのエラーを表示する事に徹するのが最も生産性が高い。
IDEで構文解釈するのではなく、エラーを出来るだけ早い段階で検出して修正するのが目的だから。
> IDEの『実装』の都合をプログラミング言語側に押しつける事は出来ない。
なぜそうあるべきなのですか?
近年の言語はサードパーティーのツール含めたエコシステム全体で生産性をいかに高めるかという観点で設計されることも多いと思うのですが
また、あなたの言う実行エンジンとは静的解析器の意味で実際にJSをevalするものではないということですね?
なぜか構文解析の話になっていますが意図してたのはintellisenseのような意味解析が必要な機能です
プロトタイプベースの記法では解析のためにコードの実行パスを追いかけプロトタイプの設定箇所を検出しなければならないのに対して
宣言的記法であればスコープ内のクラス宣言を見ればだいたい事足りるので実装難易度は大幅に異なるかと
739(1): デフォルトの名無しさん [sage] 2021/12/27(月) 11:54:45.10 ID:Btn3kp2t(3/3) AAS
>>735735(1): デフォルトの名無しさん [sage] 2021/12/27(月) 10:22:30.58 ID:5b2Vj92V(2/3) AAS
>>732
> 近年の言語はサードパーティーのツール含めたエコシステム全体で生産性をいかに高めるかという観点で設計されることも多いと思うのですが
「多い」というのならまず具体的に名前を複数挙げてみろ。
出来なければそれは君の妄想だね。
> また、あなたの言う実行エンジンとは静的解析器の意味で実際にJSをevalするものではないということですね?
違うぞ。それは今の話に関係ない。(どっちでもいい)
> 意図してたのはintellisenseのような意味解析が必要な機能です
だから何?これも君の考えが間違ってる。
flycheckのやり方でも原理的にインテリセンスは出来るんだよ。
インテリセンスで出なかったキーワードだとコンパイルエラーになるのなら、
仮にコンパイラが無限に速ければ、ソース内の全キーワードで試せば、コンパイルが通るキーワードのリストは得られる。
実際こんな事をしてる物はないと思うが、構文解釈で100%絞る必要なんて無くて、
候補が数個程度なら全部試してエラーが出なかった物を出す程度でも十分実用的なんだよ。
今時emacsでもインテリセンスするようだから、そんなにIDEが気になるのなら、彼等のアプローチを確認してみるといいよ。
全言語向けに自前でやってる事なんてないと思うよ。
プロトタイプを自分で追うのが技術的に無理なら、evalさせてgetPrototypeOfやinstanceofを使って追えばいいだけ。
自前の構文解釈器でソースからデータツリー構築をする気だからおかしくなる。
それはevalすれば実行エンジン内に構築されるものでしかないのだから、完全に再開発だろ。
eval出来る環境があり、それが一番近道なら、やればいいだけ。
君は多分「生産性」を勘違いしてる。
むしろ再開発しすぎてるし。
現状どうなってるのか知らないのだけど、メジャーなIDE、
例えばVSCodeとかだとクラスベースならインテリセンス出来るが、プロトタイプベースだと無理とかなのか?
誰か使ってたら教えてくれ。
> 「多い」というのならまず具体的に名前を複数挙げてみろ。
例えばgolangやrustはコアチームがツール開発に積極的ですね
ツールのチームがコア言語に対してフィードバックしていたりする
> eval出来る環境があり、それが一番近道なら、やればいいだけ。
"構文解釈機" という言葉を使っているから静的解析を意図してるのかと思ったけど動的解析も含んで言っていたのね
それで実用に耐えうる速度と精度が実現できるならそういうアプローチもありかもね
それから別にIDEが自前で静的解析器を開発すべきなんて主張はしてないから藁人形論法はやめてくれ
>>737オブジェクト指向というか継承が忌避されてる気はする
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.271s