Rust で Profile-Guided Optimization やってみた

TLDR Rust で実装した Wasm インタープリタで PGO 試したら 0〜10% ぐらい速くなった Profile-Guided Optimization (PGO) とは PGO はコンパイラの最適化の手法のうちの1つですが,プログラムを実行した後に行うという点で少し他と異なります. まずは普段ど…

GitHub Action で Vim や Neovim を簡単にインストールできる action-setup-vim をつくった

今週ちまちまと git-messenger.vim や clever-f.vim の CI を GitHub Actions に移行していました.毎回 Vim プラグインの CI のために Vim や Neovim のセットアップを書くのが面倒なのと,Windows 上で Vim や Neovim を入れるのが(Powershell に不慣れな…

GitHub Actions の JavaScript Action を TypeScript で書いた

GitHub Action を TypeScript で作成したので,覚え書きがてらどうやって作ったかについて書きます. github-action-benchmark という Action をつくりました. 紹介記事:継続的にベンチマークを取るための GitHub Action をつくった Action とは 今年9月に…

継続的にベンチマークを取るための GitHub Action をつくった

今年9月に GitHub Action v2 がリリースされました.GitHub Action は GitHub が提供する CI/CD サービスです. 既存のサービスと大きく違う点は,処理を汎用的に Action として切り出して再利用できることです. 例えば,GitHub からのリポジトリのクローン…

ターミナル用 UTF-8 テキストエディタを Rust でスクラッチからつくった

言語処理系やテキストエディタなどのプログラミングツールが好きなので,その周辺を趣味で触ってます.Vim を Wasm にポートするために Vim の実装を読んだりはしているのですが,フルスクラッチでテキストエディタをつくったことはありませんでした. 今年…

目黒.vim #16 に参加して Vim script に const を実装するパッチを書いた

Vim

あいにくの雨でしたが,Meguro.vim #16 に参加しました. 「この雨の中 Vim のもくもく会に来た者たちだ.面構えが違う」 #megurovim— ドッグ (@Linda_pp) June 15, 2019 目黒.vim は Vim に関したり関しなかったりする作業をするもくもく会で,今回は Vim …

Vim on Wasm on Web Worker on Browser with Atomics

この記事は以前の rhysd.hatenablog.com の続編で,WebAssembly (Wasm) にポーティングした Vim の話です. github.com TLDR Wasm にコンパイルした Vim のコードを Web Worker(ワーカスレッド)の中で動かすことで,メインスレッドで行われるユーザのイン…

Neovim のフロートウィンドウ機能を使って git-messenger.vim をつくりなおした

git-messenger.vim は,カーソル下の行のコミット情報を表示する Vim プラグインです. github.com 他所のプロジェクトのコードや OSS のコードを読んでいると,なぜこうなってるんだろう?と思うことがよくあります.コミットメッセージをまともに書いてい…

Rust 公式 linter の clippy に新しいルールを実装した

Rust 公式の linter,clippy に新しいルールを足すプルリクを出してマージされた時のメモです. github.com dbg! マクロ Rust 1.32 で dbg! というマクロが追加されました. これは値を1つ引数にとってその値を返すマクロで,受け取った値とソースコード上で…

Vim の構文ハイライトでクリスマスツリー🎄を飾ってメリクリする

Vim

Vim Advent Calendar 2018 の24日目の記事です.昨日は Kaoriya さんのVim に VOICEROID で喋らせたでした. もうすぐクリスマスなので,クリスマスツリーを飾りたいと思います.ただ飾るだけだと Vim のネタにならないので,Crystal や Wast,vim-gfm-sytna…

GitHub Actions (beta) が使えるようになったので調査した

GitHub Actions Open Beta に申し込んで1ヶ月以上経ち,ようやく使えるようになったみたいなので実際にどう使うのか調査してみたメモ. Beta 版は GitHub のプライベートリポジトリにしか使えないため,公開リポジトリに使うにはもう少し待つ必要がありそう…

Rust プロジェクトで自動で Git hook をセットできる cargo-husky をつくった

npm でよく使っている husky というツールがあります.これは npm install などを hook して Git hook を自動でセットしてくれるツールで,リモートにプッシュする前のチェックを強制してくれます.もちろん CI でもテストを回しているのですが,プッシュ前…

Vim に WebAssembly のテキストフォーマットのサポートを入れた

Vim に WebAssembly のテキストフォーマット (wast) の対応を入れ,同時に filetype=wast で使われるファイルのメンテナになりました. Wasm のテキストフォーマットとは WebAssembly にはバイナリ形式とテキスト形式の2つのフォーマットがあります.Wasm は…

Vim を WebAssembly に移植した

久々のブログです. 6月ぐらいにWebAssembly の仕様をざっくり読んだので,なんか WebAssembly でやりたいなと思って,Vim を WebAssembly に移植してブラウザで動くようにしてみました,という話です. github.com 多分実物を見ていただくのが一番早いので…

React で Octicon を使うためのコンポーネントライブラリ書いた

Octicons は GitHub がオープンソースで配布しているアイコンセットです. Octicons は以前はウェブフォントを利用してつくられていたのですが,最新のnpm の octicons パッケージの中身を見る限りでは,最近では SVG での配布になったようです. 以前は cla…

GitHub のプルリクで blame する ghpr-blame.vim つくった

先日 kazuho さんが git blame でプルリクを表示するスクリプトをつくってらっしゃって,便利そうだったので Vim プラグインをつくってみました. ファイルの各行がどのプルリクで変更されたかを確認し,気になるプルリクはその場で詳細を確認することもでき…

Goのコマンドラインツールをセルフアップデートするためのライブラリつくった

突然ですが,Goでコマンドラインツールを書く時,ツールの配布はどうしているでしょうか? go get でインストールできるようにする GitHub 上にリリースして,ダウンロードして使ってもらう システムのパッケージマネージャ(Homebrew など)を使う などがメ…

Vim script で ES6 Promise 実装した

Vim Advent Calendar 2017 の19日目の記事です.Vim script で ES6 の Promise を実装した話を書きます. もし Vim script が分からなくても,最後の章「Promise の実装の詳細」は Vim script とは独立した内容になっているので,Promise の実装に興味があれ…

OCaml でも採用されているレベルベースの多相型型推論とは

言語実装 Advent Calendar 2017 の16日目の記事です. GoCaml という OCaml のサブセットな言語を実装していて,多相型の型推論を実装するために論文を読んだり OCaml の実装をちょっと追ったりしていたので,その知識を整理する意味でこのエントリを書いて…

Vim 進捗旅行

Vim

木曜日午後〜日曜日午前中の4日間,Vim コミュニティつながりの知人と旅館に泊まり込んでもくもく作業する合宿的な旅行に行ってきました. 当日の様子や旅館の便利情報についてはすでにブログ記事にまとめられているのでそちらを読んでいただいて,この記事…

LLVM IR の alloca 命令のつかいかた

LLVM IR の alloca 命令の使い方について,リファレンスマニュアルに載ってない注意点があったのでメモがてら書きます. alloca 命令とは スタック上にメモリを確保し,確保した領域の先頭へのポインタを返します.スタック上にメモリを割り付けることでアド…

Electron に Mac タッチバー API が実装された

個人的に気になっていた Electron のタッチバーサポートがついに master にマージされました. 実装は下記の PR で行われ,@MarshallOfSound さんの初期実装と @kevinsawicki さんのブラッシュアップで実装されました. https://github.com/electron/electro…

GitHub のハイライトがおかしい時のなおしかた(GitHub のハイライトの仕組み)

GitHub でコードを見ていると,ハイライトがおかしいのを見つけることがたまにあります.ここではその直し方を紹介します. 次の2パターンを想定しています. 自分のリポジトリのあるファイルのハイライト言語がおかしい 構文ハイライトが間違えている,言語…

Travis CI で Linux (x86_64, i686, aarch64) 向け(とついでに macOS 向け)に Rust で書いたツールのバイナリをリリースする

git-brws のリリース で微妙に Travis CI 上の rust 環境でハマったのでメモ. 前提として,cargo build でビルドできるものとします.Travis の環境はツールチェーンが古いと困るので Ubuntu 14.04 を使ってます.今回は下記の環境向けのバイナリをビルドし…

2016 年につくったやつ一覧

GitHub contributions グラフを続けるのも4年目に入っていて,来年も無理しない程度に続けて行こうかなぁと思ってます.今年は中盤あたりイマイチだったけど後半結構時間ができたので例年通りぐらいになりました. 今年もぼちぼち使っているツールのためのプ…

フルスクラッチからさいきょうの Vim カラースキームをつくろう!

この記事はVim Advent Calendar 2016 その2の18日目の記事です.その1のほうにも記事を書いたのですが,こっちもまだ空いてたので埋めがてら書きます. その1のほうではかなり非実用的な記事を書いてしまったので,こっちでは比較的実用的なことを書きます.…

Electron アプリをつくる時に便利なパッケージ

本記事では,僕が Electron アプリをつくる上で便利だったり,ほしかったのでつくったりしたパッケージを紹介します.

ELVM で C コンパイラをポーティングしてみよう(Vim script 編)

Vim C

この記事は Vim アドベントカレンダー 2016 の2日目の記事です. 先々月に ピュア Vim script な C コンパイラを公開しました. github.com この記事では 8cc.vim で用いた,ELVM を利用して 8cc という C コンパイラを Vim script にポーティング(移植)す…

GitHub Flavored Markdown をもっと Vim でハイライトする vim-gfm-syntax つくった

Vim にはデフォルトで Markdown のドキュメントをハイライトするためのファイルが同梱されています.基本的にはこれで満足なのですが,僕が書くのはほぼ GitHub Flavored Markdown(GFM: GitHub で使える拡張された Markdown 記法)なので,一部ハイライトさ…

ErgoDox EZ を使い始めて1ヶ月ぐらい経った

タイムラインで購入している人がちらほらいて,評判も良好みたいなので ErgoDox EZ というキーボードを試しに買ってみることにしました.購入したのは無刻印+アームレスト付きの赤軸です. ErgoDox EZ (画像は公式サイトから) とりあえず購入して1ヶ月経ち,…