Aqui, estou realmente interessado em diminuir as barreiras à educação matemática.
Alvo:
Eu gostaria de ver criado para a comunidade JavaScript, um equivalente das bibliotecas de computação científica e de alto desempenho baseadas em Python / vinculadas (ótimas listas das quais estão disponíveis no Sage ou não ). E eu quero isso, porque gostaria de facilitar para as pessoas que aprendem JavaScript entrar na computação científica e numérica sem precisar aprender Python (& empresa). (Eu sei que é fácil aprender Python, como eu basicamente o fiz em algum momento, mas isso sugere que talvez seja fácil compilar um subconjunto restrito de JavaScript para Python.)
Método hipotético:
Estou interessado principalmente em uma nova linguagem com uma diferença mínima do JavaScript, porque o mercado ("compiladores humanos") que estou direcionando são programadores que já conhecem o JavaScript. O que eu quero direcionar para essas pessoas é fornecer a elas uma linguagem minimamente diferente na qual escrever código que compila para C mais rápido, da maneira que RPython e Cython fazem para Python. Estou disposto a lançar muitos recursos de JavaScript, só quero ter o cuidado de adicionar um número mínimo de recursos. Definitivamente, observarei Lua, Dart, ECMA Harmony (que não tem data formal de lançamento , ou estou enganado?), etc., pois todas elas são muito parecidas com as implementações contemporâneas (2012) do JavaScript.
Motivações questionáveis:
Pessoalmente, estou disposto a aprender qualquer idioma / conjunto de ferramentas que faça as coisas mais rapidamente (estou aprendendo o próprio Erlang, por isso), mas aqui estou especificamente interessado em baixar (desculpe) outras pessoas que talvez não tenham esse conhecimento. vontade. Essa é apenas uma daquelas situações em que "quero comer meu bolo e comê-lo também, por isso, dedico algum tempo à pesquisa do problema". Eu tenho uma experiência anterior muito limitada em design de linguagem de computador, mas até agora, do ponto de vista de hackers no ecossistema, o problema parece interessante o suficiente para ser estudado; portanto, espero fazer mais disso em breve.
eval
; seu idioma deve ter isso? Você tem como objetivo principal compilar código de máquina, VM ou interpretação? Que tipo de sistema de tipo estático você imagina?@
sinal antes do nome (por exemplo@Gilles
- e acertar a ortografia) - clique nohelp
botão ao lado da caixa de entrada do comentário para obter mais informações.Respostas:
Se você deseja usar JavaScript para computação científica, por que não tentar o Node.js. ? O Node é baseado no mecanismo V8 do Google, com algumas funcionalidades adicionais para interagir com o sistema de arquivos, gravar servidores e vincular-se às bibliotecas C e C ++ (essa definitivamente não é uma lista exaustiva). Possui tempos de execução rápidos e fornece um console interativo e também uma maneira de executar seus programas a partir da linha de comando. Achei o comentário de @ DaveClarke sobre Python agindo como "código de cola" interessante por causa da redação. Aqui está um trecho da documentação do nó sobre addons :
O Node também possui um excelente gerenciador de pacotes chamado NPM, o que facilitaria o compartilhamento de módulos científicos que você escreveu. O repositório do NPM já contém alguns módulos científicos, como "natural" (para processamento de linguagem natural) ou "clusterfck" (uma biblioteca de cluster). Definitivamente, existem muitas outras bibliotecas disponíveis para uma variedade de aplicações.
O melhor dessa solução é que você não precisaria modificar o JavaScript ou criar um novo idioma. A sintaxe é essencialmente a mesma, mas seu código não precisa de um navegador para ser executado. Se você planeja acompanhar o nó, uma boa primeira etapa pode ser começar a criar complementos para bibliotecas científicas de código aberto existentes escritas em C e C ++, ou você pode portá-las para JavaScript. Na verdade, eu estava pensando em usar o nó para programação científica hoje, e foi isso que me levou a essa pergunta. Seria ótimo ver ferramentas mais robustas, como você encontra no Python.
Inicialmente, eu tinha links para natural e clusterfck, mas não tenho representante suficiente para publicá-los. Felizmente, eles aparecem como os primeiros resultados se você pesquisar no "clusterfck node" e "natural node".
fonte
O ponto das bibliotecas científicas do Python é que o Python atua apenas como um código de cola para embaralhar os dados entre as bibliotecas científicas. O próprio Python faz pouco do trabalho de moagem de alto desempenho. O Python é uma boa linguagem para isso, pois suporta os paradigmas procedurais e orientados a objetos (e funcionais em grande parte), e é possível vincular-se facilmente a bibliotecas externas.
Javascript está fortemente ligado às tecnologias do navegador. É principalmente uma linguagem horrível, nada projetada para ser eficiente ou para escrever software em larga escala, embora na prática as duas coisas ocorram devido a enormes investimentos em tecnologia de compiladores e uso cuidadoso da linguagem, respectivamente. O Javascript é 1000 vezes melhor por bibliotecas bem projetadas, como o JQuery. Não tenho certeza se o Javascipt fornece algum suporte para vincular facilmente as bibliotecas C (embora eu ache que deve, indiretamente pelo navegador e via Java).
Não pretendo desanimar, mas toda a idéia parece infundada. Javascript e computação de alto desempenho são encontrados apenas em frases que começam com "Um homem entrou em um bar ...."
Dito isto, estou disposto a provar que estou errado. O Java em tempo real existe, o que é uma combinação estranha e é bem-sucedida, portanto, quem sabe.
fonte
Apenas uma idéia: você pode usar bibliotecas científicas escritas em Java (acho que já encontrará muito trabalho disponível) com Javascript - que tem uma sintaxe semelhante ao Java - usada apenas como uma linguagem de empacotamento para:
Veja o projeto Rhino para um interpretador Javascript estável escrito em Java.
Se desejar, você pode usar o Java JNI para usar bibliotecas científicas escritas em C / C ++.
A figura inteira:
EDIT : apenas pesquisando em um material encontrado como este: Biblioteca Java GNU Scientific , Lista de bibliotecas numéricas (Java) , biblioteca Java Graph , ambiente jHepWork Multiplatform para computação científica e análise de dados
fonte
Criar um novo idioma não é necessário. Hoje, pode-se escrever computação numérica de alto desempenho em JavaScript, sem compilação / transpilação. Como uma linguagem de script, o JavaScript se compara favoravelmente a Python e R. Para benchmarks, execute os benchmarks de linguagem no stdlib , que comparam o desempenho em uma ampla variedade de APIs.
Para aplicativos do lado do servidor, é possível gravar complementos nativos do Node.js. para interagir com as mesmas bibliotecas C / C ++ / Fortran usadas em outros ambientes de computação numérica, como R, Python e Julia. Como mostrado no meu trabalho, os complementos nativos do Node.js. permitem vincular a bibliotecas de computação numérica otimizadas por hardware, permitindo assim a computação numérica de alto desempenho a partir do JavaScript.
Para aplicativos do lado do cliente, é possível compilar no WebAssembly para obter 1,5-2x do desempenho nativo. Para ambientes mais antigos, é possível compilar para o asm.js., que é um subconjunto reduzido de JavaScript mais passível de otimização do compilador. No meu trabalho, o asm.js pode corresponder a implementações de referência ingênua (ou seja, não otimizadas para hardware) escritas em C / C ++ / Fortran.
Em resumo, não há razões técnicas para você não poder escrever bibliotecas de computação numéricas e científicas no próprio JavaScript. O que é necessário são pessoas com tempo e recursos para escrever implementações rigorosas e robustas.
divulgação : Eu e outros estamos trabalhando no projeto stdlib , que visa trazer recursos de computação numérica robustos e de alto desempenho para JavaScript e Node.js.
fonte