yhara.jp

Recent Posts

MacのサービスでRubyスクリプトを動かす

2021-04-10
Tech

Macの「サービス」からRubyスクリプトを起動する手順。

まず以下を参考に、Automator.appを起動し、「シェルスクリプトを実行」を登録する。

入力の引き渡し方法は「引数として」を選択。

シェルスクリプト部分を以下のように変更。

(more...)

tmux [exited]

2021-04-09
Tech

qmkの環境構築をしてたら、tmuxが起動しなくなった。

/Users/yhara % tmux
[exited]
^[[?62;4c^[[ITERM2 3.3.12n%

brew upgradeを^Cで止めたりしたせいか…?と思ったが、ps aux | grep tmux してみたら起動中のtmuxが一つあった。

killall tmux で当該プロセスを止めたら無事起動できるようになった。(参考)


lldbでLLVMプログラムをデバッグする

2021-02-28
Tech

Rust + LLVMで自作プログラミング言語Shiikaを作っているのだが、開発中に遭遇するエラーには以下の種類がある。

  1. rustcがエラーを吐く(=.rsに問題がある)。
  2. rustcは通ったが、Shiikaのエラーが出る(=.skに問題があるorバグで問題があると誤判定している)。
  3. rustcは通ったが、llcがエラーを吐く(=.llの生成に問題がある)。
  4. llcが実行ファイルを生成したが、実行すると期待通りに動かない。

一番面倒なのはもちろん最後のケースだが、これもさらにいくつかの種類に分けられる。

  1. 期待通りに動かないが、最後まで実行はできる(=Shiikaで書いたプログラムに間違いがある)。
(more...)

How to colorize cargo's output with a pager

2021-02-13
Tech

tl;dr This worked for me (iTerm2 on Mac)

$ cargo --color always build | less -R 2>&1

Problem

When I use lv (or bat) to read the output of cargo build, the output is not colored, even with --color always (i.e. $ cargo --color always build |& lv).

(more...)


Shiika進捗2020

2020-12-04
Tech

このエントリは言語実装 Advent Calendar 2020の4日目のエントリです。昨日はmitsuchiさんのLLVM の Kaleidoscope を育てながら作るでした。

言語実装アドカレ、今年は全日埋まってるんですねえ。処理系Slackのおかげでしょうか?すごいなあ。

Shiikaは私が作っている、Ruby風の文法を持った静的型付けプログラミング言語です。Rubyのような手触りを保ちつつ、型をベースにしたプログラミングを楽しめる言語を目指しています。数年前から開発していて、昨年夏からはRust + LLVMによる処理系実装を始めました。

本記事では今年の主な成果を振り返ってみようと思います。

サンプルの追加

(more...)

28キーのミニマルなキーボード、Alpha

2020-12-02
Tech

このエントリはキーボード #1 Advent Calendar 2020の2日目の記事です。前日はskyhigh_worksさんの【QMK】VSCodeでKeycodeの補完を有効にする - 天高工房でした。

本記事では28キーのミニマルなキーボード、Alphaの紹介をします。一見とっつきにくそうですが、とっても楽しいですよ!

Alphaとは

Alphaはキー数がわずか28しかない小さなキーボードです。いわゆる30%キーボードの一種ですが、代表的な30%キーボードであるGherkinでさえ30個のキーがあるのに、そこからさらに2つキーが減っています。

(more...)

Go Language Specification輪読会に参加した

2020-10-16
Tech

たまたま時間の都合ができたので、前から気になっていたGo Language Specification輪読会に参加してみた。今回はExpressionsの冒頭を読んだ。

面白かったのは、 if u = User{}; true { のようにifのあとに中括弧を書くとエラーになるという話。

Goの中括弧はブロックを示す場合と、composite literalを示す場合がある。のだが、上記の場合はどちらなのか決定できない。そのため、ifの直後はパーサが特別なモードになっていて、中括弧は必ずブロックと見なすらしい。その結果、上記は(EBNF上はvalidにもかかわらず)エラーになるというわけ。

ちなみに以下のようにまぎらわしい箇所を括弧でくくってやると通る。

if u = (User{}); true {

CやJavaScriptではifのあとに括弧が要るからこういう問題は起こらない。Goでは括弧をなくした代わりにパーサが状態を持つようになったというわけ。

Rubyではこういうのが無数にあるんだけど、Goにもあるのが意外で面白かった。



VimでRustのLanguage Serverを使う

2020-07-14
Tech

VimでRustのLanguage Serverを使う手順。

rlsまたはrust-analyzerを入れる

rlsはrustupでインストールできる。

rustup component add rls rust-analysis rust-src

rust-analyzerはrlsより新しいのだが、まだrustupではインストールできない模様。バイナリ配布があるのでそれをダウンロードしてPATHの通ったところに置く。

(more...)

Posts

(more...)

Articles

(more...)

Category

Ads

About

About the author