SML#の型安全性

This entry was posted by on Wednesday, 18 April, 2007

こういうのを見るとついイジワルをしてみたくなるのが性というやつで……(好きなコをいじめちゃう子供の心理か?(笑))、

% smlsharp SML# 0.20 (2007-03-30 10:47:08 JST) # val libc = DynamicLink.dlopen </usr/lib/libSystem.dylib>; val libc = 0x00b00270 : unit ptr # val puts = DynamicLink.dlsym (libc, <puts>) : _import _stdcall int -> int; val puts = fn : int -> int # puts 0; (null) val it = 10 : int # puts 1; zsh: 642 bus error smlsharp

うむ、まあ、予想通りだな。

ヘッダファイルを読んで型を見てくれればよいのだけれど、それにかかるコストを嫌ったか、void* みたいな「ふつうキャストして使う」ような用途はそれじゃムリと判断したか、Cのプロトタイプ宣言を読んでも限界があると見切ったか……。いずれにせよ、 FFI なんだからそりゃまあ仕方ねえだろうというアレですね。

ちなみに Haskell でも foreign 宣言を解釈する処理系なら同じくらい気軽に書けるし、 C-&amp;gt;Haskell (c2hs) を使えば c-wrapper くらいには楽に書けるのだけれど、ただし問題があって、対話環境にいきなり追加させたりできないし、型の相互受け渡しが面倒くさいのだ。 Int くらいは可能だけど、リスト→配列は(そういう関数があるわりには)自動的にやってくれないし、Haskell文字列(文字リスト)→C文字列の変換は、それはそれで厄介である。 SML# はその辺が異様に楽なようですごいなあと素直に感心する。

ところで、 SML# のソースコードに sample というのがあって、いろいろなサンプルがあって GLUT の例なんかなかなかスゴいと思うが、個人的にびっくりしたのは qsort。「なんだクイックソートかよ」と思ったらさにあらず、 libc にある qsort を使って SML の配列をソートする例なのだった。そんなのありか。

って qsort の型が多相的であることに今頃気付いてちょっと驚いている今のわたし。 _sizeof ってスゲエなー。何の話かというのはこちらに情報がありますね。

2 Responses to “SML#の型安全性”

  1. takkan_m

    内容と絡んでなくて、さらに既にご存知だったらすみませんが、preタグのなかの’< 'や'>‘の’&'がさらにエスケープされてませんか?ソース読んでパッチ書けるほどHaskellが書けないのでご報告を。

  2. 向井

    あーこれですね、じつは1回編集して書き直すと、再編集段階でエスケープされてしまうのでうっかりすると残ってしまうというしょぼいことになっているのです。
    わたしが再編集しなければ発生しない問題なので「まいっか」と後回しになっております。

風邪ひいてブッ倒れてた

This entry was posted by on Wednesday, 18 April, 2007

ひさびさに風邪引いて寝込んでました。こう見えてもわりと健康なので、38度を越したのも久し振りな気がするよ(ああでも昨年のSFセミナーで風邪になってたような気が)。

月曜夜から昨日まる一日くらい寝込み、今日も半覚醒な感じでぐたーっとしていたら、わりと元気になったような気がしたが、腹がへったと思って急にモノを食ったらまた気分が悪くなってきた。うえっぷ。

Comments are closed.