A Microsoft lançou recentemente o Typescript, uma nova linguagem de programação semelhante ao JavaScript. Há algum tempo, ouvi falar do Dart, uma nova linguagem de programação criada pelo Google para resolver problemas relacionados ao Javascript, como desempenho, escalabilidade etc.
O objetivo dos dois novos idiomas parece o mesmo para mim. O que você acha?
Os propósitos dos idiomas são os mesmos?
Quais são as diferenças reais sobre eles?
dart
typescript
margabit
fonte
fonte
Respostas:
Citando Bob Nystrom :
Além disso, ele escreve em http://www.reddit.com/r/programming/comments/10rkd9/welcome_to_typescript/c6g37xd :
fonte
Enquanto a pergunta era "Os objetivos das linguagens são os mesmos?", A verdadeira questão é: "Como podemos melhorar a programação da Web de onde estamos?" .
Ambos os projetos tentam fazer isso considerando
linguagem de programação (o TypeScript dá um passo pequeno, mas muito limpo, o Dart faz o movimento mais revolucionário que ainda está em movimento)
interoperabilidade com o código js existente (transição 0 no TypeScript que é compilada com js, complicada no Dart, já que 2 VMs conversam entre si)
práticas de engenharia de software (somente Dart, componentes da Web e shadow dom)
Nos últimos 3 dias, mergulhei profundamente no Dart e depois no TypeScript. Minha base de código do CoffeeScript foi para as linhas de código dos anos 2000, muito para serem manuseadas com o adorável, mas muito macio CoffeeScript. Os problemas que enfrentei foram o fato de o CoffeeScript não possuir recursos que as linguagens projetadas para programação de médio a grande porte tenham: interfaces, módulos, segurança de tipo. Mas havia uma ainda muito mais grave problema com café e js: Os js "este ponteiro" estranheza afetou minha sanidade e não CoffeeScript não ajuda nada aqui.
Então, aqui estão meus resultados após 3 dias de avaliação e uso:
Dardo
Passou por todo o tutorial, lendo um livro, percorrendo o segundo livro e testando as demos. Eu pensei, Dart, que é o futuro . Depois, tentei migrar meu aplicativo para o Dart. Foi aí que meu entusiasmo caiu de 100 para 10. Aqui está o porquê:
O Dart Editor é a única maneira de programar o Dart. Embora existam plugins para Sublime Text, eles não fornecem recursos como intellisense, conclusão de código (corrija-me se estiver errado). O Dart Editor, no entanto, possui qualidade pré-alfa. Embora ele suporte coisas mágicas super-legais, como atualizar a página da web quando você edita o arquivo CSS (! Muito legal), ele trava ou trava várias vezes por minuto. Então, você digita 5 letras e 2 vezes precisa esperar 2 ou 15 segundos entre a digitação. E eu tinha um projeto com algumas linhas de código, por isso não queria esperar o que acontece quando as linhas de 1000s chegaram. Movi um arquivo de uma pasta para outra dentro do Dart Editor, travar. Depuraçãocom o Dart Editor, à primeira vista, é melhor do que todas as ferramentas de depuração de js que conheço (o cromo é a minha escolha), mas ainda há muitas coisas faltando: nenhuma janela imediata (isso torna a depuração de js muito melhor no momento), sem relógios.
Política e possibilidades de fuga : Alguns dizem que Apple, MS e Firefox nunca fornecerão VMs Dart. Bem, não tenho tanta certeza, mas pelo menos para a Apple isso parece no momento muito certo. Para os outros, é mais provável que o contrário. Portanto, não há problema, podemos converter Dart em JavaScript. A maneira como essa integração funciona é realmente ótima. O Dart mantém um stub js que mantém o código js conectado ao Dart Editor; portanto, uma
print()
declaração ainda aparece no Dart Editor, legal. Mas aqui vem o mas: a pegada desse código convertido é alta. 150kB ou mais (antes da minificação). Eu não cavei muito no tamanho exato, então não me preste atenção nisso.Maturidade da linguagem . Além das questões muito sérias com o Dart Editor aparecendo na minha cara três vezes por minuto, também achei inaceitável que todas as fontes do código Dart encontradas usassem um Dart diferente. O idioma muda todos os dias. Você encontrou um post de 5 semanas atrás? Está desatualizado. Você tenta as amostras do tutorial do Google? Pelo menos 1 amostra não é compilada desde que uma API foi alterada. Até coisas mundanas, como anexar um evento a um elemento DOM, estão em boa jogada .
A integração com as bibliotecas js existentes está um pouco envolvida. 2 VMs precisam se comunicar aqui, é complicado.
Como conclusão, você não pode usar seriamente o Dart a partir de hoje, e mergulhar nele não é muito divertido devido a 1 e 3. Ambos os pontos desaparecerão com o tempo. Sobre o ponto 2, o Google publicou benchmarks de desempenho há alguns dias, demonstrando que seus js compilados são melhores que os js manuscritos. Meus cumprimentos, ótimo trabalho. O tempo de carregamento ainda pode estar atrasado devido ao problema de pegada, como dito. No entanto, se o código de pegada for usado por muitos sites, ele poderá estar disponível em cache e pronto, desaparecerá também.
Portanto: considero o Dart um ótimo projeto, usá-lo no momento traz uma boa parte de riscos imprevisíveis e levará este ano para que ele atinja um bom nível estável.
TypeScript
Avaliar o TypeScript é muito fácil, leva 1 ou 2 horas e você sabe tudo. Lendo o documento de especificação da linguagem e um pequeno livro (revelado o TypeScript), eu sabia tudo e comecei a programar. Fiquei surpreso ao descobrir que as adições do TypeScript ao JavaScript preenchem todas as sérias necessidades que eu tive para aprimorar a programação do meu cliente . Aqui estão os destaques:
Interfaces . Encapsulamento e interfaces permitem estruturar meu código facilmente. Perfeito!
Estado da classe. . O TypeScript permite expressar o estado que as instâncias de uma classe carregam explicitamente, ou melhor, ela a impõe. Este é um grande passo melhor em comparação com js ou café.
this
chamar loucura atenuada . Dentro das funções das setas, o TypeScript torna othis
ponteiro como qualquer cidadão que se comporta normalmente.Editor, Intellisense . O TypeScript é fornecido com um intellisense 100% superior perfeito que reage na faixa de micro ou milissegundos, conforme usado no Visual Studio ao programar C #. Também existem cabeçalhos TypeScript para todas as bibliotecas js importantes . Ótimo ótimo ótimo.
Experiência e risco . O uso do TypeScript oferece risco zero, a linguagem é claramente definida, perfeitamente estável, apenas com açúcar, nada imprevisível.
Na verdade, essas melhorias me dão tudo o que eu precisava. A única coisa que gostaria de ver no futuro são coleções genéricas. Mas isso é amendoim.
E o desempenho? Embora eu me considere uma aberração no desempenho, não acredito que exista algum projeto que faça a escolha da tecnologia aqui com base no desempenho. Ambos estão na liga js.
Se você está interessado no futuro da programação da Web, ambos são grandes esforços, o TypeScript é muito mais pragmático e utilizável agora, o Dart é um projeto de laboratório muito interessante que será utilizável quando editores e depuradores maduros estiverem disponíveis e o escopo dos projetos possível com isso vai depender da política.
De qualquer forma, os três dias de avaliação foram divertidos e aprendi muito; se você encontrar tempo, leva 1 dia para o Dart e 2 horas para o TypeScript dar sua própria opinião. Tente.
Atualização de outubro de 2014
Já faz um tempo e ex post parece que a suposição de que o Typescript é a rota segura e estável a seguir estava certa. Acabei de encontrar uma declaração (muito) proeminente sobre Typcript, Dart and Closure:
Estou interessado no desafio da programação da Web em geral há bastante tempo. Acredito que o Google Closure ainda seja a melhor opção para o desenvolvimento em larga escala de JavaScript / Web, mas que será substituído por algo menos detalhado. Embora o Dart mostre uma promessa considerável, ainda estou consternado com o tamanho do JavaScript que ele gera. Por comparação, se o TypeScript puder ser traduzido diretamente para JavaScript que pode ser compilado usando o modo avançado do Closure Compiler, então podemos ter todos os benefícios do JavaScript otimizado do Closure sem a verbosidade. Além disso, como o TypeScript é um superconjunto de JavaScript, acredito que suas extensões de sintaxe possam entrar no padrão ECMAScript em algum momento,
http://blog.bolinfest.com/2013/01/generating-google-closure-javascript.html
Michael Bolin é um herói de front end de longa data (ex) google (ex) fb, também envolvido no fechamento do google (adquira seu livro sobre Closure).
Google Traceur
A vontade do Google de viver o ECMA Script 6 hoje é seu projeto Traceur: https://github.com/google/traceur-compiler
Comparado ao Typescript, o suporte a ferramentas está provavelmente muito atrasado a partir de hoje. No entanto, o lado positivo é muito mais rápido na adoção de aprimoramentos futuros demais da linguagem js, como iteradores ou compreensões.
Fluxo do Facebook, Google AtScript
fornecer recursos semelhantes ao TypeScript.
"Podemos nos perguntar o que há com essas diferentes soluções de verificação de tipo JavaScript e o que fazer sobre isso. Uma boa notícia é que Microsoft, Facebook e Google estão colaborando com elas, de acordo com Jonathan Turner, da Microsoft:
A equipe TypeScript está trabalhando com as equipes Flow e AtScript para ajudar a garantir que os recursos que já foram criados pela comunidade de digitação JavaScript possam ser usados nessas ferramentas. Há muito que esses projetos podem aprender um com o outro, e estamos ansiosos para trabalhar juntos daqui para frente e criar as melhores ferramentas possíveis para a comunidade JavaScript. A longo prazo, também trabalharemos para dobrar os melhores recursos dessas ferramentas no ECMAScript, o padrão por trás do JavaScript. "
artigo da infoq sobre fluxo fb
fonte
this
contexto, pois você ainda precisa vincular as funções de retorno de chamada declaradas dentro dos métodos aothis
contexto do método para acessar os atributos da classe. Como isso está "consertando" alguma coisa?Citando Scott Hanselman:
De Por que o TypeScript tem a resposta para alguma coisa?
fonte
var x = {}; x.foo = 5; //Doesn't work in typescript
evar e = window.event ? window.event : e; //Doesn't work in typescript
O exemplo acima falhará no compilador TypeScript. Estou esquecendo de algo? Não posso simplesmente "soltar" meu JavaScript e usar tipos quando me apetecer. Eu tenho que aprender alguma nova sintaxe e estruturar tudo com tipos.var x = {}; x['foo'] = 5;
e tambémvar y:any = {}; y.foo = 5;
, mas fiquei um pouco surpreso ao descobrir que você está certo sobre isso - o tipo de percepção{}
é{}
mais do queany
. Pode ser um problema de inferência de tipo. Publiquei o problema aqui - veremos como eles respondem.Ultimamente tive que entrar nessa discussão com minha própria descoberta.
1º: TypeScript
A MS adotou uma abordagem interessante no fato de que você pode entrar e sair facilmente de TS e JS. Usamos principalmente o AngularJS para o nosso desenvolvimento e encontramos, embora não exista muita documentação para converter Angular em TypeScript. Foi uma boa adição incorporar o TypeScript ao nosso fluxo de trabalho do desenvolvedor.
2º: dardo
O dardo é um passo irônico para o Google. Talvez eles não se lembrem do activeX e de todos os pesadelos que tentam fazer com que um aplicativo funcione em qualquer coisa, menos no temido IE 5 ou IE 6 do dia. A EM demorou muitos anos para se recuperar daqueles dias.
O dardo como uma linguagem "conceitualmente" parece tentar combinar alguns recursos interessantes de OOP. Anotações etc são um bom pensamento para Javascript.
O problema, é difícil imaginar largura de banda suficiente para criar um novo editor, nova linguagem, novas vm entre navegadores, plugins para outros IDE, compilador para converter para javascript (sem ter vários meg), converter ou criar novas bibliotecas de dardos para substitua as milhares de bibliotecas js atuais, peça a alguém que decida polímeros ou diretivas, converta o site dartlang para usar dart, é isso que consigo pensar em cima da minha cabeça.
O conceito de tentar usar o Dart em algo que não seja um aplicativo trivial no momento é assustador.
No topo de tudo isso, o ES6 não está longe. O ES6 traz muitos recursos que o Dart está tentando corrigir que existem no ES5. Qual será a proposta de valor quando o ES6 chegar às ruas? Pelo menos neste momento, a única alteração que você deve fazer no TypeScript após a saída do ES6 é talvez escolher uma compilação diferente para o destino.
Apenas para esclarecer que eu sou uma pessoa profissional de MS. A MS produz alguns produtos decentes e fez grandes progressos para corrigir erros do passado com a comunidade OSS. Ainda assim, raramente uso algo diferente do TypeScript da Microsoft.
fonte