著作一覧 |
コンテキストを無視して、自分の知っているコンテキストのみで何かを語ろうとすると、同じく自分が知っているコンテキストのみで語る人と用語がコンフリクトして建設的とは言えない状況が生まれる。
というわけで、なんとか渡しについて、ある程度知っていることを並べて、どういうコンテキストではどういう言い方があるかをまとめてみる。
コンテキスト | 用語 | 参照 |
---|---|---|
Haskell |
| Programming in Haskell Chapter 12 Lazy Evaluation |
VB |
| Argument Passing ByVal and ByRef |
Java | The effect of this is to assign the argument values to corresponding freshly created parameter variables of the method. | 15.12.4.5 Create Frame, Synchronize, Transfer Control |
面倒になったからやめたけど、ようするに、Haskellのcall-by-valueを「値渡し」と訳して、VBのByRefを「参照渡し」、ByValを「値渡し」と訳した場合に、HaskellコンテキストではVBの「参照渡し」というのは「値渡し」なので、そりゃあ言葉が通じないよなぁ、ということ。あと、Javaの言語仕様には"call by"や"call-by"という言葉が出てこないのは、すべて値渡し(VBの意味でもHaskellの意味でも)なのでそういう用語が必要ないからだろう。
日本語版Wikipediaの評価戦略は英語版のEvaluation strategyの翻訳みたいだ。戦略(言語の設計/実装戦略だな)だけにたくさんある。
ジェズイットを見習え |
dRuby本でpass by value/referenceをどうするかで困ったことがあります。SRAの青木さんに相談したら、自分で用語を発明せよ、とアドバイスをもらったけど、発明できませんでした。
言われて、call-byとpass-byを区別せずに書いていたことに気づいた。
Haskellに関しては,call-by-needというのが採用されています,件の本の§12.4の最後のパラグラフ「ポインター共有を用いた名前渡し」に対応しています.call-by-needの実現はグラフ簡約(graph reduction)といいます.lazy evaluationというときには,call-by-nameではなく,call-by-needと対応します.(§12.5最後から2つめのパラグラフ)
ありがとうございます。でも、name⊃need(CBN実装戦略の1種)であって、独立した概念ではないですよね?
難しいな。「Haskellのコンテキスト」と書いたら、CBNeedとなるのか。CBNameは「評価戦略の基本概念」と、層を分ければいいのだな。