Lisp Scheme Part41 (855レス)
Lisp Scheme Part41 http://mevius.5ch.net/test/read.cgi/tech/1531587928/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
740: デフォルトの名無しさん [] 2025/07/09(水) 04:41:41.15 ID:qReXyC09 >>739 スペシャルフォームでもなくマクロでもなく 普通の関数として書いてしまえちゃうだろって話 そのために必要な道具立てはインラインクロージャのみ http://mevius.5ch.net/test/read.cgi/tech/1531587928/740
741: デフォルトの名無しさん [sage] 2025/07/09(水) 09:01:01.99 ID:IjsShBy4 わからん。コンパイラ頑張ります宣言ではないのか? http://mevius.5ch.net/test/read.cgi/tech/1531587928/741
742: デフォルトの名無しさん [sage] 2025/07/09(水) 09:07:00.67 ID:Bk08chKM AIと壁打ちして「理解」した内容を妥当性の検証もしないまま書き込んでそうだな http://mevius.5ch.net/test/read.cgi/tech/1531587928/742
743: デフォルトの名無しさん [] 2025/07/09(水) 09:37:43.40 ID:qReXyC09 ファーストラムダというのは ((lambda この形のこと つまり、lambdaを呼んで返ってきた関数オブジェクトを即座にもう一度呼んでる このときに関数呼び出しをせず、インライン関数として展開してしまう もちろんスタックフレームは作られない letだとかwhileだとか、実質的に制御構造に過ぎないものは軒並みこの形をしている http://mevius.5ch.net/test/read.cgi/tech/1531587928/743
744: デフォルトの名無しさん [] 2025/07/09(水) 12:22:27.67 ID:EKMDM/sM 742 最近そういうの増えた 丸飲みコピペじゃなくて 消化してから吐き出して欲しい http://mevius.5ch.net/test/read.cgi/tech/1531587928/744
745: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 13:05:25.01 ID:ZKntcAAj オペランドを評価しない関数 fexpr を導入することでスペシャルフォームを手続きと同列にファーストクラスオブジェクトとして扱うアイデアはあるよ。 それを整理して scheme 風言語として構築したものもある。 https://web.cs.wpi.edu/~jshutt/kernel.html まあそれはそれとして、 >>738 > 内部的に無名関数を呼ぶことで実装 と最適化の話を繋げるのは意味がわからんぞ。 処理系の実装方法の一部は言語仕様として強制すべきというのが前提になってる? http://mevius.5ch.net/test/read.cgi/tech/1531587928/745
746: デフォルトの名無しさん [] 2025/07/09(水) 14:05:12.47 ID:cmuoaTCa >>745 >処理系の実装方法の一部は言語仕様として強制すべきというのが前提になってる? テイルコールはそうでしょ 最適化は処理系がやってくれることを保証するので 単純ループに相当するものでもどんどん再帰の形で書きましょうってことでしょ ファーストラムダも同じ 制御構造相当のものをlambdaを使って書いても最適化されますよってこと http://mevius.5ch.net/test/read.cgi/tech/1531587928/746
747: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:21:01.11 ID:ZKntcAAj >>746 > テイルコールはそうでしょ > 最適化は処理系がやってくれることを保証するので 仕様上は ・正しく末尾再帰が行われていること ・アクティブな末尾呼出しの回数制限がないなら正しく末尾再帰が出来ている という迂遠な表現になっている。 つまり、何が出来るべきなのかという書き方であって、どう実装すべきかに言及することを避けてる。 同様に処理系のメカニズムに言及することを避けて提案を表現してみてよ。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/747
748: デフォルトの名無しさん [] 2025/07/09(水) 14:35:00.91 ID:cmuoaTCa テイルコールってのは call func ret って並んでたら jmp func に置き換えるんだよ ファーストラムダもある種の関数のインライン展開ってだけ http://mevius.5ch.net/test/read.cgi/tech/1531587928/748
749: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:40:18.45 ID:ZKntcAAj >>748 テイルコールの説明なんか要らん。 知ってるから。 仕様を変える提案をするなら仕様書にどう書きたいのかで説明してくれと述べてる。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/749
750: デフォルトの名無しさん [] 2025/07/09(水) 14:49:42.58 ID:cmuoaTCa >>749 >>743 http://mevius.5ch.net/test/read.cgi/tech/1531587928/750
751: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:57:26.23 ID:ZKntcAAj >>750 意味を為さない言葉を何万回繰り返したところで何も変わらんぞ。 妥当な文章を書く能力がないならもう出来ることはない。 論外。 終わり。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/751
752: デフォルトの名無しさん [sage] 2025/07/09(水) 15:02:22.57 ID:QwaFNVYh >>740 ifだって普通の関数だろw インタープリターとしての実装は単なる関数呼び出しだ スペシャルフォームなので引数は評価せず渡す(通常の関数の場合は評価した結果を渡す) で、(バイト)コンパイラーはifは関数呼び出しにはせず条件ジャンプ命令列に置き換える そんな事は古代からやってる 自分で処理系を実装した事あれば誰でも知ってる http://mevius.5ch.net/test/read.cgi/tech/1531587928/752
753: デフォルトの名無しさん [] 2025/07/09(水) 15:28:36.71 ID:cmuoaTCa マクロだっていう反論が来るのかと思ったらスペシャルフォームだというので戸惑ってるw そりゃいくつかの関数はミニマルコアとして書かなきゃいけないさ それさえあれば関数とマクロと制御構造は統一できる、というのが言い分 http://mevius.5ch.net/test/read.cgi/tech/1531587928/753
754: デフォルトの名無しさん [sage] 2025/07/09(水) 15:34:56.94 ID:QwaFNVYh ミニマルコアって何だ? スペシャルフォームとマクロは引数を評価しないで渡す関数として実装される そんなのは初期の頃からだと言っている 何で今さら発見した面してんのか?と言うことだ http://mevius.5ch.net/test/read.cgi/tech/1531587928/754
755: デフォルトの名無しさん [sage] 2025/07/09(水) 15:40:52.83 ID:QwaFNVYh 引数を評価しないで渡す関数という点で、マクロとスペシャルフォームは同一の実装と言える しかしマクロは環境を受け取らないといけないし、戻り値を再度評価する必要があるから、スペシャルフォームとマクロは区別する必要がある http://mevius.5ch.net/test/read.cgi/tech/1531587928/755
756: デフォルトの名無しさん [sage] 2025/07/09(水) 15:42:40.68 ID:QwaFNVYh 更に、スペシャルフォームはifの様にコンパイラーが特殊なコンパイルをする必要があるので、普通の関数と区別する必要がある点も重要だ http://mevius.5ch.net/test/read.cgi/tech/1531587928/756
757: デフォルトの名無しさん [] 2025/07/09(水) 15:45:21.52 ID:cmuoaTCa 評価しないで渡したい引数のうち、制御に関わるものならインラインクロージャでなんとかなりますよって話だよ レキシカルにちゃんとしたクロージャをインライン展開される前提で引数として渡すんだよ http://mevius.5ch.net/test/read.cgi/tech/1531587928/757
758: デフォルトの名無しさん [sage] 2025/07/09(水) 15:46:21.90 ID:QwaFNVYh しかしながら、普通の関数でもスペシャルフォームの様な特殊なコンパイルをしたい場合があるので、その為にコンパイラーマクロが存在する ただほとんど使われない http://mevius.5ch.net/test/read.cgi/tech/1531587928/758
759: デフォルトの名無しさん [sage] 2025/07/09(水) 15:48:37.80 ID:QwaFNVYh >>757 インライン関数はマクロで実装できる 環境もちゃんとハンドリング出来るので、インラインクロージャーもマクロで実装可能だ 何がしたいのか良く分からない… http://mevius.5ch.net/test/read.cgi/tech/1531587928/759
760: デフォルトの名無しさん [sage] 2025/07/09(水) 15:50:14.77 ID:QwaFNVYh mapcarに渡したlambdaをインライン展開したいと言うなら、mapcarを(コンパイラー)マクロにすれば可能だ http://mevius.5ch.net/test/read.cgi/tech/1531587928/760
761: デフォルトの名無しさん [] 2025/07/09(水) 15:56:45.13 ID:cmuoaTCa >>759 テイルコールみたいにファーストラムダ最適化も必須にすればインライン展開される分速くなる http://mevius.5ch.net/test/read.cgi/tech/1531587928/761
762: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 16:17:26.50 ID:ZKntcAAj 最適化するために仕様の改定が必要か? http://mevius.5ch.net/test/read.cgi/tech/1531587928/762
763: デフォルトの名無しさん [] 2025/07/09(水) 16:32:28.96 ID:eQ8lOX87 >>738 どのへんが既出なんだか教えてほしいということならALGOLとサンクのコンパイル研究あたりで出尽していると思うから60年前には既に研究レベルでなく, 実践されていたのではないか.AIにきいてもわからなかったか? AIに尋ねたら1960年代初頭でサンクのインライン展開も含めてアイデアは出尽しているといわれた. ついでにSMALLTALKとIFとブロックについても調べてみろよ. LISPの関数呼び出しの最適化についてもおまえは50年前あたりの認識をしている. 当然SBCLあたりの最適化はおまえよりずっと先をいってる. http://mevius.5ch.net/test/read.cgi/tech/1531587928/763
764: デフォルトの名無しさん [sage] 2025/07/09(水) 17:07:46.42 ID:ohpjpVt+ >ファーストラムダというのは 「ファーストラムダ」という言葉は、通常、AWS Lambdaを指すスラングとして使われることがあります。AWS Lambdaは、サーバーレスコンピューティングサービスで、コードをサーバーの管理なしに実行できます。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/764
765: デフォルトの名無しさん [] 2025/07/09(水) 17:09:06.44 ID:cmuoaTCa インライン展開を俺が発明したなんて言ってないだろ この形をしたラムダをそうすると効くんじゃないかというのが俺の発明だ あと、クロージャを引数として渡すのもSmalltalkやRubyはやってるだろう 俺の発明は「インライン関数を引数として渡すという逆接はものごとを見通しよくしますよ」だ http://mevius.5ch.net/test/read.cgi/tech/1531587928/765
766: デフォルトの名無しさん [sage] 2025/07/09(水) 17:25:03.45 ID:ohpjpVt+ そうやってevalの時点で評価されなかった式を何時どうやって誰が適用するのか というおとぎ話を自慢毛に語るスレ http://mevius.5ch.net/test/read.cgi/tech/1531587928/766
767: デフォルトの名無しさん [] 2025/07/09(水) 17:29:15.92 ID:cmuoaTCa evalはインタープリタ、lambdaはコンパイラ http://mevius.5ch.net/test/read.cgi/tech/1531587928/767
768: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 18:09:52.06 ID:ZKntcAAj Scheme はコンパイル結果を気楽に見る方法がないことも多いんだけど…… Gauche だと disasm で見れる。 (define (foo x y) ((lambda(a b)(+ a b)) x y)) (define (bar x y) (+ x y)) (disasm foo) (disasm bar) 表示の意味がわからなくても foo と bar が同じになっていることはわかるだろう。 (バージョンによるかも?) ごく普通にそういう最適化はしてる。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/768
769: デフォルトの名無しさん [] 2025/07/09(水) 18:36:27.57 ID:CwmzIZ1x 自分で処理系書いてから言え http://mevius.5ch.net/test/read.cgi/tech/1531587928/769
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 86 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.010s