docs.python.org/3.8/whatsnew/3
> Debug build uses the same ABI as release build
これまで一緒じゃなかったの?こっわ

Stabilize `!` in Rust 1.40.0 by Centril · Pull Request #65355 · rust-lang/rust
github.com/rust-lang/rust/pull

!!!!!

github.com/rust-lang/rust/pull
ジェネリック関連型(GAT)のサポート少しずつ進んでる感がある。GATのライフタイムジェネリクスを高ランクトレイト境界(HRTB)として解釈するPRが出てる。

さて、このライブラリを使って XML 用の文字列型をゴリゴリ実装していきます

procedural macros を使ったアプローチでも結局満足な形で問題が解決できていなかったので、結局構文木を型付きで弄れる程度のメリットしかないなという気持ちですね:

* custom derive を使っても、パラメータや実装対象の選択に複数パターンありうる場合のバリエーション指定が結局独自構文になって面倒
* procedural macros を使っても、型情報をうまいこと取ってくることはできない (たとえば特定の associated type がローカル型かとか public な型かとかはわからない)

今までにも github.com/lo48576/opaque_typegithub.com/lo48576/custom-slic で似たようなことをしてきたんだけど、今回は完全に declarative なマクロです

validated-slice - crates.io: Rust Package Registry
crates.io/crates/validated-sli

カスタムで定義した配列や文字列型について std のありがちなトレイトを自動的に実装するライブラリみたいなのをリリースしました🎉

何とは言わないノベルゲームしながらドキュメント書くか (自分が並列に作業できない性質であることを完全に失念している)

あとはドキュメントを書けば今書いてるライブラリひとまずリリースできそう

Rust の macro が early expansion されなくてつらいという問題と向き合っている (つらい)

declarative macro でトークンひとつずつ食っていくパーサを書くという手もあるけど、嫌すぎるな……

いっそマクロ中では諦めて型パラメータは何もかも () とかで表現することにしてもいいんだけど、ダサい……

というのも、型パラメータの区切りに使われる <> が macro 的には括弧ではないので、 <$($tt:tt)*> ができないため

impl_foo! {
AsRef<[u8]>;
AsRef<str>;
AsRef<{Custom}>;
PartialEq<{&Custom}>;
};
みたいな構文を思い付いたんだけど、どうにも declarative macro では難しそう (procedural macro ならいけるはず)

端的には
poyo!(foo, bar)

poyo!(foo, foo) や poyo!(bar, bar)
で異なる実装を利用したいんだけど、まあ declarative macro では無理っぽい (procedural ならトークン単位での判別はできるはずだけど)

AsRef<[u8]> for Custom と AsRef<Custom> for Custom を同じ構文で選択させるのが難しくて、何故なら [u8] でなく Custom がここでいろいろ弄りたい特殊な型であるという判定と分岐がマクロでは困難だから

たとえば
impl<'a> std::convert::TryFrom<&'a Inner> for &'a Custom
みたいなのとか
impl AsRef<Custom> for Custom
とか

実装したいトレイトの対象とパラメータをどううまく選択するかというのがいい感じのインターフェースにできないんだよなぁ

Show more
Mastodon

The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!