fortran66のブログ

fortran について書きます。

【メモ帳】多重ディスパッチ YRYR その他

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

昆虫物語 新みなしごハッチ DVD-BOX

昆虫物語 新みなしごハッチ DVD-BOX

  • 発売日: 2007/05/30
  • メディア: DVD

YRYR 第19巻 ネタバレあり

ゆるゆり第19巻、綾乃と京子が仲良くしていたので良かったです!

ゆるゆり (19) 特装版 (百合姫コミックス)

ゆるゆり (19) 特装版 (百合姫コミックス)

  • 作者:なもり
  • 発売日: 2020/12/23
  • メディア: コミック

付録で結衣がおみくじで凶をひいていましたが、ごゆるりさんとして大室家の方と泥沼展開の期待。

偽ジャミロ・クワイさん

例のバッファロー男が旧民主党の鳩山ポッポみたいなことを言っていて草

「チャンズリー容疑者は自分は宇宙人で高次の存在で、地球にいるのは別の現実にアセンション(上昇)を行うためだと公言している」

アニメ化して欲しい。

https://afpbb.ismcdn.jp/mwimgs/6/7/-/img_67a54a8612842058c93e94de20d6c6b9165085.jpg

でも歯並びが良すぎて、ナチュラル感が無いのでアセンションは無理だと思いますw 俗人は俗人らしく天地の化育に参画するあるよろし。

HIGH TIMES : SINGLES 1992-2006(初回生産限定盤)(DVD付)

HIGH TIMES : SINGLES 1992-2006(初回生産限定盤)(DVD付)

www.afpbb.com

https://afpbb.ismcdn.jp/mwimgs/8/7/-/img_872858b7cf3c6b8d22451909398fa728205269.jpg

【1月16日 AFP】米連邦議会議事堂乱入で、ドナルド・トランプ(Donald Trump)米大統領の支持者らが「議員らの拘束と暗殺」を計画していたと、連邦検察当局が主張した。

 検察当局は14日深夜に裁判所に提出した書類の中で、アリゾナ州のジェイク・アンジェリ(Jake Angeli)ことジェイコブ・アンソニー・チャンズリー(Jacob Anthony Chansley)容疑者(33)の勾留を求めた。同容疑者は、米極右陰謀論「Qアノン(QAnon)」の信奉者で、角つきの毛皮の帽子をかぶってマイク・ペンス(Mike Pence)副大統領のデスクにいるところを写真に捉えられている。

 検察当局は6日の議事堂占拠について、「議事堂でのチャンズリー容疑者自身の言動をはじめとする有力な証拠が、暴徒が連邦政府の議員らの拘束と暗殺を意図していたことを裏付けている」と主張した。

 チャンズリー容疑者はペンス氏に宛てて「時間の問題にすぎない。正義の裁きが下される」と書かれたメモを残していたという。

 検察当局は、チャンズリー容疑者は薬物常習者で、心に問題を抱えている可能性があると指摘。「チャンズリー容疑者は自分は宇宙人で高次の存在で、地球にいるのは別の現実にアセンション(上昇)を行うためだと公言している」と述べ、同容疑者が「逃亡し、社会に危険をもたらす恐れが大きい」として勾留を求めている。(c)AFP

補足

www.youtube.com

(ネタ元 https://mobile.twitter.com/masatheman/status/1353610774485233664 )