gcc ビルトイン関数の呼び出し

ダイナミックリンカのソースコード(elf/rtld.c)を見ていると興味深いコメントがあった。 /* Partly clean the `bootstrap_map' structure up. Don't use `memset' since it might not be built in or inlined and we cannot make function calls at this poi…

LD_AUDITとGlobal Offset Table

GNU製のLinux向け動的リンカld-linux.so には環境変数 LD_AUDIT 経由で使える監視APIがあります。このAPIを使えば、ld-linux.soの様々な挙動にフックして、その挙動を監視・干渉することができます。また、興味深いことにLD_AUDITを有効にするとGOT(Global O…

GNU_IFUNCとは何か

GNU_IFUNC(GNU indirect function)とは同一の関数の複数の実装から、ロード時に最適な実装を選択する仕組みです1。通常、同一の関数の複数の実装が存在した場合、動的リンカ(ld-linux.so)が最初に見つけた実装が選択されますが、その選択するための基準を開…

setjmp, longjmpで使われるjmp_bufには何がどのように保存されているのか

setjmp, longjmpはC言語で実行コンテキストを保存し、保存したコンテキストに復帰するために使われる関数(orマクロ)である。g++の例外実装の一つはこのsetjmp, longjmpを用いて実現されている。 この記事では 実行コンテキスト とは何を指すのか? また、その…

検索エンジンを自作する夢

そろそろ学生も終わるので、1年前の失敗と反省を書き留めておこうと思います。私達(@a_kawashiroと@gky360)は2018年度の未踏プロジェクトで分野限定型検索エンジンを複数組み合わせた分散型検索エンジンとして採用され、9ヶ月間を検索エンジンの作成に費やし…

formalized-egison -- Egisonの型安全性の証明に向けて

概要 Egisonのパターンマッチの動作を定理証明支援系Coq上で定義し、「Egisonの処理系が項Mを値vに評価する」という命題をCoq上で表現できるようにしました。 動機 Egisonの中核的な機能はユーザが拡張可能なパターンマッチ機構です。例えば以下に示すように…

MNISTを可能な限り高速に分類する

概要 MNISTの分類をする学習済みモデルを軽量化し、 更にSIMD命令を使った高速化を行うことで、 onnxruntimeより高速なMNISTの分類が可能になりました。(シングルスレッドで) 前回までのあらすじ この記事は前回の続きです。 前回はMNISTを分類する学習済み…

WebAssemblyで自作言語用のGCを書く

前回の続きです。 概要 前回の記事ではWebAssemblyを出力するMLのサブセットコンパイラを作りました。しかし、WebAssemblyにはGabage Collection (GC) が未だに実装されていないため(2019/7/8時点)、メモリ管理は全て自分で行う必要があります。前回は超適当…

ONNXファイルから不要な枝を削ってMNISTの推論を高速化してみる

この記事の中のソースコードは全てhttps://github.com/akawashiro/sonnxにあります。 概要 ニューラルネットワークから要らなそうな枝を80%削除しても精度が変わらなかった ONNXの中身をいじるのが大変だった onnxruntimeには勝てなかった 背景 機械学習の学…

高階関数を基本的な関数の合成で作った関数でQuickCheckする

高階関数をQuickCheckでテストしてみる QuickCheckを知っていますか? QuickCheckと言うのはHaskellのデータ駆動型のテスト用ライブラリで テストしたい関数を指定するとその引数に合わせて適当なテストデータを生成してくれます。 では高階関数(関数を引数に…

WebAssemblyを出力するMinCamlコンパイラを実装しました

概要 WebAssemblyを出力するMinCamlコンパイラml2wasmをフルスクラッチで実装しました。 github.com マンデルブロ集合を計算するこんな↓感じのMinCamlのソースコードが マンデルブロ集合を出力するMinCamlソースコード こんな↓感じのWebAssemblyに変換されて…

ネットワークデバイスドライバを一からビルドしてインストールした

概要 新し目のコンピュータにDebianを入れたら、ネットワークデバイスドライバが入ってなくて結構大変だった。 経緯 最近、自分の使っていたコンピュータ(6年前くらいのデスクトップ)に限界を感じ始めたので、日本橋で新しいものを買ってくることにした。購…

プログラミング言語Egisonの型システムを設計するインターンをした

概要 2018年3月11日から4月14日まで楽天技術研究所でEgisonの型システムの設計 & 型検査器を書くインターンをしていた。 もうインターンから半年も経ってしまったが、何も書かないよりはましというわけでブログ記事を書くことにした。 実装した型検査器はこ…

ISUCON8予選に参加した

ISUCON8の予選にokeigoさん、mayokoさんとチーム「しょラーさんのおかげ」として参加していた。 最終的な得点は8000点くらいで予選落ちだった。悔しい。 チームメイトの参加記 brookbach.com 予選まで ISUCON出てみたいけどその分野について全く知らない— a_…

Vimで初めてコマンドを定義してみた

書かないと忘れちゃうから… これだけ :command! MT :MerlinTypeOf :MT

Vimをコンパイルしてインストールする

使っているプラグインの関係で+python,+lua,+perlなVimが必要になりました。 しかし、Ubuntuのパッケージで条件を満たすものが見当たりません。 そこで自分で一からコンパイルしてインストールしました。 僕は自分でコンパイルしたソフトウェアを$HOME/.loca…

githubのバックアップを取る

年末も近くなってきたのでgithubが落ちた時に備えてリポジトリのバックアップを取ることにしました。 以下のスクリプトを実行するとgithub以下にすべてのリポジトリがバックアップされます。 YOUR_ACCESS_TOKENはSign in to GitHub · GitHubで作れます。 Sel…

Freeモナドについて今更勉強してみた

5年ほど前、Freeモナドという言葉がHaskell界隈でよく見られました。 僕のフォローしている人たちが次々に解説記事をアップしていたように思います。 5年たった今になって、Freeモナドについて興味が湧いてきたので記事を書いてみることにしました。 Freeモ…

型レベル自然数を使って型付き行列を作ってみた

#動機 研究で行列計算ライブラリを使っているのですが、numpyはなぜか異なる型の行列同士を足せてしまいます。 このせいでデバッグがめちゃくちゃ大変でした。 こんな単純な間違いはコンパイル時に弾いてくれればいいのにと思ったので、違った型の行列は足せ…

CTF入門記

11月の終わりからCTFをかじり始めました。この熱意がいつまでつづくのか分からないのですがとりあえずこの二週間くらいでやったことを書いてみようと思います。 動機 CTFは高校の先輩に一年ほど前から勧められていたのですが放置していました。最近寒いし何…

n番煎じのyesod入門ーとりあえずプロジェクトを作ってみる

yesodとは haskellで作られたweb frameworkです。 Yesod Web Framework for Haskell インストール 公式サイトのYesod quick start guideのとおりに cabal install yesod-platform yesod-bin すると依存関係がぶち壊れる可能性大なので cabal-devを使ってイン…

Haskellでインベーダーゲームを作ってみた

夏休みがあまりに暇なのでインベーダーゲームまがいの物を作ってみました。 ゲーム全体の状態を持つ変数をIORefで包み 一定時間毎に更新することでゲームの状態を変更・保持しています。 (IORefを使うとIOモナドの中で変数が更新できます。(実はよく分かっ…

Codeforces Round #176 div 2

久しぶりに(一年ぐらい)Codeforcesに出ました。 正解したのはA問題のみというひどい結果でした。 B問題はコーナーケースで落ち、C問題以降は 手も足も出ませんでした。 もう一度初心に帰って勉強する必要性を感じました。 A. IQ Test 問題概要 4x4の…

Marathon Match 78 の記録

最終的なアルゴリズム 左上(0,0)を出発点として、盤面上に一本の線を引いていく。 1マス進むことを一手として10手探索してはもっとも高い点数が 得られるものを最終的な解に追加していく。このとき輪っかができなくなるものは除外する。 探索と解の追加を…

HaskellとOpenGLを使って四角形を描画しテクスチャを貼り付ける

こんな感じになります↓ 結構苦労しました。誰かの役に立ってくれると嬉しいです。参考サイト いろいろなサンプルがある:Index of /GLUT/examples/RedBook 今回役に立ったのは Tex〜.hs 視野の設定:Lichu's_Base テクスチャの読み込み・設定:https://githu…

HaskellとOpenGLをつかって四角形を描画する

うまく動いたら雛形にでも使ってやってください。 参考サイト GLUTによる「手抜き」OpenGL入門 プログラミング/Haskell/HSDL - Flightless wing import Graphics.UI.GLUT import Graphics.Rendering.OpenGL.GLU import System.Exit import Data.IORef --タイ…

cabal install を使う前に

apt-cache search パッケージ名 とするとよいかも

AOJ 0090 Overlaps of Seals

問題の内容 10*10の正方形上に半径1の円をn個(n 最も多くの円の内部に含まれる正方形上の点はいくつの円に含まれるか。 (円の内部とは円周上も含む。) 解法 想定解法では任意の二つの円についてその交点を求め いくつの円に含まれるかを数えるらしい。 AOJ…

cabal install monadius したら結構ハマった

結局こんなことをやった cabal install OpenGLRaw --reinstall cabal install StateVar --reinstall cabal install Tensor --reinstall cabal install ObjectName --reinstall cabal install OpenGL --reinstall cabal install GLURaw --reinstall cabal ins…

JOI2012春合宿

一日目:125 二日目:11 三日目:10 四日目:70