Комментарии 24
Была бы версия для ts, купил бы не раздумывая. С++, С#, java на данный момент отложил в ящик.
Интересно, сложно ли будет подключить анализатор к ts? Ту часть правил, что к ts применима.
Спасибо за интересный вопрос.
Сложно. Для этого надо, чтобы все наши анализаторы работали через одно обобщенное внутреннее представление в виде AST (Abstract Syntax Tree). Тогда можно будет запустить какой-то общий набор диагностических правил.
Для каждого языка программирования строятся различные AST, которые учитывают его семантику. К сожалению, обобщить все многообразие AST для целей статического анализа так легко не получится – будет утерян контекст исходного кода.
Фрагмент №18 - это абсолютно проклятая вещь, как по мне.
Согласен, выглядит жутко :D. Даже с подсказкой анализатора мне понадобилось определённое количество времени, чтобы разобраться, что там происходит.
Как по мне, будь у них не boolean, а unsigned, и присваивать не результат сравнения, а сам размер - код был бы полностью работоспособным. Ну, по крайней мере, на тех языках, которыми мне доводилось пользоваться (т.к. не являюсь программистом, синтаксическими особенностями диалектов C не владею)
modulo by 1
“Modulo 1” же.
Оригинальный DOOM был написан не на С++ :)
Да, вы правы, оригинальный DOOM 1993 года был написан на C, но к счастью (или к сожалению) время не стоит на месте, и люди портируют старые игры, используя более высокоуровневые языки.
... и внося новые баги :)
к сожалению
чем код компактнее, без завертываний, тем быстрее и эффективнее он работает(из-за современных питонов, библиотек, библиотек библиотек, движков и ста преобразований - получается непомерно разжиревший и тормознутый код, оттого все и тормозит, даже на мощном железе)
я убедился в этом, когда программил микроконтроллеры - заворачивая код в классы - компилятор выделял больше памяти в оперативе и сама программа соответственно становилась жирнее, а как известно в мк каждый байт на счету и тем более оператива
Я бы сказал всё зависит от области применения. В тех областях, где производительность и эффективность не на первом месте, высокоуровневые языки позволяют сэкономить время программиста, упрощая ему жизнь. Для бизнеса это может оказаться выгоднее, чем писать компактный и эффективный код (надо отметить, что высокоуровневый язык != некомпактный и неэффективный код, зачастую наоборот (например, если речь про C++)). Но всё должно быть в меру и описанная вами ситуация, к сожалению, не редкость и действительно пугает.
вот из-за этих бизнесменов сейчас и имеем то, что имеем - хэлло ворлд в 100 мб
для бизнеса то конечно, быстрее выпуск - быстрее деньги, покупка нового железа
производительность и эффективность должна быть всегда
высокоуровневые языки это неплохо, но речь больше о том, что на этих высокоуровневых языках делаются еще более высокоуровневые, библиотеки, движки и выходит интерпретатор интерпретатора - вот это и плохо
а на чистых высокоуровневых все бы работало быстро, ибо нет ненужных зависимостей и используется только то, что используется, а не тянет движок в 100500 мб, из котрого используется меньше половины возможностей, ну и движок может быть не оптимизирован и сам код на движке тоже - дабл антиоптимизация
заворачивая код в классы - компилятор выделял больше памяти в оперативе и сама программа соответственно становилась жирнее
Я не особо эксперт в C++ и не проверял, чем отличается сгенеренный код для c и c++ в плане структур, но чем больше класс, чем больше методов и различных взаимосвязей, тем сложнее его оптимизировать компилятору, при чем структура в c гораздо проще чем в c++. В c - это способ объединения нескольких полей, а в c++ - структура позволяет использовать абстракции, которые почти всегда будут иметь небольшой (иногда большой) оверхед.
del
Интереснее почитать про проверку на ошибки оригинального DOOM.
"... and those who tasted the bite of his sword name him the BUGslayer."
разбудите меня через 50 лет, Блог компании PVS-Studio всё так же будет копаться в чужом коде
Так, а минусы будут? :D
Блог компании PVS-Studio бесплатно находит и расписывает чужие ошибки, предлагая исправленные варианты кода. Как минимум это экономит время и силы разработчиков на поиск и исправление, как максимум обучает других не совершать подобные ошибки в своём коде :)
разве не в этом суть их продукта? Это как про стоматологию написать что их посты копаются во рту пациентов
По Фрагменту N19: а что, если len будет нулевой? Нет, может быть ReverbContainer::Name
инициализируется какими-нибудь константами, но...
30 лет DOOM: новый код — новые баги