kubo39's blog

ただの雑記です。

swap/swapRangesのはなし

ふと、swapみたいな単純なコードでも標準ライブラリの実装を呼び出した方がいいよ、という例として import core.int128 : Cent; import std.algorithm.mutation : swap; struct Huge { Cent[128] data; alias this = data; } void f(ref Huge x, ref Huge y)…

Linuxサンドボックス環境の比較 2025年版

あらすじ 近年、supply-chain attackとかこわい。 特にCLIでnpmやらcodexやらclaude codeやらgeminiやら動かすのに裸んぼでは心もとないのではないか。 というわけでナウなLinuxサンドボックスを調べて比較してみる。 比較のやつ firejail nsjail systemd-ns…

プログラミング言語処理系とサポートしているOS・アーキテクチャがどうなっているか

D言語コンパイラのDMDが次のバージョンからBCryptGenRandomを利用するようになる。 これはWindows Vistaから追加されたAPIであるが、ふと各プログラミング言語およびその処理系がどのようにプラットフォームのバージョンを管理・あるいは管理してなかったり…

各プログラミング言語のWindowsでのMutex実装

特に結論があるわけではなく、よく同じこと調べてしまうので記事にまとめてしまう。 Windowsの各同期APIについてはRust Atomics and Locksのwindows prmitivesの説明も参考に Mutex(Win32API)派閥 Mutex Objects Ruby CreateMutex使ってる箇所 critical sect…

最近チャイコフスキーにハマってる

最近チャイコフスキーにハマってる。 というわけで最近聴いた中でよかったなというやつを書き出してみる。 三大バレエ 白鳥の湖 カラヤン&ベルリン・フィルがベスト。 第2曲のワルツは小澤征爾&ボストン交響楽団もよい。 とくによく聴いてる曲目は以下。 第1…

SIEVEキャッシュについて

SIEVEというキャッシュアルゴリズムが2023年に発表された。 これはLRUよりシンプルであることを謳っており、実際にかなりシンプルなアルゴリズムだが、S3-FIFOやTinyLFUといった既存の優れたキャッシュアルゴリズムと同等の性能が出るらしい。ただしスキャン…

Why my rust program cannot merge string literals?

追記(2025/05/18) Rust側で対応が入りました。 github.com 以下オリジナル記事 こういう文字列の末尾が共通となるようなRustのコードがある。 fn main() { print!("foobar\n"); print!("bar\n"); } こうなってしまう。 $ rustc hoge.rs $ readelf -p .rodata…

ざっくりバイナリ・メモリの世界 for D言語を考えてみた、elfutils便利、そしてcapacityが重い操作というはなし

KOBA789さんのYouTube配信みてて、似たような内容書くとどうなるかな、と考えてたが所有権もライフタイムもどっかいってしまった。。 Hello, World!? バイナリの気持ちを考えるところから、なのでハードルが高いんだよな。 なんとかついていこう。 import st…

LDC: LLVMとmemcpyとRVOのはなし

Addressing Rust optimization failures in LLVMのはなしで、これがLDCだとどうなるか。 以下のようなコードでどうなるかみてみる。 このコードはRustのcodegen testを移植したもの。 import std.algorithm : sum; pragma(mangle, "ThreeSlices") struct Thr…

2024やりたいこと

とくに毎年振り返りとかしてないしできてないし意味あるんかな。。 LDCのxtensa対応してマイクロマウス Pi:Co V2という練習用のマイクロマウスがあるそうで、 これはCPUにESP32-S3、そして組み立て済なのでたぶんハンダとかなしでできる。ほんまかな。 それ…

各言語処理系からみるLLVMインラインアセンブラ、主にmemory clobberについて

雑メモです。LLVMの実装追いきれてないからなんか間違ってたら、、スマンコ!w 前提 LLVMのインラインアセンブラはCodeGenの実体としてはnaked function相当。そのため、codegenには関数属性なんかを渡しているし、ジッサイこれが最適化に効いている! また…

Writing OS in 1000 lines をD言語でやった

Writing an OS in 1000 Linesという自作OSを学ぶための教材があり、これをD言語(LDCコンパイラ)で行った記録です。 先行事例 他言語実装という枠では、RustやZigですでにやられている方がいました。 Rust Totsugekitai/kanios レポジトリ: https://github.co…

DMDの-fPIE/-fPICとリロケーションタイプのはなし

