ARMOWATTA!

さあ、atomを復活させる時が来たぞ!

エッセンシャルRust

環境

IDE(or editor)

  • RustDT
  • VS + VisualRust
  • VS Code + RustyCode

RustDT

  • シンボリックデバッガ有り
  • tabキー入力時の文字の挿入バグってる(未実装?)
  • ドキュメント対応してない
  • declaration対応してない
  • definitionのみ
  • シンタックスハイライト弱い
  • JDTの様なon-the-fly error report有り
  • cargoのタスクの対応弱い

VS Code + RustyCode

  • シンボリックデバッガ? 何それ美味しいの?
  • ドキュメントはホバー
  • goto define有り
  • RustDTよりシンタックスハイライトまし
  • 基本的なcargoのタスクに対応
  • そもそも自前のタスクランナー有り

VS + VisualRust

知らん。

indexのミラーやローカルリポジトリを使ったCargo.lock云々

indexのリダイレクト

リダイレクトするだけならすでにある様子

https://github.com/rust-lang/cargo/pull/2361

cargo-vendor

違いはreadme.md読んで。ミラー作る手段がないので試せない。

https://github.com/alexcrichton/cargo-vendor

cargo-local-registry

ローカルでミラーを管理するサブコマンド。最近ビルド通ってないので試せない。

https://github.com/alexcrichton/cargo-local-registry

オンラインでミラー作る方法

見当たらない。

ライブラリまわり

外部crateにコアライブラリばかりなのはお察し。まだ時期ではない。

標準のコレクションの代替

ここにあるが、ここには代替以外にも標準に足りてないコレクションもあり。
なんでコレクションの代替をわざわざ作るかはソースコード読んでお察し。

https://github.com/contain-rs/

concurrent collections

crates.ioで検索

スレッドプール

crates.ioでthread poolで検索。
work-stealing(fork/join) thread poolはここhttps://github.com/faern/forkjoin

url

Servoのサブプロジェクト
https://github.com/servo/rust-url

キャラクタエンコーディング

https://github.com/lifthrasiir/rust-encoding

フォントラスタライザ

テストフレームワーク

その他

rustはIO弱いので注意

ライブラリ足りなかったり、ライフタイム終わる時dropでエラーを握りつぶしたり。
このため、握りつぶされるとまずい時はリージョン超える前に自前で処理すること。

localeなんてねぇ

キャラクタエンコーディングが標準でない。キャラクタエンコーディングが標準でないのでjavaのReaderに相当するものがないのでテキストの外部化が面倒くさい。localeもないのでi18nとl10nも面倒くさい。という三重苦。

localeが標準でないということは当然localeで挙動が変わるようなapiもない。外部crateでlocaleがあるが標準ではないので統一的にlocaleに対応したapiもない。

参照

rust lang使うならcargoに気をつけよ、という話

cargoはパッケージマネージャ+タスクランナーでbuild toolではないのでbuild toolとしてみるとCargo.lockまわりの挙動のせいで使い物になりません。
たとえば、ネットワークエラーが出たというケースだけでなく、プライベートなforkを依存関係に追加しようとするときや、他言語と一緒に利用するためにcargoをラップするbuild scriptを書くなど、もちろん、standaloneでビルドしようとしても──これらは余計にindexを見に行くせいで上手く行きません。

issuesを追っているとアーキテクチャ的にここを変える気はないようで状況は変わりません。cargo vendorというローカルに中央リポジトリのミラーを用意してそれを見に行くサブコマンドがありますが、まだpocですし、まだ、crate.ioのmirrorを作る手段がありません。(vendorはmirrorを見に行くだけでmirrorは別に作る必要がある。)
それと、これはcargo側の作業とcrate.io側の作業が必要なので、いつ実になるかもわかりません。

冒頭で述べたようにcargoはパッケージマネージャ+タスクランナーでbuild toolではありません。ビルド時にこれが問題になることもあるでしょう。
また、ネットワークエラーに弱いということはmvnと同じ欠点を備えていますが、mvnはマルチプロジェクトを上手くやるために依存関係を解決するのに使われますが、cargoはパッケージマネージャ+タスクランナーなのでそのような面でも弱いです。プロジェクトが巨大になればなるほど巨大な獣を飼いならすメリットが有るmvnとは違い、Cargo.lockまわりの挙動のためにonline環境に依存しているcargoにはそのようなメリットはありません。

https://github.com/rust-lang/cargo/issues?utf8=%E2%9C%93&q=is%3Aissue%20offline