Re[6]: Догонит ли net java?
От: VladiCh  
Дата: 11.12.22 23:51
Оценка: +1
Здравствуйте, ·, Вы писали:

·>Здравствуйте, VladiCh, Вы писали:


vsb>>>Я про жаву а не про ломбок.

VC>>Ну Lombok это просто плагин к компилятору Java по сути, а не что-то отдельное.
·>Неправда.
·>

Lombok is a huge hack that will only compile using javac or eclipse's compiler.

·>Мы это уже тут обсудили выше и в качестве действительно стандартного решения я нашел https://github.com/Randgalt/record-builder

Не понял, что в том что я сказал неправда? Используется стандартный механизм "JSR 269 Pluggable Annotation Processing API"
То что во внутренней логике у него хак на хаке — это здесь вторичное. Большинство стандартных билд механизмов поддерживается — https://projectlombok.org/contributing/lombok-execution-path
Re[6]: Догонит ли net java?
От: VladiCh  
Дата: 11.12.22 23:56
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, VladiCh, Вы писали:


HBV>>>>https://projectlombok.org/features/GetterSetter


vsb>>>Я про жаву а не про ломбок.


VC>>Ну Lombok это просто плагин к компилятору Java по сути, а не что-то отдельное.


vsb>Ломбок это отдельный язык. Похожий на Java, но это не Java. У Java-компилятора нет никаких плагинов. То, что он реализован, как annotation processing tool и в процессе вызова использует внутренние API компилятора через reflection и прочее — не делает его просто плагином. В Java нет разрешённого способа реализовать функционал ломбока без хаков. Lombok ломается при каждой крупной переработке внутренностей компилятора. И когда-нибудь сломается окончательно.


То что это annotation processing tool который работает compile time и делает его плагином к компилятору
Re[7]: Догонит ли net java?
От: vsb Казахстан  
Дата: 12.12.22 00:49
Оценка:
Здравствуйте, VladiCh, Вы писали:

vsb>>Ломбок это отдельный язык. Похожий на Java, но это не Java. У Java-компилятора нет никаких плагинов. То, что он реализован, как annotation processing tool и в процессе вызова использует внутренние API компилятора через reflection и прочее — не делает его просто плагином. В Java нет разрешённого способа реализовать функционал ломбока без хаков. Lombok ломается при каждой крупной переработке внутренностей компилятора. И когда-нибудь сломается окончательно.


VC>То что это annotation processing tool который работает compile time и делает его плагином к компилятору


У annotation processing tool есть определённый API. Этот API не позволяет делать то, что делает lombok. Чтобы lombok работал, используется хак в код компилятора.
Re[8]: Догонит ли net java?
От: VladiCh  
Дата: 12.12.22 02:00
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, VladiCh, Вы писали:


vsb>>>Ломбок это отдельный язык. Похожий на Java, но это не Java. У Java-компилятора нет никаких плагинов. То, что он реализован, как annotation processing tool и в процессе вызова использует внутренние API компилятора через reflection и прочее — не делает его просто плагином. В Java нет разрешённого способа реализовать функционал ломбока без хаков. Lombok ломается при каждой крупной переработке внутренностей компилятора. И когда-нибудь сломается окончательно.


VC>>То что это annotation processing tool который работает compile time и делает его плагином к компилятору


vsb>У annotation processing tool есть определённый API. Этот API не позволяет делать то, что делает lombok. Чтобы lombok работал, используется хак в код компилятора.


Это я понимаю. Я не понимаю почему ты считаешь что сам lombok это не плагин к компилятору. Пусть он и лезет в потроха самого компилятора чтобы делать то что он делает.
Отредактировано 12.12.2022 4:19 VladiCh . Предыдущая версия .
Re[7]: Догонит ли net java?
От: · Великобритания  
Дата: 12.12.22 08:27
Оценка:
Здравствуйте, VladiCh, Вы писали:

VC>>>Ну Lombok это просто плагин к компилятору Java по сути, а не что-то отдельное.

VC>·>Неправда.
VC>·>

Lombok is a huge hack that will only compile using javac or eclipse's compiler.

VC>·>Мы это уже тут обсудили выше и в качестве действительно стандартного решения я нашел https://github.com/Randgalt/record-builder
VC>Не понял, что в том что я сказал неправда? Используется стандартный механизм "JSR 269 Pluggable Annotation Processing API"
То что он делает, не укладывается в jsr269. К стандарту языка java это не имеет никакого отношения. С таким же успехом можно изобрести препроцессор javacpp и вызывать оттуда javac и обозвать это плагином, использующим стандартный javac.

VC>То что во внутренней логике у него хак на хаке — это здесь вторичное. Большинство стандартных билд механизмов поддерживается — https://projectlombok.org/contributing/lombok-execution-path

