はじめに
これは、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のサンプルプロジェクトでは/*! ~~~ */で囲まれた部分がありますが、これは必須ではなく省略可能です。