Raku (lenguaje de programación)

[6]​ Inicialmente conocido como Perl 6, se renombró a Raku en octubre de 2019.No fue una meta ser compatible con Perl, aunque la retrocompatibilidad es parte de la especificación.Este proceso estuvo abierto a todos los contribuyentes, y no dejó ningún aspecto del lenguaje cerrado al cambio.Empezó entonces el proceso de escribir los "Apocalipsis", un término que originalmente se refiere a la "revelación".MoarVM es una máquina virtual construida especialmente para Rakudo perl 6[22]​ y la cadena de montaje del compilador NQP.La mayor parte de Rakudo se ha escrito en el mismo Raku, aunque no se trate de una implementación auto contenida, ni existan planes concretos, en este punto, para que Rakudo sea un compilador completo y autosuficiente.[24]​ En 2007, v6-MiniPerl6 ("mp6") y su reimplementación, v6-KindaPerl6 ("kp6") se escribieron como un medio para arrancar el Perl-6.0.0 STD, usando Perl.[28]​ La especificación de Raku solicita que los módulos se identifiquen por nombre, versión y autoría.[19]​ Esto significa que, si es necesario, Raku puede ser reimplementado, y también significa que los programadores no necesitan leer el código fuente como último recurso para consultar el funcionamiento de alguna característica.Las discrepancias encontradas entre la documentación y la aplicación pueden dar lugar a que se cambie uno para reflejar al otro, una dinámica que impulsa el continuo desarrollo y perfeccionamiento de las versiones de Perl.[32]​ En Raku, una declaración de subrutina se parece a algo como esto: Como en Perl, los parámetros formales (es decir, las pseudo-variables en la lista de parámetros) son alias de los parámetros actuales (los valores pasados dentro), pero por defecto, los alias se marcan como constantes por lo que no se pueden modificar.Pueden ser declaradas explícitamente como alias de lectura-escritura del valor original o como copias usando respectivamente las directivas is rw o is copy que el programador requiere para indicar que los valores serán modificados localmente.Los parámetros con nombre son opcionales por defecto, pero se pueden marcar como requeridos con la adición de !Los parámetros también se pueden pasar a bloques arbitrarios, que actúan como clausuras.Así es como, por ejemplo, se indican los iteradores de los bucles for y while.[33]​ Esto se conoce generalmente como un "sub puntado" o "bloque puntado", y la flecha se comporta casi exactamente igual que la palabra clave sub, al presentar una clausura anónima (o subrutina anónima en terminología de Perl).[32]​ En Perl, los sigilos –los caracteres especiales que preceden a los nombres de variables– cambian dependiendo de cómo se use la variable: En Raku, los sigilos son invariantes, lo que significa que no cambian, tanto si se trata de un array entero o de un solo elemento del array:[31]​ La varianza en Perl se inspiró por el número del plural, algo muy común en muchos idiomas: Sin embargo, este mapa conceptual se rompe cuando las referencias entran en juego, ya que pueden referirse a contenedores a pesar de que sean escalares.Así, manejar estructuras de datos anidadas puede requerir una expresión tanto en forma singular como plural, en un solo término: Esta complejidad no tiene equivalencia ni en el uso común del lenguaje natural ni en cualquier otro lenguaje de programación, y causa una alta carga cognitiva al escribir código para manipular complejas estructuras de datos.Este es el mismo código en Raku: Perl soporta Programación orientada a objetos mediante un mecanismo conocido como bendición.Un objeto bendecido puede tener métodos invocados en ella utilizando la sintaxis "flecha" que hará que Perl localice o "despache" una subrutina apropiada según el nombre, y la llame con la variable bendecida como su primer argumento.[34]​ Por ejemplo, una clase para encapsular un punto de coordenadas cartesianas se puede definir y utilizar de esta manera: El punto reemplaza a la flecha como un gesto a muchos otros lenguajes, (por ejemplo, C++, Java, Python, Ruby, etc.), que acordaron el uso del punto como la sintaxis para la invocación de métodos.Cuando una clase o un atributo individual se declara con el modificador is rw (abreviatura de "lectura/escritura"), al accesor automático se le puede pasar un nuevo valor para establecer el atributo, o puede asignarse directamente como un valor a la izquierda (como en el ejemplo).Los accesores automáticos se pueden sustituir por los métodos definidos por el usuario, si el deseo del programador es tener una interfaz más completa de un atributo.Sin embargo, estos son simplemente conjuntos de comportamientos adicionales que se pueden agregar a un perro.Los roles se agregan a una clase o un objeto con la palabra clave does.Aparte de que las expresiones regulares de Perl fueran "demasiado compactas y 'lindas'", tenían "demasiada confianza en muy pocos meta-caracteres", "pequeño soporte para capturas con nombre", "pequeño soporte para gramáticas" y "pobre integración con el lenguaje 'real'".[42]​ Algunas construcciones de Perl se han cambiado en Raku, optimizadas para pistas sintácticas diferentes para los casos más comunes.& indica un valor que es igual tanto a su izquierda y los argumentos de la derecha.En Perl, los nombres de los identificadores pueden usar los caracteres ASCII alfanuméricos y guiones bajos disponibles en otros lenguajes.Además, se pueden usar guiones y apóstrofes (con ciertas restricciones, tales como que estén seguidos por un dígito).
Larry Wall y Camelia