Pergunta

A partir de discussões que tive sobre o design linguagem, parece que um monte de gente fazer o argumento de que não há e nunca haverá "uma língua verdadeira". A alternativa, de acordo com essas pessoas, é estar familiarizado com vários idiomas e escolher a ferramenta certa para o trabalho. Isto faz todo o sentido a nível de todo um projeto ou uma grande subprojeto que só tem de interagir com o resto do projeto através de uma muito estreita interface, bem definido.

Por outro lado, usando lotes de diferentes línguas parece ser uma coisa muito difícil de fazer quando tentando resolver lotes de pequenos subproblemas elegantemente. Em outras palavras, IMHO, linguagens de propósito geral que são decente em tudo ainda importa. Como um exemplo trivial, digamos que você precisa fazer o seguinte:

  1. Leia um monte de dados em algum formato arbitrário de um arquivo. Verificar se há erros, etc. (melhor feito em algo como Perl).
  2. Coloque esses dados em matrizes, fazer um monte de ops matriz incondicional sobre ele (o melhor feito em algo como Matlab).
  3. Executar um costume, rotina computacionalmente intensivas em que deve ser rápido e eficiente de espaço (o melhor feito em C ou C ++).

Este é um projeto bastante simples, além de escrever a rotina de processamento de matriz personalizado computacionalmente intensivas, mas a única boa resposta sobre qual idioma usar parece ser um general-purpose um que é decente em tudo.

O que estou ausente aqui? Como é que uma pessoa usar vários idiomas de forma eficaz para tirar proveito de cada um dos seus pontos fortes?

Foi útil?

Solução

Eu tenho trabalhado em muitos projetos que contêm um mix bastante diversificado de línguas. A menos que seja um projeto .NET, você costuma usar essas diferentes línguas em diferentes camadas ou em processos diferentes. Talvez o seu webapp é em PHP e o servidor de aplicativos em Java. Então, você realmente não "misturar e combinar" a nível de método.

Em .NET e para algumas das línguas Java VM as regras mudam um pouco, uma vez que você pode misturar muito mais livremente. Mas as características de línguas são principalmente definidas pelas bibliotecas de classe - que são comuns. Assim, a motivação para a mudança idiomas no .net é geralmente conduzido por outros fatores, tais como o idioma que os desenvolvedores sabem. F # realmente fornece algumas características da linguagem que são específicos para esse idioma, por isso parece ser um pouco de uma exceção dentro .NET. Alguns dos java línguas VM também adicionar métodos para as bibliotecas Java padrão, adicionando recursos não disponíveis em java.

Você realmente se bastante acostumado a trabalhar com vários idiomas, desde que todos eles têm um bom suporte IDE. Sem que eu realmente acho que eu estaria perdido.

Outras dicas

idiomas incorporados como Lua fazer isso muito fácil. Lua é uma grande linguagem dinâmica ao longo das linhas de Ruby ou Python e permite que você desenvolva rapidamente código de alta qualidade. Ele também tem integração com o C, o que significa que você pode tirar proveito de C / C ++ bibliotecas e seções críticas a optimizar o desempenho, escrevendo-as em C ou C ++.

Em Computação Científica também não é incomum ter um script que, por exemplo, vai fazer algumas processamento de dados em Matlab, uso Perl para reformatar a saída e, em seguida, passar isso para outro aplicativo escrito em Matlab, C ou qualquer outra coisa. Isso tende a ser mais comum quando se integra aplicativos que foram escritos por pessoas diferentes do que quando desenvolver algo a partir do zero, no entanto.

Considere a parte mais difícil de sua tarefa. É analisar o arquivo a parte mais complexa? Uma linguagem boa para leitura de arquivos, e depois manipulá-los pode ser a escolha mais pertinente.

As transformações matemáticas a parte mais difícil? Você pode querer chupar-lo e usar o Matlab, alimentando-o com scripts ou outras ferramentas cultivado em casa.

é o desempenho a parte mais importante? Quanto cálculo será feito contra as transformações e análise? Se 90% do trabalho realizado será no cálculo, e as outras partes são apenas transitória, então considerar solução de um C / C ++.

