LINUX.ORG.RU

Призываю капитана очевидность на помощь.

Ghostwolf ★★★★ ()

профилировка показывает что заметная часть CPU уходит на замену кавычек

Ха-ха!

mandala ★★★★ ()

За русские комменты зачет автоматом. Стереотип о том, что комменты должны быть на английском устарел и не нужен.

backburner ()
Ответ на: комментарий от backburner

Стереотип о том, что комменты должны быть на английском устарел и не нужен.

Это стереотип верен для проектов, которые хотя бы теоретически могут понадобиться хоть кому-то, кроме хозяина.
С трудом себе представляю, чтобы кто-то мог заинтересоваться движком ЛОРа, не имея к ЛОРу никакого отношения.

Stahl ★★☆ ()

Ну и вынесли бы эту функцию в JS. Заодно те, кому замена не нравится, могли бы этот скрипт заблокировать.

Sadler ★★★ ()
Ответ на: комментарий от Stahl

В эпоху машинного перевода достаточно просто писать грамотно.

mandala ★★★★ ()
if (position == 0 && localBuff.length()==0)
       return false;
     else if (position == buff.length() - 1)
       return true;
+    input = QUOTE_IN_OPEN_PATTERN.matcher(input).replaceAll(QUOTE_IN_OPEN_HTML);
+    input = QUOTE_IN_CLOSE_PATTERN.matcher(input).replaceAll(QUOTE_IN_CLOSE_HTML);
+    input = QUOTE_OUT_OPEN_PATTERN.matcher(input).replaceAll(QUOTE_OUT_OPEN_HTML);
+    input = QUOTE_OUT_CLOSE_PATTERN.matcher(input).replaceAll(QUOTE_OUT_CLOSE_HTML);

Пздц. За такой код надо совать автору руки под пресс.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

Ужас. Зачем они вообще юзают ReplaceAll, если им надо заменять простой символ, а не проходиться regexp'ом? Replace — это неканонично?

Sadler ★★★ ()
Последнее исправление: Sadler (всего исправлений: 1)
Ответ на: комментарий от Sadler

Да ладно с replaceAll, но какая религия им запрещает положить это в мапу вместо этой лапши?

vurdalak ★★★★★ ()
Ответ на: комментарий от Sadler

Ну и вынесли бы эту функцию в JS

Если посмотреть на тестовую базу данных, видно что в БД код уже хранится как html, даже html-entities заэскейпены.

backburner ()
Ответ на: комментарий от Sadler

Так видимо, определять, если открывающаяся кавычка типа

(\s|^)"

TheAnonymous ★★★★★ ()
Ответ на: комментарий от TheAnonymous

Я упрощу:

private final static Pattern QUOTE_IN_OPEN_PATTERN = Pattern.compile(Character.toString('„'), Pattern.LITERAL);
input = QUOTE_IN_OPEN_PATTERN.matcher(input).replaceAll("„");

Sadler ★★★ ()
Ответ на: комментарий от backburner

так почему не заменять уже html, как юзерскрипт заменяет их на нормальные кавычки

TheAnonymous ★★★★★ ()
Ответ на: комментарий от mandala

То что там творился писец можно было определить без профилировки, такого индусокода как нарожала пони я давно не видел.

Deleted ()
Ответ на: комментарий от vurdalak

4 прохода одного текста?

Это конченный автомат вместо конечного.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Да пофиг пока на проходы, мне не нравится сам вид этого кода. Такую лапшу может написать только человек, которого на стажировку уже взяли, но первый коде ещё проверить никто не успел.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

не нравится сам вид этого кода

Ага, т.е. ты просто запихнул бы это в списочек и успокоился.

Deleted ()
Ответ на: комментарий от Deleted

Как минимум. Конечно там надо всё это удалить и написать заново, но для этого нужен опыт. А запихнуть в списочек и обезьяна могла бы.

vurdalak ★★★★★ ()
Ответ на: комментарий от Bioreactor

Ибо есть https://commons.apache.org/proper/commons-lang/

Вот это верно, это плюсую. Их replace и вызывать придётся один раз вместо четырёх, и он работает раза в 3-4 быстрее дефолтового. Итого скорость вырастет где-то на порядок.