Тут даже написано, что для ecj вообще jsr269 не используется, а используется агент. И ещё требуется специальный плагин для IDE.
А действительно стандартное решение требует лишь поддержки jsr269 и всё. Ты можешь написать свою библиотеку, которая генерит код по jsr269 и она автоматом заработает везде. lombok же приходится подпиливать на каждую реализацию и иногда даже версию компилятора.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[8]: Догонит ли net java?
От: VladiCh  
Дата: 12.12.22 09:34
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, VladiCh, Вы писали:


VC>>>>Ну Lombok это просто плагин к компилятору Java по сути, а не что-то отдельное.

VC>>·>Неправда.
VC>>·>

Lombok is a huge hack that will only compile using javac or eclipse's compiler.

VC>>·>Мы это уже тут обсудили выше и в качестве действительно стандартного решения я нашел https://github.com/Randgalt/record-builder
VC>>Не понял, что в том что я сказал неправда? Используется стандартный механизм "JSR 269 Pluggable Annotation Processing API"
·>То что он делает, не укладывается в jsr269. К стандарту языка java это не имеет никакого отношения. С таким же успехом можно изобрести препроцессор javacpp и вызывать оттуда javac и обозвать это плагином, использующим стандартный javac.

VC>>То что во внутренней логике у него хак на хаке — это здесь вторичное. Большинство стандартных билд механизмов поддерживается — https://projectlombok.org/contributing/lombok-execution-path

·>Тут даже написано, что для ecj вообще jsr269 не используется, а используется агент. И ещё требуется специальный плагин для IDE.
·>А действительно стандартное решение требует лишь поддержки jsr269 и всё. Ты можешь написать свою библиотеку, которая генерит код по jsr269 и она автоматом заработает везде. lombok же приходится подпиливать на каждую реализацию и иногда даже версию компилятора.

Это все понятно, непонятно о чем здесь спор со мной. О том что нельзя Lombok назвать плагином к компилятору кажется? Тогда причем здесь "стандарт языка java"? Ты что-то додумываешь из того чего в моем сообщении не было. JSR 269 так и называется — Pluggable Annotation Processing API. Вызывается compile time. Только по этим критериям любой тул который использует этот API является плагином к компилятору, безотносительно того что он делает внутри. Все хаки и все такое прочее — это тоже побоку по большому счету. К рассматриваемому вопросу это имеет мало отношения. Lombok делает плюс минус то что и авто-проперти в C#, путем встраивания в "стандартный" javac через стандартный интерфейс + определенное нестандартное вуду с его внутренностями.
Re[9]: Догонит ли net java?
От: · Великобритания  
Дата: 12.12.22 10:25
Оценка:
Здравствуйте, VladiCh, Вы писали:

VC>·>А действительно стандартное решение требует лишь поддержки jsr269 и всё. Ты можешь написать свою библиотеку, которая генерит код по jsr269 и она автоматом заработает везде. lombok же приходится подпиливать на каждую реализацию и иногда даже версию компилятора.

VC>Это все понятно, непонятно о чем здесь спор со мной. О том что нельзя Lombok назвать плагином к компилятору кажется?
В лучшем случае его можно назвать плагином к oracle javac.

VC> Тогда причем здесь "стандарт языка java"? Ты что-то додумываешь из того чего в моем сообщении не было. JSR 269 так и называется — Pluggable Annotation Processing API. Вызывается compile time.

В случае eclipse compiler используется java agent судя по твоей же ссылке. А так же не может использоваться этот jsr в IDE, нужен специальный плагин.

VC> Только по этим критериям любой тул который использует этот API является плагином к компилятору, безотносительно того что он делает внутри. Все хаки и все такое прочее — это тоже побоку по большому счету. К рассматриваемому вопросу это имеет мало отношения. Lombok делает плюс минус то что и авто-проперти в C#, путем встраивания в "стандартный" javac через стандартный интерфейс + определенное нестандартное вуду с его внутренностями.

То что Остап Бендер заявляет, что чтит уголовный кодекс, не делает его законопослушным гражданином.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[21]: Догонит ли net java?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.12.22 13:02
Оценка:
Здравствуйте, ·, Вы писали:

НС>>А я и не говорил что работает всегда. Зато когда оно работает ...

·>Хреново оно работает.

Наоборот — шикарно, цикл разработки сокращается в разы. Во первых, требует в разы меньше тестов. Во вторых, меньше интеграционного кода, меньше шансов сломать. В третьих, в таких случаех обычно измненения требуют перекомпиляции, а не переписывания всего подряд что связано с переносом параметра из квери в хидеры.

·>Дело в том, что "прямой" генератор описания по коду невозможно написать даже теоретически.


2023й год на дворе, очнись.

·>Код — это тьюринг-полный яп, а описание — довольно примитивный язык разметки структур данных.


Метаданные у вас не изобрели, понимаю.

·>Можно, конечно, придумать поверх яп какой-то набор правил и соглашений (которые как формализовать-то? как валидировать?), следуя которым будем писать код, по которому может сгенериться вменяемое описание. Но зачем придумывать ещё один язык?..


