raic-2020
raic-2020 copied to clipboard
В будущих соревнованиях использовать для RPC более оптимизированную для совокупности языков технологию
Текущая технология для некоторых языков генерирует заметно неоптимальные реализации (см. #86, #90) или же языки не поддерживаются (#72, #73).
Я предлагаю использовать protobuf
/gRPC
(используется, например, в StarCraft 2). Для него есть много официальных реализаций для разных языков и очень много сторонних open-source реализаций, в том числе для Rust (например, tonic).
Для него есть оптимизированная реализация, например, для Python.
Но есть и другие, такие как Apache Thrift.
Помимо прочего, это также должно снизить нагрузку на организаторов по сопровождению разных языков.
Вызывает большие сомнения целесообразность прикручивания доп библиотек. Думаю, чтоб протокол должен быть простой, что без библиотек легко можно было написать клиента. И дальше одно из двух, либо код кривой и поэтому тормозной, тогда его можно улучшить, пусть "профессионалы" покажут как правильно и в следующих соревнованиях будут использовать улучшенный код. Либо язык ни на что не пригоден, тогда либо #119, либо смириться с положением вещей и не жаловаться, ведь вы сами выбрали такой язык.
Самый простой вариант реализации протокола - на основе стандартных текстовых потоков stdin
/stdout
. Но если будет взят вариант на основе сетевого взаимодействия, то тут лучше использовать распространённые библиотеки, где вопросы оптимизации и кодогенерации для клиентов на разных языках уже решены и отработаны на большом количестве проектов (это как раз совет от "профессионала". как правильнее). Всё-таки конкурентоспособность подобных мероприятий ИМХО больше в качестве и богатстве возможностей Local Runner'а и сервера, в плане визуализации и отладки. Пусть лучше ресурсы организаторов/разработчиков будут потрачены туда.
Про поддержку языков - это вопрос целей соревнования и акцентов в нём. Я не знаю ни на что не пригодных языков. Есть разные парадигмы и приоритеты в оптимизации в разных языках. Плюс возможности, которыми мало кто умеет пользоваться, типа numba
или PyPy
(если говорить о Python).
Было уже в миниках stdin/stdout, крайне неудобно это отлаживать, ведь надо потоки перенаправить, из коробки мало какие иде это умеют. Плюс было, что по ошибки или какая-то либа тоже выводит в stdout и потом из-за этого номера строк разъезжаются.