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

Run-time e compile-time no Nim!

Shalom pessoal! Hoje venho mostrar um pouco sobre o Nim!

Recomendo o Nim (https://nim-lang.org), uma lang que é possivel desenvolver tudo com ela, desde frontend, backend, apps para consoles, etc... e até IoT em dispositivos bem limitados, como Arduino Nano. Pois ela compila para C, C++, Javascript e Objective-C.

A sintaxe é amigavel como o Python, mas potente e robusto como o C++; Tipagem estática, com macros extremamente avançados a ponto de permitirem criar uma DSL.

O Nim permite que o dev escolha se algo rodará na compilação ou no runtime, assim é extremamente fácil, por exemplo, ler um arquivo de config na compilação, por exemplo, e ter os dados dele disponiveis sem necessitar do arquivo.

Um exemplo (playground):
conf.json

{
  "name": "John",
  "age": 20
}

main.nim

Mostrar código em texto
# importa a lib json nativa
import std/json

# define o tipo Config, igual os interfaces do Typescript
type Config = object
  name: string
  age: int

# funçao impura para processar as configs
proc parseConfig(file: string): Config {.compileTime.} =
  let node = file.readFile.parseJson
  result.name = node{"name"}.getStr
  result.age = node{"age"}.getInt

# define a config na compilação, igual o `#define` do C/C++
const config = parseConfig "conf.json"

proc sayHi(name: string) =
  echo "Hello " & name & "!"
proc sayHiToBaby(name: string) =
  echo "Hello baby " & name & "!"
  
if config.age > 3:
  # https://nim-lang.org/docs/tut2.html#object-oriented-programming-method-call-syntax
  config.name.sayHi
else:
  config.name.sayHiToBaby

Comando para compilar no modo release:
nim c -d:release main.nim

Ao compilar o código acima, os dados contidos no json estará salvo internamente no executável, já processado como um objeto Config. Então no runtime, o executavel acessaria como um objeto, não mais como um JSON, pois foi processado na compilação!

Isse é algo que linguagens como C não seria possivel reproduzir sem usar gambiarras de um script gerar um outro arquivo de código, que importaria ele na compilação.
No Javascript (NodeJS) isso nem é possivel pois é uma linguagem interpretada, e não compila para um executável.

Isso é possivel, pois o Nim, alêm de ser uma linguagem de sistema compilada, ele tambêm pode ser uma linguagem interpretada de scripting, o Nimscript, como o bash!

Que bom que se interessou para ler tudo! Tenha um ótimo dia!

Carregando publicação patrocinada...
1

Finalmente alguém falando sobre uma linguagem boa de verdade nessa comunidade.

O Nim consegue ser uma linguagem incrivelmente poderosa e ainda assim, simples.

Recomendo de mais para pessoas que programam em Python, JavaScript e outras do gênero. Pois ela combina conceitos populares dessas e outras linguagens em uma syntax consistente e fluida.

E claro, com o adendo de ser uma linguagem compilada. Ou seja:

>>>>>>> performance

1
1
2