
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (56) « Первая ... 21 22 [23] 24 25 ... 55 56 ( Перейти к последнему сообщению ) |
Сообщ.
#331
,
|
|
|
Современные IDE, как правило, - комбайны, работающие с несколькими языками через плагины, так что смысла писать новую IDE под один язык не особо много.
|
Сообщ.
#332
,
|
|
|
Хороший С++ класс - это такой, глядя на который появляется чувство скуки.
![]() |
![]() |
Сообщ.
#333
,
|
|
Перенастрой подсветку кода, чтоб было нескучно, спроси у Попова как.
|
![]() |
Сообщ.
#334
,
|
|
Я тебя, надеюсь, правильно понял, korvin?
|
![]() |
Сообщ.
#335
,
|
|
Цитата Qraizer @ Я тебя, надеюсь, правильно понял, korvin? Э-м. Ну я даже не представляю, какие есть варианты понимания моего сообщения, поэтому не знаю, что ответить. |
Сообщ.
#336
,
|
|
|
Цитата Kray74 @ Современные IDE, как правило, - комбайны, работающие с несколькими языками через плагины, так что смысла писать новую IDE под один язык не особо много. Бегло глянул в сети - есть в разработке Qt Creator plugin for D language support, не пробовал пока. На гите указано, что два релиза уже вышло. |
Сообщ.
#337
,
|
|
|
Давненько я тут не писал.
![]() Случилась перемога: JSON-парсер написанный на D стал самым быстрым JSON-парсером среди всех языков, обогнав более чем в два раза (!) предыдущего чемпиона RapidJSON написанного на C++. Бенчмарки Обсуждение на реддите Одна из причин такой шустрости, а заодно преимущество D перед C++: Благодаря использованию opDispatch обращения к полям JSON-объекта возможно как к свойствам D-шной структуры. Например: json.coordinates будет скомпилировано в json.singleKey!("coordinates") - вызов функции с одним компайл-тайм аргументом и без ран-тайм аргументов вообще. В итоге парсер уже на стадии компиляции "знает" какие поля ему нужно парсить и валидировать, а какие можно пропустить. |
![]() |
Сообщ.
#338
,
|
|
Цитата applegame @ обогнав более чем в два раза (!) предыдущего чемпиона RapidJSON написанного на C++. Ага, 226 MB vs 1 MB. P.S. И да, баян, на LOR'е уже обсудили. =) https://www.linux.org.ru/news/opensource/12...omment-12028092 https://www.linux.org.ru/news/opensource/12...00?cid=12028749 https://www.linux.org.ru/news/opensource/12...00?cid=12028855 https://www.linux.org.ru/news/opensource/12...00?cid=12028984 |
Сообщ.
#339
,
|
|
|
Цитата korvin @ Это вырвиглазная SAX-версия, которой без слез нельзя пользоваться, тем более, что по скорости все равно проигрывает. А юзабельный DOM-вариант - 243 Мб против D-шного 226.Ага, 226 MB vs 1 MB. P.S. Это не баян - неделя всего прошла. А приведенные тобой ссылки - жалкий лепет. Никто не мешает включать в парсер на C++ такие же куски асма, SIMD и прочие оптимизации, но пока как-то слабо. ![]() Кроме того я выше описал чисто D-шную фичу. Добавлено korvin, но вообще обсуждение доставляющее, спасибо за ссылку ![]() ![]() ![]() |
![]() |
Сообщ.
#340
,
|
|
Цитата applegame @ Это вырвиглазная SAX-версия, которой без слез нельзя пользоваться, тем более, что по скорости все равно проигрывает. А юзабельный DOM-вариант - 243 Мб против D-шного 226. Чего? Какой SAX/DOM у JSON? Цитата applegame @ P.S. Это не баян - неделя всего прошла. А приведенные тобой ссылки - жалкий лепет. Никто не мешает включать в парсер на C++ такие же куски асма, SIMD и прочие оптимизации, но пока как-то слабо. ![]() Не слабо, а нафиг никому не упало в современном мире. D'шники просто живут в прошлом веке. =) Ещё Эрик Реймонд в "Философии Unix" писал, насколько незначительны затраты на парсинг текста (причём там речь шла о разборе произвольного текста, а не какого-то строгого формата) по сравнению с преимуществами использования текста вместо бинарных форматов. Ну и опять же, если уж нужен минимальный оверхед на сериализацию/десериализацию, таки используют бинарные форматы (gob, bson и т.п. Erlang, например использует бинарный формат для своих структур) либо более специализированный текстовый формат, который разобрать на любом языке будет не проблема. Впрочем, людей даже разбор xml (который в этом плане сложнее, чем json) не напрягает... Зато компилятор Go установить на винду (и, возможно, на осх) значительно проще, чем любой из трёх D'шных. =) И это сильно решает, на самом деле. Цитата applegame @ но вообще обсуждение доставляющее, спасибо за ссылку ![]() ![]() ![]() Всегда пожалуйста. |
Сообщ.
#341
,
|
|
|
Цитата applegame @ Случилась перемога Перемога имеет привычку превращаться в зраду. Цитата applegame @ JSON-парсер написанный на D стал самым быстрым JSON-парсером среди всех языков, обогнав более чем в два раза (!) предыдущего чемпиона RapidJSON написанного на C++. Трудно без профилирования сказать, где самое слабое место SAX варианта. Но сама идея некую схему JSON интегрировать в парсер мне понравилась. Если дело действительно в лишних вызовах обработчика в SAX, то есть есть мнение, что встраивание схемы даже во время исполнения даст тот же результат. Во время компиляции в C++ можно использовать для этого constexpr. В любом случае я над этим поразмышляю - здесь ещё может быть чёткое/нечёткое соответствие схеме, опциональные поля, действия для неуказанных в схеме полях... Интересно, короче. Цитата applegame @ Никто не мешает включать в парсер на C++ такие же куски асма, SIMD и прочие оптимизации, но пока как-то слабо. Это серьёзно аргумент за D? ![]() Цитата applegame @ Это вырвиглазная SAX-версия, которой без слез нельзя пользоваться, тем более, что по скорости все равно проигрывает. А юзабельный DOM-вариант - 243 Мб против D-шного 226. Стоп-стоп. Чемпион никакой DOM не даёт, а фактически массив десериализованных структур. Здесь, кстати, используется рефлексия, которая для C++ пока только в виде предложений. А вот DOM версия на D даёт результат 12.42 секунд и 1417.1 Mb против C++ DOM 0.94 секунды и 243.6 Mb. Это многое говорит о кодогенерации и потреблении памяти D. И именно эти два примера эквивалентны по функционалу, ибо мы вовсе не всегда знаем структуру JSON. Цитата korvin @ Чего? Какой SAX/DOM у JSON? Ну, просто такие выражения. Имеется в виду способ парсинга. |
Сообщ.
#342
,
|
|
|
Цитата korvin @ Чего? Какой SAX/DOM у JSON? Условное название способа парсинга. Можно сказать pull/push парсер, если тебе так больше нравится. Цитата korvin @ Если не можем обогнать, скажем, что это просто не нужно Не слабо, а нафиг никому не упало в современном мире. D'шники просто живут в прошлом веке. =) бла-бла-бла... ![]() На самом деле другим еще как упало, народ возбудился и начал реагировать, например тот самый С++ RapidJSON SAX бенчмарк пояаился буквально вчера. Цитата korvin @ Ну это явная ложь. DMD ставится на линупс, макось и винду не сложнее чем Go. Качается бинарный пакет и устанавливается стандартными средствами OS. Для винды это обычный exe-установщик. GDC и LDC - это да на винду поставить еще тот гемор.Зато компилятор Go установить на винду (и, возможно, на осх) значительно проще, чем любой из трёх D'шных. =) И это сильно решает, на самом деле. Цитата MyNameIsIgor @ Ага, именно поэтому это перемога, а не победа. Перемога имеет привычку превращаться в зраду. ![]() Цитата MyNameIsIgor @ По показателям потребления памяти RapidJSON SAX бенчмарк не эквивалентен, потому что не запоминает результаты парсинга. Если еще заполнять массив, а потом в цикле считать сумму как сделано в D-шном бенче, то результаты потребления памяти и скорости ухудшатся.Стоп-стоп. Чемпион никакой DOM не даёт, а фактически массив десериализованных структур. Здесь, кстати, используется рефлексия, которая для C++ пока только в виде предложений. А вот DOM версия на D даёт результат 12.42 секунд и 1417.1 Mb против C++ DOM 0.94 секунды и 243.6 Mb. Это многое говорит о кодогенерации и потреблении памяти D. И именно эти два примера эквивалентны по функционалу, ибо мы вовсе не всегда знаем структуру JSON. Что же касается "честного" DOM-парсера, то то что приведено в бенчмарке - это встроенный в стандартную либу достаточно убогий JSON-парсер, который устарел и планируется к замене. Самый быстрый на данный момент "честный" DOM-парсер на D - это кандидат в стандартную либу - std.data.json. Его в бенче нет, надо сделать соответствующий pull-request. Память он кушает также в районе 200Мб (фктически массив для хранения результатов парсинга), но по скорости уступает раза в три RapidJSON. Тут да, таки зрада. ![]() |
Сообщ.
#343
,
|
|
|
Цитата MyNameIsIgor @ Обработчики - это очень неудобно. В vibe.d сериализаторе аналогичная функциональность реализована через мета-атрибуты, в частности изменение имени поля, опциональность и игнорирование:В любом случае я над этим поразмышляю - здесь ещё может быть чёткое/нечёткое соответствие схеме, опциональные поля, действия для неуказанных в схеме полях... Интересно, короче. ![]() ![]() struct Data { @optional int a = 10; string b; @name("field") int[] c; @ignore List list; } |
Сообщ.
#344
,
|
|
|
Цитата applegame @ Обработчики - это очень неудобно Это не вопрос удобства, это вопрос необходимости, о чём нам говорит потребление памяти при SAX. |
Сообщ.
#345
,
|
|
|
Цитата MyNameIsIgor @ Цитата applegame @ Обработчики - это очень неудобно Это не вопрос удобства, это вопрос необходимости, о чём нам говорит потребление памяти при SAX. Низкое потребление памяти - следствие потокового парсинга с обработкой данных на лету, без запоминания результатов парсинга. Обработчики не имеют к этому прямого отношения. Аналогичное поведение можно сделать с помощью ленивых итераторов или ренджей. Я могу написать бенч для std.data.json с таким же мизерным потреблением памяти, правда не такой быстрый как рапид, но зато без обработчиков. Те 200+ мб кушают не сами парсеры, а распарсенные данные в массиве. |