?

Log in

НЕНАВИЖУ - Anton Kazennikov [entries|archive|friends|userinfo]
Anton Kazennikov

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

НЕНАВИЖУ [Nov. 14th, 2010|06:47 pm]
Anton Kazennikov
Интересно, кто учит людей писать вот такой код:
int temp = fCurrentPosition;
try {
	int result;
	fCurrentCharacter = fSource[fCurrentPosition++];
	if (fCurrentCharacter == testedChar1)
		result = 0;
	else if (fCurrentCharacter == testedChar2)
		result = 1;
	else {
		fCurrentPosition = temp;
		return -1;
	}
	return result;
} catch (IndexOutOfBoundsException e) {
	fCurrentPosition = temp;
	return -1;
}



А потом жалуются, что java тормозит.
LinkReply

Comments:
[User Picture]From: raydac
2010-11-14 04:09 pm (UTC)
одно время такой псевдометод ускорения ходил по докам посвященным оптимизации, но народ просто не удосуживался провести тесты и верил на слово что через исключение он сэкономит на проверке
(Reply) (Thread)
[User Picture]From: raydac
2010-11-14 04:11 pm (UTC)
но тут конечно вообще какая то хрень, обычно такие вещи в циклах встречались
(Reply) (Parent) (Thread)
[User Picture]From: some41
2010-11-14 04:17 pm (UTC)
я думаю это state machine
(Reply) (Parent) (Thread)
[User Picture]From: kzn
2010-11-14 05:18 pm (UTC)
Ага, это из парсера страниц mediawiki.
(Reply) (Parent) (Thread)
[User Picture]From: kzn
2010-11-14 05:18 pm (UTC)
В том проекте, что я смотрю это и в циклах есть :-)
(Reply) (Parent) (Thread)
[User Picture]From: some41
2010-11-14 04:15 pm (UTC)
конкретно проверка на выход за границу через exceptions может и была быстрее, если случаев попадания в массив много больше непопадания, потому что проверку компилятор строил всегда, и если написать самому, то будет проверяться 2 раза.

современные jvm, я надеюсь, и проверку умеют строить один раз, и такой код с try/catch компилировать в goto.
(Reply) (Parent) (Thread)
[User Picture]From: kzn
2010-11-14 05:25 pm (UTC)
Вроде кидание исключения - достаточно дорогая операция? В таком локальном случае вероятно как-то оптимизируется, но в общем случае видимо нет.

Я просто офигел, когда в профайлере число обработанных исключений ушло за 500k за полминуты работы.
(Reply) (Parent) (Thread)
[User Picture]From: some41
2010-11-14 05:41 pm (UTC)
в java она существенно дешевле, чем в c++. я не знаю, действительно ли jvm ее оптимизирует в таких случаях, но теоретически это выглядит возможным, и, учитывая среднее качество java кода, я бы это делал =) если такое делается, то интересно, что считает профайлер -- без учета оптимизации или с учетом. то есть, не создает ли он ложную панику =)

без относительно исключений, код в примере выглядит как говно.
(Reply) (Parent) (Thread)
[User Picture]From: some41
2010-11-14 04:09 pm (UTC)
жоска
(Reply) (Thread)
[User Picture]From: evil_invader
2010-11-15 08:45 am (UTC)
Немного не по теме. Что ты думаешь по поводу Clojure?
Просто меня очень заинтересовал Lisp (изучал немного Common Lisp в свободное время), но основная работа у меня на Java. Думаю на сколько может пригодиться Clojure в коммерческих проектах. Стоит ли его изучать?
(Reply) (Thread)
[User Picture]From: kzn
2010-11-15 06:01 pm (UTC)
По-моему, стоит. Cейчас это самый перспективный lisp из существующих :)
По опыту весьма просто вызывать код на Java из Clojure, чуть сложнее наоборот, код на Clojure из Java.
Ну и для него есть средства разработки, slime для emacs, и для Eclipse c NetBeans тоже есть плагины.

Вообще по Clojure специалист alexott
(Reply) (Parent) (Thread)
[User Picture]From: evil_invader
2010-11-15 08:32 pm (UTC)
Спасибо. Надо попробовать. Интересует как раз Clojure из Java. Отдельные решения было бы интересно на Lisp сделать, но целиком на нём сложнова-то. Из-за порога вхождения, думаю руководство не одобрит =)
(Reply) (Parent) (Thread)
[User Picture]From: alexott
2010-11-20 12:22 pm (UTC)
это не сложно, зависит от того, что именно вы хотите делать - писать часть кода на Clojure и вызывать его из явы, или все писать на Java, а Clojure использовать как скриптовой язык. Если есть вопросы, то пишите мне на почту - alexott at gmail.com
(Reply) (Parent) (Thread)
[User Picture]From: evil_invader
2010-11-23 05:02 pm (UTC)
Сложно убедить руководство в целесообразности использования такой технологии =).

Хотелось бы писать часть кода на Clojure. Как скриптовый язык даже и не знаю - наверное проще Groovy или Lua использовать.
(Reply) (Parent) (Thread)
[User Picture]From: alexott
2010-11-23 07:25 pm (UTC)
Ну я думаю, что без особых проблем это можно будет сделать. Я пишу классы, которые зовуться из явовских классов - в основном это callbacks и т.п., но вроде работает. Но в любом случае, отвечу на любые вопросы
(Reply) (Parent) (Thread)
[User Picture]From: evil_invader
2010-11-26 06:25 pm (UTC)
Ок, спасибо.
(Reply) (Parent) (Thread)
[User Picture]From: bdsm_smile_cry
2010-11-22 06:53 pm (UTC)
Привет) Здорово пишешь, прямо писатель..))
(Reply) (Thread)