Не надо изобретать — есть декларативные способы задания аспектов апи. Работают сами по себе, без приседаний. Они выдают метаданные. Подхватил метаданные — нагенерил хучь что хошь. Можешь генерить и тесты, и клиент, и солюшн для нового приложения, хоть скрипты деплоймента.
Манифест типа OpenAPI должен генерироватся каким протестированым надежным генератором по метаданным. Т.е. не руками писаться, а генерироваться!
Собственно на всех платформах есть сотни решений для этого, а для тебя это похоже рокет саенс.
Отредактировано 12.12.2022 13:04 Pauel . Предыдущая версия .
Re[22]: Догонит ли net java?
От: · Великобритания  
Дата: 12.12.22 14:16
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>·>Хреново оно работает.

НС>Всегда хреново работает?
Угу. Другое дело, что иногда хреновый результат может быть всё ещё годным на практике.

НС>>>Нет, это результат кривого генератора.

НС>·>Дело в том, что "прямой" генератор описания по коду невозможно написать даже теоретически.
НС>·>Код — это тьюринг-полный яп, а описание — довольно примитивный язык разметки структур данных.
НС>·>Можно, конечно, придумать поверх яп какой-то набор правил и соглашений (которые как формализовать-то? как валидировать?), следуя которым будем писать код, по которому может сгенериться вменяемое описание.
НС>Ну вот, ты сам на все ответил.
Ага. Ведь гланды можно удалять через разные места.

НС>·> Но зачем придумывать ещё один язык?..

НС>Это наоборот, заставлять писать руками на OpenAPI это придумывать еще один язык.
OpenAPI это уже существующий и стандартизованный язык. Не надо его придумывать. То же самое и для других случаев типа fix, avro, protobuf и т.п.

НС>>>·>Я знаю. Ты сам стал рассматривать такое api. Я сразу заявил, что это частный случай.

НС>>>Ничего не понял. API основанное на сценариях — частный случай?
НС>·>Смотри мою эту цитату
НС>Я ее уже смотрел. Это не отвечает на мои вопросы.
Ок. Отвечаю на этот вопрос: "API основанное на сценариях — частный случай?"
Понятия не имею откуда ты это взял и почему ты задаёшь мне этот вопрос, и коньяк я не пью по утрам.

НС>·> и выше "Это довольно частный пример. Впрочем даже в этом случае, можно поверх метода-всемогутера написать соответствующие клиентские юзкейсы конкретного клиента.".

НС>Ну и? Какой тут бенефит от генератора?
В том, что писать будешь используя сгенерированный код, имея все преимущества стротипизированного кода, а не писать всё с нуля.

НС>>>·>Ну вот нужен тебе сервис для общения через protobuf. Что ты предлагаешь писать вручную?

НС>>>Я не понимаю какое это имеет отношение к разговору.
НС>·>Лично я говорю о генерации кода по описаниям. А о чём говоришь ты — я не знаю.
НС>Я говорю о генерации моделей, я с самого начала про это написал. Генерировать сериализаторы, по крайней мере в дотнете, не нужно. Они сами справляются.
Что такое генерация моделей? И с какой целью их генерировать?

НС>>>Я не заявлял что я собираюсь писать json вручную. Я говорил о классах модели.

НС>·>Что за классы модели? И причём тут генерация кода?
НС>Ты совсем потерял нить разговора?
НС>

vsb>>Глаза закрывать? У меня есть файл, описывающий АПИ. В нём 5 строк кода, вызывающего что-то. В запросе/ответе по 30 полей, к примеру. Итого 65 строк осмысленного кода. И к этим 65 строкам прилагается 480 строк геттеров-сеттеров. И таких запросов, скажем, 20 штук. Лёгким движением руки из 1200 строк получаем 10 000.
НС>·>Обычно получается так, что API описывается каким-то внешним способом (FIX, swagger, avro, protobuf, етс) и код таких классов генерируется.

НС>При чем тут сериализация?
Притом, что "FIX, swagger, avro, protobuf, етс" — это всё разные способы сериализации.

НС>>>Разные модели — раз.

НС>>>Разные модели — два.
НС>·>Где что разное? Модели чего?
НС>Модели разные, а мы их пытаемся генератором преобразовать автоматически, получаем проблемы о которых я писал.
Модели чего разные? Преобразовать чего к чему? Говори конкретно.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[22]: Догонит ли net java?
От: · Великобритания  
Дата: 12.12.22 14:28
Оценка:
Здравствуйте, Pauel, Вы писали:

НС>>>А я и не говорил что работает всегда. Зато когда оно работает ...

P>·>Хреново оно работает.
P>Наоборот — шикарно, цикл разработки сокращается в разы. Во первых, требует в разы меньше тестов.
Ага-ага. И поэтому у вас всё постоянно валится и вам приходится в проде тестировать.

