|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
FB 3.0. В базе есть UDF с именем FORMAT_DATE. И я создал FUNCTION с именем FORMAT_DATE. Теперь я не могу сделать вызов UDF, так как она перекрывается обычной функцией. Надо ли идти с этим в трекер? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2018, 04:50 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Более того, я не могу удалить обычную функцию, так как на нее повесились все зависимости от UDF - по факту же она нигде не используется. Создал CORE-5905 . ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2018, 05:06 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
CyberMax, Internal function в данном случае термин не верный. Это походу IBExpert так смутил своими названиями. В реальности это PSQL функция. А Internal function это те функции которые встроены в FB, например SUBSTRING. Теперь по поводу external function. Их на самом деле 2 вида: новые UDR и старые (DECLARE EXTERNAL FUNCTION) или UDF (можно ещё назвать legacy external function). Ну это я так поворчал по поводу термином. По поводу бага полностью согласен. Одноимённые legacy external function/UDF и PSQL/UDR функции надо бы запретить создавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2018, 08:44 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денис, либо таки наконец ввести namespaces UDF$FORMAT_DATE, UDR$FORMAT_DATE, UDSQL$FORMAT_DATE ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2018, 16:32 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Arioch, в топку. Если уж и вводить то схемы. Нужны неймспейсы делай PSQL пакеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2018, 16:40 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денис, ну так введите имплицитный пакет Legacy куда и складывайте все UDF и с UDR аналогично чтобы в ядре (в зависимостях, в планах, в BLR) было полное имя объекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2018, 16:45 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Arioch, легаси нельзя в пакетах размещать, у них синтаксис совсем другой. А обычные UDR ты и сам можешь в пакете поместить. И опять же авторну так введите имплицитный пакет можно подумать что я этим занимаюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2018, 16:51 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
можно подумать, что ты единственный читаешь ты защищаешь некую коллективную точку зрения, некотое коллективнoе статус-кво, которое привело к проблеме "забыли заранее повесить заплатку" и может быть ещё приведет я его критикую, не тебя лично, а коллективное ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2018, 19:57 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Ariochты защищаешь некую коллективную точку зрения, некотое коллективнoе статус-кво, я никого не защищаю. У меня есть своё мнение на этот счёт. И я полностью согласен с ТС, что позволять создавать одноименные UDF и PSQL функции это баг. Да и команда разработчиков тоже согласна. А вот твоё предложение не поддерживаю. И кстати в 4.0 Legacy UDF объявлены depricated. И как-то особо стараться чтобы улучшать их возможности (ну например позволять размещать в пакетах) уже не будут. Поэтому если есть ещё необходимые вам самописные UDF пора задуматься над тем чтобы переписать их на UDR. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 10:17 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Надо просто будет сделать бридж - UDR реализующую UDF Замена простых решений сверх-сложными, просто ради замены.... После всех фанфар, что UDR нужна, чтобы огнать и писать Оракл и писать плагины на Java - вот UDR давно есть, а плагинов на Java нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 12:22 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Ariochчтобы огнать и писать Оракл догнать и перегнать ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 12:22 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Arioch, вообще плагин для написания UDR на Java есть (Beta версия). Но Адриано там так намудрил, что использовать его сложновато. Я уж лучше на Delphi UDR напишу. Чтобы догнать и перегнать Оракл одних Java UDR явно не достаточно ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 12:30 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисНо Адриано там так намудрил если бы так было, кто-нибудь бы уже написал "хорошо и просто", тот же Марк например. Давай посмотрим, сколько у нас Delphi-библиотек на тупом неправильном устаревшем API тянущемся с прошлого века * FIBC и её потомки IBX & FIB+ * IBO * UIB плюс к ним - универсалы * BDE * DBX * Zeos * UniDAC * AnyDAC А сколько у нас Delphi-библиотек с крутейшим гибким удобным быстрым и современным API ? И дело тут явно не в десятках лет запасов. Десятки лет - это например рассыпавшийся от старости BDE. А UIB был начат с чистого листа несмотря на наличие к тому времени других библиотек. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 12:50 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Ariochсколько у нас Delphi-библиотек на тупом неправильном устаревшем API тянущемся с прошлого века это кто тебе сказал что это API тупое и устаревшее? Плюнь ему в глаз. То что там есть определённые ограничения не делают его тупым. Или ты предлагаешь авторам сиих библиотек забить на совместимость с Firebird < 3.0. FIB+ - сдох и не поддерживается. Кто же по твоему туда новый API будет писать. IBX - глубоко плевать на Firebird. Он на Interbase ориентирован. UIB - тоже труп по большому счёту. Тем не менее в последних версиях зачатки нового API там есть. BDE - ещё один труп. DBX - этот почти труп. По крайней мере Embercadero переключается на FireDac. Zeos - труп. IB Object - понятия не имею что у них там в последних версиях. Продукт коммерческий у меня его нет. UniDAC, FireDAC скорее всего подтянутся и добавят поддержку нового API со временем. IBX2 полностью поддерживает новое и старое API. И это ты ещё не брал в рассмотрение не Delphi компоненты. Тот же PDO для пыха тоже на старом API. В прочем там ситуация довольно плачевная. Его особо не поддерживают. Просто в 3.0 новое API по большому счёту для клиентских приложений не даёт ничего нового. А вот UDR другое дело. А вот в 4.0 это уже не так. Один Batch API уже много стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 13:10 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисПросто в 3.0 новое API по большому счёту для клиентских приложений не даёт ничего нового. А вот в 4.0 это уже не так. Один Batch API уже много стоит. Он стоит меньше, чем кажется на первый взгляд. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 13:27 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, так там много чего ещё есть. Те же самые длинные имена объектов. Вроде новую XSQLVAR не стали делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 13:42 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денисэто API тупое .... там есть определённые ограничения тогда зачем было создавать резко отличное API вместо расшиваиня этих "определенных" - т.е. немногочисленных и локализованых - узких мест? Симонов Денисэто API .... устаревшее? Симонов Денисзабить на совместимость с Firebird < 3.0. когда выходило последнее обновление FB 2.1.x ? а почему? когда выйдет последнее обновление FB 2.5.x ? > IBX - глубоко плевать на Firebird. Он на Interbase ориентирован. В том числе IBX/Lazarus ? Но речь то не о том совсершенно. Ты уводишь разговор в сторону. Я говорил про написание новых библиотек, поэтому и считал их количество. Я даже специально подчеркнул, что UIB был написан несмотря на уже существующую пачку библиотек. А ты переводишь разговор на модификацию старых - не о том речь, пксть они все хоть умрут как BDE! Где же НОВЫЕ библиотеки, изначально строящиеся вокруг крутого и прогрессивного ОО-API ? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 13:47 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисВроде новую XSQLVAR не стали делать. Я не стал её делать, поскольку особого смысла не вижу, а у остальных и вообще нет ни времени ни желания. А так скопировать определение XSQLVAR версии 2 с интербейзовских заголовков и подправить пару внутренних классов для её распознавания - работы на пару дней. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 13:55 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Ariochтогда зачем было создавать резко отличное API вместо расшиваиня этих "определенных" - т.е. немногочисленных и локализованых - узких мест? Это новое API изначально создавалось для использования плагинами, которым нужна была единая точка доступа к функциям движка. Потом его внезапно (и преждевременно по моему мнению) решили сделать и клиентским тоже. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 13:58 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
немного оффтопика Симонов ДенисZeos - труп. я тоже так думал, вспоминая агонию версий 6.9.9.9.9.9.... но народ в форуме Delphi говорит, что сейчас проект ожил и активно пилится. Симонов ДенисIBX2 полностью поддерживает новое и старое API. Интересно, не знал про него. Он правда до релиза ещё ХЗ когда дорастёт, но пусть будут 100 цветов. Симонов ДенисИ это ты ещё не брал в рассмотрение не Delphi компоненты. Ну ты сам про Delphi напомнил. Впрочем, можешь и про остальные сказать. JDBC - wire protocol, он вообще в основном режиме от fbclient.dll не зависит. .NET Provider кажется так же. Симонов ДенисПросто в 3.0 новое API по большому счёту для клиентских приложений не даёт ничего нового. Ч.т.д. Симонов ДенисА вот UDR другое дело. ....теоретически. На практике же дополнить функционал написанием UDF намного проще. И простота эта - сама по себе достоинство. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 13:59 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЭто новое API изначально создавалось для использования плагинами Что само по себе уже забавно. Потому что тут требуется сразу решать, на каких языках будут писаться плагины? C++ ? тогда не надо городить как-бы-COM-но-не-совсем. Делайте обычные абстрактные классы C++ Кросс-языковый? тогда берите стандартную библиотеку, с которыми известно как работать из разных языков. Например MS-COM и XPCOM. Взаимодействием COM<->.Net например сама Майкрософт занимается, почему же это было не использовать? Но это якобы будет на несколько процентов медленнее. В результате получили произведение искусства, которое чужеродное и для C++ и для остальных языков. Но зато все никем ненаписанные плагины работают несколько быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 14:05 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovединая точка доступа к функциям движка. Кстати, а насколько этот доступ безопасен? ведь по идее чем глубже залезть - тем больше можно разломать. Вот обычный UDF - куда казалось бы примитивнее, можно писать не приходя в сознание и примеров кругом полно. И все равно люди умудряются накосячить и с конвенциями вызова и с FREE_IT. Если чайник начнёт писать UDR-плагин по такому же принципу, как эти горе-UDF, собрать вместе несколько отрывков кода с разных форумов, а потом "трясти", менять тут и там наугад, пока плагин не подключиться - насколько негативное влияние на стабильность работы движка будет больше или меньше сравнительно с аналогичными UDF ? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 14:11 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Arioch, ты UDR то хоть щупал прежде чем говорить? В UDF ты не можешь нормальными способами: 1. Получить контекст транзакции/соединения 2. Обработать исключение и выбросить его в стандартный для firebird статус вектор 3. Контролировать NULL во входных параметров. Точнее можно но через жопу 4. Писать хранимые процедуры и триггеры Arioch насколько негативное влияние на стабильность работы движка будет больше или меньше сравнительно с аналогичными UDF ? точно так же как и на UDF. В память движка везде гадится одинаково. >> C++ ? тогда не надо городить как-бы-COM-но-не-совсем. COM за пределами Windows нет. >> Делайте обычные абстрактные классы C++ Изначально так и сделали, но на FPC что-то пошло не так. Кроме того, есть ещё C. >> В результате получили произведение искусства, которое чужеродное и для C++ и для остальных языков. Да неужели? Ты хоть смотрел что этот самый CLOOP генерирует? Да прослойка несколько толще чем чистый виртуальный класс, но никакой чужеродности там нет. >>> В том числе IBX/Lazarus ? IBX for Lazarus это немного другой IBX. И там кстати весьма вероятно новый API прикрутят. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 15:26 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денис2. Обработать исключение и выбросить его в стандартный для firebird статус вектор В UDR эта возможность тоже сильно ограничена. Фактически - до одного-единственного кода isc_random. Симонов ДенисCOM за пределами Windows нет. COM+ и OLE Automation с их фабриками классов и регистрацией в едином реестре - нет (из коробки), только сторонние реализации, например, от Мозиллы. COM как Common Object Model (т.е. формат объекта с VMT) - есть, причём полностью совместимый во все стороны. Симонов ДенисТы хоть смотрел что этот самый CLOOP генерирует? Структуры указателей на обычные функции с дополнительным параметром он генерирует. Сурпрайз, но от COM это отличается только наколенной реализацией. И не сурпрайз, что к другим языкам он прикручивается точно через то же отверстие, что и обычный COM, только хуже. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 16:08 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисВ UDF ты не можешь нормальными способами: в скольких процентах случаев это реально нужно? Ariochпростота [UDF] - сама по себе достоинство. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 16:38 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисCOM за пределами Windows нет. AriochНапример MS-COM и XPCOM Кроме того, Firebird-типа-COM тоже не было за пределами Windows, но сверх того не было и в пределах. Впрочем, я не просто так написл "например". Были и SOM и много ещё чего. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 16:57 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВ UDR эта возможность тоже сильно ограничена. Фактически - до одного-единственного кода isc_random. Но это намного лучше, чем возвращать спецзначение из UDF. Dimitry SibiryakovСтруктуры указателей на обычные функции с дополнительным параметром он генерирует. ну это не к тебе вопрос был. Ты то по поводу клопа в своё время Адриано плешь проел. А вот Arioch толком не смотрел, но рассуждает. Arioch, UDR кажутся сложными только на первый взгляд. Вся сложность там только в том что необходим повторяющийся кода для фабрик процедур/функций/триггеров. В C++ хитро выкрутились через boost с шаблонами. Правда понимание кода стразу падает, ибо подробности скрыты. В Delphi такое не прокатывает и надо писать ручками. Хотя часть вещей тоже можно упростить, например фабрики сделать тоже через шаблоны. Но вот структуры для маппинга входных и выходных сообщений всё-таки писать придётся в любом случае, если ты конечно не самурай который оперирует смещениями указателей. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 17:03 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисТы хоть смотрел что этот самый CLOOP генерирует? Ты не поверишь, но смотрел. Хотел в UIB добавить, ещё до того, как Анри зашевелился. Симонов ДенисВ Delphi такое не прокатывает и надо писать ручками. РЖУ, в голос. Т.е. было: [*]стандартный COM, который относительно неплохо встроен в компиляторы Delphi и FPC, включая ARC (подсчёт ссылок). [*]автоматическая генерация заглушек из MS IDL (если надо) или TLB [*]ручной перевод методов COM-интерфейсом с деклараций на C++ в Delphi (не так весело, но опыт наработан сотнями человекомесяцев и процесс хотя и зануден, но понятен) Вместо этого сделали [*]нестандартный COM, который экономит циклы процессора отказом от автоматического подсчёта ссылок. Который в принципе на многопроцессорных системах может действительно замедлять присвоение НОВЫХ переменных, но едва ли тестировалось насколько это ускорение актуально для клиентских приложений. [*]свой тёплый ламповый IDL и свой CLOOP вместо какого-нибудь стандартного IDL-процессора [*]и поверх этого торта такая вишенка, что выхлоп этого CLOOP "в Delphi не прокатывает и надо писать ручками". Вот как раз умилённо "повтыкав" в это "немножечко доработайте напильничком" я и восхитился новым клиентским API, в каковом состоянии до сих пор прeбываю. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 17:17 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Ariochтребуется сразу решать, на каких языках будут писаться плагины? C++ ? тогда не надо городить как-бы-COM-но-не-совсем. Делайте обычные абстрактные классы C++ Симонов Денис>> Делайте обычные абстрактные классы C++ Изначально так и сделали, но на FPC что-то пошло не так. Кроме того, есть ещё C. тоже забавно, ты берешь мой тезис, строго заявленный как C++-only, и начинаешь к нему добавлять другие языки когда я именно про это и говорил, что нельзя грести в две стороны сразу ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 17:22 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисИзначально так и сделали, но на FPC что-то пошло не так. Симонов ДенисВ Delphi такое не прокатывает и надо писать ручками. Зато теперь ТАК пошло! Ну прости, ну в самом деле, но вот КАК тут можно не ржать??? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 17:24 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
AriochВ Delphi такое не прокатывает и надо писать ручками. Эта фраза относится исключительно к написанию UDR. И никаким стандартным COM здесь ничего не исправить. Потому что при написании UDR надо: 1. Создать структуры для маппинга входных и выходных параметров. Это можно и не делать, но тогда надо самому оперировать смещениями через IMessageMetadata. Что медленней. Впрочем можно написать и свою прослойку. 2. Написать класс процедуры/функции/триггера 3. Для селективной процедуры ещё написать класс для возврата результат. Ибо дельфи не поддерживает yield. Впрочем в UDF это вообще нельзя сделать. 4. Написать фабрику для создания экземпляра процедуры/функции/триггера 5. Зарегистрировать эту фабрику По сути написание фабрик очень простое занятие, но напрягает. Можно автоматизировать, если конечно не заниматься в фабриках проверкой декларации UDR или другими вещами кроме самого создания. На C++ есть ещё хелперы для структур входных и выходных сообщений. Симонов ДенисИзначально так и сделали, но на FPC что-то пошло не так. А пошло не так именно с обычными VMT ибо баги в FPC. DS должен прекрасно это помнить. Ariochнестандартный COM, который экономит циклы процессора отказом от автоматического подсчёта ссылок. вообще-то целью было не отказ от подсчёта ссылок. Не понравилось наличие в IUnknown метода QueryInterface. Впрочем меня по этому поводу лучше не терзать. Не я сиё решение принимал. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 18:00 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денисвообще-то целью было не отказ от подсчёта ссылок. Не понравилось наличие в IUnknown метода QueryInterface. Впрочем меня по этому поводу лучше не терзать. Не я сиё решение принимал. может быть и так, давно это было, подробности не помню уже ну я тогда долго пытался прочитать "почему же не COM" и меня просветление не хватило. Не дорос... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 18:07 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисА пошло не так именно с обычными VMT ибо баги в FPC. DS должен прекрасно это помнить. Я помню это лучше, чем хотелось бы. Не было никакого "бага с VMT в FPC". Был общий для Delphi и FPC баг, не позволяющий работать функциям вида Код: pascal 1.
Они обои хотели исключительно Код: pascal 1.
И у разработчиков таки был выбор: переделать весь API на такой способ возврата интерфейсов или стоять на своём. Они решили стоять. Симонов ДенисНе понравилось наличие в IUnknown метода QueryInterface. Что, как я и писал в своё время, отлично решалось заглушкой во всё равно используемом template, всегда возвращающей "interface not supported". Да, возможно от этого отвалились бы дельфийские is и as, но это легко решалось бы потом (при необходимости) одной дополнительной строчкой в этой же заглушке. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 18:14 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Arioch, я надеюсь ты понял к чему я сказал про авторВ Delphi такое не прокатывает и надо писать ручками. не надо меня перевирать, а то мало ли кто прочтёт. Ещё Влад с Димой придёт и дадут мне по шапке за враньё. Оно никак не относилось к вопросу почему не COM. Тем более что внятно объяснить почему не COM я не смогу. Это не моё решение и я даже не участвовал в тех обсуждениях. Говорю что по факту есть сейчас. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 18:15 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovИ у разработчиков таки был выбор: переделать весь API на такой способ возврата интерфейсов или стоять на своём. Они решили стоять. Был еще третий вариант - bridge. Сделать например DLL специально под FreePascal/Delphi, который бы переводил одно в другой. В любом случае, если "они решили стоять" и игнорировать ограничения FPC/D, то тем самым они решили убрать многоязычность из задач интерфейса, т.е. сделать интерфейс на C++ - и тогда добавленная абстракция/косвенность через FB-IDL и CLOOP становится уже 5-м колесом телеги. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 13:53 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Arioch, рука-лицо. Вот тебе не всё ли равно как там внутри выглядит сгенерированый файл для работы через API. Важно что он есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 14:29 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисВажно что он есть. Симонов ДенисВ Delphi такое не прокатывает и надо писать ручками. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 16:06 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисПравда понимание кода стразу падает, ибо подробности скрыты. Вот это, кстати, тоже. Как-то так довольно получается со всеми "автоматическими идиотами", что часто эти "скрытые подробности" вылезают боком и приходится таки дебажить ручками ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 16:07 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
AriochСимонов Денис В Delphi такое не прокатывает и надо писать ручками. Как же ты достал приводить эту мою фразу. Ещё раз для тех кто не понял моего предыдущего объяснения. Берём пример написания внешней процедуры на C++. текст на С++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Речь идёт о макросах FB_UDR_BEGIN_PROCEDURE, FB_UDR_MESSAGE, FB_UDR_EXECUTE_PROCEDURE, FB_UDR_FETCH_PROCEDURE, FB_UDR_END_PROCEDURE. Ну не напишешь ты такое на Delphi хоть весь интерфейс трижды будет реализован на стандартном COM. Не ужели это не ясно? А внутри все эти макросы раскрываются примерно в то же самое что и на Delphi, естественно с учётом специфики С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 16:19 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисРечь идёт о макросах FB_UDR_BEGIN_PROCEDURE, FB_UDR_MESSAGE, FB_UDR_EXECUTE_PROCEDURE, FB_UDR_FETCH_PROCEDURE, FB_UDR_END_PROCEDURE. Ну не напишешь ты такое на Delphi хоть весь интерфейс трижды будет реализован на стандартном COM. Если интерфейс написан на стандартном СОМ, то эти макросы напрочь не нужны, ибо всё, что они делают, это объявляют обёртки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 16:35 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
AriochКак-то так довольно получается со всеми "автоматическими идиотами" никаких автоматических идиотов нет. Просто для программеров на C++ написаны хелперы, позволяющие сократить портянки кода. Если немного покумекать, то и для дельфийского кода тоже кое-что можно подсократить. Но не до такой степени как на C++. И сюрпрайз для Java и C# код может быть ещё короче. Но тебе я вижу лишь бы поворчать не вникая в суть проблемы. В отличие от Дмитрия ты даже не пытался понять что к чему. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 16:38 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ну да, ну да. Статическую структуру сообщений через COM не построишь. Всё что ты говоришь относится исключительно к автопойнтерам, но ни как не к автогенерации классов и структур. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 16:44 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисИ сюрпрайз для Java и C# код может быть ещё короче. Это вряд ли. Клоп не позволяет наследование, тем более множественное. Поэтому единственный способ реюзать код это копи-паста с помощью макросов, а макросов сишного уровня, позволяющих одну строчку развернуть в портянку на два экрана, в них, насколько я знаю, нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 16:45 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я смотрел демку реализации у Иржи. Так вот он там хитро для процедур вывернулся через оператор yield, вместо создания класса ResultSet ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 16:54 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денис, поясню мы говорим об объёме кода который необходимо написать конечному пользователю, а не о том сколько промежуточных слоёв наделали за тебя. Тут и без лупы видно что код на C# и Java будет работать в разы медленней. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 16:59 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисСтатическую структуру сообщений через COM не построишь. Вообще-то вполне можно было бы, если бы не фиксированный формат буфера, который вынуждает структуру подгонять под IMessageMetadata, а не наоборот. Это как раз первое, что я попытался сделать, увидев новое API: создать дельфийский класс, который по заданной record заполняет наследника от IMessageMetadata. Разочарование было жестоким, когда я понял, что весь код Firebird игнорирует значения, возвращаемые getOffset() и getNullOffset(). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 17:11 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, а какой в этом смысл, если входные и выходные сообщения всё равно должны полностью соответствовать входным и выходным параметрам объявленным в PSQL для UDR? Или ты про триггеры? Я их даже не щупал ещё. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 17:29 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Дениса какой в этом смысл, если входные и выходные сообщения всё равно должны полностью соответствовать входным и выходным параметрам объявленным в PSQL для UDR? Не должны, но могут. Более того, UDR могут сами себя регистрировать и описывать свои параметры, не требуя явного их создания с помощью SQL. Но взадсовместимость требует, чтобы список параметров был доступен через select from где-то, а перековать таблицу RDB$FUNCTION_ARGUMENTS во вьюху, объединяющую параметры всех трёх видов функций, видимо, показалось слишком большой работой. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 17:36 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovигнорирует значения, возвращаемые getOffset() и getNullOffset(). ....ну если даже QueryInterface слишком медленный оказался, то тут тем более. М.б. внутрь буфера надо было сначала положить вектор смещений/указателей, а потом уже вектор данных. Тогда библиотека в конечном ЯВУ могла бы "препарить" первый вектор раз и насовсем и много раз потом копировать/заполнять только данные ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 17:37 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Arioch, это и ежу понятно. Фигачить такие вызовы каждый раз да ещё и с проверкой статуса на фиг не надо. Это можно сделать единожды при создании экземпляра процедуры/функции. В любом случае получение указателей по смещениям будет медленней чем через фиксированную структуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 17:45 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Ежу непонятно, зачем нужны методы, которые не используются, чтобы путаться проще было? у Явы и совр. Delphi у объектов есть функция getHash(). Думаю и тут можно было бы сделать ф-ию типа getFormatHash() и дёргать getOffset только для новых форматов. Впрочем, как сделано - так сделано. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 18:33 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денисполучение указателей по смещениям будет медленней чем через фиксированную структуру Не факт. Через фиксированную структуру указателей на современных процессорах (у которых мегабайтные кэши на порядок быстрее ОЗУ) будет не хуже. Вспомни, например, как статически линкованные DLL подсоединяются на ассемблерном уровне при загрузке EXE. И в любом случае, всё снова упирается в вопрос "что мы хотим сделать?" Если максимально быстрый интерфейс на C++ - это один выбор. Если кросс-язычный интерфейс с максимально лёгкой интеграцией в широкий спектр языков - то другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 18:37 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
AriochЕжу непонятно, зачем нужны методы, которые не используются, чтобы путаться проще было? в каком смысле не используются? Хочешь используй, хочешь нет. Arioch, давай так. Ты попробуешь написать маленькую UDR на Delphi. Доведёшь её до работоспособного состояния, а потом продолжим беседу. Можешь даже с кусками кода, которые у тебя нарекания вызвали. А то у меня такое ощущение, что "Пастернака не читал, но осуждаю". ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 22:09 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисТы попробуешь написать маленькую UDR на Delphi. Доведёшь её до работоспособного состояния, а потом продолжим беседу. +1 и чтобы среди передаваемых типов ещё и блоб был :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 09:17 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
afgm, тебе для каких целей? Если хочешь сам разобраться пиши, поможем ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 09:42 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денистебе для каких целей? Если хочешь сам разобраться пиши, поможем Попросил блобы, чтобы усугубить ситуацию "удобства" API. Я уже делал несколько подходов и не восторге от нового API. Постоянно не кричу на всех углах, только потому, что не знаю как сделать лучше. Была благая идея сделать обёртку с кодогенерацией, но каждый раз вскипаю. С блобами, кстати, как-то сразу не задалось. В Java обёртке проблемы. Тикет висит. Если не путаю, то в первой версии .net-обёртки они не поддерживались. Немного в сторону. Если уж продолжать тему API для Delphi/Lazarus изложу своё видение. Нужно сделать кодогенератор из файла с простым описанием упрощённого SQL для UDR. По нему генерируем скрипт подключения к БД и базовый класс самой UDR. В коде наследуемся и реализуем методы. + Нужны хелперы для блобов (и теперь для decfloat). Для реализации всего этого нужны примеры нв Delphi со всеми видами вызовов (функция, процедура, триггер) и типов данных. Нужны все виды возврата (скаляр из функции, набор из процедуры). Понятно, что "Делфи тут никто не знает", но вполне можно сделать костлявый прототип и силами сообщества допилить до ума, кода там немного. PS. Почему вообще блобы. Это единственный тип данных, который больно обрабатывать на сервере. А городить огород, если всё влезло в хранимки, не очень хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 10:21 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денисв каком смысле не используются? Хочешь используй, хочешь нет Это называется "угадайка". Есть такая вешь, как single responsibility Dimitry Sibiryakovвесь код Firebird игнорирует значения, возвращаемые getOffset() и getNullOffset() Таким образом, писать эти функции бесполезно - и включать в интерфейс, который должен был быть написан 3-й стороной - не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 10:28 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
afgm, ну справедливости ради. В UDF с блобами работать ничуть не удобнее чем в UDR. Я сейчас активно копаю тему UDR и собираюсь написать мануал по их написанию на Delphi/Lazarus. Уже кое-что написано. Но очень много время занимают исследования, ибо эта тема практически не документирована. Во многих случаях код для написания одной UDR функции можно существенно подсократить до такой степени, что будет не сильно больше чем для UDF. decfloat можно перевести в Bcd если что, там есть специальных хелпер. Arioch, давай ты не будешь комментировать то в чём даже не пытался разобраться. Вот Dimitry Sibiryakov реально трогал новый API и имеет негативный опыт, поэтому его комментарии интересны. Ты же просто вводишь форумчан в заблуждения. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 10:50 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисЯ сейчас активно копаю тему UDR и собираюсь написать мануал по их написанию на Delphi/Lazarus. Уже кое-что написано. Но очень много время занимают исследования, ибо эта тема практически не документированаПрекрасно ! Обращайся, если нужно - может получится помочь ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 11:10 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисЯ сейчас активно копаю тему UDR и собираюсь написать мануал по их написанию на Delphi/Lazarus. Уже кое-что написано. Может github? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 11:28 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
afgm, выложу, но при условии не ссылаться туда пока всё не будет доделано. А то ещё скажут, что я плохому научил. Сам ещё разбираюсь. hvlad, спасибо. Куда лучше вопросы задавать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 11:43 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисКуда лучше вопросы задавать?Пиши мылом, а там посмотрим :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 11:48 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денисвыложу, но при условии не ссылаться туда пока всё не будет доделано. А то ещё скажут, что я плохому научил. Сам ещё разбираюсь. Ок. Мыло в профиле. Ну и критика Влада, даже на то "что удалось", тоже желательна. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 12:02 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисВ UDF с блобами работать ничуть не удобнее чем в UDR. Вообще-то удобнее. Тебе в UDF сразу дают хэндл блоба и функции работы с ним, а в UDR для получения и того и другого придётся сделать несколько прыжков в ширину. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 12:48 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов ДенисAriochсколько у нас Delphi-библиотек на тупом неправильном устаревшем API тянущемся с прошлого века это кто тебе сказал что это API тупое и устаревшее? Плюнь ему в глаз. Вы это, продолжайте писать что-ли. Так увлекательно читать. Подброшу на вентилятор. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 10:42 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Коваленко Дмитрий, казалось бы причём тут новое API vs старое? Проблемы fbclient если они есть общие для обоих. И какое отношение имеет провайдер к обсуждаемому далее вопросу UDR vs UDF? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 11:17 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
afgm, маленький эксперимент с BLOB. Пока не сильно напрягался с оптимизацией Код: sql 1. 2. 3. 4. 5. 6.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: plaintext 1.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: plaintext 1.
Код: sql 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 23:13 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Симонов Денис, вполне себе шустро. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2018, 08:57 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
afgm, и это ещё сделано максимально просто без попыток оптимизации. Сейчас весь блоб тупо посегментно загоняется TStringStream, а затем делается Stream.DataString.Split([delimiter], ...), и уже по полученному массиву возвращаются данные. Из-за этого в частности не работает конвеерная выдача результатов. По идее можно было читать и обрабатывать сегменты по мере выдачи результата, и чем то более эффективным чем встроенный split ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2018, 10:23 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
Адриано ответил, что ALTER UDF в PSQL-функцию - это совершенно нормально и так и задумывалось. Тем не менее, его не смущает, что при попытке дропнуть функцию - сообщается, что это таки UDF. Денис Симонов, такой финтифлюх отражен в документации? Я что-то не припоминаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 01:46 |
|
Internal и external function с одинаковым названием
|
|||
---|---|---|---|
#18+
CyberMax, почитал. Там какие-то споры что есть UDF. Формально Адриано прав все функции определённые пользователем являются UDF. Но для тех кто работал с Firebird/Interbase N лет UDF это именно внешние функции определённые как DECLARE EXTERNAL FUNCTION. Если я правильно понимаю терминологию, то сейчас их надо называть Legacy UDF (тем более что в 4.0 уже deprecated). Возможно в документации надо подправить терминологию. UDF - User Defined Function - любая функция определённая пользователем UDR - User Defined Routine - любая подпрограмма определённая пользователем (функция/процедура/триггер) Функции бывают: - встроенными (IIF, CHAR_LENGTH ...) - определённые пользователем (UDF) UDF бывают: - внешние - внутренние (или PSQL функции) Внешние UDF бывают: - Legacy (DECLARE EXTERNAL FUNCTION) - обычные (CREATE FUNCTION ... EXTERNAL) CyberMaxДенис Симонов, такой финтифлюх отражен в документации? нет ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 10:07 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1560985]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 500ms |
0 / 0 |