この広告は、90日以上更新していないブログに表示しています。
適当にデモ言語を作りました。
http://shinh.skr.jp/koneta/shelang.tgz
スクリプト言語からコンパイル言語の処理を呼ぶ時は、どうしてもブリッジを書くのが面倒で死にたくなります。そこで、 C で関数名から動的に関数を呼んでやろうという試みです。
puts "hello world!"!load "libm.so"fx = cosf 3.2puts "cosf(3.2) ="!print fx
こんな感じで .so ファイルをスクリプトからロードして、ロードされたシンボルをそのままスクリプトからそのまま呼び出せる物体です。
libbfd で実行時にシンボルを取ってこれると教えてもらったため、それを使ってやっています。高林さんの普通のやつらの下を行け や鵜飼さんの livepatch を参考にしています。特に livepatch はソースも相当流用させてもらいました。詳しくは中身の README に。
言語としてどうこうしようとかはあんまり考えてません。 Io から C の関数呼び出しまくりな世界は作りたいなーと思っています。
あと mapファイルが無くても動くreflection.d も作りたいなーと思っています。
ちなみに下記のようにSDL なんかも動きます…
!load "/usr/local/lib/libSDL.so"SDL_Init 1048608 # SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTEpscr = SDL_SetVideoMode 100 100 16 0prwf = SDL_RWFromFile "icon.bmp" "rb"pbmp = SDL_LoadBMP_RW prwf 1SDL_UpperBlit pbmp 0 pscr 0 # assume int == void*SDL_FreeSurface pbmpprwf = SDL_RWFromFile "out.bmp" "wb"SDL_SaveBMP_RW pscr prwf "out.bmp"SDL_Flip pscrSDL_Delay 1000SDL_Quit
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。