Fortran で多重ディスパッチ
Julia 方面で多重ディスパッチがどうのこうのと言うのを聞いて分かったふりをしつつ、実はよくオーバーロードとの違いが分からないので調べてみることにします。
多重ディスパッチ (multiple dispatch) とオーバーロード (overload) の違いは、前者が動的に(実行時に)呼び先を解決するのに対し、後者は静的に(コンパイル時に)呼び先を解決するもののようです。「多重」とついているのは、まず文脈的に class によるオブジェクト指向的な動的呼び先解決という前提があるようです。この場合いわゆる this/self/me で書かれるような第一引数にのみに依存する単一ディスパッチになるのに対して、複数の引数の組み合わせによる呼び先解決が出来ることを誇って多重ディスパッチと言うようです。
Fortran では Fortran90 で interface 定義によって総称名による静的な overloading を実現していました。これは複数の引数の型の組み合わせで、呼び先が解決されます。
さらに Fortran 2003 以降で class システムによるオブジェクト指向的な動的呼び先解決が導入されるとともに、class 内の generic type-bound procedure によって、いわゆる this/self/me の第一引数以外の引数に対しても呼び先解決を依存させられるようになりました。これは一種の多重ディスパッチと言っていいのではないかと思えます。(よく概念の定義を消化していないので、正しいのかどうか分かりませんが。)
Fortran による多重ディスパッチ例
module test_m implicit none type :: base_t integer :: n = 0 contains procedure :: pri, prr generic :: pr => pri, prr end type base_t contains subroutine pri(me, i) class(base_t), intent(in) :: me integer, intent(in) :: i integer :: k print *, (i, k = 1, me%n) end subroutine pri subroutine prr(me, x) class(base_t), intent(in) :: me real, intent(in) :: x integer :: k print *, (x, k = 1, me%n) end subroutine prr end module test_m program multiple_dispatch use test_m implicit none type, extends(base_t) :: deriv_t real :: x = 99.0 end type deriv_t class(base_t), allocatable :: t(:) integer :: i allocate(t(2)) t(1) = base_t(3) t(2) = deriv_t(2, 1.0) do i = 1, 2 call t(i)%pr(i) call t(i)%pr(real(i)) end do end program multiple_dispatch
実行結果
Compiling with Intel(R) Visual Fortran Compiler 19.1.3.311 [IA-32]...
1 1 1 1.000000 1.000000 1.000000 2 2 2.000000 2.000000
Fortran 95/2003 Explained (Numerical Mathematics and Scientific Computation)
- 作者:Metcalf, Michael,Reid, John,Cohen, Malcolm
- 発売日: 2004/08/26
- メディア: ペーパーバック
YRYR 第19巻 ネタバレあり
ゆるゆり第19巻、綾乃と京子が仲良くしていたので良かったです!
- 作者:なもり
- 発売日: 2020/12/23
- メディア: コミック
付録で結衣がおみくじで凶をひいていましたが、ごゆるりさんとして大室家の方と泥沼展開の期待。
偽ジャミロ・クワイさん
例のバッファロー男が旧民主党の鳩山ポッポみたいなことを言っていて草
「チャンズリー容疑者は自分は宇宙人で高次の存在で、地球にいるのは別の現実にアセンション(上昇)を行うためだと公言している」
アニメ化して欲しい。
でも歯並びが良すぎて、ナチュラル感が無いのでアセンションは無理だと思いますw 俗人は俗人らしく天地の化育に参画するあるよろし。
- アーティスト:ジャミロクワイ
- 発売日: 2013/04/24
- メディア: CD
HIGH TIMES : SINGLES 1992-2006(初回生産限定盤)(DVD付)
- アーティスト:ジャミロクワイ
- 発売日: 2006/11/08
- メディア: CD
【1月16日 AFP】米連邦議会議事堂乱入で、ドナルド・トランプ(Donald Trump)米大統領の支持者らが「議員らの拘束と暗殺」を計画していたと、連邦検察当局が主張した。 検察当局は14日深夜に裁判所に提出した書類の中で、アリゾナ州のジェイク・アンジェリ(Jake Angeli)ことジェイコブ・アンソニー・チャンズリー(Jacob Anthony Chansley)容疑者(33)の勾留を求めた。同容疑者は、米極右陰謀論「Qアノン(QAnon)」の信奉者で、角つきの毛皮の帽子をかぶってマイク・ペンス(Mike Pence)副大統領のデスクにいるところを写真に捉えられている。 検察当局は6日の議事堂占拠について、「議事堂でのチャンズリー容疑者自身の言動をはじめとする有力な証拠が、暴徒が連邦政府の議員らの拘束と暗殺を意図していたことを裏付けている」と主張した。 チャンズリー容疑者はペンス氏に宛てて「時間の問題にすぎない。正義の裁きが下される」と書かれたメモを残していたという。 検察当局は、チャンズリー容疑者は薬物常習者で、心に問題を抱えている可能性があると指摘。「チャンズリー容疑者は自分は宇宙人で高次の存在で、地球にいるのは別の現実にアセンション(上昇)を行うためだと公言している」と述べ、同容疑者が「逃亡し、社会に危険をもたらす恐れが大きい」として勾留を求めている。(c)AFP
補足
(ネタ元 https://mobile.twitter.com/masatheman/status/1353610774485233664 )