fortran66のブログ

fortran について書きます。

【メモ帳】Fortran Generics 追加情報

type, deferred

先日、LFortran での Generics の試験実装について書きましたが、その追加情報が出ていました。

fortran66.hatenablog.com

requirement の例題で「type :: T; end type」というのがあって、ダサいなと思っておりましたが、「type, deferred :: T」という書き方に変えたようです。この方が他の deferred とも合っていい気がします。

追加例では、operator を requirement で指定した関数位置に送る例も出していましたが、上の記事内で紹介した YouTube 講演では operator は先送り的なことを言っていたので、また変わったのかもしれません。それはともかく operator overload はどうやるんでしょうか。普通に interface を具象名に対して書けばいいのか、generic 名で一括で出来るのか?

旧例

    requirement S(T, F0) 
        type :: T; end type
        function F0(x) result(z)
            type(T), intent(in) :: x
            type(T) :: z
        end function
    end requirement

新例

requirement binary_op(T, U, V, op)
  type, deferred :: T, U, V
  function op(x, y) result(z)
    type(T), intent(in) :: x
    type(U), intent(in) :: y
    type(V) :: z
  end function
end requirement

fortran-lang.discourse.group

それにつけても requirement の方が abstract interface より abstract 度が高い気がして草。