P>Во вторых, меньше интеграционного кода, меньше шансов сломать.

Потому что вы заблуждаетесь, что навешанные аннотации это не код и можно не тестировать. На самом деле, каждая повешанная аннотация — это точно такой же код, как и всё остальное, и требует соответствующих тестов.

P>В третьих, в таких случаех обычно измненения требуют перекомпиляции, а не переписывания всего подряд что связано с переносом параметра из квери в хидеры.

Это работает в лучшем случае на местечковых небольших проектах, где все свои. Попробуй какой-нибудь гугл в своём api переместит параметр из квари в хидер — так пол мира сломается.

P>·>Дело в том, что "прямой" генератор описания по коду невозможно написать даже теоретически.

P> 2023й год на дворе, очнись.
Ну математические теоремы ещё не научились опровергать.

P>·>Код — это тьюринг-полный яп, а описание — довольно примитивный язык разметки структур данных.

P>Метаданные у вас не изобрели, понимаю.
Метаданные — это просто ещё один язык описания. Т.е. вместо того, чтобы использовать стандарт типа grpc, вы изобретаете своё на квадратных колёсах.

P>·>Можно, конечно, придумать поверх яп какой-то набор правил и соглашений (которые как формализовать-то? как валидировать?), следуя которым будем писать код, по которому может сгенериться вменяемое описание. Но зачем придумывать ещё один язык?..

P>Не надо изобретать — есть декларативные способы задания аспектов апи.
Где они есть-то? Ссылочку на стандарт можно?

P>Работают сами по себе, без приседаний. Они выдают метаданные. Подхватил метаданные — нагенерил хучь что хошь. Можешь генерить и тесты, и клиент, и солюшн для нового приложения, хоть скрипты деплоймента.

P>Манифест типа OpenAPI должен генерироватся каким протестированым надежным генератором по метаданным. Т.е. не руками писаться, а генерироваться!
P>Собственно на всех платформах есть сотни решений для этого, а для тебя это похоже рокет саенс.
Вот именно, что сотни решений, у каждого свой велоспиед. А gprc — один, в этом и сила.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[23]: Догонит ли net java?
От: Ночной Смотрящий Россия  
Дата: 12.12.22 16:16
Оценка:
Здравствуйте, ·, Вы писали:

НС>>·>Хреново оно работает.

НС>>Всегда хреново работает?
·>Угу.

Сильное заявление. Обоснования будут?

НС>>Ну вот, ты сам на все ответил.

·>Ага. Ведь гланды можно удалять через разные места.

Через гланды это когда вместо одного языка описания модели — целая пачка, потому что возможностей основного языка не хватает.

НС>>Это наоборот, заставлять писать руками на OpenAPI это придумывать еще один язык.

·>OpenAPI это уже существующий и стандартизованный язык.

Тем не менее это еще один язык.

НС>>Я ее уже смотрел. Это не отвечает на мои вопросы.

·>Ок. Отвечаю на этот вопрос: "API основанное на сценариях — частный случай?"
·>Понятия не имею откуда ты это взял

НС>>API должно быть ориентировано на сценарии, иначе это плохое API, неудобное.
·> Я знаю. Ты сам стал рассматривать такое api. Я сразу заявил, что это частный случай.
НС> Ничего не понял. API основанное на сценариях — частный случай?


НС>>·> и выше "Это довольно частный пример. Впрочем даже в этом случае, можно поверх метода-всемогутера написать соответствующие клиентские юзкейсы конкретного клиента.".

НС>>Ну и? Какой тут бенефит от генератора?
·>В том, что писать будешь используя сгенерированный код

В чем бенефит?

·>, имея все преимущества стротипизированного кода, а не писать всё с нуля.


Что нужно писать с нуля и почему? Почему не хватает средств реюза языка и нужен генератор?

НС>>·>Лично я говорю о генерации кода по описаниям. А о чём говоришь ты — я не знаю.

НС>>Я говорю о генерации моделей, я с самого начала про это написал. Генерировать сериализаторы, по крайней мере в дотнете, не нужно. Они сами справляются.
·>Что такое генерация моделей?

Генерация классов C#/Java по какому то внешнему описанию не на C#/Java.

·> И с какой целью их генерировать?


Для описания метаданных в терминах компилятора строго типизированных язков.

·>Притом, что "FIX, swagger, avro, protobuf, етс" — это всё разные способы сериализации.


Нет конечно.

НС>>Модели разные, а мы их пытаемся генератором преобразовать автоматически, получаем проблемы о которых я писал.

·>Модели чего разные? Преобразовать чего к чему? Говори конкретно.

Конкретные примеры я уже приводил.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[22]: Догонит ли net java?
От: Ночной Смотрящий Россия  
Дата: 12.12.22 16:35
Оценка: +1
Здравствуйте, Pauel, Вы писали:

