Приложения Java могут интегрироваться с приложениями VB?

К твоему первому вопросу (который быстрее): это зависит. Просто проверь это. Предполагая, что вы хотите получить конечный результат в векторе, альтернативы могут выглядеть примерно так:

#include <iostream>
#include <vector>
#include <queue>
#include <cstdlib>
#include <functional>
#include <algorithm>
#include <iterator>

#ifndef NUM
    #define NUM 10
#endif

int main() {
    std::srand(1038749);
    std::vector<int> res;

    #ifdef USE_VECTOR
        for (int i = 0; i < NUM; ++i) {
            res.push_back(std::rand());
        }
        std::sort(res.begin(), res.end(), std::greater<int>());
    #else
        std::priority_queue<int> q;
        for (int i = 0; i < NUM; ++i) {
            q.push(std::rand());
        }
        res.resize(q.size());
        for (int i = 0; i < NUM; ++i) {
            res[i] = q.top();
            q.pop();
        }
    #endif
    #if NUM <= 10
        std::copy(res.begin(), res.end(), std::ostream_iterator<int>(std::cout,"\n"));
    #endif
}

$ g++     sortspeed.cpp   -o sortspeed -DNUM=10000000 && time ./sortspeed

real    0m20.719s
user    0m20.561s
sys     0m0.077s

$ g++     sortspeed.cpp   -o sortspeed -DUSE_VECTOR -DNUM=10000000 && time ./sortspeed

real    0m5.828s
user    0m5.733s
sys     0m0.108s

Итак, std::sort бьет std::priority_queue, в этом случае . Но, может быть, у вас лучше или хуже std:sort, а может, у вас лучше или хуже реализация кучи. Или, если не лучше или хуже, просто более или менее подходит для вашего точного использования, которое отличается от моего изобретенного использования: «создать отсортированный вектор, содержащий значения».

Я могу с большой уверенностью сказать, что случайные данные не попадут в наихудший случай std::sort, поэтому в некотором смысле этот тест может быть лестным. Но для хорошей реализации std::sort ее наихудший случай будет очень трудно построить, и в любом случае он может и не быть таким уж плохим.

Редактировать: я добавил использование мультимножества, так как некоторые люди предложили дерево:

    #elif defined(USE_SET)
        std::multiset<int,std::greater<int> > s;
        for (int i = 0; i < NUM; ++i) {
            s.insert(std::rand());
        }
        res.resize(s.size());
        int j = 0;
        for (std::multiset<int>::iterator i = s.begin(); i != s.end(); ++i, ++j) {
            res[j] = *i;
        }
    #else

$ g++     sortspeed.cpp   -o sortspeed -DUSE_SET -DNUM=10000000 && time ./sortspeed

real    0m26.656s
user    0m26.530s
sys     0m0.062s

На ваш второй вопрос (сложность): все они O (n log n), игнорируя с трудом детали реализации, такие как выделение памяти O (1) или нет (vector::push_back и другие формы вставки в конце амортизируются O (1)), и предполагается, что под «сортировкой» подразумевается сортировка сравнения. Другие виды сортировки могут иметь меньшую сложность.

5
задан Joel Coehoorn 25 May 2012 в 16:08
поделиться

5 ответов

Существует множество возможностей интеграции, но, прежде чем исследовать их, на вашем месте я бы еще раз рассмотрел сам вопрос.

В исключительном случае введение нового языка в устоявшийся проект. Желания, эстетические предпочтения или навыки одного разработчика не являются достаточным оправданием для этого. Внедрение нового языка в проект должно быть стратегическим решением для проекта, а не задним ходом.

Если вы все же решите расширить основные языки, используемые для разработки системы,

  • COM-взаимодействие
    возможно с JACOB . Я считаю, что у IBM тоже есть мост. (Проверьте alphaworks)
  • Мост Java- .NET
    возможен через JNBridge и другие мосты. Это имеет смысл, только если используется VB.NET.
  • SOAP, обмен XML-документами, REST
    подходит для границ служб. Для этого требуется TCP, HTTP или какой-либо сетевой протокол.
  • общие хранилища данных
    могут служить точкой встречи. И Java, и VB могут читать и обновлять данные в SQL Server, Oracle, MSMQ, MQSeries и т. Д. Даже файловая система может быть точкой интеграции.

Думайте о формате данных как о связанном с механизмом интеграции, но в идеале независимо от него. Я имею в виду: вы можете использовать XML-документ для интеграции, независимо от того, хранится ли он в базе данных или отправляется через интерфейс REST, или хранится в файловой системе, или помещается / помещается в очередь. Вы также можете использовать файл с разделителями-запятыми для любого из этих механизмов.

Oracle, MSMQ, MQSeries и так далее. Даже файловая система может быть точкой интеграции.

Думайте о формате данных как о связанном с механизмом интеграции, но в идеале независимо от него. Я имею в виду: вы можете использовать XML-документ для интеграции, независимо от того, хранится ли он в базе данных или отправляется через интерфейс REST, или хранится в файловой системе, или помещается / помещается в очередь. Вы также можете использовать файл с разделителями-запятыми для любого из этих механизмов.

Oracle, MSMQ, MQSeries и так далее. Даже файловая система может быть точкой интеграции.

Думайте о формате данных как о связанном с механизмом интеграции, но в идеале независимо от него. Я имею в виду: вы можете использовать XML-документ для интеграции, независимо от того, хранится ли он в базе данных или отправляется через интерфейс REST, или хранится в файловой системе, или помещается / помещается в очередь. Вы также можете использовать файл с разделителями-запятыми для любого из этих механизмов.

Вы также можете использовать файл с разделителями-запятыми для любого из этих механизмов.

Вы также можете использовать файл с разделителями-запятыми для любого из этих механизмов.

6
ответ дан 14 December 2019 в 08:58
поделиться

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

2
ответ дан 14 December 2019 в 08:58
поделиться

Не совсем. Java использует CORBA для взаимодействия, а VB использует COM для взаимодействия. Возможно, вы сможете построить мост, используя JNI , но я понимаю, что это может быть довольно сложной задачей.

0
ответ дан 14 December 2019 в 08:58
поделиться

Вы можете соединить эти два соединения, используя адаптер C / C ++ для сопоставления вызовов JNI с COM. Но это было бы ужасно . Я надеюсь, что есть лучшее решение, но я понимаю, что интегрировать код .NET и Java довольно сложно, поскольку у обоих поставщиков (Sun и Microsoft) нет никаких стимулов для оптимизации такого рода разработки.

-1
ответ дан 14 December 2019 в 08:58
поделиться

Я этого не делал. Думаю, у вас есть следующие варианты:

  • Используйте мост Java-COM , поскольку VB использует COM. Эта библиотека уже упоминалась здесь несколько раз
  • Если вы используете VB.net, вы, вероятно, используете hessian , поскольку он имеет реализации как Java, так и C #.
0
ответ дан 14 December 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: