Pergunta

Por um longo tempo eu tenho tentado diferentes idiomas para encontrar o conjunto de recursos que eu quero e eu não tenho sido capaz de encontrá-lo. Eu tenho línguas que se encaixam decentemente para vários projetos meus, mas eu vim com um cruzamento de línguas que permita-me a fazer 99,9% dos meus projetos em um único idioma. Eu quero o seguinte:

  • Construído em cima de .NET ou tem uma implementação do .NET
  • Tem algumas dependências no tempo de execução .NET, tanto em tempo de compilação e tempo de execução (isto é importante já que um dos principais casos de uso está em desenvolvimento incorporado, onde o tempo de execução .NET é completamente personalizado)
  • Tem um compilador que é 100% código .NET sem dependências não gerenciados
  • Suporta nidificação expressão arbitrária (veja abaixo)
  • definições de operação auxilia personalizado
  • Tipo Apoia inferência
  • Otimiza chamadas cauda
  • Tem imutável explícita / definições mutáveis ??(minúcia - Eu vim para amar isto, mas pode viver sem ele)
  • Suporta macros reais para forte metaprogramming (absoluto must-have)

Os primários duas línguas tenho trabalhado com são Boo e Nemerle, mas eu também brincou com F #.

Principais queixas contra Nemerle: O compilador tem relatórios de erro horrível, a implementação é buggy como o inferno (compilador e bibliotecas), as macros só pode ser aplicada dentro de uma função ou como atributos, e é bastante forte dependência-wise (embora não o suficiente que é um dealbreaker).
Principais queixas contra Boo: Não nidificação expressão arbitrária (dealbreaker), macros são difíceis de escrever, nenhuma definição de operador personalizado (dealbreaker potencial)
. Principais queixas contra F #: sintaxe feio, difícil de entender metaprogramming, licença não-livre (dealbreaker épica)

.

Assim, quanto mais penso nisso, mais eu pensar em desenvolver a minha própria língua.

Pros:

  • Obter a sintaxe exata que eu quero
  • Obter um tempo de resposta que vai ser um bom negócio mais rápido; difícil de quantificar, mas eu não ficaria surpreso de ver 1,5x a produtividade do desenvolvedor, especialmente devido às infra-estruturas de teste Isso pode permitir que para determinados projectos
  • Eu posso facilmente adicionar funcionalidade personalizada para o compilador para jogar bem com o meu tempo de execução
  • Eu obter algo que é projetado e obras exatamente do jeito que eu quiser - tanto quanto isso soa como NIH, isso vai fazer minha vida mais fácil

Contras:

  • A menos que ele pode obter popularidade, eu vou ser preso com a carga de manutenção. Eu sei que posso pelo menos fazer as pessoas Nemerle mais, desde que eu acho que todo mundo quer algo mais profissional, mas é preciso uma aldeia.
  • Devido ao primeiro golpe, eu estou desconfiado de usá-lo em um ambiente profissional. Dito isto, eu já estou usando Nemerle e usando o meu próprio compilador modificado costume, uma vez que não está mantendo-o bem a todos.
  • Se ele não ganhar popularidade, encontrar desenvolvedores, será muito mais difícil, de tal forma que Paul Graham pode até não toleram.

Assim, com base em tudo isso, qual é o consenso geral - isso é uma boa idéia ou uma má idéia? E talvez mais útil, eu perdi qualquer grandes prós ou contras?

Edit: Esqueci de acrescentar o exemplo do assentamento - aqui está um caso em Nemerle:

def foo = 
    if(bar == 5)
        match(baz) { | "foo" => 1 | _ => 0 }
    else bar;

Edit # 2: Achei que não faria mal para dar um exemplo do tipo de código que será convertido para essa linguagem se é para existir (a resposta de S. Lott sozinho pode ser o suficiente para me assustar longe de fazê-lo) . O código faz uso pesado de sintaxe personalizado (código de operação,: =, quoteblock, etc), nidificação expressão, etc. Você pode verificar um bom exemplo aqui: aqui .

Foi útil?

Solução

Infelizmente, não há métricas ou histórias em torno línguas falharam. línguas apenas bem sucedidos. Claramente, as falhas superam os sucessos.

