Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В книге упрощенный пример, на производительность не оптимизировался. Я его постоянно допиливаю в разных направлениях для текущих проектов, но целенаправленно по производительности не менял, за исключением того что в stringify убрал большие тормоза (проявлялись на очень больших объектах под десятки Мб). Могу скинуть текущую рабочую версию в личку.
Сам я не в теме json, только знакомлюсь. Увидел этот бенчмарк. Заинтересовал вопрос производительности перед тем, как погружаться.
Будет полезно, если выложите свое решение в КБ. Спасибо.
Сам я не в теме json, только знакомлюсь. Увидел этот бенчмарк. Заинтересовал вопрос производительности перед тем, как погружаться.
Будет полезно, если выложите свое решение в КБ. Спасибо.
Текущая версия toyjson дает примерно такое же быстродействие, что и приведенное в блоге решение на MQL, НО! Большое НО! Сравнение в блоге абсолютно некорректное, потому что там для проверки tcl -- сообщение сперва парсится и транслируется в объект tcl, плюс сам код tcl транслируется в инструкции ("машинный код tcl") и только потом выполняется засечка времени для выполнения оттранслированной tcl-функции на оттранслированном json-объекте. Если бы все эти трансляции запихули в 1000 циклов повтора, как для MQL, быстродействие было б гораздо хуже.
В качестве аналогии, мы тоже можем написать процедуру предварительного парсинга и трансляции json-текста в нативные структуры MQL, а потом засекать время только на зацикленный просмотр внутри этих структур - получим супер-быстродействие. Но нужно потратиться на предварительное написание такого преобразователя.
PS. Ради прикола сейчас вынес начальный парсинг из цикла и получил ускорение в 33 раза, что быстрее tcl в 4 раза ;-).
Текущая версия toyjson дает примерно такое же быстродействие, что и приведенное в блоге решение на MQL, НО! Большое НО! Сравнение в блоге абсолютно некорректное, потому что там для проверки tcl -- сообщение сперва парсится и транслируется в объект tcl, плюс сам код tcl транслируется в инструкции ("машинный код tcl") и только потом выполняется засечка времени для выполнения оттранслированной tcl-функции на оттранслированном json-объекте. Если бы все эти трансляции запихули в 1000 циклов повтора, как для MQL, быстродействие было б гораздо хуже.
В качестве аналогии, мы тоже можем написать процедуру предварительного парсинга и трансляции json-текста в нативные структуры MQL, а потом засекать время только на зацикленный просмотр внутри этих структур - получим супер-быстродействие. Но нужно потратиться на предварительное написание такого преобразователя.
PS. Ради прикола сейчас вынес начальный парсинг из цикла и получил ускорение в 33 раза.
как автор того самого "бенчамрка"..
вы не правы. При первом вызове код процедуры tcl собирается в байт код. Но только код, а не передаваемые ему данные. Точно так-же с MQL - время компиляции мы же не включаем в тесты ?
PS. Ради прикола сейчас вынес начальный парсинг из цикла и получил ускорение в 33 раза, что быстрее tcl в 4 раза ;-).
это только конвертация текста в utf-8
если её поставить в цикл, дополнительно посчитаете время StringToCharArray
это только конвертация текста в utf-8
если её поставить в цикл, дополнительно посчитаете время StringToCharArray
Я не знаком с Tcl, потому использую открытые источники:
For a JSON object the Tcl_Obj is a dictionary, for an array it is a list, and so on. This allows efficient use of the contained values by Tcl
Это не строка уже!
При этом сам парсинг в этот словарь делает не Tcl, а библиотека RL_JSON, написанная на C++.
RL_JSON. This package adds a command [json] to the interpreter, and defines a new Tcl_Obj type to store the parsed JSON document.
Не надо мошенничать.
Я не знаком с Tcl, потому использую открытые источники:
Это не строка уже!
При этом сам парсинг в этот словарь делает не Tcl, а библиотека RL_JSON, написанная на C++.
Не надо мошенничать.
На входе в функцию там та-же самая строка.
tcl.Obj(string) это :
то есть в основном StringToCharArray() MQL и далее Tcl_NewStringObj(bytes, length)..если впихнёте его внутрь цикла - померяете StringToCharArray() заодно ;-)
Для пущей гарантии можно дополнительно сделать obj.Ref(). (в tcl сущность с более чем 1-й ссылкой становится константой, не будет mutable, внутреннее представление защищено)
Tcl_Obj objMessage=tcl.Ref(tcl.Ref(tcl.Obj(message)));
с тем-же прекрасным результатом:
-------
а то что язык расширяется библиотеками и парсинг (и многие прочие частности) делается в значительной части ими вас как-то смущает ?
-------
если вам так спокойнее и удобнее - считайте что MQL просто превысил скорость света, и на скриншоте квантовые эффекты
На входе в функцию там та-же самая строка.
tcl.Obj(string) это :
то есть в основном StringToCharArray() MQL и далее Tcl_NewStringObj(bytes, length)..если впихнёте его внутрь цикла - померяете StringToCharArray() заодно ;-)
Для пущей гарантии можно дополнительно сделать obj.Ref(). (в tcl сущность с более чем 1-й ссылкой становится константой, не будет mutable, внутреннее представление защищено)
Tcl_Obj objMessage=tcl.Ref(tcl.Ref(tcl.Obj(message)));
с тем-же прекрасным результатом:
-------
а то что язык расширяется библиотеками и парсинг (и многие прочие частности) делается в значительной части ими вас как-то смущает ?
-------
если вам так спокойнее и удобнее - считайте что MQL просто превысил скорость света, и на скриншоте квантовые эффекты
Вы либо плохо сами знаете Tcl, либо нагло манипулируете. Объект [json], встроенный в Tcl через упомянутую мною выше библиотеку, кеширует json-строки (ключи) в словаре во время первого парсинга и оставляет их в словаре для всех последующих использований (даже другими объектами) вплоть до завершения текущей сессии Tcl. Получается, что при вашем тесте с циклом в 1000, Tcl на самом деле парсит json однократно, а потом просто просматривает словарь.
Я привел тайминг для адекватного теста, когда парсинг в MQL тоже делается однократно и существенно обгоняет Tcl. Делайте разбор сообщения в Tcl не через [json], а напрямую - это и будет "быстродействие" Tcl. А подключить оптимизированную DLL для работы c json мы можем и в MQL.
Попросил бы не флудить более в данном топике.
Вы либо плохо сами знаете Tcl, либо нагло манипулируете. Объект [json], встроенный в Tcl через упомянутую мною выше библиотеку, кеширует json-строки (ключи) в словаре во время первого парсинга и оставляет их в словаре для всех последующих использований (даже другими объектами) вплоть до завершения текущей сессии Tcl. Получается, что при вашем тесте с циклом в 1000, Tcl на самом деле парсит json однократно, а потом просто просматривает словарь.
Я привел тайминг для адекватного теста, когда парсинг в MQL тоже делается однократно и существенно обгоняет Tcl. Делайте разбор сообщения в Tcl не через [json], а напрямую - это и будет "быстродействие" Tcl. А подключить оптимизированную DLL для работы c json мы можем и в MQL.
Попросил бы не флудить более в данном топике.
считайте как вам угодно, как вам нравится..хоть что солнце встаёт и заходит на севере..выше про это написал.
а собственно флуд вы и поднимаете. Ещё и хамите
Как только ИИ дойдёт до уровня человека, то не только программисты, а ещё целый вагон профессий перейдут в разряд "промт-инженер-консультант для ИИ". Но знания всё равно нужны будут, чтобы понимать куда направлять.
Тут подумал, что если в самом учебнике MQL4 давать сноски на то, как это будет в МQL5, то получится 3-я книга. Причём, самая толстая.
А зачем нужна книга по четверке? Я ее использую исключительно потому, что за статьи на инвестсоциал платят бонусы на четверочный счет. Не пропадать же добру. А так только пятерка.