Yet another Rust Firebird driver (firebirust) status [Rust]
これは、Firebird Advent Calendar 2022 https://qiita.com/advent-calendar/2022/firebird の 13日目の記事です
昨年、習作として書いた Rust の Firebird ドライバー
https://nakagami.blog.ss-blog.jp/2021-12-23
について引き続きバージョンアップしてリリースしてます。
一例として、
こういうふうに、引数をマクロ呼び出しで指定したものが
こんなふうに、より自然に書けるようになりました。
それにしても、たまに書く Rust は難しいです。
昨年、習作として書いた Rust の Firebird ドライバー
https://nakagami.blog.ss-blog.jp/2021-12-23
について引き続きバージョンアップしてリリースしてます。
一例として、
conn.execute( "insert into foo(a, b, c, h) values (?, ?, ?, ?)", params![1, "a", "b", "This is a pen"], ) .unwrap();
こういうふうに、引数をマクロ呼び出しで指定したものが
conn.execute( "insert into foo(a, b, c, h) values (?, ?, ?, ?)", (1, "a", "b", "This is a pen"), ) .unwrap();
こんなふうに、より自然に書けるようになりました。
それにしても、たまに書く Rust は難しいです。
Rust 難しい [Rust]
プログラミング言語の中で Rust が人気らしい。
Stack Overflow の Developper Survery ではここのところ毎年、人気の言語としてあがっている。
信じられない。
Rust で習作を書いているが、とにかく書くのが難しい。
エラーメッセージが親切なので、慣れてくるとコンパイルエラーを直すのは以前よりできるようになってきた。
コンパイルが通ったら思ったように動くことが多い。
でも、やっぱり難しい。
いちど Python で書いたものを、 Rust で書き直していて、動きがおかしい時は Python の動作と比較している。
いきなり Rust で書き始めてスラスラ書くのはまだできなさそう。
自分は、まだなってないけど
「あ、ここ参照を渡すんじゃダメじゃん」
とか、データ構造を間違えてたときなんかに、大々的に書き直しとかにはならないのかな?
確かに、C++ 書くよりは安全で書きやすいのかもしれないが、
みんながみんな C++ を使う必要がある分野のプログラミングしてるわけじゃないないし、
ごく一部の人に人気なのはわかるけど、今月の TIOBE のプログラミング言語のランキングで 24位なのは高すぎると思う。
https://www.tiobe.com/tiobe-index/
Python の C拡張を C や C++ で書くのは難しいけど、 Rust + PyO3 ならアリかなと思って、今、自分は頑張っているが
仕事で、チームで開発するために人を集めるのはかなり難しいんじゃないかと思う。
(逆に、書ける人が限られるので、集められたら優秀な人ばっかりになるってことあるのかな)
もしかして、世の中のプログラマーの皆さんは、僕よりずっと頭がいいのかな
Stack Overflow の Developper Survery ではここのところ毎年、人気の言語としてあがっている。
信じられない。
Rust で習作を書いているが、とにかく書くのが難しい。
エラーメッセージが親切なので、慣れてくるとコンパイルエラーを直すのは以前よりできるようになってきた。
コンパイルが通ったら思ったように動くことが多い。
でも、やっぱり難しい。
いちど Python で書いたものを、 Rust で書き直していて、動きがおかしい時は Python の動作と比較している。
いきなり Rust で書き始めてスラスラ書くのはまだできなさそう。
自分は、まだなってないけど
「あ、ここ参照を渡すんじゃダメじゃん」
とか、データ構造を間違えてたときなんかに、大々的に書き直しとかにはならないのかな?
確かに、C++ 書くよりは安全で書きやすいのかもしれないが、
みんながみんな C++ を使う必要がある分野のプログラミングしてるわけじゃないないし、
ごく一部の人に人気なのはわかるけど、今月の TIOBE のプログラミング言語のランキングで 24位なのは高すぎると思う。
https://www.tiobe.com/tiobe-index/
Python の C拡張を C や C++ で書くのは難しいけど、 Rust + PyO3 ならアリかなと思って、今、自分は頑張っているが
仕事で、チームで開発するために人を集めるのはかなり難しいんじゃないかと思う。
(逆に、書ける人が限られるので、集められたら優秀な人ばっかりになるってことあるのかな)
もしかして、世の中のプログラマーの皆さんは、僕よりずっと頭がいいのかな
同じメソッドで異なる型を返す(Rust) [Rust]
データーベースドライバーを Rust で書きたい、というところから
「同じメソッドを呼んだら文脈によって返す値の型(値)を変えたい。そんな動的プログラミング言語みたいなことできるの?」
と思い、これ https://nakagami.blog.ss-blog.jp/2021-08-15 を発見したんだけれども、どうもこれじゃなくて・・・
こういうふうに、結果の型をパラメータにする trait を定義するとやりたいことができるみたい。
https://gist.github.com/nakagami/d6beaf223bbee2e4d6780d7438917dd4
ライフタイム注釈も、型を制限してるようなもんだし、型パラメータ難しい。
「同じメソッドを呼んだら文脈によって返す値の型(値)を変えたい。そんな動的プログラミング言語みたいなことできるの?」
と思い、これ https://nakagami.blog.ss-blog.jp/2021-08-15 を発見したんだけれども、どうもこれじゃなくて・・・
こういうふうに、結果の型をパラメータにする trait を定義するとやりたいことができるみたい。
https://gist.github.com/nakagami/d6beaf223bbee2e4d6780d7438917dd4
ライフタイム注釈も、型を制限してるようなもんだし、型パラメータ難しい。
Rust の型変換 [Rust]
どうやら、自分がやりたいことは
「型パラメータ T が渡されきたら、 T型の値を得たい」
ということらしい。
まだ理解しきれてないが、ここらへんを見てよく考えるといけそう
https://zenn.dev/take4s5i/articles/rust-type-convertion#into%2Ffrom
後で見る
std::convert::From トレイトを実装する必要がありそう。
std::convert::Into トレイトを実装する必要があるかは、まだわかってない。
「型パラメータ T が渡されきたら、 T型の値を得たい」
ということらしい。
まだ理解しきれてないが、ここらへんを見てよく考えるといけそう
https://zenn.dev/take4s5i/articles/rust-type-convertion#into%2Ffrom
後で見る
std::convert::From トレイトを実装する必要がありそう。
std::convert::Into トレイトを実装する必要があるかは、まだわかってない。
GitHub Actions で、Rust のプロジェクトをテストする [Rust]
GitHub Actions は、使ったこと無かったのだが、重い腰をあげてやってみる。
https://github.com/nakagami/awabi の Actions タブを開くと
「Rust」の workflow が suggest されているので
「Set up this workflow」を押下「Start commit」→「Commit new file」
で master ブランチにファイル追加
awabi/.github/workflows/rust.yml が作成され、しばらくすると、テストが実行され、ステータスが Failure になる。
なるほど、ファイルが追加されたら、他になにか設定しなくても動くんだ。
rust.yml の内容から、 master ブランチの push と pull request の時に実行されるということはわかった。
Fail するのは、 mecab-ipadic-utf8 が無いからなので、 rust.yml に、 sudo apt install mecab-ipadic-utf8 を追加
https://github.com/nakagami/awabi/commit/59221cb4f47dbd6ebf016928f90388e2662a443e
これで Success するようになった。
Rust のプロジェクトは cargo test でテストするように決まっているので、 GitHub Action での CI は、このパターンでいけそう。
https://github.com/nakagami/awabi の Actions タブを開くと
「Rust」の workflow が suggest されているので
「Set up this workflow」を押下「Start commit」→「Commit new file」
で master ブランチにファイル追加
awabi/.github/workflows/rust.yml が作成され、しばらくすると、テストが実行され、ステータスが Failure になる。
なるほど、ファイルが追加されたら、他になにか設定しなくても動くんだ。
rust.yml の内容から、 master ブランチの push と pull request の時に実行されるということはわかった。
Fail するのは、 mecab-ipadic-utf8 が無いからなので、 rust.yml に、 sudo apt install mecab-ipadic-utf8 を追加
https://github.com/nakagami/awabi/commit/59221cb4f47dbd6ebf016928f90388e2662a443e
これで Success するようになった。
Rust のプロジェクトは cargo test でテストするように決まっているので、 GitHub Action での CI は、このパターンでいけそう。
よちよち Rust [Rust]
最近 Rust の勉強をしている。
Amazon の購入履歴を見ると、昨年の 8/1 に Rust の本を買ったので、最近というのは、ここ10ヶ月ということらしい。
最初から読んで、途中でよくわからなくなって挫折して、しばらく経つと前書きから読み返すということを繰り返している。
2/3くらいまでは読んで、基本的なことは理屈としてはわかってきたので、コードを書いてみているのだが、これがまた難しい。
最初は、ほんの数行書いてコンパイルして
「この、コンパイルエラーは、どうやって直せばいいんだろう・・・」
と悩んでいた。
最近ようやく、
「Rust のコンパイルエラーメッセージは親切だな」
と思える程度にまでは来た。
Stack Overflow のサーベイで Rust が、好きなプログラミング言語の1位なんだそうな
https://mag.osdn.jp/20/06/01/160000
https://www.publickey1.jp/blog/20/stack_overflow5javascriptrust.html
https://news.mynavi.jp/article/20200601-1045348/
最近、いろんなサーベイで、好きなプログラミング言語とか、今後も使いたい言語とかで、Rust が上位に上がっている。
みんながいいっていうから頑張ってるけど、みんな、こんな難しいプログラミング言語、使いこなせてるの?
実際、 OS とか、CPUの emulatorを書いてる人がいるらしく、世の中、頭の人が多いんだなぁ
Amazon の購入履歴を見ると、昨年の 8/1 に Rust の本を買ったので、最近というのは、ここ10ヶ月ということらしい。
最初から読んで、途中でよくわからなくなって挫折して、しばらく経つと前書きから読み返すということを繰り返している。
2/3くらいまでは読んで、基本的なことは理屈としてはわかってきたので、コードを書いてみているのだが、これがまた難しい。
最初は、ほんの数行書いてコンパイルして
「この、コンパイルエラーは、どうやって直せばいいんだろう・・・」
と悩んでいた。
最近ようやく、
「Rust のコンパイルエラーメッセージは親切だな」
と思える程度にまでは来た。
Stack Overflow のサーベイで Rust が、好きなプログラミング言語の1位なんだそうな
https://mag.osdn.jp/20/06/01/160000
https://www.publickey1.jp/blog/20/stack_overflow5javascriptrust.html
https://news.mynavi.jp/article/20200601-1045348/
最近、いろんなサーベイで、好きなプログラミング言語とか、今後も使いたい言語とかで、Rust が上位に上がっている。
みんながいいっていうから頑張ってるけど、みんな、こんな難しいプログラミング言語、使いこなせてるの?
実際、 OS とか、CPUの emulatorを書いてる人がいるらしく、世の中、頭の人が多いんだなぁ