C++ не нужен?
От: Mamut Швеция http://dmitriid.com
Дата: 02.08.10 10:24
Оценка: 9 (6) -2
Здесь: http://lionet.livejournal.com/68807.html

Кратко:

Проект Google Re2 (C++) — успешная попытка [вос]создать промышленный regex движок, свободный от экспоненциальной зависимости от входных данных. Этот проект, выполненный Рассом Коксом (Russ Cox), дал возможность гуглу эффективно выполнять поиск по регулярным выражениям в программном коде, найденном гуглом в интернете...

В сентябре 2010 мир пополнится ещё одним таким must-read ресурсом по регулярным выражениям. Пьеса (!) A Play on Regular Expressions (http://sebfisch.github.com/haskell-regexp/regexp-play.pdf) (via antilamer) описывает создание ленивого, чисто функционального алгоритма, основывающегося на всё том же подходе превращения регулярки в конечный автомат. Описанный в статье алгоритм позволяет строить матчер выражений, поддерживающий любые контекстно-свободные (sic!!) грамматики.

Алгоритм, и соответствующая ему имплементация, Weighted RegExp Matching на простых выражениях обычно медленнее, чем другие библиотеки типа pcre, но у неё асимптотически лучшее поведение: O(nm) от длины входных данных и размера выражения. Пользуясь ленивостью, на некоторых бенчмарках (.*a.{20}a.*) эта Haskell-имплементация обгоняет Re2, описанный выше, по абсолютному времени выполнения.

Самое интересное, что тот же алгоритм был написан ещё и на C++ и Java, и на Java получился в два раза быстрее, несмотря на то, что алгоритм очень хорошо ложится на ОО, и может быть переносим между ОО-языками без особых изменений:

http://morepypy.blogspot.com/2010/06/jit-for-regular-expression-matching.html

Implementation                 язык          chars/s      speedup over pure Python
Pure Python code               Python           12'200       1
Python re module               C             2'500'000     205
Google's re2 implementation    C++             550'000      45
RPython implementation
  translated to C              Python          720'000      59
C++ implementation             C++            750'000       61
Java implementation            Java           1'920'000    157
RPython implementation
    with JIT                   Python       16'500'000    1352


Это, в частности, подтверждает тезис о том, что C++ не нужен: современные языки с GC и JIT просто уделывают его на традиционных для C/C++ задачах.


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


dmitriid.comGitHubLinkedIn
Re: и ты, Брут ?
От: Pavel Dvorkin Россия  
Дата: 02.08.10 10:37
Оценка: :))) :)
Здравствуйте, Mamut, Вы писали:
With best regards
Pavel Dvorkin
Re[2]: и ты, Брут ?
От: Mamut Швеция http://dmitriid.com
Дата: 02.08.10 10:46
Оценка:
Да ладно Не все же об айфонах и айпадах писать


dmitriid.comGitHubLinkedIn
Re: C++ не нужен?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 02.08.10 10:47
Оценка: :)))
Здравствуйте, Mamut, Вы писали:

M>Комментарии по ссылке тоже рулят, но, просьба, не набегать туда, а ограничиться КСВ


Вот это ты зря. Ведь набегут же теперь, еще и с табличкой "нас прислал Мамут"
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re: C++ не нужен?
От: Mr.Cat  
Дата: 02.08.10 11:02
Оценка: 2 (1) +3
Здравствуйте, Mamut, Вы писали:
M>Это, в частности, подтверждает тезис о том, что C++ не нужен: современные языки с GC и JIT просто уделывают его на традиционных для C/C++ задачах.
Я так понимаю, у pypy регекспы поддерживаются jit-ом, т.е. конпелируются в машинный код. Наверняка что-то подобное сделано в жаве. А имплементация гугла на плюсах — это интерпретатор. Конпеляция в очередной раз победила интерпретацию. Ура-ура.

