Peregrine es un nuevo lenguaje de programación con una sintaxis similar a la de Python, pero con una velocidad de ejecución comparable a la de C (actualmente en desarrollo). Recientemente, Ethan, uno de los ocho desarrolladores, compartió algunas actualizaciones recientes de Peregrine.
Al describir el lenguaje de programación Peregrine, Ethan declaró:
“Si estás familiarizado con Python, probablemente sepas que es sencillo de usar y a la vez lento, lo que resulta un poco incómodo. Para solucionar esto, mis amigos y yo estamos desarrollando un nuevo lenguaje de programación llamado Peregrine, que tiene una sintaxis muy similar. Peregrine está compilado en C, lo que le permite funcionar a la misma velocidad que éste“.
Además, los desarrolladores lo han creado como una alternativa rápida a Python y sencilla a C.
Objetivos de Peregrine
Los objetivos básicos del lenguaje Peregrine son los siguientes
- Sencillez de uso
- Rápido
- Muy modular
- Ocupa menos memoria
- Compilación más rápida
He aquí un pequeño ejemplo para que lo entiendas:
Hola Mundo en Peregrine:
def main():
print("¡Hola, Mundo!")
Características de Peregrine
Estas son algunas de las mejoras más recientes de Peregrine:
Inferencia de Tipos
La función de inferencia de tipos de Peregrine es una de las novedades de la empresa, que permite escribir código Peregrine de forma sencilla. La inferencia de tipos es el proceso de determinar automáticamente el tipo de una expresión en un lenguaje formal. Esta categoría incluye los lenguajes de programación y los sistemas de tipos matemáticos, así como los lenguajes naturales en ciertas disciplinas de la informática y la lingüística.
if/else/match
A pesar de que parece una característica típica de cualquier lenguaje de programación, su implementación lleva tiempo. No hay mucho que decir al respecto porque aparece en todos los lenguajes de programación.
Ccode
Peregrine tiene ahora una nueva característica llamada Ccode, que ya está lista para ser utilizada. Peregrine soporta la ejecución de código C mediante el uso de Ccode. He aquí una ilustración:
def main():
x = 1
Ccode x++; Ccode
print("{x}\n") # prints 2
Las variables especificadas fuera del bloque Ccode pueden ser utilizadas dentro del bloque Ccode, y viceversa, como se ve en el ejemplo anterior. Esto también implica que cualquier biblioteca C puede ser importada y utilizada en Peregrine mediante el uso de Ccode.
Ensamblador en línea
Peregrine incorpora el Inline Assembly. En programación, algunos compiladores incluyen un ensamblador en línea como característica que permite la inclusión de código ensamblador de bajo nivel dentro de un programa junto con el código construido a partir de un lenguaje de alto nivel como C o Ada.
He aquí un ejemplo:
def main():
int arg1 = 45
int arg2 = 50
int add = 0
print("It should add 45 and 50 using asm and print it\n")
asm("addl %%ebx, %%eax;" : "=a" (add) : "a" (arg1) , "b" (arg2))
printf("%lld", add)
Como se esperaba, este programa imprime 95. En una línea similar, hay varios otros ejemplos en el directorio de pruebas de Peregrine.
https://github.com/peregrine-lang/Peregrine/tree/main/Peregrine/tests
Prueba de rendimiento
El autor afirma que Peregrine es tan rápido como C, proporcionando varios puntos de referencia para apoyar esta afirmación.
Según el autor, aquí se calculó la serie de Fibonacci de 0 a 40 de forma recursiva utilizando Python en el lado izquierdo, lo que llevó 32 segundos. En cambio, Peregrine, en el lado derecho, sólo tardó 1 segundo, por lo que es 32 veces más rápido. Además, es evidente que su sintaxis es muy similar a la del lenguaje de programación Python. Como punto de referencia, he aquí un benchmark con C.
Según el resultado anterior, Peregrine es tan rápido (si no más) que C (ambos tardaron 1 segundo).
¿Por qué C es tan rápido?
Los lenguajes de programación modernos incluyen la recolección de basura (garbage collection), el tipado dinámico y otras características que facilitan el diseño de los programas. La pega es que esto añade una sobrecarga de procesamiento adicional, que degrada el rendimiento de la aplicación. C carece de todo eso, lo que significa que no hay sobrecarga, pero el programador debe ser capaz de asignar y liberar memoria para evitar fugas de memoria y hacer frente a los tipos estáticos de las variables. De ahí que C sea más rápido que otros lenguajes modernos.
Comentarios
En respuesta a un comentario en la Comunidad DEV, “Python podría mejorar el ejemplo de Fibonacci resolviendo el problema de rendimiento con lru_cache para la memorización, lo que mejoraría el rendimiento del código. En este caso, se trata de un problema de consumo de memoria. Sería fantástico demostrar la comparación de rendimiento y consumo de memoria entre Python y Peregrine para este ejemplo para demostrar la eficacia del lenguaje Peregrine en esta situación. De lo contrario, tengo mis dudas de que Peregrine consuma más memoria“.
Saptak Bhowmik, colaborador del lenguaje Peregrine, respondió lo siguiente “Utilizar lru_cache, por otro lado, es una forma de hacer trampa. Si se compara una aplicación Python multihilo con un programa C de un solo hilo, es muy probable que Python gane“.
Características Previstas
Las siguientes son las características que se incluirán en la próxima versión.
- Estructuras
- Decoradores adicionales para una variedad de propósitos
- Ecosistema Python de Peregrine – Peregrine es compatible con el módulo Python.
- Está previsto que Peregrine lance la versión 0.0.1 en marzo, según los colaboradores.
Para más información: Repo: Github.
https://github.com/peregrine-lang/Peregrine