Бутылочное горлышко
От: Amon_RA Россия  
Дата: 11.01.18 12:23
Оценка:
Есть один язык программирования с кучей фреймворков и функционала.
Есть другой язык с кучей библиотек и функционала.

В системе используется и тот и тот язык. И вот настала необходимость из одной части вызывать функционал другой части.

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

Самое первое что приходит в голову — сделать функцию типа

Call(const char* funcName, const char* args)

В обработчике парсить аргументы и вызывать то что нужно. По идее через это можно протащить вообще все вызовы. Узкое место в произвоительности — парсинг запросов.

Может какие-то другие решения можно придумать?
Re: Бутылочное горлышко
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 11.01.18 12:31
Оценка:
Здравствуйте, Amon_RA, Вы писали:

A_R>Может какие-то другие решения можно придумать?

RPC/RMI/COM/DBUS или иной брокер?
Sic luceat lux!
Отредактировано 11.01.2018 12:31 Kernan . Предыдущая версия .
Re: Бутылочное горлышко
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.01.18 12:34
Оценка: +1
Здравствуйте, Amon_RA, Вы писали:

A_R>Есть один язык программирования с кучей фреймворков и функционала.

A_R>Есть другой язык с кучей библиотек и функционала.

А можно озвучить, как эти два языка называются?
Re[2]: Бутылочное горлышко
От: Amon_RA Россия  
Дата: 11.01.18 12:35
Оценка:
Здравствуйте, Kernan, Вы писали:

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


A_R>>Может какие-то другие решения можно придумать?

K>RPC/RMI/COM/DBUS или иной брокер?

Одна часть — кроссплатформенная, вторая часть — уже зависит от платформы. Поэтому собственно и разделение.
Re[2]: Бутылочное горлышко
От: Amon_RA Россия  
Дата: 11.01.18 12:36
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А можно озвучить, как эти два языка называются?


Одна часть — кроссплатформенная — на С++
Вторая часть — зависит от платформы. На маке это обж-с, на винде это шарп.
Re[3]: Бутылочное горлышко
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.01.18 13:09
Оценка: +1
Здравствуйте, Amon_RA, Вы писали:

Pzz>>А можно озвучить, как эти два языка называются?


A_R>Одна часть — кроссплатформенная — на С++

A_R>Вторая часть — зависит от платформы. На маке это обж-с, на винде это шарп.

Так их же всех можно друг из друга напрямую звать.
Re[4]: Бутылочное горлышко
От: Amon_RA Россия  
Дата: 11.01.18 13:11
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>Так их же всех можно друг из друга напрямую звать.


И кроссплатформенный код превратится в лапшу условных компиляций.
Re[5]: Бутылочное горлышко
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.01.18 13:15
Оценка:
Здравствуйте, Amon_RA, Вы писали:

Pzz>>Так их же всех можно друг из друга напрямую звать.


A_R>И кроссплатформенный код превратится в лапшу условных компиляций.


С чего бы?

Надо просто определиться, кто кого зовет, и сформулировать платформенно-независимый интерфейс в виде набора сишных (т.е., именно сишных, а не плюсовых) функций.

И не будет никакой условной компиляции.
Re[6]: Бутылочное горлышко
От: Amon_RA Россия  
Дата: 11.01.18 13:18
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Надо просто определиться, кто кого зовет, и сформулировать платформенно-независимый интерфейс в виде набора сишных (т.е., именно сишных, а не плюсовых) функций.


Пххх. Дак в том и вопрос был — как расширять, не расширяя. Понятно, что все через единый интерфейс общения протащить можно, но этот интерфейс неимоверно раздуется, если на каждый пук отдельную функцию заводить.
Re[7]: Бутылочное горлышко
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.01.18 13:24
Оценка: +4
Здравствуйте, Amon_RA, Вы писали:

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


Самое первое что приходит в голову — сделать функцию типа

Call(const char* funcName, const char* args)

