|
|
|
Новое API
|
|||
|---|---|---|---|
|
#18+
Вижу бурное обсуждение в fb-devel про несовместимость vtable. Например с новым API можно работать из Delphi, но нельзя из FreePascal. У FreePascal кишки классов устроены иначе. Можно посмотреть как эту проблему решал разработчик 7-zip. Вот как выглядит код для работы с 7z.dll в Delphi (это из jedi code library): см аттач. Т.е. вместо классов были использованы интерфейсы. Соответственно никаких проблем с VMT. Есть правда минус что Delphi на каждый чих зовёт _AddRef и _Release. Но имхо это не существенно. Особенно если у них будет пустое тело. Кстати исходники 7z.dll вроде как доступны. Можно посмотреть как это выглядит со стороны C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2014, 11:43 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
Кто-нибудь может пояснить, чем плохи интерфейсы? Вот пример для тройки: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Для 3.5: Код: pascal 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. Для 4.0: Код: pascal 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. 32. 33. И т.д. Надеюсь идея понятна :) Если из клиентской либы будут торчать такие интерфейсы (их плюсОвые аналоги), тогда это будет удобно. Проблема с совместимостью будет только если прога компилировалась, к примеру, с интерфейсами версии 4.0, а клиентскую либу ей подсунули от 3.0 или 3.5. Тогда просто придётся отказаться от вызова функций, объявленных в интерфейсах более старших версий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 23:14 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
NickDeeЕсли из клиентской либы будут торчать такие интерфейсы (их плюсОвые аналоги) именно они и торчат. Но FreePascal ни хрена с ними не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 00:00 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
NickDeeКто-нибудь может пояснить, чем плохи интерфейсы?Интерфейсы - не плохи. Но их можно реализовывать по-разному. В С++ нет interface, там есть pure virtual class, и именно их мы пока что и пытаемся использовать. В Delphi есть interface, но там это жёстко вшитый IUnknown, требующий наличия addRef, release и queryInterface. Против первых двух мы ничего против не имеем, а вот последний нам не нужен, ибо мы не основываемся на COM спецификации. В Delphi тоже можно объявить pure virtual class, более того, такое объявление целиком и полностью соответствует на двоичном уровне объявлению в С++. Но недавно обнаружилось, что 64-битный FPC for Linux строит VMT не так, как GCC, отсюда и проблемы. Delphi x64 не проверяли (у меня её и нет). PS У нас изначально был план Б на этот случай - plain-C обёртки над объектным АПИ (о которых упорно долдонит Джим), просто мы их ещё не писали - нет смысла, пока интерфейс не устаканится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 00:25 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
Есть CORBA со стандартным маршалингом, независящим от языка и динамическим вызовом методов. Там, конечно, своих тараканов до чёртиков, но, может быть, какая-то "микрореализация" позволит отвязаться от привязки к таблице виртуальных методов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 00:30 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
hvladPS У нас изначально был план Б на этот случай - plain-C обёртки над объектным АПИ (о которых упорно долдонит Джим), просто мы их ещё не писали - нет смысла, пока интерфейс не устаканится. Для текущих провайдерских интерфейсов эти обёртки при некоторой ловкости рук будут в точности старым ISC API. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 00:58 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДля текущих провайдерских интерфейсов эти обёртки при некоторой ловкости рук будут в точности старым ISC API. которые дружелюбными к пользователю считаешь ты один... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 13:16 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
dimitrкоторые дружелюбными к пользователю считаешь ты один... Oh, c'mon. Новое провайдерское API это просто сгруппированное по типам хэндлов старое. Его так проектировали: без особой фантазии. И таки да, старое API я считаю более дружелюбным, чем новое. В основном из-за тошнотворных плоских буферов с динамической, но чертовски жёсткой структурой. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 13:27 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovOh, c'mon. Новое провайдерское API это просто сгруппированное по типам хэндлов старое. Его так проектировали: без особой фантазии. его так проектировали из-за совместимости, в том числе и по сетевому протоколу. Но в новом АПИ нет главного геморроя старого АПИ - SQLDA. Впрочем, замены тоже нет :-) Частично из-за нежелания "поторописька", частично с оглядкой, что она в каждой реализации может быть своя. Dimitry SibiryakovИ таки да, старое API я считаю более дружелюбным, чем новое. В основном из-за тошнотворных плоских буферов с динамической, но чертовски жёсткой структурой. в старом были те же самые плоские буферы, только за кадром. Ты их не видел, работал с дружелюбным АПИ и огребал лишние парсинги и копирования. В новом у тебя есть выбор - работать напрямую с плоскими буферами, либо написать удобную лично тебе тонкую обертку над ними и получить все как было раньше или даже лучше. Хочешь - в виде SQLDA, хочешь - в виде MYSQL_ROW, хочешь - в виде get/setABCD() а-ля JDBC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 13:47 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
dimitrего так проектировали из-за совместимости, в том числе и по сетевому протоколу. Но в новом АПИ нет главного геморроя старого АПИ - SQLDA. Во-первых, если уж проектировать на совместимость, так имело смысл вытащить движковые Format+Record. Они и то приятнее чем это убожество. Во-вторых, SQLDA-то как раз меньший геморрой для использования из-а того, что работает с указателями, то есть позволяет большую гибкость при управлении данными. Её единственный геморрой был как раз в реализации "благодаря" двухступенчатому преобразованию SQLDA->BLR->XDR. Прямое преобразование SQLDA->XDR делается тривиально и работает быстро. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 13:53 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВо-первых, если уж проектировать на совместимость, так имело смысл вытащить движковые Format+Record какое отношение они имеют к совместимости по операциям/протоколу? Dimitry SibiryakovВо-вторых, SQLDA-то как раз меньший геморрой для использования из-за того, что работает с указателями, то есть позволяет большую гибкость при управлении данными. либо гибкость, либо эффективность. Выбор у тебя есть. SQLDA->BLR->XDR XDR тут вообще непричем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 14:04 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
dimitrкакое отношение они имеют к совместимости по операциям/протоколу? Прямое: если клиентский формат данных будет совпадать с движковым, можно сэкономить дофига времени на преобразованиях. Или ты говорил о какой-то другой совместимости?.. dimitrXDR тут вообще непричем На нём базируется сетевой протокол вроде бы как, нет?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 14:34 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovесли клиентский формат данных будет совпадать с движковым то ни один существующий клиент не подключится к серверу. Я об этой совместимости говорил. Dimitry SibiryakovНа нём базируется сетевой протокол вроде бы как, нет? его использует сетевой протокол. Опционально. Сообщения могут передаваться и без XDR-кодирования в ряде случаев. Но я говорил о протоколе как об op-пакетах. Которые привязаны к структуре вызовов существующего АПИ. Так что ожидать в новом АПИ что-то совсем из ряда вон - наивно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 14:44 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovdimitrкакое отношение они имеют к совместимости по операциям/протоколу? Прямое: если клиентский формат данных будет совпадать с движковым, можно сэкономить дофига времени на преобразованиях. Или ты говорил о какой-то другой совместимости?.. Два формата: один внутренний - для максимальной скорости, и один для совместимости и удобства использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 14:45 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovесли клиентский формат данных будет совпадать с движковым, можно сэкономить дофига времени на преобразованиях к слову, "движковый" формат для входных и выходных параметров - это как раз сообщение, описанное через BLR. Его элементы могут мигрировать в/из Record при SIUD, но в общем случае это совсем не обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 15:25 |
|
||
|
Новое API
|
|||
|---|---|---|---|
|
#18+
dimitrни один существующий клиент не подключится к серверу. Я об этой совместимости говорил. А я подразумевал вырожденный случай когда между клиентским API и движком нет remote модуля. То, что сетевой протокол - упрямая вещь это ж совершенно ясно и специального упоминания не стоит. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 16:15 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38716526&tid=1563307]: |
0ms |
get settings: |
6ms |
get forum list: |
27ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
333ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 655ms |

| 0 / 0 |