Ах, да. Плюсы, GC, КСВ при чем тут они?
Re: Вы забыли про "правило 95%"
От: пыщьх http://rsdn_user.livejournal.com
Дата: 02.08.10 11:07
Оценка: 2 (2) +12
Просто подтверждает, что для написания быстрых программ на C++ нужен IQ выше среднего, не более того.
Если есть быстрая реализация на C, ВСЕГДА можно создать эквивалентную по производительности на С++. Если авторы этого делать не стали и поюзали std::string, исключения и т.п. где надо и где не надо, это их проблемы...
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[2]: C++ не нужен?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.08.10 12:11
Оценка: :))
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, Mamut, Вы писали:

M>>Это, в частности, подтверждает тезис о том, что C++ не нужен: современные языки с GC и JIT просто уделывают его на традиционных для C/C++ задачах.
MC>Я так понимаю, у pypy регекспы поддерживаются jit-ом, т.е. конпелируются в машинный код. Наверняка что-то подобное сделано в жаве. А имплементация гугла на плюсах — это интерпретатор. Конпеляция в очередной раз победила интерпретацию. Ура-ура.

MC>Ах, да. Плюсы, GC, КСВ при чем тут они?


Да все притом. Подход с компиляцией регэкспов в машинный код на С++ невозможен (или очень проблематичен).
Re[3]: C++ не нужен?
От: Cyberax Марс  
Дата: 02.08.10 12:15
Оценка: +4
Здравствуйте, gandjustas, Вы писали:

MC>>Ах, да. Плюсы, GC, КСВ при чем тут они?

G>Да все притом. Подход с компиляцией регэкспов в машинный код на С++ невозможен (или очень проблематичен).
LLVM

Было бы интересно сделать на ней генерацию конечного автомата и посмотреть что получится.
Sapienti sat!
Re[3]: C++ не нужен?
От: Mr.Cat  
Дата: 02.08.10 12:16
Оценка:
Здравствуйте, gandjustas, Вы писали:
G>Да все притом. Подход с компиляцией регэкспов в машинный код на С++ невозможен (или очень проблематичен).
Логично, что управляемым средам проще — они юзают уже присутствующий в них джит. Но есть же либы для джиттинга. Gnu Lightning например (не юзал).
Re[4]: C++ не нужен?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.08.10 12:19
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, gandjustas, Вы писали:


MC>>>Ах, да. Плюсы, GC, КСВ при чем тут они?

G>>Да все притом. Подход с компиляцией регэкспов в машинный код на С++ невозможен (или очень проблематичен).
C>LLVM

C>Было бы интересно сделать на ней генерацию конечного автомата и посмотреть что получится.


Кстати как у LLVM с runtime кодогенерацией? И как это можно использовать на C++?
Re[3]: C++ не нужен?
От: CreatorCray  
Дата: 02.08.10 12:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Подход с компиляцией регэкспов в машинный код на С++ невозможен (или очень проблематичен).

С какого перепугу то?
Если компиляция в байт код возможна то почему вдруг невозможно сгенерить машинный код?
Это будет банальный JIT.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[5]: C++ не нужен?
От: CreatorCray  
Дата: 02.08.10 12:23
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Кстати как у LLVM с runtime кодогенерацией? И как это можно использовать на C++?

Давай-ка зададим наводящий вопрос: на каком языке написан JIT для C#/Java?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: C++ не нужен?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.08.10 12:25
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


G>>Подход с компиляцией регэкспов в машинный код на С++ невозможен (или очень проблематичен).

CC>С какого перепугу то?
CC>Если компиляция в байт код возможна то почему вдруг невозможно сгенерить машинный код?
CC>Это будет банальный JIT.

Ну так напиши.
Говорить можно что угодно, а JIT для С++ пока еще никто не изобрел.
Re[5]: C++ не нужен?
От: CreatorCray  
Дата: 02.08.10 12:27
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Подход с компиляцией регэкспов в машинный код на С++ невозможен (или очень проблематичен).

