次世代言語議論スレ[Go Rust Scala Haskell]第5世代 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
2017/06/13(火) 08:54:07.99ID:O1HnBMDk
いざ、語ろうぞ。

スレタイ超過のため、一部省略。
その他もウェルカム。

前スレ
次世代言語議論スレ[Go Rust Kotlin Scala]第4世代
http://mevius.2ch.net/test/read.cgi/tech/1492631007/
2017/08/27(日) 21:42:23.55ID:J8/CoBlN
確かに、Rubyのようにコード上の静的なセマンティクスと実行時のデータ構造とが明確に分離されていない言語において
動的にメソッド生やしたりするのをメタプログラミングと呼ぶのは違和感あるよな
2017/08/27(日) 21:43:30.82ID:0P4eY3kj
>>974
ダックタイピングとマジックメソッドの組み合わせによって
例えばORMとかだとDBのスキーマ情報からメソッド生やしたりできる。
そういうのはjavaとかgoだとcode genereateするしかないでしょ。
2017/08/27(日) 21:51:14.06ID:0P4eY3kj
>>976
あれ?俺の考えてるメタプログラミングって違うの?
例えばジェネリクスもメタプログラミングだと思ってるんだけど

https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

を見る限りじゃ合ってると思うんだけど。
簡単に言えばロジックを記述するロジックを組むのがメタプログラミングだよね。
2017/08/27(日) 22:12:18.75ID:otpxcVUC
>>977
ジェネリクスによるメタプログラミングは型という本来静的に決まっているものに依存しないという点でメタ
ロジックを記述するメタプログラミングとは意味が違う
動的言語ではメソッドが静的に定義されている必要は元々全くないし、
定義するメソッドもごく普通のメソッドであり決してロジックを生成しているわけではない
LISPみたいに実行するコードそのものを作ってしまうのがロジックを記述する方のメタプログラミングだ
2017/08/27(日) 22:25:38.24ID:J8/CoBlN
補足
動的言語でcallをフックする系のメタプログラミングがメタである所以は、
メソッドは本来クラスに対して静的にアサインされるものである、という前提において、
メソッドを動的にアサイン(動的にロジックを記述しているわけではない)しているという点だ
その前提を認めるかどうかは議論の余地がある
例えば、さすがにJavaScriptでメソッドは静的にアサインされるものだと主張するのは無理があるだろうね
2017/08/27(日) 22:26:36.34ID:QZuIwK0r
>>977
>>978

メタプログラミング関係ないけど
「ロジック」と「プログラム」という用語をどう使い分けてるの?

プログラムの中にロジックを記述した部分と
ロジック以外を記述した部分があるというニュアンスに受け取れるけど
ロジック以外の部分って具体的に何を指してるのか教えて欲しい
2017/08/27(日) 23:44:09.86ID:0P4eY3kj
>>979
難しいっすわ。
つまりjsでメタプログラミングと言ったら
jsのコードを文字列で記述してそれをevalしたものだけってこと?

学術的な定義だと言われると凄く困るんだけど、
メタ って自己言及ってことでしょ
ロジックを持ってロジックを作るという考え方全般をメタプログラミングと呼んだら
実際的に弊害があったりする?

静的言語だと例えばマクロを駆使してコード生成をかける
部分をメタプログラミングと呼ぶ。

rust のprintln!とかだよね
テンプレート文字列の内容を実際に渡すパラメータの数と型の一致の確認をコンパイル時に行う。

goだとプリプロセッサがないからcode genereteがメタプログラミングなわけだ。

でも動的言語だとコンパイルはないから全て実行時に処理する。
だから明確にメタプログラミングと言える箇所はないってことか。
そこはわかったよ。

でも、実際には静的言語にはマクロがないとできないことを動的言語はできる。
だからメタプログラミングが動的言語は得意っていいたかったんだよね。
2017/08/27(日) 23:47:44.62ID:0uJKb2TV
C++ではマクロを使わないと実現できない最小のpythonコードをご提示ください
2017/08/28(月) 00:04:08.73ID:bSe63dl4
誰がなんと言おうと、PHPみたいな糞言語使わないし、使う必要もない
生涯を保守に捧げたい哀れな土方どもにやらせておけばいい
2017/08/28(月) 00:15:01.04ID:hSp+oBxP
やはり動的型が好きな人はありとあらゆることがゆるゆるで
それはこういった会話にも表れてしまって、全てが場当たり的なんだな
会話がこうなんだから、他のこともそうなんだろう
指摘されてから直したらよい、的な

どうしてそうなってしまうのか、非常に興味深いところであるが
おそらく現実が正しく認識できていないか、もしくは根本的なところを履き違えているだとか
そんなおかしな状態で日常を過ごしていると
思考回路がいい加減になってしまって常習化してしまうのだろう

