OberonCore
https://forum.oberoncore.ru/

Реально ли написать клиента LSP на базе A2?
https://forum.oberoncore.ru/viewtopic.php?f=22&t=6482
Страница 1 из 2

Автор:  budden [ Четверг, 14 Ноябрь, 2019 17:46 ]
Заголовок сообщения:  Реально ли написать клиента LSP на базе A2?

Соответственно, вот такой вот вопрос.

Автор:  Ярослав Романченко [ Четверг, 14 Ноябрь, 2019 19:21 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Надо начинать с JSON-RPC

Автор:  Sergej Durmanov [ Пятница, 15 Ноябрь, 2019 04:25 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Что такое LSP в данном уопросе? У аббревиатуры много вариантов.

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 09:46 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Language server protocol, насколько я понял

Автор:  budden [ Пятница, 15 Ноябрь, 2019 12:01 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Да, это он. Насколько трудоёмок json-rpc?

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 13:44 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Собственно, просто JSON нужен. JSON-RPC это просто JSON-объект, оформленный согласно спецификации. Но вот, вся алгоритмическая часть, взаимодействия путём обмена JSON-объектами, она где-то нормально описана?

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

Автор:  budden [ Пятница, 15 Ноябрь, 2019 14:24 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

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

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 14:46 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

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

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 14:54 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

В общем, в результате моих копаний в рифлекшене, я понял, что статическая информация о типах вполне удобно размещена в объектных модулях. Своебразный такой бинарный BLOB с полной информацией о всех типах в модуле. Это всё замечательно. Но получить динамическую, так-сказать, информацию - значения полей классов и записей, переменных и т.д. как-то совсем не просто - надо, действительно, копаться в Heaps

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 15:06 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Т.е. с чего надо было-бы начать, так это допилить рифлекшен до какого-то вменяемого состояния, что-бы он был так же прост как Go. С рифлекшеном в Go я за пол часа разобрался и написал универсальный обход структур. Не законченный, конечно, вариант, но ход мысли понятен.
Будет рифлекшен, будет и сериализация/десериализация в все форматы какие нужно.
XML в A2 по-особому реализован через property, а это уже слишком высокоуровневая штука.

Автор:  budden [ Пятница, 15 Ноябрь, 2019 15:32 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

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

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 16:20 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Статическая информация о типах извлекается просто
Код:
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 ~

Автор:  Rifat [ Пятница, 15 Ноябрь, 2019 17:58 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

А зачем нужен рефлекшн? Какие задачи он позволяет решить?
Мне кажется, что это относительно новое нововведение и как-то же обходились раньше без всяких рефлекшенов? А сейчас такое чувство, как будто - это must have для всех.

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

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 18:11 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Можно не делать ни каких лазеек и продолжать дальше использовать Delphi, Go, C#, C++... сообразно со своим чувством прекрасного, цветом, запахом и вкусом.
Рифлекшен полезен для отладки, лёгкого вывода в лог структур, быстрого сохранения/чтения структур. Быстро, удобно, структурно :)

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 18:15 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Можно, конечно, и таким же образом сделать, как сейчас XML реализован, через свойства.

Автор:  Rifat [ Пятница, 15 Ноябрь, 2019 18:16 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Правильно понимаю, что основное применение рефлекшена - это логирование структур данных?

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 18:22 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

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

Автор:  Ярослав Романченко [ Пятница, 15 Ноябрь, 2019 18:32 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

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

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

Автор:  budden [ Пятница, 15 Ноябрь, 2019 20:16 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Только не нужно забывать о том, что стороны сетевого диалога обязаны не доверять друг другу. Поэтому просто так скачивать указатели из сети не стоит, как-то разбор и проверка целостности должны быть и для бинарных форматов.

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

Автор:  budden [ Пятница, 15 Ноябрь, 2019 20:32 ]
Заголовок сообщения:  Re: Реально ли написать клиента LSP на базе A2?

Ярослав Романченко писал(а):
Статическая информация о типах извлекается просто

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

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/