- 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
fizeram em Rust algo parecido com Rust ??
É meio complicado que o gerenciamento de pacotes dependa do GitHub. Gostaria que também considerassem um pouco ambientes sem conexão com a internet…
Comentários no Hacker News
O modelo de concorrência do Inko foi inspirado em Erlang e Pony e usa processos leves.
Para adicionar um pacote do Inko, é necessário criar um repositório no GitHub.
Foram fornecidos links para discussões relacionadas ao Inko:
Foi levantada uma dúvida sobre a semelhança com Rust:
Interesse no Inko e desejo de que ele se tornasse o novo Golang:
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:
Avaliação positiva das decisões de design do Inko:
Menção à necessidade de binários pré-compilados:
Foram adicionados links extras para discussões relacionadas.