10 pontos por xguru 2023-11-18 | 3 comentários | Compartilhar no WhatsApp
  • Permite criar software concorrente com facilidade, possibilitando o desenvolvimento sem se preocupar com desempenho imprevisível, erros de tempo de execução, condições de corrida de dados e erros de tipo
  • Possui recursos como gerenciamento automático de memória, move semantics, tipagem estática, concorrência com segurança de tipos e tratamento eficiente de erros

Gerenciamento automático de memória determinístico

  • O Inko usa gerenciamento de memória baseado em propriedade única e semântica de movimento, sem depender de garbage collection
  • Valores com proprietário são removidos quando saem do escopo e podem ser emprestados de forma imutável ou mutável
  • O uso de propriedade única oferece comportamento e desempenho previsíveis, sem perder tempo ajustando garbage collection

Inko é seguro

  • Ao usar Inko, não é preciso se preocupar com erros comuns em outras linguagens, como ponteiros NULL, use-after-free, erros de tempo de execução e condições de corrida de dados
  • Oferece o tipo Option para dados opcionais e oferece suporte a referências imutáveis e mutáveis, permitindo restringir alterações quando necessário

Facilita a concorrência

  • O Inko implementa concorrência usando processos leves e adota um modelo de concorrência inspirado em Erlang e Pony
  • Os processos são isolados entre si e se comunicam por mensagens, enquanto o compilador garante a correção por meio de verificação de tipos
  • Ao transferir dados entre processos, a unicidade dos dados é garantida, tornando impossíveis as condições de corrida de dados

Faz o tratamento de erros da forma correta

  • O Inko usa uma abordagem de tratamento de erros inspirada no artigo "The Error Model", de Joe Duffy
  • Os erros são representados por um tipo algébrico chamado "Result", com simplificação sintática por meio de try e throw
  • Para erros graves que não podem ou não devem ser tratados, há suporte a "panics", que interrompem o programa

Eficiente

  • Em vez de competir com linguagens de baixo nível como C ou Rust, o Inko busca ser uma alternativa atraente a linguagens como Ruby, Erlang e Go
  • Usa um compilador de código nativo com LLVM como backend, oferecendo equilíbrio entre tempos de compilação rápidos e bom desempenho em tempo de execução
  • O código nativo é vinculado estaticamente a uma pequena biblioteca de runtime escrita em Rust, responsável por lidar com agendamento de processos, IO não bloqueante e mais

Pattern matching

  • O Inko oferece suporte a pattern matching para vários tipos, incluindo tuplas e tipos de dados algébricos
  • O pattern matching é compilado em uma árvore de decisão, e o compilador busca manter o menor tamanho possível
  • O compilador garante que todos os padrões sejam cobertos

3 comentários

 
ahwjdekf 2023-11-18

fizeram em Rust algo parecido com Rust ??

 
regentag 2023-11-18

É meio complicado que o gerenciamento de pacotes dependa do GitHub. Gostaria que também considerassem um pouco ambientes sem conexão com a internet…

 
xguru 2023-11-18
Comentários no Hacker News
  • O modelo de concorrência do Inko foi inspirado em Erlang e Pony e usa processos leves.

    • Os processos são isolados entre si e se comunicam por mensagens.
    • Processos e mensagens são definidos com classes e métodos, e o compilador garante a correção por meio de verificação de tipos.
    • Os dados são transferidos de forma única entre processos, tornando data races impossíveis e eliminando a necessidade de cópia profunda.
    • Suporta canais com múltiplos produtores e múltiplos consumidores, permitindo comunicação entre processos sem referências explícitas entre eles.
  • Para adicionar um pacote do Inko, é necessário criar um repositório no GitHub.

    • O gerenciador de pacotes do Inko também oferece suporte a outros repositórios Git, como o GitLab, mas a listagem é organizada usando repositórios do GitHub.
    • Houve preocupação com a tendência da comunidade de se tornar dependente de produtos da Microsoft e do Git.
  • Foram fornecidos links para discussões relacionadas ao Inko:

    • "Show HN: Inko 0.10.0 – build concurrent software with confidence" (setembro de 2022, 3 comentários)
    • "Inko 0.5.0 released, featuring the first steps towards a self-hosting compiler" (setembro de 2019, 7 comentários)
    • "Inko (a gradually-typed object-oriented programming language) 0.4.0 released" (maio de 2019, 1 comentário)
    • "Show HN: Inko – A safe and concurrent object-oriented programming language" (agosto de 2018, 45 comentários)
  • Foi levantada uma dúvida sobre a semelhança com Rust:

    • Pergunta sobre se o Inko é parecido o suficiente com Rust a ponto de não haver motivo para escolhê-lo no lugar de Rust.
    • Necessidade de exemplos de programas que sejam difíceis ou trabalhosos em Rust, mas fáceis de escrever em Inko.
  • Interesse no Inko e desejo de que ele se tornasse o novo Golang:

    • Parece que o Inko começou no GitLab, e foi mencionado o desejo de que ele se tornasse o novo Golang, junto com a necessidade de GC.
    • Pergunta sobre os diferenciais em relação ao Gleam e interesse em formas de aproveitar o ecossistema JVM.
  • Foi compartilhado o fato curioso de que o nome Inko significa "mais um" em télugo.

  • Discussão sobre diferenças sintáticas em relação ao Rust:

    • Comparação detalhada das diferenças de sintaxe entre Rust e Inko.
    • Menção a pequenas diferenças, como declaração de funções e expressão de genéricos.
  • Avaliação positiva das decisões de design do Inko:

    • A sintaxe, semelhante à de linguagens da família C/Java, traz familiaridade para muitas pessoas.
    • Foi levantada uma dúvida sobre a decisão de nomenclatura da seção de tratamento de erros.
  • Menção à necessidade de binários pré-compilados:

    • Foi mencionada a dificuldade de compilação por causa de problemas com LLVM e, por isso, a falta de maior interesse no Inko.
  • Foram adicionados links extras para discussões relacionadas.