P>Наоборот — шикарно, цикл разработки сокращается в разы. Во первых, требует в разы меньше тестов. Во вторых, меньше интеграционного кода, меньше шансов сломать. В третьих, в таких случаех обычно измненения требуют перекомпиляции, а не переписывания всего подряд что связано с переносом параметра из квери в хидеры.


В-четвертых средства обобщения полноценного мейнстримового языка на две головы выше любого "стандартного" местечкового языка. В-пятых инструментарий мейнстримового языка где то в стратосфере относительно инструментария для какого нибудь нишевого решения типа OpenAPI.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[24]: Догонит ли net java?
От: · Великобритания  
Дата: 12.12.22 16:48
Оценка: +1
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Всегда хреново работает?

НС>·>Угу.
НС>Сильное заявление. Обоснования будут?
Вот же
Автор: varenikAA
Дата: 07.09.20
, выше уже приводил. Не можете даже шарп из шарпа заюзать, в итоге "писать клиентов нужно руками".

НС>>>Ну вот, ты сам на все ответил.

НС>·>Ага. Ведь гланды можно удалять через разные места.
НС>Через гланды это когда вместо одного языка описания модели — целая пачка, потому что возможностей основного языка не хватает.
Нет никакого богом данного языка описания модели, пока ты сам его не придумаешь. Ты ещё так и не ответил на вопросы: "как формализовать-то? как валидировать?".

НС>>>Это наоборот, заставлять писать руками на OpenAPI это придумывать еще один язык.

НС>·>OpenAPI это уже существующий и стандартизованный язык.
НС>Тем не менее это еще один язык.
В моей схеме это второй и последний язык, который в твоей схеме тоже есть. Только ты пытаешься генерить на этом языке из твоих аннотаций, которые по сути edsl, т.е. третий язык.

НС>>>Я ее уже смотрел. Это не отвечает на мои вопросы.

НС>·>Ок. Отвечаю на этот вопрос: "API основанное на сценариях — частный случай?"
НС>·>Понятия не имею откуда ты это взял
НС>

НС>>>API должно быть ориентировано на сценарии, иначе это плохое API, неудобное.
НС>·> Я знаю. Ты сам стал рассматривать такое api. Я сразу заявил, что это частный случай.
НС>> Ничего не понял. API основанное на сценариях — частный случай?

Ну т.е. это ты сам придумал, т.к. ничего не понял. Про частный случай я сказал только вот тут про твой API с одинм методом-всемогутером:

НС>И вот тут нам генератор породит и на клиенте метод-всемогутор, который, конечно, обладает максимальной гибкостью, но при этом еще и максимально неудобен, потому что нет ни одного юзкейса где нужны были бы все фильтры.
Это довольно частный пример.


НС>>>·> и выше "Это довольно частный пример. Впрочем даже в этом случае, можно поверх метода-всемогутера написать соответствующие клиентские юзкейсы конкретного клиента.".

НС>>>Ну и? Какой тут бенефит от генератора?
НС>·>В том, что писать будешь используя сгенерированный код
НС>В чем бенефит?
Ниже написал, после запятой.

НС>·>, имея все преимущества стротипизированного кода, а не писать всё с нуля.

НС>Что нужно писать с нуля и почему?
Вот по твоему же заявлению: "писать клиентов нужно руками".

НС>Почему не хватает средств реюза языка и нужен генератор?

Пусть дали тебе .proto-файл. Что делать будешь? Что реюзать?

НС>>>·>Лично я говорю о генерации кода по описаниям. А о чём говоришь ты — я не знаю.

НС>>>Я говорю о генерации моделей, я с самого начала про это написал. Генерировать сериализаторы, по крайней мере в дотнете, не нужно. Они сами справляются.
НС>·>Что такое генерация моделей?
НС>Генерация классов C#/Java по какому то внешнему описанию не на C#/Java.
Ты говоришь, что модели разные. Генерация из одного описания даёт одну модель. Откуда разные?

НС>·> И с какой целью их генерировать?

НС>Для описания метаданных в терминах компилятора строго типизированных язков.
Не очень понял. Что значит "генерировать для описания метаданных"? Пример, плз. Накой вообще при генерации нужно какое-то описание каких-то метаданных?

НС>·>Притом, что "FIX, swagger, avro, protobuf, етс" — это всё разные способы сериализации.

НС>Нет конечно.
Почему? Есть спеки, которые описывают как конкретные сообщения преобразуются в конкретные байты и обратно.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 12.12.2022 17:43 · . Предыдущая версия .
Re[16]: Догонит ли net java?
От: Gt_  
Дата: 12.12.22 17:10
Оценка: +1
НС>>>Можно. А вот если ты те модели выставишь в публичное API — скорее всего будет кака.
НС>·>Whatever, другое api может иметь другое описание и по нему тоже генериться код.

НС>Ну то есть вместо того чтобы просто написать модель мы вынужденны, в силу недостаточной выразительности языка, описывать ее на каком то другом языке и прикручивать генератор. ЧТД.


