トップ «前の日記(2010-04-07) 最新 次の日記(2010-04-09)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2010-04-08

_ なんとか渡しについて

コンテキストを無視して、自分の知っているコンテキストのみで何かを語ろうとすると、同じく自分が知っているコンテキストのみで語る人と用語がコンフリクトして建設的とは言えない状況が生まれる。

というわけで、なんとか渡しについて、ある程度知っていることを並べて、どういうコンテキストではどういう言い方があるかをまとめてみる。

コンテキスト用語参照
Haskell
call-by-value
inner-most evaluation
call-by-name
outer-most evaluation
Programming in Haskell Chapter 12 Lazy Evaluation
VB
ByVal
Passing an argument by value means the procedure cannot modify the contents of the variable element in the calling code underlying the argument.
ByRef
Passing by reference allows the procedure to modify the contents in the same way that the calling code itself can.
Argument Passing ByVal and ByRef
JavaThe 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の翻訳みたいだ。戦略(言語の設計/実装戦略だな)だけにたくさんある。

本日のツッコミ(全5件) [ツッコミを入れる]
_ (2010-04-08 03:03)

dRuby本でpass by value/referenceをどうするかで困ったことがあります。SRAの青木さんに相談したら、自分で用語を発明せよ、とアドバイスをもらったけど、発明できませんでした。

_ arton (2010-04-08 08:37)

言われて、call-byとpass-byを区別せずに書いていたことに気づいた。

_ nobsun (2010-04-08 09:24)

Haskellに関しては,call-by-needというのが採用されています,件の本の§12.4の最後のパラグラフ「ポインター共有を用いた名前渡し」に対応しています.call-by-needの実現はグラフ簡約(graph reduction)といいます.lazy evaluationというときには,call-by-nameではなく,call-by-needと対応します.(§12.5最後から2つめのパラグラフ)

_ arton (2010-04-08 09:41)

ありがとうございます。でも、name⊃need(CBN実装戦略の1種)であって、独立した概念ではないですよね?

_ arton (2010-04-08 09:49)

難しいな。「Haskellのコンテキスト」と書いたら、CBNeedとなるのか。CBNameは「評価戦略の基本概念」と、層を分ければいいのだな。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え