kubo39's blog

ただの雑記です。

2020-01-01から1年間の記事一覧

mysql-nativeで一度に受信できるパケットサイズは16777210バイト

コードを読んでもとくにサイズ上限が規定されていなかったので実験した。 環境(mysql-nativeのバージョン) $ cat dub.selections.json| grep mysql-native "mysql-native": "3.0.0", 以下のようにmax_allowed_packetや受信サイズを調整して試した結果、max_a…

mysql-nativeでbulk insertをする

最近はMySQLを触っている中で、なにかしらメモを残しておくかという気分になった。 mysql-nativeにはbulk insert用のサポートがあるわけではないが、メタプログラミングでコンパイル時にクエリをある程度生成できたりすると便利だなあと思うなどした。 環境 …

Prologを使ってD言語のtraitsを表現してみる

D言語のtraitsのうちいくつか簡単に実装できそうなものを表現してみた。 といっても非常に不完全な状態であるが。 SWI-Prologを使ったが、他の実装でもおそらく問題ない。 $ swipl --version SWI-Prolog version 7.6.4 for amd64 ソースコードは以下のような…

D言語の名前修飾はUnicode識別子をエンコードしない

D言語はIdentifierとしてUnicode Codepointを使うことができる。 identifierの定義 character setの定義 (直接的に定義されていないが、Letterはcharacter setで表現可能である文字と推測できる) 従って、以下のようなコードを書くことができる。 void ほげ(…

D言語でRISC-Vシミュレータ上でハローワールドする

D言語でもRISC-Vやりたいんだが…? ← できた。そういう話です。 準備 LDCのバージョンは以下のもの。自前ビルドしてる人はRISC-V向けにしてることと、RISC-VはLLVM 9.0.0以降で公式にサポートされていることに注意されたい。 $ ldc2 --version | head -2 LDC…

D言語もくもく会第17回

(追記: なんやかんやでWASI Tutorialまでできるようになった: https://github.com/kubo39/ldc-wasi-tutorial ) はじめて記事書くな、17です(威圧)。 これにだいたい参加しています。 雑にWASIをwasmtimeで動かせないかな、と試すやつをやりました。 まずWA…

partialRELRO/fullRELRO、あるいは-fno-pltの話

relroはすでにけっこう有名だけど、はわりとこのへんの話は知られていない気がしてきた。 relro relro、すなわちrelocation read onlyは再配置情報を格納している領域を読み取り専用にして実行時に書き換えられないようにすることだ。 そもそも再配置(リロケ…

Linux環境でSharedObjectsを使う

とくになにかあるわけじゃなくてSharedObjectsの使い方の備忘録として。まあこういうのドキュメントないので。。 SharedObjectsというのはLinuxでだけ使えるやつで、実行プログラムがロードしている共有ライブラリを取得するために使うものである。 ようは d…

getFunctionAttributesでlive関数属性をとれるようにした

これ https://github.com/dlang/dmd/pull/11049 単にtraits.dを修正するだけではだめだった、というのはlive関数属性は名前修飾の定義も実装もされていなかったので、typeof内で普通の関数と区別されていなかったのである。 具体的に言うと以下のようになっ…

D言語のvulkan bindingであるEruptedDをいれる

以前挑戦してだめだった vulkan 利用、実はIntel HD用のパッケージを入れればいけるのでは?となったので試す。 $ sudo apt install -y mesa-vulkan-drivers おお、どうやら動いたっぽい。 $ dub run :devices Performing "debug" build using /home/kubo39/…

emacsのD言語環境 (2020.03.07版)

【2020.04.08追記】 dlsが非推奨になったので以下の内容はすべて古くなってしまいました。なんてこった。。 https://forum.dlang.org/post/usqhsdtwfhrterzpstst@forum.dlang.org 注意: この内容はもう古いです。 またまたemacsのD言語環境をいじってLSP仕様…

DMDはmain関数(not _Dmain)を実行する前になにをするのか

たとえば自前で pragma(crt_constructor) とか使った場合にどういう順で実行されるんだろう、とか。 こういうコードを用意して、 enum body = "import std.stdio;writeln(__PRETTY_FUNCTION__);"; pragma(crt_constructor) extern (C) void crt_constructor(…

そのスタックを食べたのはだれ? ~travisでdubがSEGVし続けたワケ~

あらすじ ある日のこと、Travis上のプロジェクトがdub使ってるとSEGVで落ちる、というチケットが。さらにスレッドが進み、どうもいろいろなパッケージで同様の問題が起きているとのこと。 LinuxでしかおきないぞとかdubでParallel GC(注:mark&sweep gcのmark…

D言語のOpenSSL事情、というか愚痴

つらい話です、というかただの愚痴です。 D言語のOpenSSLバインディングとしては D-Programming-Deimos/openssl があるのですが、メンテナンスが行き届いているとは言い難い状態です。 それ以外にもいくつか問題があって、 新しめのAPIへの対応が追従できて…

LDCのlibFuzzerを試す

LLVMはlibFuzzerというFuzzingの仕組みがあって、LDCからその機能を使うことができる。 こういうコードで試してみる。LDCは1.19.0。 import ldc.libfuzzer; import std.string; mixin DefineTestOneInput!fuzz_target; int fuzz_target(in ubyte[] data) { i…