а как предлагается написать модель, если требуется два вида табличек — основная и историческая ? историческую наследовать от основной ? а как там у орм потом с планами не поедет крыша от наследований ? и зачем на это тратить ресурсы, если внешняя приблуда может сгенерить модели без всякого наследования ?
Re[23]: Догонит ли net java?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.12.22 17:44
Оценка:
Здравствуйте, ·, Вы писали:

P>>Наоборот — шикарно, цикл разработки сокращается в разы. Во первых, требует в разы меньше тестов.

·>Ага-ага. И поэтому у вас всё постоянно валится и вам приходится в проде тестировать.

Тесты в проде это признак отсутствия синдрома бога.

P>>Во вторых, меньше интеграционного кода, меньше шансов сломать.

·>Потому что вы заблуждаетесь, что навешанные аннотации это не код и можно не тестировать.

Наоборот, нужно, только не надо дублировать 100500 тестов либы которая для этого испольуется.

> На самом деле, каждая повешанная аннотация — это точно такой же код, как и всё остальное, и требует соответствующих тестов.


Парсер формата .proto тоже требует тестов. И это сторонняя либа. Соответсвенно в продукте нет необходимости заниматься дурью и дублирвать все тесты подобного рода.
А вот тесты апи всё равно надо делать, не важно чем ты это апи пропишешь. Или у вас и таких тестов тоже нет?

P>>В третьих, в таких случаех обычно измненения требуют перекомпиляции, а не переписывания всего подряд что связано с переносом параметра из квери в хидеры.

·>Это работает в лучшем случае на местечковых небольших проектах, где все свои. Попробуй какой-нибудь гугл в своём api переместит параметр из квари в хидер — так пол мира сломается.

Цикл разработки версии — месяцы, иногда и годы. И нужен быстрый способ менять апи в разработке.

·>Метаданные — это просто ещё один язык описания. Т.е. вместо того, чтобы использовать стандарт типа grpc, вы изобретаете своё на квадратных колёсах.


А ты похоже не в курсе, что нет полноценного grpc для веба, т.к. браузер и особенно приложение унутре, не контролируют полностью протокол хттп. А вот где грпц играет — в изолированой сети, когда созданы специальные условия.

P>>Не надо изобретать — есть декларативные способы задания аспектов апи.

·>Где они есть-то? Ссылочку на стандарт можно?

grpcs это один из таких вариантов. Одна проблема — для веба не летает. А потому фремворки умеют все эти вещи.
еще есть graphql. И много чего есть. Фичи конкретного фремворка это эквивалентное решение.

P>>Собственно на всех платформах есть сотни решений для этого, а для тебя это похоже рокет саенс.

·>Вот именно, что сотни решений, у каждого свой велоспиед. А gprc — один, в этом и сила.

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

Теоретически, когда grpc вылезет из своей конуры, это будет прорыв в вебе. Но шота предпосылок к этому не имеется.
Re[24]: Догонит ли net java?
От: · Великобритания  
Дата: 12.12.22 20:31
Оценка:
Здравствуйте, Pauel, Вы писали:

P>>>Во вторых, меньше интеграционного кода, меньше шансов сломать.

P>·>Потому что вы заблуждаетесь, что навешанные аннотации это не код и можно не тестировать.
P>Наоборот, нужно, только не надо дублировать 100500 тестов либы которая для этого испольуется.
Если у тебя в c#-коде сервер есть аннотация [Header("blah")], то где-то в js-коде клиента надо будет интеграционно тестировать, что это именно этот хедер именно с этим именем именно на этом параметре. И так надо для каждого параметра и метода, и для каждой реализации клиента. В случае же если у вас будет написана спека openapi, то вам достаточно проверить, что клиент и сервер используют одинаковую спеку (банально сравнить контрольную сумму). В худшем случае протестировать совместимость пар версий спек (часто это можно сделать алгоритмически, см avro schema evolution rules).
Справедливо заметить, что всё равно нужно будет тестировать логику в любом случае, но, по крайней мере, 90% случаев интеграции хотя бы по типам и структуре данных это покроет (ту самую проблему, с которой тут началось обсуждение о dto-шках с 40 полями).

>> На самом деле, каждая повешанная аннотация — это точно такой же код, как и всё остальное, и требует соответствующих тестов.

P>Парсер формата .proto тоже требует тестов.
Это не ваша забота. Этим занимаются инженеры гугла и тестируется всем миром.

P>И это сторонняя либа. Соответсвенно в продукте нет необходимости заниматься дурью и дублирвать все тесты подобного рода.

P>А вот тесты апи всё равно надо делать, не важно чем ты это апи пропишешь. Или у вас и таких тестов тоже нет?
Если оба потребителя апи используют ту же спеку, то они совместимы by-design.
Т.е. вы можете тестировать свой c#-сервер используя тестовый c#-клиент. А реальные пользователи могут использовать js-клиент, если он по той же спеке.

