O que é Nock?


Nock é a linguagem de programação usada para criar a Urbit. É uma linguagem de baixo nível que essencialmente cria uma definição matemática de computação.

Sua sintaxe se parece com esta:

[2 [0 3] [0 2]]

Nock é uma linguagem minimalista, determinista e combinatória, baseada em funções e expressões. Sua simplicidade permite que seja facilmente implementado em qualquer plataforma, o que é uma característica desejável para um projeto como Urbit, que busca criar um ambiente computacional independente e duradouro.

A linguagem Nock foi criada desta forma para ser um núcleo mínimo e estável que poderia servir como base para a construção de outras camadas de abstração no ecossistema Urbit (como discutimos neste artigo quando falamos de modularidade).

Ao criar uma linguagem de baixo nível com regras simples e de fácil implementação, os desenvolvedores do Urbit garantem que a linguagem seja robusta e possa ser portada para diferentes arquiteturas de hardware e software sem problemas.


Qual é a relação entre Nock e Hoon?

Hoon é outra linguagem de programação no ecossistema Urbit, projetada para ser de alto nível e mais amigável ao programador do que Nock. Hoon é a principal linguagem utilizada pelos desenvolvedores para escrever código em Urbit. O compilador Hoon traduz o código Hoon em expressões Nock, que são então executadas pela máquina virtual Nock.

Em outras palavras, Nock é a linguagem que comanda Urbit, e Hoon é uma forma mais amigável de criar Nock.

Na prática, se você quiser criar aplicações em Urbit, não precisa aprender Nock, já que Hoon é a linguagem que os desenvolvedores usam na prática. Na verdade, o sistema operacional Arvo é escrito em Hoon.

Podemos dizer que a relação entre Hoon e Nock é semelhante à relação entre uma linguagem de alto nível e sua respectiva linguagem bytecode ou de máquina. Hoon permite aos desenvolvedores escrever código de forma mais expressiva e legível, enquanto Nock é responsável pela execução do código em um nível mais baixo e mais simples.

O Hoon poderia ser comparado ao C++ no sentido de ser uma linguagem de alto nível, e assim como o C++ é amplamente utilizado para desenvolver software para Windows e outras plataformas, o Hoon é mais expressivo e legível, facilitando a escrita e manutenção do código. Nock, por outro lado, poderia ser comparado ao Assembly no sentido de que é uma linguagem de baixo nível e representa um nível de abstração mais próximo do hardware ou da máquina virtual subjacente. Assim como Assembly é uma representação mais direta das instruções executadas pelo processador, Nock representa as operações fundamentais executadas pela máquina virtual Nock em Urbit.

Entretanto, é importante notar que Nock é ainda mais simples e minimalista do que a linguagem Assembly e não está diretamente relacionado ao hardware, como é o caso da linguagem Assembly. Nock é uma linguagem puramente funcional, enquanto que Assembly é uma linguagem imperativa baseada em instruções específicas do processador.

Outra comparação poderia ser que Hoon é para Python como Nock é para Python bytecode. Python é uma linguagem de alto nível, fácil de ler e escrever, assim como Hoon. Python bytecode é a representação de baixo nível do código Python, que é executado pela máquina virtual Python (CPython), assim como Nock é a representação de baixo nível do código Hoon executado pela máquina virtual Nock.

Em resumo, a arquitetura de Urbit em seu nível mais básico funciona de acordo com a imagem abaixo:

arquitetura de Urbit no nível mais básico

Observe que qualquer funcionalidade adicional da Urbit irá interagir com o sistema operacional Arvo, passando pelo Hoon, até chegar ao núcleo Nock.


Continue aprendendo:

Você pode manter este estudo, lendo este artigo sobre o linguagem Hoon.