Anotações da palestra feita pelo Leo Balter na QCon do Rio em 2015 sobre o Ecossistema de produção e lançamento de novidades e especificações do JavaScript.
- Functions are first-class citizens, syntax resembles Java, inheritance is prototypal, and (+””) equals zero.
- O JavaScript foi criado em 10 dias pelo Brendan Eich em 1995.
- Quando falamos sobre o JS, nós falamos sobre muitas outras coisas que orbitam em volta da linguagem em si. Como o DOM, NodeJS ou o asm.js
- Hoje ele passa por um caminho de evolução. Hoje ele ainda é feito por um grupo chamado Ecma. Que é como o ISO, onde eles criam padrões e o JS é feito se baseando nessa padronização.
- O ES6 vem com muitas novidades. Algumas coisas principais: promises, generators, proxies, reflect, arrow functions, rest parameters, default parameters, class, Template
- O ES7 vai trazer outras funcionalidades como async, SIMD, async generators
- O ES7 pode desembarcar em 2016. Não vai ser tão agressivo quanto o ES6, mas a ideia é trazer as novidades em uma velocidade melhor.
- As funções são cidadãos de primeira classe no JS.
- Hoje o JS tem muitos pequenos problemas que o ES6 resolve. Como por exemplo a perda do contexto de escopo, definir um valor padrão de parâmetros usados nas funções
- O ES6 não cria novos contextos de escopos. Ela mantém o mesmo escopo dentro de todas as funções de um script de mesmo contexto
- Os generators são mais que funções simples, elas permitem uma forma melhor de trabalhar com recursividade.
- Com a aparição do NodeJS, a parte de criação de código assíncrono se tornou um ponto muito importante, além da execução de código apenas no browser.
- Com o ES7 teremos funções assíncronas, onde a runtime da linguagem faz a função realmente funcionar de forma assíncrona.
- Mas isso não torna o JS multi-thread.
- A manipulação de strings no JS eram horríveis. Agora temos as Templates Strings, usando a crase.
- Para o @leobalter, uma das maiores mudanças foi as template strings
- Tudo isso foi feito pelo TC39, responsável pelo Standard ECMA-262. EcmaScript 2015 Language Specification
- O Brendan Erich continua liderando o grupo que está produzindo esses padrões
- http://tc39.github.io/process-document
- O passo 0 é a captação de Ideias. onde eles debatem o que é importante, tem ideias de novidades e etc.
- O passo 1 são as Propostas. Onde apresentam casos, descrição do formato dessa ideia, identificação de desafios, onde um representando da ideia se apresenta, dando exemplos.
- Passo 2: Rascunhos. Descrevendo precisamente a sintaxe de semântica utilizando o idioma formal da especificação. Texto inicial da especificação.
- Pensa numa linguagem formal. Mais formal que documentos de advogados.
- Mas é esse texto que vai servir como base para todo o processo de criação e oficialização.
- Passo 3: Candidato. Indica que outros ajustes precisam de feedback de implementações e usuários.
- Nesse momento é sugerido que as pessoas implementem e experimentem a especificação para ver se tudo está correto.
- Passo 4: Final. Indica que a adição está pronta para inclusão como um padrão formal do EcmaScript. Aqui são passados por testes de aceitação e implementação compatíveis.
- os testes para validar as especificações do Ecma são bem complicados. Mesmo se o teste seja bem simples de aplicar, existe todo um processo de explicação sobre o que aquele teste está validando, porque ele é necessário.
- O Ecma6 não está 100% implementado. Mas os browsers estão adotando em boa velocidade. Mesmo assim, eles dependem dos testes para criar as implementações.
- E o Edge é o browser que mais tem suporte ao ES6.
- Mas todas as implementações dos browsers tem erros de implementação. São MUITOS erros de suporte.
- O babel é um transpile. Ele tem erros de implementação. Eles não usam os Tests262. Mesmo assim ele é uma das melhores opções.
- A Microsoft tem trabalho no TypeScript, que está interpretando o ES6, fazendo a mesma coisa que o Babel.
- O JSHint é liderado por duas pessoas que estavam no Test262.
- Eles tomaram uma decisão de dar suporte ao ES6 somente para as coisas que estão do estágio 2 para frente.
- As novidades que estão em estágios anteriores podem ainda mudar muito até serem lançadas.
- http://github.com/addyosmani/es6-tools
- O Ember usa ES6. Usando o Babel para fazer o Transpile.
- O Bootstrap está sendo lançado com suporte para o ES6.