RESP(Redisプロトコル)を話す in Golang.
概要
ひょんなことをキッカケにGo言語で簡易的なRedisのサーバを書いたので簡単にまとめようと思う。
https://github.com/0n1shi/beehive-redis
動作としては以下のように普通のRedisサーバとなんら変わりなく、redis-cli
からも接続することができる(コマンド数は極端に少ないが)。
# terminal 1 $ beehive-redis run --config conf.yaml 2022/02/20 09:17:27 starting Beehive Redis server ...
# terminal 2 $ redis-cli 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> set msg "hello world" OK 127.0.0.1:6379> get msg "hello world"続きを読む
CPUをつくる ~ FPGA編 ~
概要
FPGA上で動作するMIPSプロセッサを作ったので学習の流れや大まかな作り方をまとめる。
成果物
続きを読むFPGAでつくったMIPS上でフィボナッチ数の計算が動いた!以前Goで書いたMIPSのエミュレータとも結果が一致している・・・! pic.twitter.com/OX3Vg64LB5
— 0n1shi (@0n1shi) 2021年5月15日
CPUエミュレータを書く
概要
https://github.com/0n1shi/mipsemu
CPUエミュレータを書いたのでまとめる。 今回書いたのはMIPS1のCPUエミュレータ。命令は全て実装したわけではなくC言語のコードいくつか書きクロスコンパイルしたバイナリを実際に動作させ、ある程度のコードが問題なく動作することを確認した。
実際には以下のようなC言語を書き、
int c = 0; int main(void) { int a = 10; int b = 3; c = plus(a, b); return 0; } int plus(unsigned int a, unsigned int b) { return a + b; }
ビルドしたバイナリをエミュレータで実行した結果が以下になる。
続きを読む
Erlang 入門
概要
1986年にスウェーデンの通信機器メーカーであるEricsson社が電話通信アプリケーションを開発する目的でErlangを開発し1998年にOSSとして公開した。
Erlangは巨大なサーバソフトウェア(メッセージキューイングやWebサーバ、分散データベースなど)などの高レベルプロトコルの実装に向いており、現在ではWhatsApp、ドワンゴ、LINEなどがErlangを採用していることを表明している。
qsort([]) -> []; qsort([Pivot|Rest]) -> qsort([ X || X <- Rest, X < Pivot ]) ++ [Pivot] ++ qsort([ Y || Y <- Rest, Y >=Pivot ]).
続きを読むe.g. クイックソート