CC>>С какого перепугу то?
CC>>Если компиляция в байт код возможна то почему вдруг невозможно сгенерить машинный код?
CC>>Это будет банальный JIT.
G>Ну так напиши.
G>Говорить можно что угодно, а JIT для С++ пока еще никто не изобрел.
А нам и не надо JIT для компилируемого языка. Нам надо JIT для байт кода, который сгенерит regex по строке паттерна.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: C++ не нужен?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.08.10 12:27
Оценка: 1 (1)
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


G>>Кстати как у LLVM с runtime кодогенерацией? И как это можно использовать на C++?

CC>Давай-ка зададим наводящий вопрос: на каком языке написан JIT для C#/Java?
Для C# на Lisp с последующей трансляцией в C++. На java — понятия не имею.

Но вопрос был в том как использовать в C++ результаты runtime кодогенерации, с помощью того же LLVM
Re[5]: C++ не нужен?
От: Cyberax Марс  
Дата: 02.08.10 12:28
Оценка: 1 (1) +1
Здравствуйте, gandjustas, Вы писали:

C>>LLVM

C>>Было бы интересно сделать на ней генерацию конечного автомата и посмотреть что получится.
G>Кстати как у LLVM с runtime кодогенерацией? И как это можно использовать на C++?
Умм... LLVM — это фреймворк для кодогенерации, в том числе и runtime. И оно как бы на С++ написано и прекрасно с ним интерфейсится.
Sapienti sat!
Re[7]: C++ не нужен?
От: CreatorCray  
Дата: 02.08.10 12:32
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>Кстати как у LLVM с runtime кодогенерацией? И как это можно использовать на C++?

CC>>Давай-ка зададим наводящий вопрос: на каком языке написан JIT для C#/Java?
G>Для C# на Lisp с последующей трансляцией в C++.
Какой изврат! А что ж сразу на С++ ниасилили? Если странслировать оказалось возможно то и руками написать не проблема.

G>Но вопрос был в том как использовать в C++ результаты runtime кодогенерации, с помощью того же LLVM

Используя VirtualAlloc c PAGE_EXECUTE_READWRITE + переход туда по указателю (aka function pointer)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: C++ не нужен?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.08.10 12:33
Оценка: :))) :)
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


G>>>>Подход с компиляцией регэкспов в машинный код на С++ невозможен (или очень проблематичен).

CC>>>С какого перепугу то?
CC>>>Если компиляция в байт код возможна то почему вдруг невозможно сгенерить машинный код?
CC>>>Это будет банальный JIT.
G>>Ну так напиши.
G>>Говорить можно что угодно, а JIT для С++ пока еще никто не изобрел.
CC>А нам и не надо JIT для компилируемого языка. Нам надо JIT для байт кода, который сгенерит regex по строке паттерна.

Да пофигу. Даже гугл неспособен такое сделать, не надо мне доказывать что это несложная задача.
Re[6]: C++ не нужен?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.08.10 12:35
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, gandjustas, Вы писали:


C>>>LLVM

C>>>Было бы интересно сделать на ней генерацию конечного автомата и посмотреть что получится.
G>>Кстати как у LLVM с runtime кодогенерацией? И как это можно использовать на C++?
C>Умм... LLVM — это фреймворк для кодогенерации, в том числе и runtime.
Спасибо, КО.

C>И оно как бы на С++ написано и прекрасно с ним интерфейсится.

Не все что написано на С++ прекрасно с ним интерфейсится.
Хотелось бы на примеры такого посмотреть.
Re[8]: C++ не нужен?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.08.10 12:39
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


G>>>>Кстати как у LLVM с runtime кодогенерацией? И как это можно использовать на C++?

CC>>>Давай-ка зададим наводящий вопрос: на каком языке написан JIT для C#/Java?
G>>Для C# на Lisp с последующей трансляцией в C++.
CC>Какой изврат!
Нормальная практика создания рабочего прототипа на высокоуровневом языке. А lisp бы выбран просто потому что так захотелось автору.

CC>А что ж сразу на С++ ниасилили? Если странслировать оказалось возможно то и руками написать не проблема.

Наверное если бы сразу стали писать на С++, то .NET появился бы на пару лет позже
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.