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