DEV Community

Juan Carlos
Juan Carlos

Posted on

TLDR; Nim en Spanish

Nim es un nuevo lenguaje de programacion compilado de tipado estatico con inferencia,
se siente como Python, se ejecuta como C,
funciona en Frontend y Backend,
compila a C, C++, JavaScript, ObjectiveC, NodeJS.

Targets adicionales compilan a Python, LLVM, Vulkan, OpenGL, WebAssembly, Dalvik, etc etc.

Permite projectos con 1 solo lenguaje para todo el stack,
pero tiene performance destacable con menos recursos,
posee una libreria standard muy completa con documentacion online y
librerias creadas por la comunidad en un registro de paquetes,
viene con un administrador de paquetes de gran utilidad,
compila a binario nativo optimizado de 1 solo archivo sin dependencias.

Tu codigo compila y genera un ejecutable nativo,
que podes copiar y pegar en cualquier computadora y funcionara.
Los programas en Nim no necesitan "preparar un ambiente" especial.
Los programas en Nim no necesitan Nim instalado para funcionar.

Usualmente lleva menos codigo que lenguajes como Ruby, Rust, PHP, etc
Menos codigo, mas performance.

El compilador posee un AutoDocumentador que genera un HTML simple y elegante,
tomando el codigo, leyendo comentarios en ReSTructuredText o Markdown,
generando HTML o LaTex, con LaTex puedes generar PDF.

Hola Mundo

echo "Hola Mundo"
Enter fullscreen mode Exit fullscreen mode

Jugar con codigo desde el browser aqui.

Si sos DevOps o SysAdmin puedes utilizar Nim de manera interpretada,
puede ser muy util para reemplazar scripts de BAT o PowerShell o Bash,
debido que el mismo Script correra en todas las plataformas, sin compilar.
La syntaxis de NimScript es la misma que la de Nim,
asi que no hay nada extra que aprender de syntaxis,
puede detectar arquitecturas de hardware, sistemas operativos y hasta en que Distro de Linux esta corriendo.

Si haces Python pero buscas algo para ejecutar Python en el Browser,
Nim puede ser una opcion, debido que compila a JavaScript,
y funciona sin ningun peso extra ni problemas de performance,
existen librerias solo-Frontend y se integra transparentemente y
bi-direccionalmente con JavaScript del browser,
tambien permite correr en NodeJS, y tiene API del DOM, todo builtin.

Posee caracteristicas avanzadas, pero a su vez es facil de aprender,
por ser similar la syntaxis a Python, como un Python Tipado y Compilado,
viene con AutoFormateador de codigo en el compilador
(similar a gofmt o autopep8, corrije Estilo tambien).

Cuando estas usando algo que va a cambiar en el lenguaje,
se muestran mensajes coloreados de Deprecacion al compilar
(usualmente con la sintaxis nueva o sugerencia).

Las caracteristicas nuevas del lenguaje que vendran a futuro estan ocultas detras de parametros de compilacion Experimentales,
permitiendo ver claramente hacia donde va el lenguaje hoy mismo.

Compilando a C standard, permite a software Nim ejecutarse en cualquier lugar que apenas pueda compilar C,
permitiendo tambien interoperabilidad transparente con cualquier cosa que tenga API en C,
brinda resistencia contra la obsolescencia programada del software,
50 anios en el pasado podias compilar C,
100 anios en el futuro vas a poder compilar C.

Es 100% software libre, bajo licencia MIT, esta todo en Github,
Nim esta escrito en completamente en Nim, documentacion esta toda online.

$ echo 'echo "Hola Mundo"' > hola.nim

$ nim c -r hola.nim          # C
Hola Mundo

$ du -h hola
20K     hola

$ nim cpp -r hola.nim        # C++
Hola Mundo

$ nim objc -r hola.nim       # ObjectiveC
Hola Mundo

$ nim c --os:windows hola.nim
$ wine hola.exe              # Windows
Hola Mundo

$ nim js -d:nodejs hola.nim  # NodeJS
$ nodejs hola.js
Hola Mundo

$ nim e hola.nim             # Interpretado (Sin Compilar)
Hola Mundo

$ nim js hola.nim            # Web (Frontend)
Enter fullscreen mode Exit fullscreen mode

Dennis Ritchie tenia razon...
👑

Top comments (4)

Collapse
 
taillogs profile image
Ryland G

Yo creo nim es muy guay. Mi Español es solomente para leyendo, no escribir. Yo quiero preguntas, pero en English.

So the only drawback of nim is the efficiency of the generated code? Otherwise it’s very similar to python right?

I assume that means that nim->python yields the best translation.

Also C/C++ often is beneficial because of the ability to directly manage memory, which you clearly also lose with nim.

Collapse
 
juancarlospaco profile image
Juan Carlos • Edited

On Nim you can directly manage memory.

Nim has 6 Garbage Collectors to choose from, or no GC at all,
is easy just changing 1 compiler parameter, you can tune the GC.
They also are adding a memory management without GC,
kinda like Rust, but without BorrowChecker.

Is a Compiler, not a Transpiler. Nim by default targets C.

Feels very similar to Python writing it, but has C-like performance.

Nim is faster than Python and Cython.
🤪

Collapse
 
taillogs profile image
Ryland G

You say it’s a compiler just because it targets C? Doesn’t the fact it can be translated to python make it a transpiler?

It’s not memory management if you have a gg really.

Overall very cool, will try it out.

Thread Thread
 
juancarlospaco profile image
Juan Carlos

I dont understand if you want Manual or GC memory management,
but you can do both on Nim.

I dont say it’s a compiler because it targets C,
theres compilers that wont target C, is compiler because it is,
you can say its a Transpiler for the JavaScript target yeah,
but for others is a compiler, whatsoever thats just wording :P

It compiles to native Python, like Cython,
not Python source code, that would be slow,
one of the benefits of Nim is the high efficiency of the generated code.
🙂