Executando verificação de segurança...
1

Já abordaram a questão do Elixir, mas gostaria de perguntar também:

Como se dá, ou poderia ser feita, essa implementação onde Spiral é transpilada para Elixir? Elixir roda em Erlang... logo, se uma preocupação é eficiencia, linguagens com backend separado não seriam "menos" eficiente em tempo de compilação?

Sim, entendo a complexidade da compilação e sei que nenhum compilador é 100% eficiente. Mas toda linguagem compilada deve prezar pela eficiencia em compilação. O proprio Rust trás inumeros beneficios e inovações, mas é lento em compilação pois o compilador faz muitas checagens para manter tudo rodando legal. O propio binario de Rust é maior em comparação com outras linguagens, como a santa trindade(ASM,C,C++).

Digo isso porquê Spiral tem o foco em juntar tudo o que ha de bom em outras linguagens(tipo as meninas superpoderosas kkk) mas a complexidade é enorme. Transpilar codigo e rodar é uma coisa, agora compilar de verdade é outra... Por exemplo, como poderíamos ter um sistema distribuido eficiente se o programa deve ser portado para Elixir, que será transformado em codigo para a maquina Erlang? E o Rust entra onde? Poderiamos usar indicador durante o codigo?(tipo, @cod_erl e então aquele script seria portado para a maquina Erlang, ou algo assim).

Isso não é maquiar um script tal qual o Typescript faz para o javascript? No fim tudo não seria Erlang ou Rust?(levando em consideração a diferença entre as duas langs, acho beem dificil criar algo no meio delas, não que seja impossivel)

Minha ultima indagação: Não seria melhor criar uma rede neural que transpile o codigo Spiral para qualquer linguagem? kkkk sério, seria o primeiro compilador inteligente do mundo, e mataria um monte dessas questões acima :)

particularmente gostei da idéia, acho que tem muita coisa para se discutir, mas pode ser um projeto bem legal!

Carregando publicação patrocinada...
1

Exemplo de uma macro em Elixir pra realizar inlining de soma de listas com valores conhecidos em compilação:

defmodule MyList do 
  defmacro sum_list(list) do
    quote do
      unquote(Enum.reduce(list, 0, &(&1 + &2)))
    end
  end
end

IO.inspect MyList.sum_list([1, 2, 3, 4, 5])

Resultado da compilação em Elixir. A cada compilação/execução de projeto, o código acima é convertido em Erlang VM bytecode, assim economizando realizar a soma em toda execução da função em requests de API, timers, etc.

IO.inspect 15

O código Spiral abaixo geraria 15 na linguagem escolhida, contando que um backend para tal tenha sido implementado.

inl sum list =
    list |> listm.fold (+) 0

inl main () =
    [1; 2; 3; 4; 5] |> sum

O código abaixo também geraria 15, mostrando que transpilar não é o termo correto, e sim compilar, diferente de TypeScript para JavaScript.

type seq dim el = dim -> option el

inl fold fn init seq =
    inl rec loop acc n =
        match seq n with
        | Some x => loop (fn acc x) (n + 1)
        | None => acc
    loop init 0

inl sum seq =
    seq |> fold (+) 0

inl main () =
    fun n =>
        if n < 5
        then n + 1 |> Some
        else None
    |> sum

Quando nem todos os dados das listas são conhecidos, Spiral tem a grande vantagem de pré computar o que é possível e gerar código normal para os backends escolhidos. Usando exclusivamente Elixir para escrever projetos, somente o código original é submetido à repositórios como Git e compilado a cada execução. Com Spiral o resultado da compilação também é submetido, os arquivos .ex e .rs gerados seriam versionados e incluidos manualmente em respectivos projetos existentes. Flags em código podem ser utilizadas pra gerar instruções diferentes de acordo com backend, similar com escrever Flutter ou React Native pra em teoria gerar Kotlin e Swift, porém com uma sintaxe pensada em programação funcional moderna, permitindo uma melhor customização.

Sobre redes neurais, poder gerar código legível para várias linguagens permite que aconteça o que você sugeriu, o output seria dados confiáveis pra treinamento. Não só isso, como a linguagem foi feita para implementar modelos de deep learning que utilizam essa capacidade de executar lógicas complexas em compilação pra “alocar” a exata quantidade de memória necessária – mais stack e menos heap, permitindo a álgebra linear ser executada em chips menos genéricos que GPUs. Além dessa capacidade de especialização em alguma tarefa determinada para hardwares pré-moldados, implementações de modelos de IA do zero usando Spiral também poderiam ser arquitetadas pra escrever e reescrever o próprio código, encontrando melhores formas de gerar output pra seus diferentes backends. Os modelos em Python de hoje são muito focados em dados e escalabilidade do processamento dos mesmos, podem ter até consciência do próprio código, mas sem influenciar a decisão de hiper parâmetros em escopo estrutural. Não tenho o treinamento formal pra explicar melhor essa parte, talvez esteja falando besteira, mas já consegui ver vantagens ao implementar coisas mais simples como smart contracts. Quem sabe até seja possível integrar IA e blockchain no futuro, da pra viajar bastante.


Tive que responder usando outra conta por causa desse erro :( Não é possível publicar porque há outras publicações mal avaliadas que ainda não foram excluídas. Exclua seus conteúdos mais recentes que estiverem classificados como não relevantes. 9d03783c-15b0-42fa-9fc4-f3f90d4136f9