OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 12:54

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Четверг, 14 Ноябрь, 2019 17:46 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Соответственно, вот такой вот вопрос.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 14 Ноябрь, 2019 19:21 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Надо начинать с JSON-RPC


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 04:25 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Что такое LSP в данном уопросе? У аббревиатуры много вариантов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 09:46 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Language server protocol, насколько я понял


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 12:01 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Да, это он. Насколько трудоёмок json-rpc?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 13:44 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Собственно, просто JSON нужен. JSON-RPC это просто JSON-объект, оформленный согласно спецификации. Но вот, вся алгоритмическая часть, взаимодействия путём обмена JSON-объектами, она где-то нормально описана?

ЗЫ. Или есть описание этого LSP API, а JSON-RPC это просто способ вызова LSP API функций?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 14:24 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Сам LSP описан https://microsoft.github.io/language-se ... tion-3-14/
Вопрос скорее был о том, чего может не хватать в сетевых средствах A2. Я правильно понимаю, что с json не всё хорошо? Что-то не нашёл такого слова в исходниках A2


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 14:46 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
budden писал(а):
Вопрос скорее был о том, чего может не хватать в сетевых средствах A2. Я правильно понимаю, что с json не всё хорошо? Что-то не нашёл такого слова в исходниках A2
Я так понимаю, из сетевых средств для LPS нужен HTTP. HTTP код вроде как в А2 есть. И сервера и клиенты. Правда, веб-браузер, похоже, сильно поломан. Не поломан-ли и HTTP? :roll:
А JSON нужно реализовывать. Через рифлекшен, желательно. Рифлекшен тоже, вроде-как есть, но без пол-литры в нём не разобраться...
Самая лучшая дока по рифлекшену - сказали, код модуля Heaps. Но там и сборщик мусора в Heaps. Как-то всё намешано.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 14:54 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
В общем, в результате моих копаний в рифлекшене, я понял, что статическая информация о типах вполне удобно размещена в объектных модулях. Своебразный такой бинарный BLOB с полной информацией о всех типах в модуле. Это всё замечательно. Но получить динамическую, так-сказать, информацию - значения полей классов и записей, переменных и т.д. как-то совсем не просто - надо, действительно, копаться в Heaps


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 15:06 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Т.е. с чего надо было-бы начать, так это допилить рифлекшен до какого-то вменяемого состояния, что-бы он был так же прост как Go. С рифлекшеном в Go я за пол часа разобрался и написал универсальный обход структур. Не законченный, конечно, вариант, но ход мысли понятен.
Будет рифлекшен, будет и сериализация/десериализация в все форматы какие нужно.
XML в A2 по-особому реализован через property, а это уже слишком высокоуровневая штука.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 15:32 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Обход структур нужен и для отладочной печати. Прямо совсем без него грустно. Спасибо, что подтвердил мои опасения на тему того, что там проблема с этим. Я тоже чуть порылся в Meta, в Heaps и слёту не нашёл способа сделать отладочную печать объекта с именами и значениями полей...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 16:20 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Статическая информация о типах извлекается просто
Код:
MODULE M;

IMPORT
   Commands, Modules, Reflection;

PROCEDURE R*(context : Commands.Context);
VAR
   res: INTEGER;
   msg: ARRAY 32 OF CHAR;
BEGIN
   VAR mod := Modules.ThisModule("M", res, msg) : Modules.Module;
   IF res = Modules.Ok THEN
      Reflection.Report(context.out, mod.refs, 0);
   END
END R;

END M.R ~

System.Free M ~


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 17:58 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
А зачем нужен рефлекшн? Какие задачи он позволяет решить?
Мне кажется, что это относительно новое нововведение и как-то же обходились раньше без всяких рефлекшенов? А сейчас такое чувство, как будто - это must have для всех.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 18:11 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Можно не делать ни каких лазеек и продолжать дальше использовать Delphi, Go, C#, C++... сообразно со своим чувством прекрасного, цветом, запахом и вкусом.
Рифлекшен полезен для отладки, лёгкого вывода в лог структур, быстрого сохранения/чтения структур. Быстро, удобно, структурно :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 18:15 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Можно, конечно, и таким же образом сделать, как сейчас XML реализован, через свойства.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 18:16 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Правильно понимаю, что основное применение рефлекшена - это логирование структур данных?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 18:22 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Rifat писал(а):
Правильно понимаю, что основное применение рефлекшена - это логирование структур данных?
Логирование это лишь маленькое удобство, скажем так.
А в более общем смысле, можно целые объекты со множеством вложенных объектов запросто сохранять в байтовые массивы, передавать по сети, например, и на той стороне так же быстро восстанавливать структуры из байтовых массивов. Или писать/читать файлы на диске.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 18:32 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Вот, я оценивал сколько занимает по времени пропарсить CSV. Хороший же формат CSV, можно в нём хранить всё :D
http://sage.com.ua/ru.shtml?e3l1
Скорость парсинга CSV наглядно показыват, что парсинг любых форматов основанных на тексте создаёт бутылочное горлышко для производительности любой системы, использующей подобные форматы. Удалось "выжать" скорость парсинга CSV порядка 40 мс.
Потом я читал/сохранял эту же информацию в бинарном виде (с использование рифлекшена во FreePascal) и это чтение/запись бинарника занимало время около 1 мс, что примерно в 40 раз (!) быстрее. Есть разница???

Кстати, контора мелкософ тоже взлелеяла подобное бутылочное горлышко - формат JSON-RPC :mrgreen:
Быстрее было-бы гонять по сети бинарное представление.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 20:16 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Только не нужно забывать о том, что стороны сетевого диалога обязаны не доверять друг другу. Поэтому просто так скачивать указатели из сети не стоит, как-то разбор и проверка целостности должны быть и для бинарных форматов.

В лиспе, sql, прологе рефлекшн был всегда, а эти технологии новыми сложно назвать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2019 20:32 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Ярослав Романченко писал(а):
Статическая информация о типах извлекается просто

И если дальше к этому прилепить результаты изучения сборщика мусора в Heaps (который говорит о структуре объекта), то мы получим то, что надо?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB