Results:
            0
 Time for integer:   0.281250000    
   0.00000000    
 Time for integer(transfer):    2.10937500    
   0.00000000    
 Time for integer(cast by implicit-external):   0.562500000    
 0.00000000 | !> 4 阶 Runge-Kutta 法 | |
| module runge_kutta_module | |
| use, intrinsic :: iso_fortran_env, only: wp => real32 | |
| implicit none | |
| abstract interface | |
| !> `fcn` 计算 ODE 的导数 | |
| subroutine fcn(t, y, yp) | |
| import wp | 
| !> 4 阶 Runge-Kutta 法 | |
| module runge_kutta_module | |
| use, intrinsic :: iso_fortran_env, only: wp => real32 | |
| implicit none | |
| abstract interface | |
| !> `fcn` 计算 ODE 的导数 | |
| subroutine fcn(t, y, yp) | |
| import wp | 
| ! https://github.com/JuliaLang/Microbenchmarks/blob/master/perf.f90 | |
| module types | |
| implicit none | |
| private | |
| public :: dp, i64 | |
| integer, parameter :: dp = kind(0.d0) ! double precision | |
| integer, parameter :: i64 = selected_int_kind(18) ! at least 64-bit integer | 
Results:
            0
 Time for integer:   0.281250000    
   0.00000000    
 Time for integer(transfer):    2.10937500    
   0.00000000    
 Time for integer(cast by implicit-external):   0.562500000    
 0.00000000 | module builder_module | |
| use, intrinsic :: iso_fortran_env, only: int8 | |
| implicit none | |
| private | |
| public :: ibuilder_t, director_t, house_t, get_builder | |
| type, abstract :: ibuilder_t | |
| contains | 
| !> Reference: https://refactoringguru.cn/design-patterns/iterator/go/example | |
| module iterator_module | |
| use, intrinsic :: iso_fortran_env, only: int8 | |
| implicit none | |
| private | |
| public :: user_t, user_collection_t, user_iterator_t, iterator_t | |
| !> Abstract types |