metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-10-10 10:39 am
Entry tags:

О проверке входных параметров, принятой в Java

Есть такой оккультный стек-трейс: https://gist.github.com/def1fa8666a8ac83130a.
Причина в том, что в деконструктор массивов кложури вида (let [sql & params] some-array] передан пустой массив и строка sql в таком случае становится null и оный null передается в jdbc драйвер.
Строка на которой валится NPE, выглядит следующим образом:
protected boolean checkForEscapes(String sql) {
sql = sql.toLowerCase();

А вопрос, вообще говоря, в следующем: почему никто не проверяет параметр на валидность хотя бы в одной точке входа в одной из трех либ (clojure.java.jdbc, apache dbcp или jaybird)?

Выглядит так, как будто нормальную проверку параметров на валидность на границах API в жабе делать не принято.

PS: [livejournal.com profile] artureg упорно убеждает меня, что "пусть валится", потому что проверка должна быть "в другом слое". Судя по всему, все разработчики думают, что обработка ошибок должна быть в другом слое :)

[identity profile] jdevelop.livejournal.com 2012-10-10 08:05 am (UTC)(link)
вы знаете, раньше для меня стандартом ебанутости стектрейса был стектрейс спрингового приложения или какого-нибудь уёбложика

теперь это определенно кложура.

[identity profile] metaclass.livejournal.com 2012-10-10 08:14 am (UTC)(link)
В F# та же срань - doInvoke.Invoke$.$Invoker_random$shit$here_ и так на 100 строк)

[identity profile] metaclass.livejournal.com 2012-10-10 08:14 am (UTC)(link)
Покажи аналогичный скальный трейс?

[identity profile] dr-hyder.livejournal.com 2012-10-10 08:16 am (UTC)(link)
У груви обычно даже длиннее. Как звучит то!

[identity profile] zmila.livejournal.com 2012-10-10 08:31 am (UTC)(link)
http://farm6.static.flickr.com/5234/5884828092_7351ae6115.jpg

"The stack trace doesn’t fit in that large monitor in portrait mode. Guys, stop breaking your programs into many functions. Put all your code in one function and your stack traces will be shorter."
:)

[identity profile] thedeemon.livejournal.com 2012-10-10 08:47 am (UTC)(link)
Так вот зачем нужно много длинных мониторов! :)

[identity profile] blackyblack.livejournal.com 2012-10-10 09:33 am (UTC)(link)
Для длинных мониторов нужны горизонтальные логи!

[identity profile] zmila.livejournal.com 2012-10-10 12:10 pm (UTC)(link)
да! адёшь логи-online-неры! :)

[identity profile] kiryl.livejournal.com 2012-10-10 08:52 am (UTC)(link)
Как хорошо, что в ядре стек всего 8k и такой пиздец туда просто не влезет. :)

[identity profile] metaclass.livejournal.com 2012-10-10 09:04 am (UTC)(link)
8k, 4(или 8 байт на адрес возврата), стекфреймы делаем или нет?
в пределе можно 2048 строк в стеке сделать, по идее :)

[identity profile] kiryl.livejournal.com 2012-10-10 09:33 am (UTC)(link)
На x86-64 минимальный stackframe, насколько я помню, 16 байт (код возврата + предыдущее значения rbp). Таким образом 512 вырожденых функций.

Реальные функции имеют переменные на стеке. -fstack-protector, наверно, тоже какой-то оверхед на стеке имеет. Реально 40-50 вложенных функций максимум, но и за такое нужно руки отрывать.