FFI

UTF-8: バイト列→文字列変換(C++&FFI版)

昨日作成したutf8-octets-to-string関数をclispでも試してみた。 ;;;; データ準備 ;; ファイルをバイト列として読み込む (defun read-octets-file (path) (with-open-file (in path :element-type '(unsigned-byte 8)) (let ((as (make-array (file-length i…

Calling Lisp From C

Cからlispの関数を呼ぶ方法を調べた。 最終的には、lisp環境を動的ライブラリ形式っぽく保存して、Cで作成した実行ファイルから任意の関数を呼び出せるようにしたいのだが(そこまでやるかどうかは分からないが...)、とりあえず今日は、lisp関数を呼び出すCの…

メモリ内容出力+stringのメモリ表現

SBCLでマシンコードを直接実行で作成したstring-to-alien-functionマクロを使って少し遊んでみる。 SBCL: sbcl-1.0.28-x86-linux-binary.tar.bz2 まずは、指定されたメモリの内容を出力する関数を定義。 ※ もともとは、文字列を出力する関数のつもりだったが…

SBCLでマシンコードを直接実行

どこかで、sbclでメモリ領域に直接マシンコードを書き込んで実行できる、というような話を読んだような気がするので試してみた*1。 まずは、(マシンコードを取得するために)実行したい関数をCで定義する。 簡単なものがいいので、二つの変数を足すだけの関数…

MeCabバインディングとFFI

common lispからmecabを使う方法のメモ(sbcl依存)。まずは、多分一番直截的な方法: ;;;;;;;; ;;;; FFI(Foreign Function Interface)用のpackageを使用する (use-package :sb-alien) ;;;;;;;; ;;;; so読み込みと関数定義 (load-shared-object "/usr/local/lib…