A linguagem JavaScript sempre foi sequencial (não-paralela), embora a capacidade de processamento paralelo já esteja disponível até em dispositivos móveis. Para reduzir essa limitação, a Intel tem trabalhado em seus laboratórios numa extensão do JavaScript capaz de explorar as vantagens dos sistemas com vários núcleos, chamada River Trail.
A extensão permite fazer o uso dos vários núcleos das CPUs Intel e de suas novas funcionalidades vetoriais (SSE/AVX) em aplicações web. O River Trail visa com isso tornar possível o uso de aplicações que necessitam de grande poder computacional, tal como o processamento de fotos, no próprio browser. (Conheça mais sobre as extensões vetoriais da Intel aqui e aqui).
A integração com tecnologias web existentes foi uma das maiores preocupações durante o desenvolvimento da nova extensão, conforme comenta Stephan Herhut do Intel Labs:
Nossa meta foi tornar a escrita de aplicações web com o River Trail tão fácil quanto a programação com JavaScript convencional. O River Trail estende o JavaScript com um modelo de programação paralela simples mas poderoso. Além disso, como a tecnologia é embiutida em JavaScript, funciona bem com as novas APIs de HTML5. Particulatmente, o River Trail funciona bem com o WebGL, uma API JavaScript desenvolvida recentemente para OpenGL e usada para a visualização 3D no browser. Uma de nossas aplicações de desmonstração é um simulador de física com mais de 4 mil elementos, utilizando o River Trail para processamento e visualização com o WebGL.
O River Trail estende o JavaScript com construções determinísticas de paralelismo na manipulação de dados, que são traduzidas em tempo de execução em uma camada de abstração de hardware de baixo nível. Com o uso de CPUs de vários núcleos e instruções vetoriais, o River Trail consegue obter reduções no tempo de processamento (link para vídeo) quando comparado ao JavaScript sequencial.
Em particular, é adicionado o tipo ParallelArray ao JavaScript. Trata-se de uma estrutura somente-leitura que mantém os dados de um array, cujos elementos podem ser processados em paralelo. A sua criação pode ser feita através do construtor ou devolvida na chamada de um dos métodos de protótipo de ParallelArray. O dado passado para o construtor ou o protótipo é tipicamente um array JavaScript ou uma função usada para gerar os valores para o ParallelArray.
Por exemplo, "new ParallelArray([1,2,3])" cria um ParallelArray com os valores 1, 2 e 3. O array fica acessível por funções como combine, filter, map, reduce, entre outras. O processamento dentro dessas funções é feito em paralelo. As funções citadas podem ser usadas normalmente como um subconjunto do JavaScript.
O River Trail está disponível como um add-on do browser Firefox.