miniaicups icon indicating copy to clipboard operation
miniaicups copied to clipboard

Нет описания ошибок компиляции для Rust

Open stremin opened this issue 5 years ago • 8 comments

После отправки стратегии получаю ошибку компиляции, в окне "ошибки компиляции" всегда пусто, так что причина не понятна. Не удалось упешно отправить ничего, кроме совсем тривиальных одиночных файлов.

Примеры с ошибками компиляции: 15884 (.rs), 15885 (.zip)

stremin avatar Jul 21 '19 05:07 stremin

Могу ошибаться, но судя по коду, в текст ошибки попадает только stdout. Полагаю, что cargo пишет ошибки в stderr. https://github.com/MailRuChamps/miniaicups/blob/0ca41535299be57d20571bc9a856bee43bd3369b/paperio/dockers/base/sources/run.sh#L15

ciiol avatar Jul 23 '19 22:07 ciiol

Не удалось упешно отправить ничего, кроме совсем тривиальных одиночных файлов.

Там, кстати, подменяется Cargo.toml при сборке, быть может в этом дело. Я отправлял не очень сложное решение в zip архиве, у меня собиралось.

В итоге, правда, я собираю решение локально с нужными мне опциями, зависимостями и версиями. А запускаю там с помощью вспомогательного скрипта, который через execv вызывает лежащий под ногами готовый бинарник.

ciiol avatar Jul 23 '19 22:07 ciiol

В итоге, правда, я собираю решение локально с нужными мне опциями, зависимостями и версиями. А запускаю там с помощью вспомогательного скрипта, который через execv вызывает лежащий под ногами готовый бинарник.

Это скорее всего нарушение правил. @SannikovDmitry "а что так можно было"?

alex3d avatar Jul 24 '19 05:07 alex3d

Могу ошибаться, но судя по коду, в текст ошибки попадает только stdout. Полагаю, что cargo пишет ошибки в stderr.

https://github.com/MailRuChamps/miniaicups/blob/0ca41535299be57d20571bc9a856bee43bd3369b/paperio/dockers/base/sources/run.sh#L15

Спасибо, базовый докер я не заметил ) Понять бы еще, куда выкладываются при заливке одиночный файл и архив. Cargo.toml я учитываю. Пока наловчился собирать в один файл и выкладывать его (https://github.com/MarcosCosmos/cg-rust-bundler).

stremin avatar Jul 24 '19 06:07 stremin

Получается так (вдруг кому пригодится):

  1. Папка для сборки: /opt/client/solution
  2. Одиночный файл выкладывается в /opt/client/solution/src/main.rs, архив распаковывается в корень /opt/client/solution.
  3. Запускается cargo init --bin /opt/client/solution
  4. В /opt/client/solution выкладывается Cargo.toml из rust докера (https://github.com/MailRuChamps/miniaicups/blob/master/paperio/dockers/rust/Cargo.toml) и заменяет присланный/сгенерированный cargo init
  5. Запускается компиляция cargo build --release --manifest-path /opt/client/solution/Cargo.toml

В архиве исходники правильно передавать вместе с папкой src, а у меня такие эксперименты не работали, потому что код тогда еще был под edition="2018"

stremin avatar Jul 24 '19 07:07 stremin

Это скорее всего нарушение правил. @SannikovDmitry "а что так можно было"?

Сложно сказать, нарушение ли. По букве точно нет – это не попытка сломать тестирующую систему. Технически это обычное решение на условном питоне, которое использует вспомогательный файл для работы. То же самое, что собрать решение в библиотеку для питона или подключить как nif в elixir. По духу – скорее нет, это лишь самый быстрый способ запустить решение. Подменяемый Cargo.toml слишком замедляет итерации разработки и усложняет отладку.

ciiol avatar Jul 24 '19 15:07 ciiol

Тоже столкнулся с тем, что когда заливал самый первый вариант на rust, сервер сообщил об ошибке компиляции, но не показал текст ошибки (было пустое окошко). Вслепую догадался, в чём было дело (попытался заюзать rust-2018 до того как он был официально включен).

tongohiti avatar Jul 29 '19 16:07 tongohiti

В итоге, правда, я собираю решение локально с нужными мне опциями, зависимостями и версиями. А запускаю там с помощью вспомогательного скрипта, который через execv вызывает лежащий под ногами готовый бинарник.

Это скорее всего нарушение правил. @SannikovDmitry "а что так можно было"?

Закрою пока рукой глаза :) Главное, чтобы не сломали ничего.

SannikovDmitry avatar Jul 31 '19 09:07 SannikovDmitry