モデルが正しくないところへ幾らインプットを流し込んでも
正しく学習できないばかりか、どんどん変になっていく
そのうち何が何やらどうでもよくなってしまうのだろう
2017/08/28(月) 01:53:37.57ID:2qTxVo4t
>>984
動的型ではなくソフトウェアが好きなんだろう
ゆるゆるという言葉を正しく認識すればわかる
2017/08/28(月) 02:23:45.93ID:PMfiarSN
動的言語のメタプログラミングのメリットもわからないとか終わってるなww
2017/08/28(月) 06:51:11.62ID:bSe63dl4
ペチプァさん・・・w
2017/08/28(月) 09:41:42.58ID:hmoIfjPi
あほくさ。
そこまで堅いのが好きならすべてワイヤロジックで組むべきだな。
2017/08/28(月) 09:48:23.03ID:IHzBG4Iq
メタプログラミングってどれがって定義とかじゃなくて相対的なものじゃないの
敢えて言えば平均的な使い方よりメタかどうかなので、言語によって変わってくるのでは
2017/08/28(月) 10:23:02.60ID:knrf7PIh
静的なメタプログラミングにはチューリング完全ではない特殊な言語を使う
コンパイル時に無限ループさせないために
言語が二つあるから完全に二極化している
2017/08/28(月) 15:51:07.02ID:PMfiarSN
メタプログラミングという概念について述べてるところに
メタプログラミングの実現方式について返すから話が噛み合わないわけだw
言語処理能力って重要だね
2017/08/28(月) 15:54:35.06ID:hmoIfjPi
まあこれ以上、メタプロとはってなこと話しても無駄だろうということで
話題の発端である「動的言語はメタプログラミングし易いからフレームワークの挙動を組みやすい。」
てなところに戻って、
動的言語でフレームワークの挙動を組みやすいかどうかを語った方が良いのでは?
993
垢版 |
2017/08/28(月) 16:01:40.95ID:J4nOOC8D
>>966
素晴らしいスライドだな。
言語はおいといても、同じ思想で開発すべきかと。
言語仕様がそもそも、スライドの通りにしかつくれない言語のほうが良いとは思うけど。
2017/08/28(月) 16:11:48.75ID:hSp+oBxP
どちらにしても次世代言語の覇者なるものがもし出てくるとしても
動的型言語界隈から出てくるわけないので、どうでもよい
動的なメタプログラミングなど悪夢でしかなく、好まれるはずがない
静的な分、Cのマクロの方がましだ
静的型で出来なくて、動的型で出来ることの殆どは、悪手でしかない
結局人間にもわかりにくいし
実行速度を落としてまでサポートするほどの価値はない
2017/08/28(月) 16:37:43.73ID:eoTPDlew
Lispのマクロはメタプログラムに入りますか〜?
2017/08/28(月) 19:04:21.49ID:nnMMDr4F
>>984
そうじゃなくて、動的型についてのあんたの理解がゆるゆるなだけだ。
つまり、ゆるゆるなのは、あんたの頭。
2017/08/28(月) 19:06:30.14ID:nnMMDr4F
>>994
つまりあんたはOSをインストールしたら最後、プログラミングなんて一切しない人なんだね。
動的であることを拒否するということは、OS上でユーザは実行可能ファイルを一切生成することも上書きすることも許されないということだ。

IEでインターネットでもしてろw
2017/08/28(月) 19:41:37.27ID:hSp+oBxP
と、このように関係のない的外れなことを言い出す
ゆるゆるなのは誰がどう見てもお前じゃねーか
2017/08/28(月) 19:48:51.91ID:hSp+oBxP
要するには何の区別も分別もついてないということだな
じゃなきゃそんな的外れなたとえ話w
そういった混沌とした状態の頭で生活をしていから
普段から、何もかも、何が何やらで
終いには全てのことが、どうでもよくなるんだろうな
悪循環だな
2017/08/28(月) 20:26:26.83ID:3Zs55+dM
よく考えてみたらメタプログラミングってgoとかでコードを書くようになったから意識するようになった。php自体は意識しないで使ってたから。

静的言語、動的言語って分け方もよくなかったね。
静的言語だってマクロ機能があればメタプログラミングはある程度できる。
goだとreflectとか使わないとphpと同じことはできないしできたとしてもかなり苦しい。
結局言語機能が不足してるのが問題なんだよね。

TypeScriptはその点でかなり自由度が高かった
型の直和型と直積型を & と | を駆使して組み合わせられるから
かなり動的言語よりにコードを書ける。

let a :string|number|undefined;

とやるとstringの可能性とnumberの可能性とundeifnedの可能性がある型が作れる。
もちろん

if (typeof a === ‘string’) {
} else if (typeof a === ‘undefined’ ) {
} else {
// ここに来るのは絶対number型だとIDEも認識する。
}
とういう風にTypeGuardも完璧に動作する。

goはエコシステムがいいのにこういうのが充実してないからかなり苦しむことになる。
だからメタプログラミングは弱いって思ったんだけど
静的言語だから弱いって言うべきではなかったな。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 76日 11時間 32分 19秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況