Saludos, comunidad, hoy quiero tratar de un tema muy interesante que se que le va a ser de agrado a muchos y es precisamente sobre las nuevas tendencias a crear nuevos lenguajes de programación.
Como todos sabemos existen miles, algunos conocidos y otros desconocidos por haberse desarrollado en el marco de una empresa o institución. El problema radica en la supuesta necesidad de crear lenguajes de programación nuevos a causa de la inconformidad de la sintaxis de otros lenguajes o la carencia de la funcionalidad de alguno en particular. Sucede que ahora existe Rust un lenguaje de programación novedoso y en desarrollo que he tenido el gusto de probar y que para mí si es cierto que promete mucho y aquí es la palabra clave «promete», pero prometer es una cosa y realizarlas es otra.
Hasta ahora he estando trasteando con él y si tiene muchas facilidades y cumple con la flexibilidad esperada pero veo aún así más de lo mismo y seguro alguno que se haya iniciado con él tenga la misma sensación en ocasiones. A ver, todos estos lenguajes que han surgido no contemplan lo que realmente esperamos y esto va a crear la necesidad de hacer más lenguajes y un nunca acabar. Me baso en que se siguen creando y nunca se acuerdan de la GUI, necesitamos un toolkit estándar en el lenguaje gráfico y siempre se desecha esta área, esto fomentaría la producción de software de calidad, y un toolkit que sea completo, rápido, ligero y de calidad, vamos!! que hasta Windows 3.1 lo tiene, me recuerdo del Borland en MS-Dos y de Conio.h y esto precisamente hizo que el Borland c++ en MS-Dos fuera famoso hasta el punto de sobrevivir en estos días aún sin soporte y lo vemos en los Hirens Boot y sus herramientas(algunas).
Me maravilla de python que haya cumplido con esto con Tkinter pero aún así las últimas versiones no lo incorporan como parte del lenguaje sino que hay que instalarlo a parte y esto es un error grande. En el caso de Rust pude conocer a EGUI pero es de terceros, pues bien dado que Rust es progresivamente libre yo sugeriría que se incluyera EGUI o su derivado como parte de la instalación principal, esto haría al software más portable. Dotaría a Rust de un empaquetador que redistribuya la aplicación como lo hace pyInstaller o bien que recolecte las dependencias en una carpeta y la aplicación sea completamente independiente.
Aprovechemos que Rust es software libre para decidir que se debe incluir en él y no dejarle esas decisiones solamente a los desarrolladores principales. Si lo que desean es crear un lenguaje nuevo no debe ser como lo que ya tenemos, pensar solo en la sintaxis y olvidar la funcionalidad y las características es estúpido!!! Pero hoy en día toda la moda es sobre lo lindo que se ve todo pero bajo el capo muchas veces un desastre!!! A nosotros no nos interesa que se vea muy bonito sino que sea muy productivo a la hora de trabajar, que para eso es la computadora, no una pasarela de modelos en forma de ventanas ni de sintaxis, aunque es importante la sintaxis no se deben olvidar de las demás cosas por lo tanto dejo aquí claro lo que necesitamos los desarrolladores. En caso de seguir en este caos voy a tener que crear mi propio lenguaje de programación para así ilustrarlo todo(ya había hecho uno que nunca publiqué de propósito especial para controlas leds por el puerto paralelo de llamaba jluces y estaba escrito en C).
Un lenguaje de programación moderno debe cumplir con estos requisitos:
– Debe ser fácil de aprender.
– Debe ser rápido.
– Debe ser compacto.
– Debe ser productivo e incluir funciones de alto nivel.
– Debe contener objetos de alto nivel con funciones de alto nivel predefinidos.
– Debe contener un apartado de funciones gráficas para forma geométricas.
– Debe permitir definir colores en la forma «#xxyyzz»
– Debe poseer un toolkit gráficos que contenga los widgets con apariencia profesional que se dibujan ellos mismos con una estilo preferible de EGUI de Rust:
* botón
* textedit
* label
* list
* combo
* webview con soporte javascript completo que use webkit. Si es posible reprogramar un motor javascript completo desde cero que se pueda redistribuir junto a la aplicación, creo que es posible.
* canvas
* imageview
* table
* graphic (un ploteador x,y de gráficos de barra que admita gráficos circulares.)
* progressbar con funciones como setValue(entero), maxValue, minValue
* calendar con funciones como setdate, getdate, setday, getday, o sea fácil.
* PrinterWidget con funciones como print y que permita imprimir la ventana gráfica que se pase como argumento.
* Formularios MDI o sea ventanas dentro de otras.
* Menú/Submenus popups con funciones como createMenu(«Archivo»), addSubmenu(miSubmenu),
createSubmenu(misubMenu, «Editar», «Opciones»)
* Posicionamiento absoluto x,y
* Posicionamiento por gridlayout
* Posicionamiento por cajas verticales/horizontales
* Los widgets deben autoajustar la escala del texto y controles al cambiar el tamaño de
la ventana.
* Debe admitir sqlite
* Debe admitir de fábrica cgi.
* Debe tener una función para crear un servidor web en un puerto.
* Funciones para rutear peticiones http.
* Debe poder manejar archivos pdf o mejor ps o djvu de facto sin librerías de terceros.
* Debe admitir especificar tipos de datos o conversión de tipos automática.
* Admitir opengl de facto abstrayendolo con funciones como cubo1 = createCube(1,1,1),
setColorCube(cubo1, Colors.red)
* Tener un sistema básico de físicas de serie.
* Poder manipular los puertos de la PC con funciones como
* Poder generar una página web html/css usando funciones del lenguaje como createDiv,
createArticle, createJavascript, etc, como un cgi pero que genere un .html y un .css
automático.
* Debe poder redistribuir el resultado ejecutable de manera independiente ejecutable fuera del entorno con sus dependencias usadas en el proyecto. Los IDES deben tener esta opción. (usar la tecnología appimage y opcionalmente flatpak)
Para hacer una idea más realista voy a crear un lenguaje ficticio que puede parecer el ideal para los desarrolladores.
Podría usar los puertos de la PC con el soporte por defecto del lenguaje con:
ParalellPort p1
p1 = usePortParalells()
p1.sendParalell(«11111111», Ports.Paralell1)
p1.sendParalell(«11111111», Ports.Paralell2)
SerialPort sp
sp = useSerialPorts()
sp.sendString(«aaaaaaaaa»)
UsbPort usb
usb = useUsbPorts()
usb.format(FormatsUSB.NTFS)
usb.copyData(«/tmp/folder1», TypeCopy.RECURSIVE)
usb.eject()
UsbPort usb2
usb = useUsbPorts()
usb.copyData(«/tmp/image.iso», TypeCopy.DDRAW)
usb.eject()
# Este programa crea un cubo rojo y lo rota en la pantalla al oprimir ENTER
Window mywin
Cube3d miCubo
miCubo = createCube(1,1,1)
miCubo.setColor(Colors.RED)
miCubo.setTextureCubic(«/tmp/bloques.png»)
miwin = createWindow(640, 480, «Prueba»)
miwin.add(miCubo)
miwin.show()
ListenEventIn(miwin, Events.KeyUp.ENTER):
miCubo.rotateX(1.2);
miCubo.rotateZ(2)
-Otro programita:
# Sumar dos numeros e imprimir el resultado
Integer x,y
(x, y) = questionUser(«Escribe 2 enteros»)
res = x + y
outScreen(«El resultado es » + res)
# Manejar bases de datos
DataSql sql
sql = openDataBase(«/tmp/mibase.db»)
res = sql.sendQuery(«select * from tabla1 where usuario = ‘PEPE'»)
while not res.End:
outScreen(«el password de » + res.field(«usuario») + » es » + res.field(«password»))
res.nextRecord
# Crear una ventana con un botón usando el toolkit estándar del lenguaje y que nos salude con una etiqueta con una
imágen animada.
Window myWin
mywin = createWindow(640, 480, «Otra ventana»)
miwin.setBackground(Colors.WHITE)
Button bt
bt = createButton(«saludar», 50, 50, 80, 80) # es el texto, posX, posY, ancho, alto
miwin.add(bt)
ListenEventIn(bt, Events.Click):
saludarFn(«hola»)
miwin.show()
function saludarFn(String text):
Window ventana2
ventana2 = createWindow(320,240, «saludando»)
Label label1
label1 = createLabel(«», 50, 50, 60, 60)
label1.setImage(«/tmp/imagen1.png»)
label1.setAnim(Anim.INTERMITENT).timeoutSeg(20)
label1.setActionPostAnim(label1.ventana2.delete())
label1.delete()
ventana2.show()
No se debe requerir importar ningún tipo de módulo, esto debe ser determinado por el compilador según las funciones que se usan en el programa.
El lenguaje debe ser interpretado con una opción –compile para compilar a binario de máquina real.
Y todo esto debe formar parte de la instalación estándar del lenguaje.
Díganme ustedes programadores si es tan difícil haber pensado en esta idea desde muchos años atrás y hemos estando pasadndo trabajo inútil rompiéndonos la cabeza a causa de personas que si bien es cierto tratan de hacerlo mejor complejizan innecesariamente la programación en todas las esferas de manera inconciente cuando con este lenguaje ficticio llevado a la realidad puede sobreescribir con un override a todos los demás. Ah!! no me olvido de manejar el hardware a bajo nivel con:
Struct st1:
String msg:512
Hex hx1 = 0xff
st1.msg = «xxxxx»
CPU cpu1
cpu = useCpu(0)
cpu1.sendCode(st1) # esto es solo un ejemplo la instrucción por supuesto no es válida
cpu1.sendCode(CodeCPU.INT21) # esta sí la interrupción 21 famosa
cpu1.close() # si se omite se cierra solo.
En este lenguaje las variables se inicializan solas no hay que inicializarlas.
Los enteros a 0, las cadenas a NULL, etc. Las estructuras cada miembor el compilador las inicializaría en tiempo de compilación/interpretación.
Y al final cómo queremos ejecutar el programa:
Compilado a binario independiente:
easylang -c miprograma.el –>> genera miprograma.bin
O interpretado
easylang miprograma.el # se ejecuta directamente.
O bien con todas sus dependencias y compilado en el paquete autoejecutable.
easylang -cdep miprograma.el –>> generaría miprograma.bin con todas las librerías del sistema dentro en formato appimage.
No olvidemos los objetos!!!
Object Automovil:
Color color
Integer peso
initializer():
color = Colors.rgb(«#ff00ff»)
peso = 40
initializer(String ncolor):
color = Colors.rgb(ncolor)
peso = 40
destructor():
noperation
public method setColorDefault():
color = Colors.BLUE
Automovil camion = create Automovil(«#ffffff»)
Automovil camion2 = create Automovil()
camion.setColorDefault()
Espero algún desarrollador que pueda implementar todo esto a la realidad y así veremos un lenguaje no solo polular si no mejor para programar.
En pocas palabras :: Elegir C++ o C pero nunca Go
Exacto jejej. Aunque go es excelente principalmente para crear aplicaciones apk desde linux sin instalar el android studio, esto gracias a la libreria go mobile por ejemplo para crear un apk con un solo codigo base solo hago
go mobile init
go mobile build
y tengo el apk listo, si quiero la misma aplicacion para windows sin modificar nada solo hago export GOOS=windows y luego go build y ya tengo un .exe, todo desde linux. Yo personalmente usaba la libreria fyne para esto muy buena lo malo de estos lenguajes modernos es su eterna dependencia de internet el que no lo tenga esta jodido jeje solo puede hacer apps de consola. Esto es un problema grave considerando que rust no posee un generador de numeros aleatorios en su libreria estandar y que tokio no forma parte de la libreria oficial de rust
C++ y C no pueden ser reemplazados por nada parecido en la actualidad, una de las razones es que no dependen de internet para operar, si deseara usar una libreria de internet y no tengo internet perfectamente puedo bajarla desde otra pc con facilidad y esta seria mayormente autocontenida, no podria decir lo mismo de python, go y rust por ejemplo por la fiebre de las dependencias. Javascript es aceptable pero es muy limitado por si mismo porque no puedo ejecutar programas desde el javascript normal sin usar nodejs por ejemplo esto por seguridad pero es una caracteristica que no debe faltar en aplicaciones serias