タグ

ブックマーク / ha-tan.hatenadiary.org (5)

  • HaskellのDLLを作ってRubyから呼ぶ - 趣味的にっき

    18. Running GHC on Win32 systems — Glasgow Haskell Compiler 8.6.4 User's Guideを参考にやってみました。Haskellで書いたフィボナッチ関数をDLLにして、それをRubyのWin32APIを使って呼びます。Haskellのコードは必然的にIOになります。 ファイル名: fib.hs module Fib where foreign export stdcall fib :: Int -> IO Int fib :: Int -> IO Int fib = return . fib' where fib' 0 = 0 fib' 1 = 1 fib' n = fib' (n - 2) + fib' (n - 1) ファイル名: main.c #include <Windows.h> #include "HsFFI.h

    HaskellのDLLを作ってRubyから呼ぶ - 趣味的にっき
  • UCS4⇔UTF8の変換 - 趣味的にっき

    CinnamonにUCS4⇔UTF8の変換を行う関数を追加しました。id:ha-tan:20070101:1167710733のUNFと組合せることで、EUCとかShift-JISとかUTF8とかの文字列をUCS4(Haskellの内部文字コード)の文字列に変換することができます。 Cinnamon/Ucs.hs test/TestUcs.hs ついでに。UCS4⇔UTF8変換の仕様はRFC2279とRFC3629に書いてあるのですが(RFC3629が出てRFC2279は廃止)、RFC2279の変換表はUTF8が6バイトまで、RFC3629は4バイトまでになっています。RFC3629はUTF16の範囲の記述になっているのですが、何で新しい方のRFCで制限がきつくなる方向に変わるのでしょう? その辺の経緯がよくわかりません… というかUTF16じゃそのうち困るんじゃないのかな? 参照: RF

    UCS4⇔UTF8の変換 - 趣味的にっき
  • HaskellからRubyを呼んでみる(1) - 趣味的にっき

    FFIを使ってHaskellからRubyを呼んでみました。ruby_optionsが上手く動かなかった(まだソース読んでません)ので、とりあえず文字列をevalするだけですが… それはそれとしてruby-1.8.5のmingw版はバイナリがないのかな? ファイル: ruby_test.hs module Main (main) where import Foreign.C foreign import ccall unsafe "ruby_init" rubyInit :: IO () foreign import ccall unsafe "rb_eval_string" cRubyEvalString :: CString -> IO () rubyEvalString s = withCString s cRubyEvalString main :: IO () main = do

    HaskellからRubyを呼んでみる(1) - 趣味的にっき
  • 8ビットCPUの仮想機械「octopus」をRubyで実装する

    Perl で 8ビット CPU を作る - naoyaのはてなダイアリー octopusをRubyで実装してみました。IO関係、オプションまわりの処理は省略しています。できるだけRubyらしいプログラムを目指してみました。あんまりトリッキーな実装はしていません。 ファイル: octopus3.rb #!/usr/bin/env ruby # -*- compile-command: "ruby -Ks octopus3.rb" -*- class OctopusVm REG_PC = 7 REG_RET = 6 REG_SP = 5 ZFLAG = 1 OCT_INST = { 0 => 'nop', 1 => 'mov', 2 => 'in', 3 => 'out', 4 => 'movi', 5 => 'addi', 6 => 'subi', 7 => 'muli', 8 => 'di

    8ビットCPUの仮想機械「octopus」をRubyで実装する
    sirocco
    sirocco 2008/01/08
  • 関数プログラミングの素晴しさ - 趣味的にっき

    最近、関数プログラミングの素晴しさがわかってきたように思います。 Haskellは、コンパイルさえ通ってしまえば、自分の思った通りに動いてくれます。Rubyよりも。関数プログラミングを推奨している人はよく言っていることなんですが、最初は僕も「ホントかよ〜」って疑ってかかってました。ようやくこれが体感できるようになってきたような気がします。サトリってやつでしょうか?(←まだ早いって!!) ただRubyでプログラム書いているようなお気楽感はあんまり感じませんし(Haskellはストイックです)、さっと書くだけだったらRubyで書く方が10倍くらい早く書けるのですけどね。何ていうかな、Haskellでプログラム書いてるとパズル解いてるような楽しさがあります。まとめるとこんな感じ。 「オレってばスゲー」 ← Ruby 「パズル解けたー」← Haskell 参考: How To Become A H

    関数プログラミングの素晴しさ - 趣味的にっき
  • 1