自作言語
3日目. 今日はswitch文を実装したり, リファクタリングしたりしていた. 4日前の日記でも触れたけど, 自作言語の開発にTDDを導入しているおかげてテストがあるため, リファクタリングを恐れずに実行できる. ありがたや〜.
3日目. 今日はswitch文を実装したり, リファクタリングしたりしていた. 4日前の日記でも触れたけど, 自作言語の開発にTDDを導入しているおかげてテストがあるため, リファクタリングを恐れずに実行できる. ありがたや〜.
弊部室には救急箱が備えられていて, 絆創膏や体温計, 冷却材などの救急用具が入っている. 今日はこの中に入っている殆どの救急用具の使用期限が切れていたので, それらをリプレースした. 中には3年前が使用期限のものもあって, マジか状態だった. 皆さんもおうちにある救急箱の点検を定期的に行いましょう.
昨日から引き続き課題の自作言語を作ってた. 一年前に学んだアセンブリのこと結構忘れていて, 唸りながらアセンブリを書いている状態. にゅ〜.
こわい.
そういえばnpmアカウントの2FA無効化したままだな…と思い出したので, シュュと有効化しておいた. 2FA, 導入も簡単でやっておくと安心ではあるけど, ワンタイムパスワードジェネレータのインストールされたスマホを紛失すると, 復旧が面倒なのが難点. 2FAを有効化した全サービスのリカバリーコード入力するのだるそう.
npmの2FAリカバリーコード, 見切れていて悲しい (ダブルクリックで選択してコピーすれば, 見切れてる部分もクリップボードに取れます) pic.twitter.com/xSvm5vHrlB
— mizdra (@mizdra) July 12, 2018
課題で自作言語を作っている. とはいっても一から全てやる訳ではなく, 数値演算や標準入力/標準出力などの基本的な機能の付いたテンプレートを与えられ, それをカスタマイズする形で機能を実装している.
開発にはテスト駆動開発 (TDD) を導入している. 元々, 少しずつ小さな機能を実装していくタイプの課題だったので相性も良い. 例えば do-while
文の実装では, 以下のように先にテストを書き, それから実装する.
#!/bin/bash ################################################ # do-while 文はブロックを評価した後に条件式を評価する. # 評価された値が真ならループし, 偽ならループを抜ける. ################################################ program=$(cat <<EOS main { x = 0; do { print x; x = x + 1; } while (x == 1); } EOS ) input=$(cat <<EOS EOS ) expected_output=$(cat <<EOS 0 1 EOS ) ./assert-run.sh "$program" "$input" "$expected_output"
TDDについて知りたいときは, TDD伝道師と呼ばれる和田さん訳の本を読むと良さそう. 僕はまだ第Ⅱ部までしか読みきれてないけど…
部室で作業をしていたけど, GitHubが落ちたので帰ることにした. なお, 別にGitHubを使った作業をしていた訳ではなく, ただ帰る口実にしたかっただけ.
GitHub落ちたし帰るか
— mizdra (@mizdra) July 10, 2018
C++に静的例外と呼ばれる, 実行時にコストの掛からない例外を実装する提案が出ているらしい.
記事でも触れられているけど, 関数に throws
を付けることで戻り値の型が expected<T,E>
likeに拡張されて, 静的ディスパッチが可能になるという感じみたい? これってつまりRustで言うところの Result<T, E>
相当のものだよね. Rustと違うのは, ある関数が例外を返す可能性があることを戻り値の型 (Result<T, E>
など) ではなく throws
で表現し, match式ではなくtry-catch文でハンドリングする点だという理解. 面白そう.
読んだ.
Cargoにおけるsemverについて, めちゃめちゃ詳しく書かれている. どういう変更がBreaking Changeに当たるのかがRFCで定義されていて, そこまでやるのか…という気持ち. 何かあらゆるものがRFCで定義されているような印象を持っているけど, RFCで扱う内容の範囲とかどっかで決まっていたりするのだろうか.
この記事を読んで cargo yank
というコマンドを知った. npm unpublish
と同じように, あるクレート(パッケージ)を非公開にしたい時に使うコマンドだけど, 非公開対象のクレート(パッケージ)の扱いが異なる. npm unpublish
は npm 上から完全にパッケージを削除するのに対し, cargo yank
は crates.io からクレートを削除せず残したまま, クレートへの新規の依存を禁止する. ただ, 新規に Cargo.lock
に追加できなくなるだけ. クレートに依存する既存のプロジェクトは cargo yank
された後も問題無く動作する. つまり, npmで発生していたようなleft-pad問題は発生しない. 健全で良さそう.
yosuke-furukawa.hatenablog.com
cargo yankは指定したクレートへの新規の依存を禁止するコマンド. crates. ioからクレートを削除する訳ではないので, そのクレートに依存する既存のプロジェクトでは従来通り利用できる.新規にCargo.lockに追加できなくなるだけ.
— mizdra (@mizdra) July 10, 2018
Publishing on crates. io - The Cargo Bookhttps://t.co/RzLHu48Co7
授業でFPGAを触っている. Quartusを使ってエイヤッと回路図を書いて, 使用するFPGAのモデルを指定して, 回路図の入出力と対応するFPGA側の入出力を指定して, データをFPGAに書き込む. たったこれだけで動いた. 思っていたよりも簡単にFPGAって扱えるんですね. 便利.
弊学にはサークル棟一斉清掃 *1 と呼ばれる行事があり, その名の通り様々なサークルの部室がある建物の一斉清掃を行うものである. 年に夏と冬の2回開催され, 今日はその夏のサークル棟一斉清掃日だった.
色々あって予定よりも人手が不足していて大変だったけど, なんとか4時間くらいで終えることができた. 何だかんだで弊サークルは歴史があるので, 清掃中に化石が発掘されたりする. 今回の清掃では数十年前に発行した部誌が発掘された.
サークル棟清掃で過去に発行した部誌が発掘されました! 部誌は学祭の配布物として1978年に発行されたのが始まりで, 今年でなんと40年目を迎えます!
— 電気通信大学 MMA (@uecmma) July 8, 2018
写真は左から1978年(部誌第一号), 1989年(百萬石創刊号), 2018年春(部誌第六〇号/百萬石第五二号)の部誌です. pic.twitter.com/JKiMyOQPG3
ちなみに, 部誌は弊サークルのWikiにて無料で読めるので, 是非.
読んだ.
TRPLのFirst Editionに無かった事柄を, Second Editionを読んで補っている. とりあえず今はスマートポインタ周りを学習している. Second Editionでは Rc
の役割を分かりやすい例を出して説明していて, とても良かった.
*1:正確には正式名称は「課外活動施設一斉清掃」であるが, 「サークル棟一斉清掃」と呼ばれることが多い.