Pergunta

Eu ouvi algumas pessoas programar em vários idiomas em um projeto. Eu não posso imaginar como as línguas interagir uns com os outros.

Quer dizer não existe um método Java como

myProgram.callCfunction(parameters);

nunca acontece ou estou errado?

Foi útil?

Solução

Tendo vários idiomas em um projeto é bastante comum, no entanto os princípios por trás nem sempre são simples.

No caso simples, diferentes línguas são compilados para o mesmo código. Por exemplo, o código C e C ++ tipicamente é compilado em montador máquina ou C # e VB.Net é compilado em IL (a linguagem entendida pela .NET tempo de execução).

Ele fica mais difícil se as línguas / compiladores usam um sistema do tipo differnt. Pode haver muitas maneiras diferentes, tipos de dados básicos, como integer, float e duplos são representados internamente, e há ainda mais formas de representar strings. Ao passar tipos volta entre as diferentes línguas deve ter certeza de que ambos os lados interpretar o tipo do mesmo ou - se não - os tipos são mapeadas corretamente. Este tipo de mapeamento de tipo também é conhecido como triagem .

Exemplos clássicos de interoperabilidade entre diferentes linguagens de programação são (na maior parte do mundo do Windows):

  • Os vários idiomas disponíveis para o .NET platfrom. Isto inclui C #, VB.Net, J #, IronRuby, F #, XSLT e muitas outras línguas menos populares.
  • componentes COM nativos escritos em C ++ ou VB pode ser usado com uma enorme variedade de línguas: VBScript, VB, todas as linguagens .NET, Java
  • funções da API Win32 pode ser chamado de NET ou VB
  • IPC (comunicação entre processos)
  • Corba , provavelmente a abordagem mais abrangente (e mais complexo)
  • serviços Web e outras arquiteturas orientadas a serviços, provavelmente a abordagem mais moderna

Outras dicas

Geralmente, qualquer projeto web decentemente irá utilizar cerca de cinco idiomas: HTML, CSS, Javascript, algum tipo de server-side “fazer as coisas” linguagem (ASP, JSP, scripts CGI com Perl, PHP, etc.), e alguma variante do SQL para conectividade de banco de dados.

(Isto é, claro, mão-acenando afastado o argumento sobre se deve ou não HTML e contagem de CSS como linguagens de programação - Eu sou o “eles são, mas simplesmente não linguagens Turing-complete” acampamento, mas isso é um todo outro segmento.)

Alguns exemplos de como todos os trabalhos juntos:

Se você vai a rota de melhores práticas, a estrutura de uma página web está em HTML, e as instruções sobre como exibi-lo estão em CSS - que poderia ser no mesmo arquivo, mas não tem que estar. O CSS contém um monte de aulas, o que o HTML refere-se a, e cabe ao navegador para descobrir como encaixá-los.

Como tirar tudo o que um passo adiante, quaisquer scripts JavaScript nessa página pode alterar qualquer um dos HTML / CSS que está presente (conteúdos de mudança de entidades HTML, trocar uma classe CSS para outra, mudar o comportamento do CSS, e assim por diante.) Ele faz isso através de algo chamado Document Object Model, que é essencialmente uma linguagem e independente de plataforma API para manipular páginas HTML em um objeto semelhante a forma (em que ponto eu vou recuar lentamente e apenas fornecer um link ao aplicável o artigo wiki .)

Mas então, onde é que todo o HTML / CSS / Javascript vem? Isso é o que a linguagem do lado do servidor faz. Na forma mais simples, a linguagem do lado do Serer é um programa que devolve uma cadeia gigante segurando uma página HTML como sua saída. Isto, obviamente, pode ficar muito mais complexo: formulários HTML e parâmetros de string de consulta pode ser usado como entrada para o nosso programa do lado do servidor, e então você tem a coisa toda AJAX onde o javascript começa a enviar dados diretamente para o idioma do servidor também. Você também pode começar a fantasia, onde o idioma do servidor pode personalizar o HTML, CSS e Javascript que é cuspido para fora -. Essencialmente, você tem um programa em uma linguagem escrita de um programa em outro idioma

A linguagem do lado do servidor para conexão SQL funciona da mesma. Há uma série de maneiras de fazer isso tanto mais complexa e mais seguro, mas a maneira mais simples é para o seu idioma do servidor para criar dinamicamente uma string com um comando SQL nele, mão que no banco de dados através de algum tipo de conector, e voltar um conjunto de resultados. (Este é um caso em que você realmente tem uma função que se resume a someValue = database.executeThisSQLCommand (SQLString).)

Então, para acabar com isto, diferentes línguas, neste caso, quer comunicar por realmente escrever programas em si, ou por dados entregar em torno de muito simples fácil de analisar formatos que todos possam entender. (Cordas, principalmente).

Vários idiomas em uso é chamado de "interoperabilidade" ou "interoperabilidade" para breve.

O seu exemplo é errado. Java pode chamar funções C.

A linguagem fornece um mecanismo para a interoperabilidade.

No caso da NET, línguas são compiladas em IL como parte do CLI. Assim, qualquer linguagem .NET pode Interop (chamar métodos definidos por) módulos definidos em qualquer outra linguagem .NET.

Como um exemplo:

Eu posso definir um método em C #

static void Hello(){ Console.WriteLine("Hello World");}