В обработчике парсить аргументы и вызывать то что нужно. По идее через это можно протащить вообще все вызовы. Узкое место в произвоительности — парсинг запросов.


Вот вместо того, чтобы протаскивать все вызовы через обработчик, я предлагаю проэкспортировать их напрямую. Содержательных функций от этого больше не станет, но не надо будет еще и развесистый парсер с диспетчером писать. Который по существу абсолютно ничего полезного не добавляет.
Re[8]: Бутылочное горлышко
От: swame  
Дата: 12.01.18 09:20
Оценка:
Здравствуйте, Pzz, Вы писали:

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


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


Если пуков слишком много — надо пересмотреть интерфейс взаимодействия.

Pzz>

Самое первое что приходит в голову — сделать функцию типа

Pzz>Call(const char* funcName, const char* args)

Pzz>В обработчике парсить аргументы и вызывать то что нужно. По идее через это можно протащить вообще все вызовы. Узкое место в произвоительности — парсинг запросов.


Pzz>Вот вместо того, чтобы протаскивать все вызовы через обработчик, я предлагаю проэкспортировать их напрямую. Содержательных функций от этого больше не станет, но не надо будет еще и развесистый парсер с диспетчером писать. Который по существу абсолютно ничего полезного не добавляет.


Согласен что надо проэкспортировать.
Дополнительные преимущества экспорта —
1. интерфейс взаимодействия зафиксирован и задокументирован в отдельном месте.
2. Изменения интерфейса взаимодействия контролируется компилятором с обеих сторон.
Отредактировано 12.01.2018 9:21 swame . Предыдущая версия .
Re[7]: Бутылочное горлышко
От: ylem  
Дата: 16.01.18 00:20
Оценка:
A_R>Пххх. Дак в том и вопрос был — как расширять, не расширяя. Понятно, что все через единый интерфейс общения протащить можно, но этот интерфейс неимоверно раздуется,
Только так у вас хотя бы компиляторы что-нибудь проверять будетут, а "с const char* funcName", если это не давным давно устоявшийся API, я даже не представляю, как жить.
Re: Бутылочное горлышко
От: yenik  
Дата: 18.01.18 09:45
Оценка:
A_R>В обработчике парсить аргументы и вызывать то что нужно. По идее через это можно протащить вообще все вызовы. Узкое место в произвоительности — парсинг запросов.
A_R>Может какие-то другие решения можно придумать?

Парсинг запросов — насколько это место критично? Оптимизировать нельзя? А так, можно передавать текстовые запросы и не париться. Полная интероперабильность.
Re: Бутылочное горлышко
От: anton_t Россия  
Дата: 05.03.18 08:02
Оценка:
Здравствуйте, Amon_RA, Вы писали:

A_R>Есть один язык программирования с кучей фреймворков и функционала.

A_R>Есть другой язык с кучей библиотек и функционала.

A_R>В системе используется и тот и тот язык. И вот настала необходимость из одной части вызывать функционал другой части.


A_R>Напрямую это сделать нельзя. Надо как-то все запросы протащить через один мост. Вопрос — как расширять функционал этого моста не расширяя сам мост?


A_R>Самое первое что приходит в голову — сделать функцию типа


A_R>Call(const char* funcName, const char* args)


A_R>В обработчике парсить аргументы и вызывать то что нужно. По идее через это можно протащить вообще все вызовы. Узкое место в произвоительности — парсинг запросов.


A_R>Может какие-то другие решения можно придумать?


Как вариант — кэшировать результаты парсинга запросов, если это возможно.
Re[3]: Бутылочное горлышко
От: novitk США  
Дата: 19.03.18 19:45
Оценка:
Здравствуйте, Amon_RA, Вы писали:

A_R>Одна часть — кроссплатформенная — на С++

A_R>Вторая часть — зависит от платформы. На маке это обж-с, на винде это шарп.

http://www.swig.org/ — поддерживает все, но очень замшелое
https://github.com/dropbox/djinni — новое поделие дропбокса, но C# в данный момент из коробки нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.