アセンブリ言語とCで遊ぶ

x86-64のアセンブリ言語とCの呼び出し規約のお勉強のため、アセンブリ言語で書いた関数をCから呼び出してみました。 アセンブルにはnasm、Cのコンパイルにはgccを使っています。 Cのプログラムは以下の通り。 appという関数を実行して結果をprintfするだけで…

SBCLの実装を追う ~car, cdr, cons~

なんとなく興味があったのでdisassembleを使ってSBCLのcar、cdr、consの中を追ってみました。 CPUのアーキテクチャはx64です。 carとcdrをdisassembleしてみます。 CL-USER> (disassemble #'car) ; disassembly for CAR ; Size: 12 bytes. Origin: #x52A3B48…

複数プロセッサーの設定だとVirtualBoxがうまく動かない問題への対処

VirtualBoxで複数のプロセッサーを使う設定してもうまく動かないということがしばらく続いていたのですがようやく決着がついたので忘れないようにメモしておきます。 以下がうまく動いた環境です。 Host OS: Windows 10 Pro VirtualBox 6.1.26 Guest OS Xubu…

Windows上でeclを使ってCommon Lispの関数をC++から実行する

はじめに Windows上でeclを使ってCommon Lispの関数をC++から実行する方法を紹介します。 eclを使えばC++からCommon Lispを実行することができるため、 エントリポイントはプラットフォームが提供するC++のDSLで実装するしかなさそうなんだけど、 メインの処…

Common Lispで動くcurses (cl-charms)で日本語を出力する

cl-charmsのAPIをそのまま使うと日本語の文字列は文字化けして出力されます。 対処の方法を調べるのに時間がかかったのでここにメモ。 手元で試した限りだと、cl-charmsの処理に入る前に(cl-setlocale:set-all-to-native)を実行しておけば大丈夫そうでした。…

IMEと確定結果の扱い

はじめに かな漢字変換の結果を確定した時に確定した漢字を記憶しておき、次回以降の変換時に優先的に出力するのは、IMEのよくある機能です。 今回、この機能の劣化版を個人開発のIMEでも作ってみました。 まだ全然使い物にはならないものなのですが、 機能…

SBCLでUnix-domain socketを使う

はじめに Common Lispでsocketプログラミングをするには通常usocketを使うのですが、 usocketはUnix-domain socketに対応してなさそうです。 そこで、SBCLでUnix-domain socketを使う方法について調べました。 また、簡単なechoサーバーも書いてみました。 l…

IMEと入力モードの変更

sennという名前のWindowsで動くIMEを自作しています。 sennの言語バーには入力モードを表示・切り替えるボタンがあり、このボタンをクリックするとひらがな入力と直接入力とを切り替えることができます。 この振る舞いは単純なのですが、内部実装はちょっと…

IMEでの状態の扱い

はじめに sennという名前のWindowsで動くIMEを個人で開発しています。 IMEの状態の扱いがなかなか複雑なので、ここでメモしてみます。 stateful-ime sennにはstateful-imeというオブジェクトがあります。キー入力の処理等、ユーザーと対話するのはこのstatef…

つくってみました

Common Lisp関連のことを書いてみます。