P>>>В третьих, в таких случаех обычно измненения требуют перекомпиляции, а не переписывания всего подряд что связано с переносом параметра из квери в хидеры.

P>·>Это работает в лучшем случае на местечковых небольших проектах, где все свои. Попробуй какой-нибудь гугл в своём api переместит параметр из квари в хидер — так пол мира сломается.
P>Цикл разработки версии — месяцы, иногда и годы. И нужен быстрый способ менять апи в разработке.
Ну так в том же openapi это переместить парам из "in: query" в "in: header" и собственно всё. Сгеренённые сигнатуры методов, скорее всего, и не поменяются.

P>·>Метаданные — это просто ещё один язык описания. Т.е. вместо того, чтобы использовать стандарт типа grpc, вы изобретаете своё на квадратных колёсах.

P>А ты похоже не в курсе, что нет полноценного grpc для веба, т.к. браузер и особенно приложение унутре, не контролируют полностью протокол хттп. А вот где грпц играет — в изолированой сети, когда созданы специальные условия.
Во-первых, в курсе. Во-вторых, и чё? В-третьих, rest это вовсе не означает, что непременно браузер. В-четвёртых, это просто пример. Пусть будет openapi вместо gprc, суть моего тезиса не менятеся.

P>>>Не надо изобретать — есть декларативные способы задания аспектов апи.

P>·>Где они есть-то? Ссылочку на стандарт можно?
P>grpcs это один из таких вариантов. Одна проблема — для веба не летает. А потому фремворки умеют все эти вещи.
P>еще есть graphql. И много чего есть. Фичи конкретного фремворка это эквивалентное решение.
Не очень понял. Какие именно "декларативные способы задания аспектов апи" ты имел в виду?

P>>>Собственно на всех платформах есть сотни решений для этого, а для тебя это похоже рокет саенс.

P>·>Вот именно, что сотни решений, у каждого свой велоспиед. А gprc — один, в этом и сила.
P>Пока что эта сила в веб вылезть не может. грпц это круто, только что делать в вебе? есть grpc-web, но это костыль и он убог.
P>Теоретически, когда grpc вылезет из своей конуры, это будет прорыв в вебе. Но шота предпосылок к этому не имеется.
Потому что всем интересно изобретение фреймворков на аннотациях для своих любимых яп, побыстрому колбасят code-first, получить бонус и потом тратят время и деньги заказчиков на "писать клиентов нужно руками".
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 12.12.2022 21:30 · . Предыдущая версия .
Re[25]: Догонит ли net java?
От: Ночной Смотрящий Россия  
Дата: 13.12.22 09:28
Оценка:
Здравствуйте, ·, Вы писали:

НС>>Сильное заявление. Обоснования будут?

·>Вот же
Автор: varenikAA
Дата: 07.09.20
, выше уже приводил. Не можете даже шарп из шарпа заюзать, в итоге "писать клиентов нужно руками".


Единичный баг как обоснование заявления с квантором всеобщности?

НС>>Через гланды это когда вместо одного языка описания модели — целая пачка, потому что возможностей основного языка не хватает.

·>Нет никакого богом данного языка описания модели

Зато есть основной рабочий язык разработчика.

НС>>Тем не менее это еще один язык.

·>В моей схеме это второй и последний язык,

Только в одном маленьком аспекте.

·>Только ты пытаешься генерить на этом языке из твоих аннотаций, которые по сути edsl, т.е. третий язык.


Нет. Потому что в 99% случаев аннотации вообще не нужны, а там где нужны — они крайне примитивны и в стандартном синтаксисе основного языка.

НС>>·>, имея все преимущества стротипизированного кода, а не писать всё с нуля.

НС>>Что нужно писать с нуля и почему?
·>Вот по твоему же заявлению: "писать клиентов нужно руками".

И где здесь "с нуля"?

НС>>Почему не хватает средств реюза языка и нужен генератор?

·>Пусть дали тебе .proto-файл.

Пусть мне не давали .proto файл.

НС>>·>Что такое генерация моделей?

НС>>Генерация классов C#/Java по какому то внешнему описанию не на C#/Java.
·>Ты говоришь, что модели разные. Генерация из одного описания даёт одну модель. Откуда разные?

В том и проблема, что модель получается одна, хотя нужны разные.

НС>>·> И с какой целью их генерировать?

НС>>Для описания метаданных в терминах компилятора строго типизированных язков.
·>Не очень понял. Что значит "генерировать для описания метаданных"? Пример, плз. Накой вообще при генерации нужно какое-то описание каких-то метаданных?

Метаданные .NET -> генератор -> OpenAPI spec

НС>>·>Притом, что "FIX, swagger, avro, protobuf, етс" — это всё разные способы сериализации.

НС>>Нет конечно.
·>Почему?

Потому что спецификация API это намного больше чем просто сериализация.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[17]: Догонит ли net java?
От: Ночной Смотрящий Россия  
Дата: 13.12.22 09:29
Оценка:
Здравствуйте, Gt_, Вы писали:

