Есть несколько вещей, которые я не могу сделать из-за своей зависимости от онтологии-шороха:
cargo clippy
требует, чтобы мои источники были новее, чем моя цель, или нет сообщать обо всем - так что он проходит через мои зависимости. cargo tarpaulin
хочет применить все через полную перестройку, даже если мне не нужна информация о покрытии для моих зависимостей (и при запуске он перезаписывает вещи в target/debug
, тогда cargo build
тоже хочет выполнить полное перестроение) grcov
не работает, потому что есть какой-то ящик -sys
, который не может быть собран, поэтому я не могу получить покрытие кода из него.
Из-за этого сценария сборки и других зависимостей (я думаю, serde), cargo build
занимает почти четыре минуты.
В идеале я бы сказал Cargo / Rust «это двоичный двоичный объект, просто используйте его» вместо сожаления каждый раз, когда я строю.
Я пытался:
- определите, могу ли я упаковать двоичные файлы библиотеки и попросить Car go просто использовать их вместо восстановления.
- Выполнить
cargo build -p my_package
, чтобы попросить Car go просто оставить все встроенное в target / и используйте его. export OUT_DIR=
за пределами цели / - я надеялся, что смогу исправить файл build.rs, чтобы просто скопировать предварительно собранные данные обучения на месте. Автомобиль go, похоже, не распознает мой OUT_DIR
, и похоже, что пакет выполняет тяжелую работу во время сборки с выходными данными. cargo vendor
и пытается отсеять некоторые зависимости. Автомобиль go замечает, что я зациклен на продаваемом коде и по праву расстроен. [patch."https://github.com/snipsco/rustling-ontology"]
Я пытался раскрутить некоторые зависимости в локальной копии этого пакета, но другим пакетам нужны данные, которые я ' я отскочил, и в какой-то момент я понял, что это не сработает. tar cvf cached-target.tar target/
и распакуйте правильный кеш, как мне это нужно. Это самое близкое к мне рабочее решение. - [ ОБНОВЛЕНО ] Используйте
sccache
, но кажется, что sccache достаточно «умен», чтобы требовать перестройки, так как есть build.rs
связанный.
Я понимаю, что есть причины , почему в зависимости от предварительно скомпилированных библиотек может сломаться; но буквально это та же оболочка в том же каталоге на том же ноутбуке, с тем же временем загрузки системы, что и во всех предыдущих сборках, которые я делал; есть ли выпускной клапан для этого?
Я использую Rust 1.44.0-nightly 2020-04-09
cargo tree
соответствующих зависимостей (обсуждение следует далее):
my_example_app v0.1.0
├── snips-nlu-lib v0.65.6 (git+https://github.com/snipsco/snips-nlu-rs#88a047aacf40f3316a9cbdde850ea1798af39c2a)
<some dependencies cut>
│ ├── base64 v0.10.1
│ ├── serde v1.0.106 (*)
│ ├── serde_json v1.0.51 (*)
│ ├── snips-nlu-ontology v0.67.1 (git+https://github.com/snipsco/snips-nlu-ontology?tag=0.67.1#194f99d87fa506ef1175b7dce70841c389940a29)
│ │ ├── failure v0.1.7 (*)
│ │ ├── serde v1.0.106 (*)
│ │ ├── serde_derive v1.0.106 (*)
│ │ └── serde_json v1.0.51 (*)
│ ├── snips-nlu-parsers v0.4.3 (git+https://github.com/snipsco/snips-nlu-parsers?tag=0.4.3#8cfdae50437732fcf906af90626c8db196729d30)
│ │ ├── failure v0.1.7 (*)
│ │ ├── gazetteer-entity-parser v0.8.0 (git+https://github.com/snipsco/gazetteer-entity-parser?tag=0.8.0#0e117818081782d1f295376f4cb3e1bb084e397c)
│ │ │ ├── failure v0.1.7 (*)
│ │ │ ├── fnv v1.0.6 (*)
│ │ │ ├── rmp-serde v0.13.7
│ │ │ │ ├── byteorder v1.3.4 (*)
│ │ │ │ ├── rmp v0.8.9
│ │ │ │ │ ├── byteorder v1.3.4 (*)
│ │ │ │ │ └── num-traits v0.2.11 (*)
│ │ │ │ └── serde v1.0.106 (*)
│ │ │ ├── serde v1.0.106 (*)
│ │ │ └── serde_json v1.0.51 (*)
│ │ ├── itertools v0.8.2 (*)
│ │ ├── lazy_static v1.4.0 (*)
│ │ ├── regex v1.3.6 (*)
│ │ ├── rustling-ontology v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ ├── rmp-serde v0.14.3
│ │ │ │ ├── byteorder v1.3.4 (*)
│ │ │ │ ├── rmp v0.8.9 (*)
│ │ │ │ └── serde v1.0.106 (*)
│ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892)
│ │ │ │ ├── failure v0.1.7 (*)
│ │ │ │ ├── fnv v1.0.6 (*)
│ │ │ │ ├── rustling-core v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892)
│ │ │ │ │ ├── failure v0.1.7 (*)
│ │ │ │ │ ├── regex v1.3.6 (*)
│ │ │ │ │ ├── serde v1.0.106 (*)
│ │ │ │ │ ├── smallvec v0.6.13 (*)
│ │ │ │ │ └── string-interner v0.7.1
│ │ │ │ │ └── serde v1.0.106 (*)
│ │ │ │ ├── rustling-ml v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892)
│ │ │ │ │ ├── failure v0.1.7 (*)
│ │ │ │ │ ├── fnv v1.0.6 (*)
│ │ │ │ │ └── serde v1.0.106 (*)
│ │ │ │ └── serde v1.0.106 (*)
│ │ │ ├── rustling-ontology-grammar v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ ├── rustling-ontology-de v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ │ ├── chrono v0.4.8 (*)
│ │ │ │ │ │ ├── derive-new v0.5.8
│ │ │ │ │ │ │ ├── proc-macro2 v1.0.10 (*)
│ │ │ │ │ │ │ ├── quote v1.0.3 (*)
│ │ │ │ │ │ │ └── syn v1.0.17 (*)
│ │ │ │ │ │ ├── enum_primitive v0.1.1
│ │ │ │ │ │ │ └── num-traits v0.1.43
│ │ │ │ │ │ │ └── num-traits v0.2.11 (*)
│ │ │ │ │ │ ├── failure v0.1.7 (*)
│ │ │ │ │ │ └── vec_map v0.8.1 (*)
│ │ │ │ │ └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ ├── failure v0.1.7 (*)
│ │ │ │ │ ├── log v0.4.8 (*)
│ │ │ │ │ ├── regex v1.3.6 (*)
│ │ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ │ └── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ ├── rustling-ontology-en v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ │ └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ ├── rustling-ontology-es v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ │ └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ ├── rustling-ontology-fr v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ │ └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ ├── rustling-ontology-it v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ │ └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ ├── rustling-ontology-ja v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ ├── regex v1.3.6 (*)
│ │ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ │ └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ ├── rustling-ontology-ko v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ ├── failure v0.1.7 (*)
│ │ │ │ │ ├── regex v1.3.6 (*)
│ │ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ │ └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ ├── rustling-ontology-pt v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ │ └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ ├── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ └── rustling-ontology-zh v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│ │ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ │ └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ ├── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ └── serde v1.0.106 (*)
│ │ │ [build-dependencies]
│ │ │ ├── rmp-serde v0.14.3 (*)
│ │ │ ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│ │ │ ├── rustling-ontology-grammar v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ ├── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│ │ │ └── serde v1.0.106 (*)
<more dependencies cut>
rustling-ontology
вводит rustling-ontology-grammar
, затем ряд языковых спецификаций c ящиков. Ящик имеет build.rs
, который обучает языковой модели для каждого из доступных языков. Я полагаю , что затем берет вывод этого и использует serde для генерации реального кода Rust, который компилируется во время сборки. Один этот процесс занимает несколько минут и имеет ряд зависимостей * -sys.
Проблемы:
grcov
не работает с некоторыми из зависимостей sys в rustling-ontology
; это дает мне ошибки при компиляции C кода. Я уверен, что я мог бы go писать в GitHub, но правда в том, что я не хочу, чтобы grcov охватывал что-либо, связанное с rustling-ontology
(или любым из этих поддеревьев пакетов).
cargo tarpaulin
/ cargo build
/ cargo build --release
/ cargo clippy
. Clippy требует полной перестройки (из-за ошибок) для предоставления полезной информации. Поскольку я не собираюсь устранять какие-либо проблемы с ворсом, я не хочу, чтобы Clippy набрал от go до rustling-ontology
, и мне придется ждать несколько минут, пока он переобучится и снова будет работать. Брезент также полностью перестраивает, и кажется, что он иногда пересекает провода с отладочной сборкой, поэтому простое получение кода на модульных тестах занимает минуты. Использование -p
для охвата определенного пакета c не помогает.
Воспроизведение
Вы заметите, что rustling-ontology
требуется довольно много времени для сборки, если вы запустите:
$ git clone https://github.com/snipsco/snips-nlu-rs
$ cd snips-nlu-rs
$ cargo run --example interactive_parsing_cli data/tests/models/nlu_engine
Я думаю, в двух словах, я хотел бы, чтобы некоторые библиотечные зависимости вводились только как предварительно скомпилированные двоичные файлы в мой исполняемый файл.