ほっこりすることもあれば別れもある、と。
死神と言われて悲劇に浸っていたクラウディアですが、チームのみんなは以前からいつも仲間を見送っていた。ワルキューレに見送られれば死後にやすらかにいられると信じることで死地に赴く勇気を得ている基地の隊員だちを。
ところで、このOPってナナオアカリなんですよね。
まさかのアニメ化です。
なろう発で、コミカライズも大人気の作品が来年TVアニメとして放映されるようです。
特設サイトにあった原作のイラストとコミカライズのイラストを見ると、どうもこの手の作品ではめずらしく、コミカライズ版の方にデザインが近いようです。
それはそれで納得なのですが。この作品のコミカライズは原作と漫画の幸せな組み合わせだと言われていたり。
かく言う私もアルファポリスのサイトで連載されているこのコミカライズのファンだったり。連載開始のころから読んでるから、感動ひとしお。
Kasuka による 狐の森 のドイツ語歌詞カヴァー。
ゆったりとしっとりとした曲だなと思いましたが、原曲も結構そういう感じの曲だったのですね。
[初音ミク] 狐の森 -湊いつき (The forest of fox / Miku Hatsune / Minato Itsuki)
久しぶりにギター演奏の配信のを見たのですが、はじめてから2、3カ月しかたってないのに、かなりしっかりと弾けるようになっていましたね。
ギターって上達しやすいのかなぁ。と言うと連れにそんなもんじゃないよ、と言われてしまいそうですが。
でもバンドのって大抵そんなに時間かけずに上達してる人がいる気がするのですが。
高校に入ってからはじめてる人って結構いると思いますが。
漫画だと実は上達するまでの期間がまるっと飛ばされてるだけというのはあるかもしれませんが………。
まぁ、少なくともかなり練習したのは確かなのでしょう。
歌でとちるところで同時に演奏の方も止まったりしてるので、本人が弾いてるのは間違いないと思うのですがね。
配信のしゃべりもかなりこなれてきてるな。
しばらく配信とか見れなかったからなぁ。
25日目
— アズマリム🐱ིྀ水曜日21時配信 (@azuma_lim) October 19, 2020
(センパイからのアイデア)#100日後にトイレットペーパーを買える女の子 pic.twitter.com/TtC9PWLSMT
なんというか。。。
この話題やると来てくれる人が減りそうだけど、まぁ、今はちょうど減ってるときだから、とやってみたり。
あんまり書かれてるところがないのですが、Fortran 2003 からはCとのインタフェースの規格が標準になってるのですね。
実のところ2003年の規格だから知れわたっていてもおかしくないのに資料が全然なくて色々と苦しめられてる人がいたはず。
それだけFortran人口が少ないのだということなのかもしれませんが。
Fortran の iso_c_bindings という module と bind(c) という宣言を組み合わせてやるのでした。
例を示しましょう。
まずは型の宣言をFortran で。
$ cat binds.f03
module binds
use iso_c_binding
implicit none
type,bind(c)::test_t
integer(c_int)::a
real(c_double)::b
end type
type(test_t),bind(c)::test
end module binds
Fortran のメインをこんな感じに。
$ cat main.f03
program main
use iso_c_binding
use binds,only: test
implicit none
integer(c_int)::c
interface
subroutine cfunc() bind(c)
end subroutine
end interface
test%a=15
test%b=1.5d2
call cfunc()
end program
C の関数をこんなところに。
$ cat cfunc.c
#include
module のコンパイルは use されるより前に行わないといけないので次の順番でコンパイル。
$ gfortran -c binds.f03
$ gfortran -c main.f03
$ gcc -c cfunc.c
$ gfortran -o test *.o
$ ./test
15,150.000000
ミソはリンクを Fortran 側で行うこと。Fortran のランタイムはCからは呼ばれないので、Fortran のリンカーを使う必要があるのでした。
まず、構造体の宣言と構造体変数の宣言それぞれを bind(c) でやっておくことで、C のグローバル領域から参照できるようになります。
main では 構造体のメンバーに数値を代入してCの関数を呼んでいます。 main では 外部の関数を参照する必要があるので interface 文で C の関数のインタフェースを宣言しておきます。このとき、関数そのものを bind(c) で宣言しているので、グローバル領域にある関数の cfunc() が参照できるようになります。cfunc を subroutine で宣言していますが、このとき C側では void 宣言に相当するらしいです。
C の方では binds.f03 で宣言している構造体を extern 宣言しておいて、main で代入した値を受け取っています。
Fortran 側では C の変数と型のサイズを合わせるために c_int とか c_double でkind を指定しています。これは処理系で変数のサイズが違うことを吸収するためです。
この例はかなり無駄なことやってるのですけど、変数の渡し方の例ということで。
ちゃんと宣言しておけば Fortran 側の subroutine や function も C で認識できます。
subroutine で宣言されたサブルーチンは C では void 宣言の関数になるそうですが、function で宣言しておけば C の戻り値がある関数を呼ぶことができます。
C++ の場合はインタフェース部分を extern "C" で囲っておく必要があるそうです。Fortran と C++ は直接のインタフェースを持たないものですから。
あ、あと大事なことですが、Fortran と C では配列の添字の順番がひっくりかえります。 Fortran で A(i,j) とあるものは C では a[j][i] になります。メモリー上の配置が異るのですね。
これは考え方の違いかな。
Fortran は配列 = 行列だから、行列の並びと同じに並べることになりますね。行列は行ごとに並べますよね。a11, a21, a31, a12, a22, a32, a13, a23, a33 みたいに。
でも、C は配列の配列と考えるんですよね。まず a[1], a[2], a[3] があって、それぞれがさらに配列の要素を持つから、例えば a[1][1], a[1][2], a[1][3] みたいに、a[1] のさらに要素が存在する、と考えればわかりやすいかと。要は a** というのが a* のさらにポインターだというのと同じことですね。