НС>>Ну то есть вместо того чтобы просто написать модель мы вынужденны, в силу недостаточной выразительности языка, описывать ее на каком то другом языке и прикручивать генератор. ЧТД.

Gt_>а как предлагается написать модель, если требуется два вида табличек — основная и историческая ? историческую наследовать от основной ?

Не понимаю какое это имеет оношение к обсуждаемому вопросу.

Gt_>а как там у орм потом с планами не поедет крыша от наследований ?


Ты меня с кем то перепутал. Я наоборот предлагал наследование не использовать по возможности.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[18]: Догонит ли net java?
От: Gt_  
Дата: 13.12.22 10:12
Оценка:
НС>>>Ну то есть вместо того чтобы просто написать модель мы вынужденны, в силу недостаточной выразительности языка, описывать ее на каком то другом языке и прикручивать генератор. ЧТД.
Gt_>>а как предлагается написать модель, если требуется два вида табличек — основная и историческая ? историческую наследовать от основной ?

НС>Не понимаю какое это имеет оношение к обсуждаемому вопросу.


Gt_>>а как там у орм потом с планами не поедет крыша от наследований ?


НС>Ты меня с кем то перепутал. Я наоборот предлагал наследование не использовать по возможности.


я ничего не путаю, именно ты собрался в рукопашную писать модели, пользуясь выразительностью языка (тм)
по мне, так очень необычный подход. потому и спрашиваю, вот в случае основной и исторической таблички, что предлагается — пользоваться той самой выразительностью языка и наследовать ? может для каждого понятие врукопашную перестукивать все поля, сначала для основной, потом для исторической ? пока это вопрос, понять, что в противовес DSL языку предлагается.
Отредактировано 13.12.2022 10:13 Gt_ . Предыдущая версия .
Re[26]: Догонит ли net java?
От: · Великобритания  
Дата: 13.12.22 11:41
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Сильное заявление. Обоснования будут?

НС>·>Вот же
Автор: varenikAA
Дата: 07.09.20
, выше уже приводил. Не можете даже шарп из шарпа заюзать, в итоге "писать клиентов нужно руками".

НС>Единичный баг как обоснование заявления с квантором всеобщности?
"В свое время перебрали пачку генераторов" — вполне таки квантор всеобщности. Или ты имел в виду клиенты для этого конкретного сервиса? Или за два года этот самый единичный баг поправили наконец?

НС>>>Через гланды это когда вместо одного языка описания модели — целая пачка, потому что возможностей основного языка не хватает.

НС>·>Нет никакого богом данного языка описания модели
НС>Зато есть основной рабочий язык разработчика.
Ты говоришь о каком-то игрушечном проекте, видимо. В реальности одним ЯП ну никак не обойтись.

НС>>>Тем не менее это еще один язык.

НС>·>В моей схеме это второй и последний язык,
НС>Только в одном маленьком аспекте.
Что?

НС>·>Только ты пытаешься генерить на этом языке из твоих аннотаций, которые по сути edsl, т.е. третий язык.

НС>Нет. Потому что в 99% случаев аннотации вообще не нужны, а там где нужны — они крайне примитивны и в стандартном синтаксисе основного языка.
Т.е. ты хочешь сказать, что можно наколбасить произвольный c# код и любому коду некий генератор может сгенерить юзабельную схему? Имя генератора в студию!

НС>>>·>, имея все преимущества стротипизированного кода, а не писать всё с нуля.

НС>>>Что нужно писать с нуля и почему?
НС>·>Вот по твоему же заявлению: "писать клиентов нужно руками".
НС>И где здесь "с нуля"?
А с чего?

НС>>>Генерация классов C#/Java по какому то внешнему описанию не на C#/Java.

НС>·>Ты говоришь, что модели разные. Генерация из одного описания даёт одну модель. Откуда разные?
НС>В том и проблема, что модель получается одна, хотя нужны разные.
Разные модели чего? где? и для чего?

НС>>>Для описания метаданных в терминах компилятора строго типизированных язков.

НС>·>Не очень понял. Что значит "генерировать для описания метаданных"? Пример, плз. Накой вообще при генерации нужно какое-то описание каких-то метаданных?
НС>Метаданные .NET ->
Подробнее, что такое "Метаданные .NET"? Аннотации?

НС> генератор -> OpenAPI spec

Ок, ну допустим. А дальше? "писать клиентов нужно руками"?

НС>>>·>Притом, что "FIX, swagger, avro, protobuf, етс" — это всё разные способы сериализации.

НС>>>Нет конечно.
НС>·>Почему?
НС>Потому что спецификация API это намного больше чем просто сериализация.
Понятно, конечно. Но тут мы вроде обсуждение с dto-шек с 40 полями начали. И именно это покрывается сериализацией, поэтому в контексте обсуждения это таки сериализация.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.