kubo39's blog

ただの雑記です。

LDCでwasmのmultivalue拡張できないか軽く試す

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で一度に受信できるパケットサイズは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…

opamでnumのインストールに失敗してcoqが入らなかったのでocamlfind removeで解決した

opamでcoqをインストールしようとすると以下のようなエラーになった。 $ opam --version 2.0.5 $ opam list # Packages matching: installed # Name # Installed # Synopsis base-bigarray base base-threads base base-unix base camlp5 7.10 Preprocessor-…

LDCにおいてもはや必要なくなったcopy-relocation checkのためのワークアラウンドを消した話

LDCのバグで困っている、というので調査をしてみた。 調べてみると、どうもこれはLDCで実行バイナリを生成する場合(より正確にはmain関数を定義している場合)のみ行われるcopy-relocation checkのために必要とされるようだ。 なんでcopy-relocation checkが…

DMDのDWARFが2019年でまだv3だった

ふと、DMDが生成するデバッグ情報を調べていたところDMDはDWARF v3でデバッグ情報を付与するようだ。 DMDのバージョンは2.089.0を使っている。 $ dmd --version DMD64 D Compiler v2.089.0 Copyright (C) 1999-2019 by The D Language Foundation, All Right…

山陰のうまい飯 2019年

前回の帰省のタイミングでアップデート。松江・米子近郊。 松江 山美世(うなぎ) おすすめ度: 9/10 値段: やや高め 今松江近辺で一番美味しいうなぎはここ。 ちょっと立地がわるいかも、米子空港からは近い。 うなぎの名店は他に「いずも」や「おおはかや」な…

ずっとdruntimeのベンチマークのコンパイルがリンカエラーで落ち続けてる

最近ちっともDMDのビルドがうまくいかない。 ホストのコンパイラとしてDMD 2.087.1にパスを通した状態で、全部(dmd,druntime,phobos)のレポジトリに make -f posix.mak clean をかけた状態でmasterを更新してdmdで make -f posix.mak -j4、 phobosでも make …

いまさらマンデルブロー集合を書くので、なるべく型安全っぽくを意識した

プログラミングRustをちらちら読んでいたら並列化の例としてあったので、いまさらマンデルブロー集合を実装した。 元のコードがRustなのでなるべく型安全な感じに書いてみたつもり。 他の言語でfind相当のものがcountUntilという名前で、findは別の操作を行…

zshを自前でビルドして使う

zsh

zshにパッチあてて使ってるんだけど、ビルド方法とか一応メモしておく。 zshのビルドは楽にできる、まあ今回の作業では必要なかったのだけれど。 $ apt install -y yodl # 依存ライブラリ, あとPerlとかも必要 $ ./Util/preconfig $ ./configure $ make パッ…

jailingをD言語にポーティング、やってみた!

kazuho/jailing をD言語に置き換えてみました。 これです。 目的 実用的にはLinuxであればどの環境でもPerl5が入っていることは期待できるし外部依存もないので特に意義はないです。 あくまで学習目的というやつです。コードサイズも小さいし、いいかなって…

ベイルート・ロンドン・リバプール旅行記

3/25~4/2でベイルート(レバノン)、ロンドン・リバプール(イギリス)旅行に行っていたので雑に記録を残しておく ベイルート 直行便がないのでフランクフルト経由。フランクフルトのラウンジで食べたパン・ソーセージとビールがこの旅で一番うまかった可能性が…

けものフレンズ2を総括する

人にはそれぞれの感想がある、これは自分のために整理するくらいの意味合い よかったところ ゴマちゃんことゴマすりクソバードがいいキャラだった フレンズのキャラデザがよかった ゴマすりクソバードとバンドウイルカがかわいかった ごまちゃんやチーターの…

argc = 0 でプロセスを動かす

DMDのコード内ではargcが0な環境を想定してコードが書かれているが、そういう環境は存在するのだろうか。 調べてみるとわりとすぐにstackoverflowがみつかった。 c - executing a process with argc=0 - Stack Overflow posix_spawnを使えばできるようなので…

Isabelleちょっとやってます、という近況報告?

ここ最近Isabelleを触っている。 Coqと比べると日本語の資料が少ないのでつらい。 とりあえずいろいろわからないことが出てきたので並べてみる。 2以上の自然数を扱うと簡約できない 例としてmap関数を定義する。 fun map :: "('a \<Rightarrow> 'b) \<Rightarrow> 'a list \<Rightarrow> 'b list</rightarrow></rightarrow></rightarrow>…

小ネタ: safe functionとcast function of null

おなじみ(?), safe functionを考えてみようの会です. 突然ですが, 以下のコードは合法でしょうか? void main() @safe { (cast(void function() @safe) null)(); } 結果はおおかた予想がつくとは思いますが、Segmentation Faultになります。 (dmd-2.084.0)$ …

scope parameter storage class と in parameter storage class

(2019/02/07; いくつか追記したのでそちらのほうもみてください) 現在の最新版コンパイラ(DMD 2.084.0)だと, このコードはSEGVで落ちてしまう. auto foo(scope void delegate() @safe dg) @safe { return dg; } auto bar(void delegate() @safe dg) @safe …