type, deferred
先日、LFortran での Generics の試験実装について書きましたが、その追加情報が出ていました。
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
それにつけても requirement の方が abstract interface より abstract 度が高い気がして草。