Nim lenguaje de programación

kidandcat

Parece que no hay nada en el foro sobre Nim, asi que vengo a presentaroslo: https://nim-lang.org/

Nim es un lenguaje tipado, compilado estatico, de sistemas y uso general. Nim funciona con un frontend y un backend, el frontend es el mismo lenguaje, Nim, y el backend es a donde compila. Nim tiene dos backends principales (al menos los que uso yo), C para servidor, y JS para hacer web apps.

Aunque similar a Python en sintaxis, su rendimiento (compilando a C) es prácticamente el mismo que C. El recolector de basura es completamente customizable, tienes varias implementaciones diferentes para elegir, y por supuesto puedes ir sin GC. Su sistema de macros es potentísimo.

Lo bueno de esta estructura es que Nim puede targetear por un lado prácticamente cualquier dispositivo existente, ya que lo único que necesita es que exista un compilador de C para ese target (puedes compilar para arduino sin problema). Y por otro lado, le da la ventaja de poder entrar en sitios aislados como es por ejemplo el mundo web, donde los navegadores solo ejecutan JavaScript.

Ejemplo de web App, usando el framework https://github.com/pragmagic/karax :
https://kidandcat.me/
https://github.com/kidandcat/kidandcat.me/blob/master/index.nim

Ejemplo de servidor websockets:

import ws, asyncdispatch, asynchttpserver

var connections = newSeq[WebSocket]()

proc cb(req: Request) {.async, gcsafe.} =
  if req.url.path == "/ws":
    try:
      var ws = await newWebSocket(req)
      connections.add ws
      await ws.send("Welcome to simple chat server")
      while ws.readyState == Open:
        let packet = await ws.receiveStrPacket()
        for other in connections:
          if other.readyState == Open:
            asyncCheck other.send(packet)
    except IOError:
      echo "socket closed"
  await req.respond(Http200, "Hello World")

var server = newAsyncHttpServer()
waitFor server.serve(Port(9001), cb)
5

Usuarios habituales

  • kidandcat