Si yo he usado LUA está muy bien pensado, con una gran madurez en su implementación.
En muchos lenguajes hay algun tipo o estructura de datos preferente y que se suele usar por comodidad al programar.
AWK: Patrones /.../
Ruby,Java: Todo es un Objetos class obj{} extends ...
JS: Las funciones son objetos y los objetos son hash, {'medhod':function(){}}
Haskell Todo es una función f x = | (x=1) 1 |otherwise 0
Matlab Matrices [ 1 2 3 ; 1 2 3 ]
PHP Array() son un híbrido
En LUA se manejan tablas y metatablas que permiten modelar nuevas estructuras como por ejemplo objetos, etc ...
Así que es un lenguaje sin paradigma, uno desarrolla lo que quiere usar, hoy en día el OOP y la AOP son deseables en LUA y otros lenguajes.
Tras usar mucho de los lenguajes modernos y aprender varios paradigmas me di cuenta de algo, todos los lenguajes modernos se están orientando hacia un norte en especifico, en el fondo todos son iguales. De hecho Ruby y Python retoman varias ideas bastante viejas que por alguna razón fueron descartadas en su época y ahorita se están retomando y las unen a características modernas.
Me gustaría que alguien escribiera un lenguaje realmente experimental que se saliera de los limites, que explorara nuevas alternativas, por lo general retoman las características más productivas y descartan el resto y al final queda algo como Java o C# o F#
Tengo una lista de ideas en mente, pero honestamente me da flojera hacer un lenguaje tan complejo como las ideas que tengo, me agradaría algun día poder crear un grupo opensource para eso, pese a que estoy seguro que gente más pala ya experimentó y descartó muchas de las cosas que se me ocurren.
Ahora ¿Por que descartar?, es malo que un lenguaje tenga por ejemplo 10 maneras equivalentes de hacer lo mismo, imaginen tener que leer un código de un Fulano que eligió la manera más corta y a la vez la más abstracta de hacer algo y cuando te acostumbras a leer su código después de muchas pruebas ahora tienes que leer el código de un Mengano que eligió un camino totalmente diferente. Por ejemplo:
var class_1 = new Function();
class_1.constructor = function(attrib_1){ this.attrib_1=attrib_1 }
class_1.prototype = new class_0() //hereda
class_1.method_1 = function(){ .... }
class_1.prototype.method_2 = function(){ ...}
y luego viene otro y escribe:
Class.class_1 = new Class().inherts(Class.class_0);
Class.class_1.prototype = {
constructor:function(attrib_1){ this.attrib_1=attrib_1 }
, method_1 : function(){ .... }
,method_2 = function(){ ...}
}
para colmo llega otro:
function method_1(){ .... }
function method_2(){ ...}
function class_1(attrib_1){
this = class_2;
this.attrib_1=attrib_1;
this.method_1 = method_1;
this.method_2 = method_2;
}
hasta que llega otro y escribe, y por fin entiendes todo.
class class_1 extends class_0
{
this.method_1 = function(){}
this.method_2 = function(){}
}
Dejarlo simple es mejor, se debe escoger la manera más fácil de leer y de hacer seguimiento, que a primera vista sepas de que clases se heredan, que propiedades y metodos tienen, y desde donde se hacen las llamadas a las funciones por ejemplo
System.out.println() te dice en que namespace está println() ...
Saludos, diganme si alguien está dispuesto a programar un lenguaje solo por hubby
--
Regards,
Neo