はじめに
これは、AmethystというRust製のゲームエンジンのv0.12.0
からv0.14.0
への変化についてメモ的に書かれています。というのもわたしは以前Amethystについての記事を書いていましたが、リアルが多忙になった故次第に更新をやめてしまいました。最近は時間ができたため、またAmethystのバージョンが新しくなっていたこともあり最初から書いてみようと思ったのですが、ちょいちょい躓く部分があったので、同じような境遇の方向けに書いていこうと思った次第です。メモ的というのは、いつかちゃんとした記事としてまとめられたらいいなぁ...という願望です。随時更新していくかもです。
1. Cargo.lock
をいじる
現在amethyst
クレートを使用したプロジェクトをビルドする際、amethyst
が依存しているクレートの一つにquote
というものがあり、これのバージョン互換性に因る次のようなエラーが発生します(※2020/03/16時点)。
error[E0433]: failed to resolve: could not find `__rt` in `quote`
--> /~~~/.cargo/registry/src/github.com-XXXXX/err-derive-0.1.6/src/lib.rs:145:63
|
145 | fn display_body(s: &synstructure::Structure) -> Option<quote::__rt::TokenStream> {
| ^^^^ could not find `__rt` in `quote`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0433`.
error: could not compile `err-derive`.
warning: build failed, waiting for other jobs to finish...
こちらにてすでに議論されており、以下のような調査結果が出ています。
err-derive-0.1.6
でquote-1.0.2
を依存関係として使用していますが、Cargo.toml
で次のように宣言されているためにこのエラーが発生しました。[dependencies.quote]
version = "1.0.2"これは、最新のマイナーアップデートを使用することを意味するため、
quote-1.0.3
がリリースされた場合そちらを使用します。
ここでの問題は、quote-1.0.3
がquote-1.0.2
に由来する後方互換性を壊しているということです。
これを回避するために、一度ビルドを失敗させた後でCargo.lock
の依存および依存先がquote-1.0.3
となっているもののバージョンを全て1.0.2
に書き換えました。これをした後はcargo update
しないように注意。
2. ronファイルのフォーマット変わりました?
以前の記事にてronファイルの書き方の説明をしました(→こちら)が、v0.14.0
で使用する場合以前の書き方では実行時にエラーが発生します。
v0.12.0
(
title: "amethyst: 01_create_window",
dimensions: Some((500, 500)),
)
v0.14.0
DisplayConfig (
title: "amethyst: 01_create_window",
dimensions: Some((500, 500)),
)
はい。変換先の構造体の型の名前を省略できません。これはAmethyst側の変更ではなくおそらくron
クレートの仕様変更です。省略できないのは一番上の構造体の型名だけ(上記の場合DisplayConfig
)で、それ以外は省略可です。ron
クレートのGitHubのREADME.md
ではOptionalと書かれていますがおそらく修正漏れでしょう。
ちなみにAmethystのサンプルプロジェクトでは/*! ~~~ */
で囲まれた部分がありますが、これは必須ではなく省略可能です。