なんかメモ

いろいろメモ

LLVMのGo bindingでhello world

An introduction to LLVM in Goを読んでhello worldしようとしたらllvm知らなすぎて調べたのでまとめ

基本的な流れ

  1. module作成
  2. main関数作成
  3. entry基本ブロック作成
  4. 基本ブロックの中にビルダーを通して実行する命令を構築していく
  5. Dump()でllvm IRを出力

MCJITコンパイラを使う

初期化

以下の関数で初期化

llvm.LinkInMCJIT()
llvm.InitializeNativeTarget()
llvm.InitializeNativeAsmPrinter()
llvm.InitializeAllAsmParsers()

実行
  1. NewMCJITCompilerOptionsで構造体を作成しオプションを設定
  2. NewMCJITCompilerでJITコンパイラを作成
  3. RunFunctionで実行

最適化

  1. PassManagerを作成
  2. TargetDataを追加
  3. 最適化するためのpassを追加していく
  4. Runで実行

その他

  • memcpyの部分は試し、putsで表示するだけならいらない(CreateGlobalStringPtrのポインタを直接putsに渡してあげればいい)

LLVMのGo bindingでhello world

リンク

An introduction to LLVM in Go

LLVM Project Blog: Using MCJIT with the Kaleidoscope Tutorial

Goであると思ってたけど、なかった関数、定数

python使ってた感覚でいくと、意外となかった関数や定数があったのでまとめ

関数

round

Goであると思ってたけど、なかった関数、定数 round

gcd

math/bigにはあるからそっちでもいい Goであると思ってたけど、なかった関数、定数 gcd

expandPath

Goであると思ってたけど、なかった関数、定数 expandPath

定数

machine epsilon

Goであると思ってたけど、なかった関数、定数 machine epsilon

リンク

Golang で filepath.Abs に ~(ホームディレクトリ) を指定した時にカレントワーキングディレクトリが先頭についてしまう - tkuchikiの日記

floating point - Easiest way to get the machine epsilon in go (golang) - Stack Overflow

逆引きGolang (数値)

Greatest common divisor - Rosetta Code

yukicoderのテストを取得してローカルで実行するツールを書いてみた(リアクティブジャッジ、スペシャルジャッジ対応)

最近yukicoderをやり始めたので、テストを取得してローカルで実行するツールを書いてみた。(リアクティブジャッジ、スペシャルジャッジ対応)

github.com

インストール

Releases · yukirin/goyuki · GitHubからバイナリをダウンロードするか go get する

$go get github.com/yukirin/goyuki

使い方

  • yukicoderにログイン(twitter,github)した状態でブラウザのcookieから REVEL_SESSIONの値を取り出し、GOYUKI環境変数にその値を設定する
$ export GOYUKI=12345hogehoge # zshの場合
  • テストケースを取得する
$ goyuki get 337(例 問題No.337 P versus NP)
  • テストを実行する
    コンパイル後、テストが実行される
$ goyuki run 337 sample.go
  • 出力結果(例) f:id:yuki_rinrin:20160205214336j:plain:w550

対応言語

Evernoteのエクスポートデータ(.enex)をPocketがインポートできる形式へ変換

EvernoteからPocketへデータを移行するには、Evernoteがエクスポートしたデータを直接インポートできないので、一度Instapaperがエクスポートする形式へ変換する必要があるみたい

  1. Evernoteのノートブックを.enexファイル形式でエクスポートする
  2. E2P(下記のファイル)で.enexからInstapaperがエクスポートする形式へ変換
  3. できたファイルをPocket: Import InstapaperからPocketへインポートする

Evernoteのエクスポートデータ(.enex)をPocketがインポートできる形式へ変換