Pull to refresh

Comments 11

UFO just landed and posted this here
Java — медленный язык программирования. У него есть класс Big Integer, однако он не особо вам поможет. Если на конкурсе есть ограничение по времени, с Java вы его наверняка превысите. Java принимают не на всех соревнованиях.

заявление абсурдное даже для 2009, не говоря уже про 2019. вопрос тут кто как меряет скорость, без прогрева это не имеет смысла
без прогрева это не имеет смысла
Какой, к бесу, прогрев? На олимпиадах на прогон программы на заданных определённых данных выделяется фиксированное время. Обычно несколько секунд. Соответственно в случае с Java — вы тупо тратите значительную часть выделенного лимита на запуск Java-машины. Даже python быстрее, зачастую, будет.

И почему так — достаточно понятно. Это — соревнование. Для прогона у организаторов есть определённое количество компьютеров и запустить нужно определённое количество поданных решений. Делим одно на другое — получаем сколько секунд достаётся каждой программе.

Всё просто и логично… а если кому-то хочется писать на языке, требующем «прогрева»… так это его и только его проблемы…
просто кто-то не умеет тестировать программы, вот и всё.
а если кому-то хочется писать на языке, требующем «прогрева»… так это его и только его проблемы…

это вообще ноукоментс
Ещё раз. Речь идёт о соревнованиях. По определённым правилам. Ну вот как бобслей какой-нибудь. Кто-то умеет хорошо разгоняться, а кто-то — быстро проходить повороты. Но важно — общее время прохождения дистанции.

И если какая-то фирма выпускает боб без ручек, так что он может только под собственным весом ускоряться — то он будет среди отстающих. Даже если он великолепно проходит повороты.

И это не «вы не умеете тестировать программы», а «кто-то не умеет в логику».

Нет никакого закона, требующего вам предоставлять только условия, которые вам нравятся. Вот если принят дизайн, который при нехватке памяти принудительно программы закрывает — то медлительность запуска Java-программ становится бедой. Вас никогда не удивляло, что iPhone отзывчивее Android'а и это пытаются компенсировать вдвое-втрое большей памятью? Это — прямое следствие того, что Java требует «прогрева».

На серверах же — это не так страшно, там программы с выполнения хотя и могут «сниматься», но некий пул их всё равно сохраняется, так что проблем с «прогревом» не возникает.

Да, для соревнований — Java медленная. И вы ничего, ну вот ровно ничего с этим не сможете поделать. По крайней мере в ближайшем будущем. Потому что C++ занимается оптимизацией один раз, а Java — 10, а то и 100 (сколько раз тесты запускают). И чтобы получить сравнимую скорость Java должна не просто достигать сравнимых скоростей, но обгонять (и сильно обгонять!) С++, чтобы компенсировать медленный старт.
ну я к тому, что java один из самых распространённых языков программирования и уже можно научиться запускать тесты не через «time java ...»
Это не тест продакшн кода, это соревнование.
Ваша задача решить задачу в ограниченное время и память.
Соревнование идёт автоматически, код не ревьюится.
Было бы не честно давать прогревочные круги для джавы просто потому что она джава — я бы запросто закешировал результат и получил бы отличные баллы на любой задаче.

И обычно на соревнованиях уделяется внимание запуску тестов, они запускаются несколько раз и выбирается лучший/медианный результат чтобы убрать задержки от тестового окружения, диска итд.
не обязательно давать ей все тесты, можно греть и на тех что в условиях задачи указаны. опять, я к тому что язык популярный и сделать элементарный прогрев на такая уж и технически сложная задача, по этому для меня загадка почему этим не хотят заниматься.
Потому что организовать прогрев несложно. Но тогда вы уже даёте фору Java-программистам — причём весьма нехилую.

Во многих задачах можно было бы написать на C++ вообще программу которая работает нуль времени рассчитав, через constexpr-функции огромные таблицы и сделав так, чтобы программа компилировалась часа два.

Это невозможно, так как время на компиляцию ограничивается тоже. Как это сделать, чтобы то же самое не сделали Java-программисты во время «прогрева» — науке неведомо.

Да, наверное можно сделать модификацию JVM, которая бы запоминала бы код, но выкидывала данные… но это немедленно упрётся в вопрос о настоящем шотландце, так как с учётом знания структуры современных JVM есть способы перенести «знание» из данных в кеши JVM… в общем было принято простое и разумное решение: если вы выбираете для решения задачи язык, который нужно прогревать или просто язык, который в 100 медленнее C++ (скажем Python) — то это ваши проблемы.

Есть трасса, есть правила заезда, не хотите играть по правилам — не играйте. Если ваш болид не может разгоняться так, как гоночные авто других команд — то это не повод давать ему дополнитльные 10 кругов для разогрева шин.

При этом это может быть отличный агрегат, он может на разогретых шинах уделывать вообще всех… но вот конкретно в данных соревнования — он будет отставать…
Java — медленный язык программирования. У него есть класс Big Integer, однако он не особо вам поможет. Если на конкурсе есть ограничение по времени, с Java вы его наверняка превысите. Java принимают не на всех соревнованиях.

Какой-то странный наезд. Тот же Петр Митричев на Codeforces в основном только Java и использует, и как-то не скажешь, что это ему сильно мешает. И с C# там кто-то был в топе когда-то. И вообще, довольно редко именно скорость выполнения программы становится узким горлышком, скорее неоптимальное решение. Тогда с С++ может подфартить и вы впишетесь в лимит в ремени с чуть большей долей вероятности.
Java — медленный язык программирования


Java для спортивного программирования вообще, как мне кажется, не очень подходит, и даже не из-за скорости (после JIT или AOT компиляции там не так уж и всё плохо), а из-за склонности многословия и отсутсвию некоторых удобных плюшек, присутствующих например в Scala.
Просто язык популярный, многие его знают, вот на нём и соревнуются.
Sign up to leave a comment.