https://twitter.com/yukicoder/status/1703772579511836745 という話がTwitter、あいやX(旧Twitter)あった。 これはLinux環境でbrewで入れたDMDはdmd.confに-fPICがついていないのが原因だった、っぽい。 DMDはコンパイル時の初期化設定ファイルを読み込む…

D言語のftoa/dtoa実装

以前のポストでftoa実装がナイーブな感じであるという話はしたが、説明はしてなかったので残しておく。 アルゴリズム D言語の浮動小数点数の10進表記アルゴリズムは指数部の数値によって3種類のアルゴリズムを使い分けている。 Algorithm A: 指数部が大きい…

D言語で使われているデータ構造・アルゴリズム

atof/ftoa相当や正規表現まわりのコードをざっくり読んでて、phobosとかで使われてるアルゴリズムってどんなのがあるっけというのをまとめてみた。主に、というかだいたい標準ライブラリで超雑なまとめです。 Associative Array Open Addressing 14385 – AA …

WSL2上でRustでespのstdをやっていく予定のはなし (1)

Interface誌のRust特集で、espのstdをやっていくぜ!となったが悪戦苦闘している。 まずドライバを入れてWindows側でデバイスを認識するところからつまづいた。 Establish Serial Connection with ESP32 - ESP32 - — ESP-IDF Programming Guide latest docum…

isInstanceOfテンプレートとalias templates

Slackで以下のコードが通らないのはなぜ?という話があった。 import std; static assert(isInstanceOf!(Array, Array!char)); // OK! static assert(isInstanceOf!(Regex, Regex!char)); // Compile Error! どうもこれを調べてみると、alias templatesの場…

Nimと名前修飾の小ネタ

Nim

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…

jemallocator/tikv-jemallocatorのdisable_initial_exec_tlsってなに?

GitHubでよくjemallocatorを使っているときにdisable_initial_exec_tls featureを有効にしているのをみかける。 これはなにかという話をする前に、TLSモデルについて知っておく必要がある。 TLSにはアクセスモデルというものがあり、モジュールの種類(実行バ…

preExecFunctionのはなし

preExecFunctionとはなにか preExecFunctionはspawnProcessでfork-execのあいだに行う任意の処理を記述するためにある。 import std.process; import std.stdio; void main() { Config config = { preExecFunction: () nothrow @nogc @trusted { import core…

Is it safe in safe cast in safe functions?

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関数内では禁止されている、と…

浮動小数点数の10進表記についてまとめてみた

リソースをまとめたのみで、これといってアルゴリズムを解説しているわけではない。 後々時間をみつけて気になったものは記事化するかもしれない(しないかもしれない)。 はじめに 以下の前提をおく。 IEEE754準拠 IEEE 754-2008 IEEE754とかなにかというのは…

タプル型をキャストしたときに型変換が走らない話

連日のキャストとタプル型ネタです。 現行のD言語の驚くべき振る舞いの一つとして、タプル型をキャストにより変換した際に指定した型への変換が行われないということがある。 動作確認を行ったコンパイラのバージョンは以下。 )$ dmd --version DMD64 D Comp…

小ネタ: D言語はいかなる型もタプル型へのキャストはできない

いかなる型であってもできない。これはタプル型そのものの値であっても例外ではない。 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のジェネリクスを試してみたらいきなりICEに遭遇した話

Go

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まったく触ったことないわけではなかったけどパーサ書く時はいつも手書きでやってしまいがちなのであんまり詳しくなかったり。 PeggedはD言語でPEGを扱うライブラリです。 初回なので一番簡単な題材にしたいところだ…

mysql-d/mysql-nativeについてのFAQ その1

前回に続いてmysql-nativeネタ。 FAQみたいなのに残しておいたほうが説明とかする時に楽そうなので。 その1と書いたがその2があるとは言ってない(?) Q1: 都度コネクションをクローズするのは効率的にどうなのか? ウェブアプリケーション内で以下のような…

ここのところのmysql-d/mysql-nativeについてのはなし

mysql-d/mysql-nativeってMySQL8.0対応してないの?という話があったので。 ちょっと前まで開発停滞していたけど最近はmysql-native自体は結構活発にコミットが積まれていて、たとえばCIの整備とかCollationのデフォルト変更(これは俺がやった)とかが行われ…

gtkdのgtk4 branch(この時点で開発版)を試そうとしてだめだった記録

まず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…