Sadler ★★★ ()
Последнее исправление: Sadler (всего исправлений: 1)
Ответ на: комментарий от Sadler

Таки, да.

Самое лучшее это просматривать кошерный код от группы Apache или Google Guava.

У этих ребят, как правило, «вылизанный» код, ибо у них большая база программистов, использующих код.

Они следят друг за другом, обмениваются идеями, «рефакторят».

Bioreactor ★★★★★ ()
Ответ на: комментарий от Bioreactor

Я посмотрел их реализацию. Задумка те же, что в моей самоделке, но они пошли чуть дальше. Время (миллисекунд) на миллион замен на моей машине при длине текста в 1000 символов:

input.replace(from,to);							2339
QUOTE_IN_OPEN_PATTERN.matcher(input).replaceAll(to);			2104
input.replaceAll(from,to); // неожиданно для меня			1532
самодельная реализация через StringBuilder и toCharArray		1125
StringUtils.replace(input, from, to); //Apache				478

Sadler ★★★ ()
Последнее исправление: Sadler (всего исправлений: 1)
Ответ на: комментарий от Bioreactor

Зачем? я просто не пользуюсь этим легаси с убогим дизайном.

Deleted ()
Ответ на: комментарий от Deleted

Это бессмысленно, т.к. для данной задачи искомая подстрока всегда состоит только из одного символа.

Sadler ★★★ ()
Ответ на: комментарий от Sadler

Гм, вощето я про generic алгоритм из StringUtils который содержит стопицот циклов.

Deleted ()
Ответ на: комментарий от Sadler

Ужас. Зачем они вообще юзают ReplaceAll, если им надо заменять простой символ, а не проходиться regexp'ом? Replace — это неканонично?

Не принципиально — replace и replaceAll внутри работают через regexp'ы. Самое эффективное тут решение было бы просто пройтись циклом и заменить в нем нужные символы в один проход.

maxcom ★★★★★ ()
Ответ на: комментарий от maxcom

Не принципиально — replace и replaceAll внутри работают через regexp'ы. Самое эффективное тут решение было бы просто пройтись циклом и заменить в нем нужные символы в один проход.

Да, я так в своей реализации и делал. Там основной расход времени у меня был на StringBuilder.append, т.к. я тупо каждый символ append'ил отдельно, что не очень быстро.

чем изменял, jmh?

Да просто профилировщиком NetBeans'а. Загнал 5 функций замены последовательно в цикл и смотрел время выполнения каждой и долю времени.

Только что придумал ещё одну очень эффективную реализацию:

String.join(to, input.split(from))

У меня работает почти так же быстро, как апачевская реализация. Возможно, я чего-то ещё не учитываю, конечно.

Sadler ★★★ ()
Последнее исправление: Sadler (всего исправлений: 2)
Ответ на: комментарий от TheAnonymous

Не знаю. Полагаете, что-то серьёзно изменилось в плане производительности? В любом случае, недолго проверить скорость исполнения на целевой машине и выбрать наилучший вариант.

Sadler ★★★ ()
Ответ на: комментарий от mandala

Хочешь сказать, что ты свой псто написал неграмотно? Гуглотранслейт перевёл как

In the era of machine translation is simple enough to write correctly.

Я хоть и не англичанин, но явно недостаёт подлежащего (должно быть it is), вместо simple должно быть simply.

te111011010 ()
Ответ на: комментарий от te111011010

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

mandala ★★★★ ()
Ответ на: комментарий от Sadler

Полагаете, что-то серьёзно изменилось в плане производительности?

String.join со всякими Stream API

TheAnonymous ★★★★★ ()
Ответ на: комментарий от mandala

достаточно просто писать грамотно

Моё судно на воздушной подушке полно угрей.

INFOMAN ★★★★★ ()
Ответ на: комментарий от TheAnonymous

String.join со всякими Stream API

О, точно, я и забыл, что это в новой яве появилось только.

Sadler ★★★ ()
Ответ на: комментарий от mandala

Но смысл понятен?

Фраза из «В эпоху машинного перевода достаточно просто писать грамотно» превратилась в «В эру машинного перевода писать грамотно — достаточно просто». Изначальный смысл утерян.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

От контекста много зависит. Да я и не говорю, что машперевод идеален.

mandala ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.