Rustでエディタを書いている

2022/1からRustでエディタを実装している。 なぜエディタをかいているか? プログラマとしての成長の鈍化を感じていた時に、過去に所属した企業で教えてもらった「プログラマをやっていくなら、OS・エディタ・コンパイラは一度作ってみると良い」とアドバイスを思い出した。 これまではあまり気にしていなかったが、実際に調べてみると自分の知らないことも多く、またチュートリアルやドキュメントも多くあり、意外と実装できることがわかって楽しくなった。 何を元に実装しているか? 自分は「Kilo」というエディタのチュートリアルを参考にしている。 Build Your Own Text Editor ターミナルで動くエディタをC言語で実装する方法が説明されている。 外部ライブラリを使ったりはせず、本当にC言語のみで実装する。 基本的な編集機能からファイルの読み込み、検索やシンタックスハイライトまで、1000行程度の実装でありながらエディタとして最低限の機能は実装する。 また、シンプルな実装なので他の言語にも移植しやすいらしく、GolangやRustで実装されているリポジトリも検索すると見つかる。 なぜRustで実装しているか? まず、「ただ写経しただけでは記憶に残りにくいから」と言うのが大きい。 全く同じものを何度も繰り返すのはしんどいので、なにか変化を起こしたくてC言語以外で実装する事を考えた。 その上でなぜRustかというと、「書きたかったから」と言うのが大きい。 モダンだし、流行ってるし。 また、OSやコンパイラなどの実装にRustは向いている(と聞いた)ので、自分の興味の方向性にもあっていると思った。 自分が実装しているリポジトリ: piruty/rust_editor: Kilo editor in rust

February 13, 2022

MonkeyをRustで実装し始めました。

Rustで「Go言語でつくるインタプリタ」の実装をはじめました。 Golangでの写経はしたことありましたが、他の言語で書き直すのははじめてです。 正直、もっと簡単に移植できるかと思いましたが、結構かかっています。 他にも同じことを考えた人がいるため参考には困らないですが、Rustの文法や仕様にはなかなか慣れないですね… 参考記事 [Rust] 『Go言語でつくるインタプリタ』Rustで読了 - Qiita Uminchu618/rust-monkey: Writing An Interpreter In Go(Go言語でつくるインタプリタ)をRustで

June 17, 2021

chronoクレートを使う

Rustアプリで時間を取得したかったので、chronoクレートを使ってみた。 外部クレーなので、インストールして使用する。 $ cargo add chrono 時間関連の処理が色々実装されているらしいが、今回はローカルの現在時刻が欲しかったので以下のように実装。 use chrono::Local; fn main() { println!(Local::now().format("%Y-%m-%dT%H:%M:%S")); } 参考 chrono - Rust Rustで日時を扱う - Qiita

May 1, 2021

cargo-editをインストールした

Cargoプロジェクト内でパッケージの追加をかんたんに行いたかったのでcargo-editをインストールした。 $ cargo install cargo-edit これで、add, rm, upgradeがサブコマンドとしてcargoに追加される。 詳細は --help で確認できる。 # add: パッケージのインストール # バージョンを指定しなければ最新がインストールされる $ cargo add reqwest # オプションが色々あり、featureも指定可能 $ cargo add tokio --features full # upgrade: Cargo.tomlで管理しているクレートを更新する $ cargo upgrade # rm: クレートを削除する $ cargo rm reqwest 参考 cargo-edit - crates.io: Rust Package Registry

April 29, 2021

RustでHello World

RustでHello Worldするまで。 最近はasdfを使用しているので、rustもこれでインストールした。 $ asdf plugin-add rust $ asdf install rust latest # このときは1.15.0がインストールされた $ asdf reshim rust $ asdf global rust 1.15.0 $ cargo -V 適当にディレクトリを作って main.rs ファイルを作成する mkdir rust_hello-world cd rust_hello-world vim main.rs fn main() { println!("Hello World"); } 作成したrustファイルをコンパイルして実行する。 $ rustc main.rs $ ./main Hello World 参考 Hello, World! - The Rust Programming Language 日本語版

April 29, 2021

来年の言語はRust

来年はRustを学ぶことにした。 Rustを選んだ理由は、 比較的モダン 静的型付け コンパイル言語 低レイヤの記述も可能 というあたり。 以前から知り合いに勧めてもらっていたが、そのときはまだJulia熱があったので手を出してなかった。 JuliaとRustの特徴はちょうど反対だなと思い、新しく学ぶにしても楽しそうだというのもある。 今は教材を探しているところ。 日本語のRust本も出てきているし、Rust公式の解説本を翻訳してくれているサイトもあるので、まずはこのあたりから手を付けてみる。 せっかく低レイヤも書けるので言語やOS、エディタの自作もやってみたい。

December 6, 2020