E eu posso chamá-lo de Python (IronPython)

 Hello()

E obter o resultado esperado.

De um modo geral, algumas linguagens de interoperabilidade melhor do que outros, especialmente se os autores de língua feito especificamente interoperabilidade um recurso da linguagem.

Vários idiomas podem interagir com:

  1. Canalizado entrada / saída (linguagem QUALQUER pode fazer isso porque a entrada e saída deve por necessidade ser implementada em todos os não-brinquedo idioma)
  2. Tendo código em um linguagem compilada para uma biblioteca nativa enquanto os outros suportes de chamar código nativo.
  3. comunicar através de uma conexão de rede de auto-retorno. Você pode correr em dificuldades com a interferência firewall desta forma.
  4. Databases. Estes podem ser considerados como dados de "universais" formato de armazenamento e, portanto, pode ser acessado pela maioria das línguas com extensões de banco de dados. Isso geralmente requer um programa para operação de chegada antes do próximo programa pode acessar o banco de dados. Além disso, todas as 'comunicações' são geralmente gravados em disco.
  5. Se as línguas envolvidas executado no mesmo tempo de execução (ou seja, .NET, JVM), então você geralmente pode passar dados de objeto de uma língua diretamente para o outro com pouco impedância.

Em quase todos os casos, você tem que converter qualquer comunicação a um comum formato antes que possa ser trocado (a exceção é línguas no mesmo tempo de execução). É por isso que vários idiomas são raramente usados ??em um projeto.

Eu trabalho em um projeto grande empresa que é composta por (na última contagem) cerca de 8 idiomas. A maioria da comunicação é através de um barramento de mensagens de nível empresarial que contém ligações para vários idiomas para bater e passar dados e para trás. É chamado TIBCO .

Você poderia ter um aplicativo onde a maior parte do trabalho é feito em Java, mas pode haver alguma parte dela, como talvez um analisador de dados ou algo está escrito em Python ou o que você tem. Quase dois aplicativos separados realmente, talvez o analisador está apenas fazendo algum trabalho em arquivos e, em seguida, seu aplicativo principal em Java é usá-los para alguma coisa. Se alguém me perguntar o que eu utilizado neste projeto eu diria "Java e Python."

Existem muitas formas differnt você pode usar idiomas differnt em um projeto Existem duas categorias principais que vêm à mente

  1. Usando diferentes línguas em conjunto para construir uma aplicação. Por exemplo usando Java para construir a GUI e usando JNI para acessar C API (assim respondendo à sua pergunta você pode chamar funções C de Java;))
  2. usando linguagens diferentes juntas no projeto de um, mas eles não fazem parte do mesmo aplicativo. Por exemplo. Atualmente, estou trabalhando em um aplicativo para iPhone que tem usa uma grande quantidade de texto. Atualmente, estou usando três línguas Python (para o trabalho com as fontes origanal do texto), SQL (para colocar os resultados do aplicativo python em um formato facilmente acessível a partir do sqlite3 api iphone) e Objectiv C para construir o aplicativo real. Mesmo que o produto final só será Objective C Eu usei duas outras línguas para chegar ao produto final

Existem várias maneiras que vários idiomas podem ser usados ??em um projeto. Alguns exemplos:

  • Você pode escrever uma DLL em, digamos, C e, em seguida, usar essa biblioteca de, digamos, um programa VB.
  • Você poderia escrever um programa de servidor em, digamos, C ++, e têm lotes de diferentes implementações de linguagem do cliente.
  • Um projeto web, muitas vezes usa lotes de línguas; por exemplo, um programa de servidor, escrito em, digamos, Java (a linguagem de programação), que recupera dados de um banco de dados usando SQL (linguagem de consulta), envia o resultado para o navegador em HTML (a linguagem de marcação), que o usuário pode interagir com o uso de Javascript (uma linguagem de script) ...

Depende do tipo de projeto. Se você quiser experimentar, você pode configurar um projeto web, em .NET, e alterar o idioma em uma página por página. Ele não funciona como você mostrar em seu pseudocódigo, mas é vários idiomas. Claro, o diretório do código real deve ser uma única língua.

Há um par de maneiras em que o código em línguas podem interagir diretamente. Enquanto os dados sendo passados ??entre o código está no formato certo, nos bits e bytes nível, então não há nenhuma razão para que diferentes idiomas não podem interoperabilidade. Esta abordagem é utilizada no desenvolvimento tradicional do Windows DLL. Mesmo em diferentes plataformas, se você pode obter o formato correto (olhada grande / pouco endian se interessado) que vai funcionar, desde que o seu ligador (não compilador) sabe como unir código juntos.

Além disso, existem inúmeras outras maneiras em que línguas podem falar uns com os outros. No código mundial Net é compilado para baixo ao código IL, que é o mesmo para todas as línguas, desta forma C #, VB.Net são todos iguais sob o capô e pode chamar / trabalho uns com os outros sem problemas.

Mal. Se não houver necessidade urgente, para manter uma única língua. Você está aumentando dependências e complexidade. Mas quando você tem o código fornecendo funcionalidade interessante existente, pode ser mais fácil de colá-la juntos do que para recriá-lo.

Só para acrescentar à lista de exemplos, é bastante comum para otimizar o código Python em C ou C ++ ou escrever uma biblioteca C para ligar outra biblioteca para Python.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top