
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (56) « Первая ... 23 24 [25] 26 27 ... 55 56 ( Перейти к последнему сообщению ) |
Сообщ.
#361
,
|
|
|
Чтобы не обрабатывать названия полей run-time для тех полей, для которых название известно compile-time, что бывает чуть менее, чем всегда.
Цитата MyNameIsIgor @ А что нужно проверять компилятору? Он просто инстанцирует шаблон и генерит функцию для парсинга соответствующего поля json-объекта. Естественно это можно сделать только если имя поля известно уже на стадии компиляции:Ценность это фичи вообще не могу оценить. В чём смысл, если компилятор всё равно ничего проверить не в состоянии? ![]() ![]() json.myJsonField -> json.opDispatch!"myJsonField" Цитата MyNameIsIgor @ К такому свойству обратиться как свойству структуры не получится. Тогда используется какой-нибудь opIndex (аналог operator[]), где название поля передаётся уже run-time. Но насколько я знаю в обсуждаемом парсере это не реализовано. И что делать, если мне надо обратиться по имени свойства, полученному во время исполнения? |
Сообщ.
#362
,
|
|
|
Цитата applegame @ Чтобы не обрабатывать названия полей run-time для тех полей, для которых название известно compile-time, что бывает чуть менее, чем всегда. А что входит в понятие "обрабатывать"? Цитата applegame @ А что нужно проверять компилятору? Я о том и говорю - он ничего не может. Потому это возможность никак не влияет на возможности языка, просто синтаксическая фишка, ценность которой лично для меня сомнительна. |
Сообщ.
#363
,
|
|
|
Похоже, если строку обрабатывает код, написанный программистом, это называется рунтайм, а если точно такой же, но подставленный компилятором, то это уже рунтаймом не называется.
|
Сообщ.
#364
,
|
|
|
Цитата MyNameIsIgor @ Посмотрел код парсера, там действительно выгода не очень большая, но таки есть, а именно, длина имени поля известна compile-time, а значит не нужно ее вычислять в run-time, что слегка ускоряет сравнение строк.А что входит в понятие "обрабатывать"? Цитата MyNameIsIgor @ Ну я бы так не сказал. Обычно оно применяется для различного рода врапперов, что-то вроде operator-> на стероидах. А так да, синтаксическая фишка, так же как и operator->.Потому это возможность никак не влияет на возможности языка, просто синтаксическая фишка, ценность которой лично для меня сомнительна. Цитата amk @ Нет, compile-time - это если код выполняется на стадии компиляции. И совершенно без разницы написан ли код программистом или сгенерен компилятором.Похоже, если строку обрабатывает код, написанный программистом, это называется рунтайм, а если точно такой же, но подставленный компилятором, то это уже рунтаймом не называется. Что касается возможности передавать строки compile-time вообще, то это сильно помогает в работе с рефлексией. Я в свое время написал автоматические генераторы классов, для RPC (remote proсedure call) через сеть. Грубо говоря мы описываем интерфейс с функциями с параметрами и возвращаемымми значениями, а либа генерит классы для RPC-клиента и RPC-сервера унаследованные от этого интерфейса и реализующие его функции. Заняло примерно 150 строк не считая сериализатора и либы для работы с сетью. Возможность работы со строками в compile-time - это однозначный вин, не понимаю, как можно не понимать этого. |
![]() |
Сообщ.
#365
,
|
|
Помню, писал утилитку, собирающую из трёх Word-овых, одного Excel-ного документов, содержащий требования, шаблоны для итогов и выявленные несоответствия, и результатов запуска тестов с пасс/фэйлами и покрытием, два других Word-овых документа с итогами, требующимися для сертификационных органов. Писал через ActiveX-интерфейсы к MS Office, для лицензионной чистоты на MS Studio Express, поэтому на чистом IDispatch, без библиотек и TLB. Танунафик эту динамическую типизацию с run-time рефлексией.
|
Сообщ.
#366
,
|
|
|
Цитата Qraizer @ Дык в D статическая типизация со статической же рефлексией. Танунафик эту динамическую типизацию с run-time рефлексией. |
![]() |
Сообщ.
#367
,
|
|
Цитата Qraizer @ поэтому на чистом IDispatch, без библиотек и TLB. ![]() |
Сообщ.
#368
,
|
|
|
Цитата applegame @ Посмотрел код парсера, там действительно выгода не очень большая, но таки есть, а именно, длина имени поля известна compile-time, а значит не нужно ее вычислять в run-time, что слегка ускоряет сравнение строк. Хех, я надеялся, что во время компиляции меняется машина состояний парсера для обработки указанных свойств ![]() Не буду точно утверждать, но пока не вижу препятствий делать это же на constexpr функциях. Цитата applegame @ Что касается возможности передавать строки compile-time вообще, то это сильно помогает в работе с рефлексией. Что мне не понравилось в D - так это засилье строк. А правильно работать с AST как в Lisp или Nemerle. |
![]() |
Сообщ.
#369
,
|
|
Я знаю, applegame.
Зато бесплатно, jack128. У меня все внутренние продукты написаны на Стандартных Плюсах, чтобы компилилось и работало и на WinAPI, и на POSIX, ежели вдруг придётся переползти исключительно в unix-way. Фирма не тратит деньги на лицензии, если этого можно не делать, т.к. всякие там RTRT и LDRA и так стоят дофига, ещё Студий не хватало. |
![]() |
Сообщ.
#370
,
|
|
![]() |
Сообщ.
#371
,
|
|
Троллить пытаешься, Shaggy? Напрасно, у нас практически все target execution environment построены на POSIX.
|
Сообщ.
#372
,
|
|
|
Эммм... Народ, чёт я не догоняю. Когда я пишу в C++: someStruct.field = node["field"].asString(); (ну или как-то так) я тоже знаю имя поля в compile-time. В чём профит то?
|
Сообщ.
#373
,
|
|
|
Цитата MyNameIsIgor @ Да, я тоже надеялся. Он (парсер) достаточно примитивен, хз как ему удалось обогнать RapidJSON.Хех, я надеялся, что во время компиляции меняется машина состояний парсера для обработки указанных свойств ![]() Цитата MyNameIsIgor @ Это да, строковые миксины невероятно уродливы, но таки лучше чем ничего. Есть драфт с претензией на приличные макросы и даже ключевое слово macro зарезервировано, но так как это далеко не самое ужасное в D, то запил его отложен на неведомые времена.Что мне не понравилось в D - так это засилье строк. А правильно работать с AST как в Lisp или Nemerle. Цитата Flex Ferrum @ Эммм... Народ, чёт я не догоняю. Когда я пишу в C++: someStruct.field = node["field"].asString(); (ну или как-то так) я тоже знаю имя поля в compile-time. В чём профит то? В теории ничем, в реальности отличается тем, что ты передаешь указатель на строку через стек или регистр, параметр шаблона не передается никак. Кроме того при поиске поля приходится выполнять сравнивание переданного имени поля и названий полей считанных из JSON-файла. В обсуждаемом парсере сначала сравниваются длины названий полей, у считанного названия длина вычисляется в процессе парсинга, а у строки-параметра шаблона длина известна compile-time и просто компилируется в константу. |
Сообщ.
#374
,
|
|
|
Цитата applegame @ В теории ничем, в реальности отличается тем, что ты передаешь указатель на строку через стек или регистр, параметр шаблона не передается никак. Кроме того при поиске поля приходится выполнять сравнивание переданного имени поля и названий полей считанных из JSON-файла. В обсуждаемом парсере сначала сравниваются длины названий полей, у считанного названия длина вычисляется в процессе парсинга, а у строки-параметра шаблона длина известна compile-time и просто компилируется в константу. Ну ты же понимаешь, что при желании всё это можно сделать и на C++. |
Сообщ.
#375
,
|
|
|
Цитата Flex Ferrum @ Интересно как можно compile-time посчитать длину строки передаваемой как параметр функции, которая парсит соответствующий json-объект? Ну ты же понимаешь, что при желании всё это можно сделать и на C++. |