Russian AI Cup

Расширенный поиск  
Страницы: [1]

Автор Тема: Языковой пакет для Rust  (Прочитано 395 раз)

elsid

  • Newbie
  • *
  • Сообщений: 6
Языковой пакет для Rust
« : Ноября 09, 2017, 02:53:43 am »

https://github.com/elsid/CodeWars-rust-cgdk

Не нашел правил создания и способа предложения языковых пакетов, поэтому оставлю это здесь. Код собирается и работает с local-runner, можно пользоваться.
Записан

SladeThe

  • Global Moderator
  • Sr. Member
  • *****
  • Сообщений: 185
Re: Языковой пакет для Rust
« Ответ #1 : Ноября 19, 2017, 02:59:21 pm »

Очень сложно сравнивать этот код с каким-либо имеющимся клиентом. Части логики свободно перемещаются из файла в файл. Необходимо максимально близко портировать клиент, без вольной интерпретации. Расхождения допускаются только в случае, когда эквивалентная реализация в языке невозможна.

Непонятно, зачем в enum'ы добавлено специальное значение unknown, если в Rust для этого есть Option. Лучше всего за основу взять пакет C#. enum там тоже унаследованы от целочисленных типов. Если enum-поле в C# - это просто enum, значит и в Rust должно быть так же, если nullable enum (enum?), то в Rust очевидно должно быть Option<enum>.

Можно ли в Rust легко узнать количество констант для перечисления? Если нет, то лучше добавить специальную константу count, как это сделано в Ruby и C++.

Также во всех наших клиентах реализация стратегии находится в корневом каталоге, там же, где и runner. Вы не сможете отправить в систему архив, содержащий каталоги.

При создании экземпляра MyStrategy необходимо явно указать, что он соответствует trait'у Strategy.
Записан

SladeThe

  • Global Moderator
  • Sr. Member
  • *****
  • Сообщений: 185
Re: Языковой пакет для Rust
« Ответ #2 : Ноября 19, 2017, 03:08:36 pm »

"move_" лучше везде заменить на "act[ion]", "turn" или что-то ещё. Использование синонимов является допустимым в случае конфликтов имеющихся названий с ключевыми словами языка. Как это было, например, с self и me.
« Последнее редактирование: Ноября 19, 2017, 03:10:40 pm от SladeThe »
Записан

elsid

  • Newbie
  • *
  • Сообщений: 6
Re: Языковой пакет для Rust
« Ответ #3 : Ноября 19, 2017, 05:29:43 pm »

Некоторые моменты были сделаны специфично для rust. Исправлю, чтобы было максимально похоже на другие языки.

enum сделаю Option.

Стандартного способа получить количество элементов в enum нет, но можно добавить элемент Count. Но кажется более правильным будет добавить ассоциированную с enum константу.

Каталог для стратегии уберу.

Не понял про trait. Это и так явно указано тем, что есть реализация трейта Strategy для MyStrategy.
https://github.com/elsid/CodeWars-rust-cgdk/blob/4eee4c30770ba65712df08452a7d54eda0c2811b/src/my_strategy/mod.rs#L7

move_ поменяю на action (и еще модуль и тип для согласованности?). Еще есть поля type_, можно поменять на kind.
« Последнее редактирование: Ноября 19, 2017, 05:36:28 pm от elsid »
Записан

elsid

  • Newbie
  • *
  • Сообщений: 6
Re: Языковой пакет для Rust
« Ответ #4 : Ноября 19, 2017, 08:29:06 pm »

Обновил пакет.
Записан

SladeThe

  • Global Moderator
  • Sr. Member
  • *****
  • Сообщений: 185
Re: Языковой пакет для Rust
« Ответ #5 : Ноября 19, 2017, 10:38:59 pm »

Не понял про trait. Это и так явно указано тем, что есть реализация трейта Strategy для MyStrategy.

Эта реализация находится в файле MyStrategy, в котором участник может написать всё, что угодно. Важно, чтобы именно в немодифицируемой части пакета была явная проверка.
Записан

elsid

  • Newbie
  • *
  • Сообщений: 6
Re: Языковой пакет для Rust
« Ответ #6 : Ноября 19, 2017, 11:24:58 pm »

Сделал явную зависимость в методе Runner::run.
https://github.com/elsid/CodeWars-rust-cgdk/commit/558b0e7747d4c6ddb4fa3b96fdb824a01c7eef11
Записан

elsid

  • Newbie
  • *
  • Сообщений: 6
Re: Языковой пакет для Rust
« Ответ #7 : Ноября 20, 2017, 02:10:57 am »

Записан

swizard

  • Newbie
  • *
  • Сообщений: 2
Re: Языковой пакет для Rust
« Ответ #8 : Ноября 20, 2017, 03:49:51 pm »

А есть шанс, что пакет успеют добавить до окончания квалификации?  :-[
Записан

kuviman

  • Global Moderator
  • Jr. Member
  • *****
  • Сообщений: 10
Re: Языковой пакет для Rust
« Ответ #9 : Ноября 20, 2017, 03:51:32 pm »

Посмотрите pull-request, TerrainType и WeatherType не должны быть опциональными, по аналогии с другими клиентами.

После этой правки мы готовы внедрить пакет.
Записан

elsid

  • Newbie
  • *
  • Сообщений: 6
Re: Языковой пакет для Rust
« Ответ #10 : Ноября 20, 2017, 05:50:41 pm »

Замержил.
Записан

swizard

  • Newbie
  • *
  • Сообщений: 2
Re: Языковой пакет для Rust
« Ответ #11 : Ноября 20, 2017, 06:37:56 pm »

Цитировать
Помните, что в стартовом пакете вы можете менять только файл MyStrategy.${ext} (где ${ext} — расширение используемого вами языка), и даже если вы измените какой-то другой файл и тоже приложите его в архив, всё равно при тестировании он будет заменён на стандартный (кроме MyStrategy.h в C++).

Я же правильно понимаю, что в пакете для Rust то же самое: можно изменять только my_strategy.rs? Соответственно, никаких дополнительних крейтов подключать тоже нельзя, потому как надо сделать запись в Cargo.toml и добавить extern crate в runner.rs?

Может, имеет смысл сделать здесь какое-то послабление — иначе ведь даже какой-нибудь rand или time использовать не получится?
Записан
Страницы: [1]