O que Baseio esta on? Duas experiências comuns.

  1. Uma ou duas vezes por ano, eu tenho que suportar um passo para um produto / idioma / ferramenta / framework que com certeza vai mudar tudo. Minha resposta tem sido constante nos últimos 20 anos ou mais. Mostre-me alguém que precisa de apoio e minha empresa irá apoiá-los. E é isso. Nunca ouvi-los novamente. Vamos dizer que eu já ouvi 25 destes.

  2. Uma ou duas vezes por ano, eu tenho que trabalhar com um cliente que fez órfãs tecnologia. Em algum momento no passado, uma programação inteligente construído a / framework / biblioteca / pacote de ferramentas que foi usado internamente para vários projetos. Então esse programador esquerda. Nenhuma figura mais pode que danado para fora, e eles querem que substitua / reescrevê-lo. Infelizmente, não podemos descobrir isso, quer, e nossa proposta é reescrever a partir do zero. E eles se queixam de que seu gênio construiu o conjunto de aplicativos em um período de semanas, ele não pode nos levar meses para reescrevê-los em Java / Python / VB / C #. Digamos que eu tenha escrito 25 ou assim destes tipos de propostas.

Isso é apenas me, um consultor.

Na verdade, uma situação particularmente triste foi uma empresa que está todo o portfólio de software que foi escrito por um cara inteligente com uma linguagem privada e ferramentas. Ele não tinha deixado, mas ele percebeu que sua linguagem e conjunto de ferramentas tinha caído maneira para trás os tempos - o estado da arte tinha se mudado, e ele não tinha.

E a mudança foi - é claro - em uma direção inesperada. Sua linguagem e as ferramentas foram ok, mas o mundo tinha começado a adotar bancos de dados relacionais, e ele não tinha absolutamente nenhuma maneira de atualizar o seu lixo para se afastar de arquivos simples. Era algo que ele não tinha previsto. Na verdade, era algo que ele não poderia prever. [Você não vai cair nessa armadilha, você vai?]

Então, nós conversamos. Ele reescreveu muitas das aplicações em Plain-Old VAX Fortran (sim, este é um longo tempo atrás.) E ele reescreveu-lo para usar plain coisas SQL relacional de idade (Ingres, na época.)

Depois de um ano de codificação, que estavam tendo problemas de desempenho. Eles me ligou para rever todas as grandes coisas que tinha feito em substituir a língua home-construído. Infelizmente, eles tinha feito o pior projeto de banco de dados relacional possível. Pior possível. Eles tinha tomado suas cópias de arquivos, fusões, tipos, e que-não, e implementado cada operação do sistema de ficheiros de baixo nível usando SQL, duplicando linhas de dados esquerda, direita e centro.

Ele estava tão atolada em sua visão particular da linguagem perfeita, que ele não poderia se adaptar a uma relativamente comum nova tecnologia, penetrante.

Outras dicas

Eu digo para ela ir.

  • Seria uma experiência incrível independentemente do tempo que torna a produção ou não.
  • Se você faz compilar até IL então você não precisa se preocupar em não ser capaz de voltar a usar suas montagens compilados com C #
  • Se você acredita que você tem reclamações válidas sobre os idiomas que você listados acima, é provável que muitos vão pensar como você. Claro que, para cada pessoa interessada 1000 pode haver 1 disposto a ajudá-lo a mantê-lo -, mas que é sempre o risco

Mas aqui estão algumas coisas a ter em atenção a:

  • Obtenha seu especificação da linguagem EM PEDRA antes do desenvolvimento. Certifique-se de todos e quaisquer recursos de linguagem são descoberto antes da mão - mesmo coisas que você só pode querer no futuro. Na minha opinião, C # está lentamente cair na armadilha "oh-apenas-um-mais-language-extensão" que vai levar a sua eventual condenação.
  • Certifique-se de torná-lo otimizado. Eu não sei o que você já sabe; mas se você não sabe, então, aprender;.) Ninguém vai querer uma linguagem que tem ótima sintaxe, mas corre tão lento como a execução de JavaScript do IE

Boa sorte: D

Quando eu comecei minha carreira no início dos anos 90, parecia haver esta mania de todos desenvolvendo suas próprias línguas em casa. Minhas primeiras 3 empregos foram com empresas que tinham feito isso. Uma empresa tinha até desenvolveu seu próprio sistema operacional!

A partir da experiência, eu diria que esta é uma má idéia, pelas seguintes razões:

1) Você vai gastar tempo depurando a linguagem em si, além da base de código em cima dela
2) Quaisquer desenvolvedores que você contratar terá de passar pela curva de aprendizado da língua
3) Será difícil para atrair e manter os desenvolvedores desde trabalhando em uma linguagem proprietária é um beco sem saída para a carreira de alguém

A principal razão pela qual deixei esses três postos de trabalho foi porque eles tinham linguagens proprietárias e você vai notar que muitas empresas não tomar este caminho mais:.)