Não há nada de intrinsecamente errado com jogar para vários pontos fortes de linguagem em uma solução simples, especialmente se você não se importa colando-lo juntamente com scripts. No entanto, quanto mais línguas e módulos que integram aumentar suas dependências, e os mais dependências que você tem, mais e mais difícil se torna para distribuir e manter seu aplicativo. Isso é onde o real trade-off mentiras: as poucas tecnologias, bibliotecas, e pedaços de software que você precisa para executar o aplicativo, o simples torna-se. Quanto mais simples o aplicativo, o mais sustentável, distribuível, debuggable, e utilizáveis ??torna-se.

Se você não se importa a sobrecarga extra de integrar as várias peças de tecnologia, ou que a sobrecarga você vai economizar uma quantidade igual ou maior de tempo de desenvolvimento, vá em frente.

Eu acho que é bom. Se você configurá-lo como uma configuração n-tier, onde cada camada acessa o que está abaixo da mesma maneira (SOAP / XML / COM, etc), eu encontrei-o para ser invisível no final.

Para o seu exemplo, eu iria escolher um idioma para o front-end que é fácil, rápido, flexível e pode fazer muitos, muitos, muitos, muitos, muitos tipos de chamadas para diferentes interfaces, como com, corba, xml, .net, bibliotecas DLL personalizada, ftp, e gateways de eventos personalizados. Isso garante que você pode ligar ou interagir com qualquer outro lanugage facilmente.

A minha ferramenta de escolha para isso é Coldfusion de trabalhar com ASP / PHP / Java e um pouco de Ruby. Parece ter tudo em um só lugar e é muito simples. Para o seu caso específico, o ColdFusion irá permitir que você compilar seu próprio tag biblioteca que você pode chamar em seu código web. Dentro da tag você pode colocar todo o código c você gosta e torná-lo fazer o que quiser.

Existem versões gratuitas e de código aberto do ColdFusion disponível e é fantástico para fazer Java e .NET chama ingenuamente a partir de uma base de código. Check it out, eu realmente sinto que poderia ser o melhor ajuste como ele é feito para estes tipos de soluções corporativas.

Eu sei PHP pode ser muito bom para isso também dependendo da sua situação, e tenho certeza Asp.net não é muito para trás.

O meu trabalho em vários idiomas envolveu apenas um simples mistura de C # e C ++ / CLI (que é como C ++ com .NET, se você não tenha ouvido falar dele). Eu acho que vale a pena dizer que a forma como .NET e Visual Studio permitem que você combinar muitas línguas diferentes conjunto significa que você não vai ter tão alto de uma sobrecarga como você normalmente esperaria ao combinar duas línguas - Visual Studio mantém tudo juntos. Dado que existem muitos clones .NET de várias línguas - F #, IronPython, IronRuby, JScript.Net por exemplo - Visual Studio é bastante uma boa maneira em que você pode combinar várias línguas.

Para baixo para o nível técnico que soa como o que você está em interessado, a forma como é feito no Visual Studio é que você deve ter um projeto para cada idioma separado, e cada projeto é compilado em um assembly - basicamente o que significa que se torna um biblioteca para os outros projetos para uso. Você vai ter um projeto principal que impulsiona tudo e chama as outras bibliotecas. A exigência de cada idioma diferente ter que ser um diferentes meios de projeto, você não mudaria línguas no nível do método, mas se você está fazendo uma aplicação grande o suficiente que você pode logicamente separá-lo em vários projetos, ele pode realmente ser bastante útil. Em particular, a separação e abstração pode facilitar as coisas em geral.

Você está dizendo que as escolhas são ou tudo a) escrita em um idioma e eficiência perder, ou b) remendar um monte de diferentes executáveis, a fim de usar a melhor linguagem para cada seção do trabalho.

A maioria dos programadores de trabalho escolher opção c: fazer o melhor que podem com as línguas suas TI departamentos de suporte na produção. Geralmente os programadores ter alguma opção de idioma limitado dentro de uma estrutura particular, como a JVM ou CLR - por isso é nem a utopia caixa de ferramentas nem o gueto monolanguage

.

Mesmo LAMP e suporte Rails (demanda, realmente) idiomas diferentes em diferentes níveis - HTML, Javascript, Ruby, C, no caso de Rails. Se você é serviços de escrita de software (que é onde a maior parte do trabalho interessante está acontecendo nos dias de hoje), então você está quase nunca escrever em apenas um idioma. Mas suas escolhas não são infinitos, também.

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