SIEVEというキャッシュアルゴリズムが2023年に発表された。 これはLRUよりシンプルであることを謳っており、実際にかなりシンプルなアルゴリズムだが、S3-FIFOやTinyLFUといった既存の優れたキャッシュアルゴリズムと同等の性能が出るらしい。ただしスキャン…
こういう文字列の末尾が共通となるようなRustのコードがある。 fn main() { print!("foobar\n"); print!("bar\n"); } こうなってしまう。 $ rustc hoge.rs $ readelf -p .rodata hoge| grep bar [ 0] invalid args/rustc/82e1608dfa6e0b5569232559e3d385fea5…
KOBA789さんのYouTube配信みてて、似たような内容書くとどうなるかな、と考えてたが所有権もライフタイムもどっかいってしまった。。 Hello, World!? バイナリの気持ちを考えるところから、なのでハードルが高いんだよな。 なんとかついていこう。 import st…
Addressing Rust optimization failures in LLVMのはなしで、これがLDCだとどうなるか。 以下のようなコードでどうなるかみてみる。 このコードはRustのcodegen testを移植したもの。 import std.algorithm : sum; pragma(mangle, "ThreeSlices") struct Thr…
とくに毎年振り返りとかしてないしできてないし意味あるんかな。。 LDCのxtensa対応してマイクロマウス Pi:Co V2という練習用のマイクロマウスがあるそうで、 これはCPUにESP32-S3、そして組み立て済なのでたぶんハンダとかなしでできる。ほんまかな。 それ…
雑メモです。LLVMの実装追いきれてないからなんか間違ってたら、、スマンコ!w 前提 LLVMのインラインアセンブラはCodeGenの実体としてはnaked function相当。そのため、codegenには関数属性なんかを渡しているし、ジッサイこれが最適化に効いている! また…
Writing an OS in 1000 Linesという自作OSを学ぶための教材があり、これをD言語(LDCコンパイラ)で行った記録です。 先行事例 他言語実装という枠では、RustやZigですでにやられている方がいました。 Rust Totsugekitai/kanios レポジトリ: https://github.co…
https://twitter.com/yukicoder/status/1703772579511836745 という話がTwitter、あいやX(旧Twitter)あった。 これはLinux環境でbrewで入れたDMDはdmd.confに-fPICがついていないのが原因だった、っぽい。 DMDはコンパイル時の初期化設定ファイルを読み込む…
以前のポストでftoa実装がナイーブな感じであるという話はしたが、説明はしてなかったので残しておく。 アルゴリズム D言語の浮動小数点数の10進表記アルゴリズムは指数部の数値によって3種類のアルゴリズムを使い分けている。 Algorithm A: 指数部が大きい…
atof/ftoa相当や正規表現まわりのコードをざっくり読んでて、phobosとかで使われてるアルゴリズムってどんなのがあるっけというのをまとめてみた。主に、というかだいたい標準ライブラリで超雑なまとめです。 Associative Array Open Addressing 14385 – AA …
Interface誌のRust特集で、espのstdをやっていくぜ!となったが悪戦苦闘している。 まずドライバを入れてWindows側でデバイスを認識するところからつまづいた。 Establish Serial Connection with ESP32 - ESP32 - — ESP-IDF Programming Guide latest docum…
Slackで以下のコードが通らないのはなぜ?という話があった。 import std; static assert(isInstanceOf!(Array, Array!char)); // OK! static assert(isInstanceOf!(Regex, Regex!char)); // Compile Error! どうもこれを調べてみると、alias templatesの場…
NimはDWARF v5の時点では DW_AT_language の割当はないけど、ソースコードはDWARFに入れることが できて $ eu-readelf --debug-dump=info hello とかで確認できる。 proc main() = echo "Hello!" main() $ nim c --debugger:native hello.nim (...) $ file h…
GitHubでよくjemallocatorを使っているときにdisable_initial_exec_tls featureを有効にしているのをみかける。 これはなにかという話をする前に、TLSモデルについて知っておく必要がある。 TLSにはアクセスモデルというものがあり、モジュールの種類(実行バ…
preExecFunctionとはなにか preExecFunctionはspawnProcessでfork-execのあいだに行う任意の処理を記述するためにある。 import std.process; import std.stdio; void main() { Config config = { preExecFunction: () nothrow @nogc @trusted { import core…
safe functionの定義 より、 The following operations are not allowed in safe functions: * No casting from a pointer type to any type with pointers other than void*. void*を除く異なるポインタ型へのキャストは@safe関数内では禁止されている、と…
リソースをまとめたのみで、これといってアルゴリズムを解説しているわけではない。 後々時間をみつけて気になったものは記事化するかもしれない(しないかもしれない)。 はじめに 以下の前提をおく。 IEEE754準拠 IEEE 754-2008 IEEE754とかなにかというのは…
連日のキャストとタプル型ネタです。 現行のD言語の驚くべき振る舞いの一つとして、タプル型をキャストにより変換した際に指定した型への変換が行われないということがある。 動作確認を行ったコンパイラのバージョンは以下。 )$ dmd --version DMD64 D Comp…
いかなる型であってもできない。これはタプル型そのものの値であっても例外ではない。 void main() { alias tuple(A...) = A; tuple!int tup; cast(tuple!int) tup; } (dmd-2.098.1)$ dmd -c cast.d cast.d(5): Error: cannot cast `__tup_field_0` to tuple…
ちょっと前のもあるけど、 フォールアウト4 やりこみ要素強い。普通にメインストーリーもおもしろかった。 ボーダーランズ3 たぶんマルチプレイでやった初のゲーム。 ARK かなり重かった記憶が強い、なんだかんだドラゴン乗ったのが一番おもしろかった気がす…
Goにジェネリクスが来るぞ!ということで早速試してみることにする。 適当にmasterをクローンして cd src && ./make.bash でビルド(これだけでビルドできるの楽ちん)。 $ go version go version devel go1.18-6602c86a38 Fri Sep 17 08:20:48 2021 +0000 lin…
最近このへん触ってないなと思い。 Peggedまったく触ったことないわけではなかったけどパーサ書く時はいつも手書きでやってしまいがちなのであんまり詳しくなかったり。 PeggedはD言語でPEGを扱うライブラリです。 初回なので一番簡単な題材にしたいところだ…
前回に続いてmysql-nativeネタ。 FAQみたいなのに残しておいたほうが説明とかする時に楽そうなので。 その1と書いたがその2があるとは言ってない(?) Q1: 都度コネクションをクローズするのは効率的にどうなのか? ウェブアプリケーション内で以下のような…
mysql-d/mysql-nativeってMySQL8.0対応してないの?という話があったので。 ちょっと前まで開発停滞していたけど最近はmysql-native自体は結構活発にコミットが積まれていて、たとえばCIの整備とかCollationのデフォルト変更(これは俺がやった)とかが行われ…
まずgtkの最新版を入れる。 $ pip install meson # わりと新しめのものにしないと動かないがち $ git clone -o upstream https://gitlab.gnome.org/GNOME/gtk.git $ cd gtk $ meson --prefix /opt/gtk builddir $ ninja -C builddir $ sudo ninja -C builddi…
さらに続き。 もう少し調べてみるとリンカに渡す前のオブジェクトファイルはTypeセクションが意図したおりになっていた。 ldc2 -mtriple=wasm32-unknown-unknown \ -mattr=+multivalue \ -betterC \ -fvisibility=hidden \ --frame-pointer=none \ -Oz \ -c …
前回の続き。 構造体は静的初期化にしたらうまくいくかも?と思い以下のようにコードを変更してみた。 extern (C): nothrow: @nogc: struct TwoI32 { int aa; int bb; }; export TwoI32 return_two_i32() { TwoI32 s = { aa: 1, bb: 2 }; return s; } が結果…
LDCでWebAssemblyのmultivalue拡張を試したい。 コンパイラはLDC1.25.1でまず試してみる。 以下のようなコードを書いてみる。 extern (C): nothrow: @nogc: struct TwoI32 { int aa; int bb; } export TwoI32 return_two_i32() { return TwoI32(1, 2); } $ l…
コードを読んでもとくにサイズ上限が規定されていなかったので実験した。 環境(mysql-nativeのバージョン) $ cat dub.selections.json| grep mysql-native "mysql-native": "3.0.0", 以下のようにmax_allowed_packetや受信サイズを調整して試した結果、max_a…
最近はMySQLを触っている中で、なにかしらメモを残しておくかという気分になった。 mysql-nativeにはbulk insert用のサポートがあるわけではないが、メタプログラミングでコンパイル時にクエリをある程度生成できたりすると便利だなあと思うなどした。 環境 …