Um argumento adicional que eu fazer é que a maioria das línguas têm equipes inteiras cujo emprego em tempo integral é para desenvolver a linguagem. Talvez você seria uma exceção, mas eu ficaria muito surpreso se você seria capaz de corresponder ao nível de desenvolvimento, trabalhando somente no idioma a tempo parcial.

Principais queixas contra Nemerle: O compilador tem relatórios de erro horrível, a implementação é buggy como o inferno (compilador e bibliotecas), as macros só pode ser aplicado dentro de uma função ou como atributos, e é bastante forte dependência-wise (embora não o suficiente que é um dealbreaker).

Eu vejo o seu post foi escrito há mais de dois anos atrás. Eu aconselho você a tentar linguagem Nemerle hoje. O compilador é estável. Não há erros bloqueador para hoje. A integração VS tem uma série de melhorias, também há integração SharpDevelop.

Se você dar uma chance, você não vai se decepcionar.

NUNCA desenvolver seu próprio idioma.

Desenvolvendo seu próprio idioma é armadilha de um tolo, e pior vai limitá-lo com o que sua imaginação pode fornecer, assim exigindo que você trabalha tanto o seu ambiente de desenvolvimento e o programa real que você está escrevendo.

Os casos em que isto não se aplica são praticamente se você é Larry Wall, os caras AWK, ou parte de um grupo significativo de pessoas dedicadas a testar os limites da programação. Se você estiver em nenhuma dessas categorias, você não precisa de meus conselhos, mas eu fortemente dúvida de que você está alvejando um nicho onde não há nenhuma linguagem de programação adequada para a tarefa e as características das pessoas que fazem a tarefa.

Se você é tão inteligente como você parece ser (uma possibilidade provável), o meu conselho é ir em frente e fazer o projeto da linguagem primeira, iterate um par de vezes sobre ele, pergunte a alguns companheiros inteligentes que você confia em inteligente programação comunidades relacionadas linguagem sobre o projeto concreto que você veio acima com e, em seguida, tomar a decisão.

Você pode perceber no processo de criação do projeto que apenas um truque rápido em Nemerle daria tudo que você precisa, por exemplo. Muitas coisas podem acontecer apenas quando se pensa muito sobre um problema, e a solução final pode não ser o que você realmente tinha em mente quando iniciar o projeto.

Na pior das hipóteses, você está preso com realmente implementar o projeto, mas então você vai ter prova de leitura e maduro, e você saberá com um alto grau de certeza de que era um bom caminho a tomar.

Uma peça relacionada do conselho, começar pequeno, apenas definir as características que você absolutamente precisa e então desenvolvê-los para obter o resto.

Escrevendo seu próprio idioma não é um projeto fácil .. Especialmente um para ser usado em qualquer tipo de "ambiente profissional"

É um enorme quantidade de trabalho, e eu duvido que você pode escrever sua própria língua, e ainda escrever qualquer grandes projetos que o utilizam - você vai gastar tanto tempo adicionando funcionalidades que você precisa, corrigir bugs, e outras coisas geral linguagem de design.

Eu faria fortemente recomendar a escolha de uma linguagem que é mais próximo do que você quer, e estendê-la a fazer o que você precisa. Isso nunca vai ser exatamente o que você quer, mas em comparação com o tempo você vai gastar escrevendo seu próprio idioma, eu diria que é um pequeno compromisso ..

Scala tem um compilador .NET. Eu não sei o status deste embora. É uma espécie de um cidadão de segunda classe no mundo Scala (que é mais focado na JVM). Mas pode ser uma boa tradeof a adotar o compilador .NET em vez de criar uma nova linguagem a partir do zero.

Scala é uma espécie de fraco no departamento de programação meta ATM. É possível que a necessidade de metaprogramming é um pouco reduzida por outros recursos de linguagem. Em qualquer caso, eu não acho que ninguém ficaria triste se você fosse para implementar recursos de metaprogramação para ele. Também há um plug-in infra-estrutura no caminho compilador.

Eu acho que a maioria das línguas nunca vai caber toda a conta.

Você pode querer combinar seus 2 línguas favoritas (no meu caso C # e Esquema ) e usá-los juntos .

Do ponto de vista profissional, este provavelmente não é uma boa idéia embora.

Seria interessante ouvir algumas das coisas que você sente que não pode fazer em línguas existentes. Que tipo de projetos você está trabalhando em que não pode ser feito em C #?

Eu sou apenas curiosa!

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