Ring es un lenguaje de programación de propósito general y tipado dinámicamente . Puede integrarse en proyectos C/C++, extenderse usando código C/C++ o usarse como lenguaje independiente. [5] Los paradigmas de programación admitidos son imperativo , procedimental , orientado a objetos , funcional , meta , declarativo usando estructuras anidadas y programación natural . [6] [7] El lenguaje es portátil ( Windows , Linux , macOS , Android , [8] WebAssembly , [9] etc.) [10] y puede usarse para crear aplicaciones de consola , GUI , web , juegos y móviles . [11] [12] [13] [14]
Historia

En 2009, Mahmoud Samir Fayed creó un lenguaje específico de dominio menor llamado Supernova que se centra en la creación de interfaces de usuario (UI) y utiliza algunas ideas relacionadas con la programación en lenguaje natural . Luego se dio cuenta de la necesidad de un nuevo lenguaje que sea de propósito general y pueda aumentar la productividad de la creación de lenguaje natural. Ring tiene como objetivo ofrecer un lenguaje centrado en ayudar al desarrollador con la construcción de interfaces naturales y DSL declarativos. [15] [16] [17] [18]
Objetivos

Los objetivos generales detrás de Ring: [19] [20]
- Lenguaje de programación de aplicaciones.
- Productividad y desarrollo de soluciones de alta calidad y escalables.
- Lenguaje pequeño y flexible que puede integrarse en proyectos C/C++.
- Lenguaje simple que puede usarse en educación e introducción de conceptos de compilador/VM.
- Lenguaje de propósito general que se puede utilizar para crear bibliotecas, marcos y herramientas específicos del dominio.
- Lenguaje práctico diseñado para crear la próxima versión del software de Tecnología de Programación Sin Codificación . [21]
Ejemplos




Programa Hola Mundo
El mismo programa se puede escribir utilizando diferentes estilos. A continuación se muestra un ejemplo del programa estándar "¡Hola mundo!" que utiliza cuatro estilos diferentes.
El primer estilo:
ver "¡Hola, mundo!"
El segundo estilo:
poner "¡Hola, mundo!"
El tercer estilo:
print("¡Hola, mundo!")
Otro estilo: similar a los lenguajes xBase como Clipper y Visual FoxPro
? "¡Hola Mundo!"
Cambiar las palabras clave y los operadores
Ring admite el cambio de palabras clave y operadores del idioma .
Esto se puede hacer muchas veces en el mismo archivo fuente y es útil para
- Traducción de palabras clave del inglés a otros lenguajes humanos ( lenguajes de programación no basados en el inglés )
- Personalizar el idioma para utilizar un estilo favorito
- Portar código heredado escrito en otros lenguajes
Traducir las palabras clave de Ring al japonés
Cambiar palabra clave de anillo Ver 手紙を出す ChangeRingOperator + そして 改行 = nl します。 = :します。 手紙を出す "こんにちは、世界" そして 改行 します. ChangeRingKeyword 手紙を出す Ver // キーワードの復旧 ChangeRingOperator そして + // 演算子の復旧
Traducir las palabras clave de Ring al árabe
ChangeRingKeyword Ver más Letra "¡Hola, mundo!" ChangeRingKeyword إطبع Ver
Utilice un estilo similar al lenguaje de programación Pascal
ChangeRingKeyword func función
ChangeRingKeyword ver escritura
begin = : begin
función principal comienza a escribir ( " Hola , mundo !" ) ; retorna 0 ; fin
Función ChangeRingKeyword func
ChangeRingKeyword escribir ver
[22] [23] [24]
Comando de bucle
El comando Loop puede tomar un entero para aplicar la semántica de continuación a los bucles externos circundantes [25]
changeRingKeyword bucle continuar
cuenta = 2
para x en 1:5
para y = 1 a 2
si x = 3
? "A punto de ejecutar 'bucle', cuenta = " + cuenta
continuar contando
OK
? "x: " + x + ", y: " + y
próximo
próximo
Programación orientada a objetos
Ring admite la programación orientada a objetos (clases, objetos, composición, herencia, encapsulación, etc.) [26]
nuevo punto { # Crea un nuevo objeto a partir de la clase Punto y accede al objeto usando llaves
x=10 y=20 z=30 # Establecer los atributos del objeto
print() # Llamar al método print()
} # fin del acceso al objeto mediante llaves
punto de clase # Define la clase
xyz # Define los atributos (x,y,z)
func print # Define el método print()
? x + nl + y + nl + z # Imprimir los valores de los atributos (nl significa imprimir una nueva línea)
Las clases In Ring se pueden definir en tiempo de ejecución utilizando la función Eval() [27]
? "Creando una nueva clase dinámicamente..."
eval("clase ClaseDinámica a b")
? "Imprimiendo la instancia..."
? nueva ClaseDinámica {a=1 b=2}
Implementación
Compilador y máquina virtual


Los programas Ring no se interpretan directamente a partir del archivo textual Ring, sino que se compilan en código de bytes , que luego se ejecuta en la máquina virtual Ring . El proceso de compilación normalmente es invisible para el usuario y se realiza en tiempo de ejecución , pero se puede realizar sin conexión para aumentar el rendimiento de carga o reducir la huella de memoria del entorno host omitiendo el compilador.
El compilador y la máquina virtual se diseñan utilizando programación visual a través del software Programming Without Coding Technology , luego se genera el código C.
Extensiones



Las siguientes son extensiones que se pueden usar inmediatamente después de la instalación de la versión de instalación completa (con un tamaño de archivo de aproximadamente 280 MB para Ring 1.12). Dado que se proporcionan y mantienen oficialmente en el lado de Ring, los usuarios no se ven afectados por dependencias de bibliotecas que pueden causar problemas en otros idiomas, y existe la preocupación de que no se puedan usar de repente incluso si hay cambios destructivos en la especificación del idioma.
Las extensiones se implementan en aproximadamente 500.000 líneas de código C y C++ .
- RingAllegro ( Biblioteca de juegos Allegro )
- RingConsoleColor (biblioteca de coloración de texto para el símbolo del sistema o la terminal )
- RingCurl ( Biblioteca CURL )
- RingFreeGLUT ( Libre GLUT )
- RingInternet (biblioteca relacionada con Internet)
- RingLibUV ( biblioteca de E/S asíncrona LibUV )
- RingMurMurHash ( biblioteca de funciones hash )
- RingMySQL ( MySQL )
- RingODBC ( Conectividad abierta de bases de datos )
- RingOpenGL ( OpenGL 1.1-4.6)
- RingOpenSSL ( OpenSSL )
- AnilloPostgreSQL ( PostgreSQL )
- RingQt ( marco Qt )
- RingRayLib ( libray )
- RingSDL ( biblioteca de capas SDL-Simple DirectMedia )
- RingSQLite ( SQLite )
- RingWinAPI ( API de Windows )
- RingWinCREG ( Registro de Windows )
- RingZIP ( biblioteca de procesamiento de archivos zip )
[28]
Bibliotecas
Ring viene con bibliotecas escritas en el propio Ring, como bibliotecas relacionadas con el desarrollo web y de juegos.
[29] [30]
Aplicaciones


Ring se distribuye con más de 60 aplicaciones escritas en el lenguaje.
Algunas de estas aplicaciones son
- Aplicación de reloj analógico
- Aplicación de calculadora
- El juego de damas
- El juego de ajedrez
- Juego de quince rompecabezas en 3D
- Juego 2048
- Juego de gira de caballeros
- Juego Buscaminas
- Juego de Otelo
- Juego de Sokoban
- Juego de sudoku
- Juego de tres en raya en 3D
- Aplicación de reproducción de música y vídeo
- Aplicación Administrador de inicio de Windows
[31] [32]
Herramientas

Ring se distribuye con un IDE estándar que incluye las siguientes herramientas:
- Anillo REPL ( bucle de lectura, evaluación e impresión )
- Ring2EXE ( Distribución de aplicaciones ejecutables )
- RingPM (El administrador de paquetes Ring )
- Ring Notepad ( Editor de código fuente )
- Diseñador de formularios ( diseñador de GUI WYSIWYG )
Ring también se distribuye con extensiones para muchos editores de código como Emacs , Notepad++ , Geany , Atom , Sublime Text 2 y Visual Studio Code .
Documentación
Ring se distribuye con documentación escrita en Sphinx . También está disponible una traducción al japonés de la documentación. [33]
Recepción
Popularidad
Ring tuvo un rápido ascenso y caída en popularidad según lo medido por el Índice de la Comunidad de Programación TIOBE . En febrero de 2018, Ring entró en el top 50 por primera vez (posición 45). [34] A octubre de 2020, Ring ocupa la posición 93 en el índice TIOBE. [35] Ring está incluido en GitHub en la lista de lenguajes de programación que se desarrollan activamente. [36]
Crítica
Los críticos de Ring señalaron algunas características de Ring que no son comunes en los lenguajes de programación ampliamente utilizados. [37]
- El índice de la lista comienza desde 1 en lugar de 0 (Ver: Numeración basada en cero )
- Conversiones de tipos implícitas (Ver: Conversiones de tipos implícitas y "juegos de palabras con tipos" )
El índice de la lista comienza desde 1 en lugar de 0
En Ring, el índice del primer elemento de las listas y del primer carácter de las cadenas es 1.
cName = "Anillo" ? cNombre[1] # imprimir R aList = ["Uno", "Dos", "Tres"] ? aList[1] # imprimir Uno
Conversiones de tipos implícitas
El lenguaje puede convertir automáticamente entre números y cadenas. [38]
/* ** Normas: ** <NÚMERO> + <CADENA> --> <NÚMERO> ** <CADENA> + <NÚMERO> --> <CADENA> */ x = 10 # x es un número y = "20" # y es una cadena nSum = x + y # nSum es un número (y se convertirá en un número) cMsg = "Sum = " + nSum # cMsg es una cadena (nSum se convertirá en una cadena)
Véase también
Referencias
- ^ M. Ayouni (29 de julio de 2020). "Un diálogo con Mahmoud Fayed" (PDF) . Springer .
- ^ "Publicado 1.21.2". 13 de septiembre de 2024. Consultado el 13 de septiembre de 2024 .
- ^ Azeez Adewale. "El lenguaje de programación simple".
- ^ Aavesh Jilani. "El lenguaje de programación Dragon".
- ^ Dr. Rangarajan Krishnamoorthy (7 de agosto de 2021). "Primer encuentro con el lenguaje de programación Ring". rangakrish.com. Archivado desde el original el 9 de agosto de 2021.
- ^ Omar Selim (enero de 2018). "Reseña del lenguaje de programación Ring" (PDF) . Revista BIMArabia. Archivado desde el original el 17 de noviembre de 2023. Consultado el 24 de marzo de 2024 .
{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace ) - ^ Ahmed Tartour (enero de 2020). "Tu camino hacia la programación (Libro árabe, páginas 56-57) habla sobre Ring" (PDF) . Kotobna.
- ^ Bernhard Lauer (14 de agosto de 2018). «Ring: flexible, simple, rápido». Dotnetpro.
- ^ Paul Krill (24 de agosto de 2020). "La actualización del lenguaje Ring se centra en WebAssembly". InfoWorld .
- ^ Ghanem, Mohamed (2021). Desarrollo de software Poet con lenguaje Ring (PDF) . MetaBook (Egipto - Mansoura). ISBN 978-977-6928-38-1.
- ^ Introducción a la programación en anillo: de principiante a profesional | Mansour Ayouni | Apress.
- ^ Hany Salah (11 de enero de 2016). "Ring: un nuevo lenguaje de programación". youm7.com . youm7 .
- ^ Ahmed Mohammed Hassan. "Ring: un lenguaje de programación desarrollado por árabes". muslims-res.com . Consultado el 28 de septiembre de 2020 .
- ^ Abedallah Salehani. "Un libro sobre el lenguaje de programación Ring". muslims-res.com . Consultado el 28 de septiembre de 2020 .
- ^ Ring Team (septiembre de 2021). "Lenguaje del ring: preguntas frecuentes (FAQ)". Ring Team.
- ^ Fayed (abril de 2010). "Lenguaje de programación Supernova". Proyecto Code .
- ^ Omnia (diciembre de 2011). "Lenguaje Supernova por programador egipcio". Youm7 .
- ^ Equipo de Softpedia (23 de octubre de 2021). «Revisión de Ring 1.16». Softpedia .
- ^ Naveen Verma (14 de agosto de 2018). "Lenguaje de programación Ring: ¿qué necesitas saber?". Medium .
- ^ Mones Hawas (29 de mayo de 2018). "Avances en el desarrollo de PWCT 2.0 utilizando Ring". youm7.com . youm7 .
- ^ Fayed, Mahmoud S.; Al-Qurishi, Muhammad; Alamri, Atif; Hossain, M. Anwar; Al-Daraiseh, Ahmad A. (octubre de 2020). "PWCT: un nuevo lenguaje de programación visual de propósito general en apoyo del desarrollo de aplicaciones generalizadas". CCF Transactions on Pervasive Computing and Interaction . 2 (3): 164–177. doi :10.1007/s42486-020-00038-y. S2CID 225395711.
- ^ Rubin Liu (28 de diciembre de 2017). «Diferentes estilos para escribir el programa Hello World en el lenguaje de programación Ring». codeproject.com . Code Project .
- ^ Roshan Ali (4 de junio de 2018). "Tutorial de programación de anillos". YouTube .
- ^ "Introducción - Documentación de Third Style — Ring 1.19".
- ^ Dr. Rangarajan Krishnamoorthy (21 de agosto de 2021). "Comando "Loop" en el lenguaje de programación Ring". rangakrish.com. Archivado desde el original el 23 de marzo de 2023.
- ^ "Programación Orientada a Objetos (POO) — Documentación de Ring 1.16".
- ^ Dr. Rangarajan Krishnamoorthy (4 de septiembre de 2021). "Lenguaje de anillo: comportamiento dinámico de clases y objetos". rangakrish.com. Archivado desde el original el 29 de mayo de 2023.
- ^ Majdi Sobain (2 de mayo de 2017). "Rompecabezas de cuadrados con RingAllegro". codeproject.com . Code Project .
- ^ Fayed (11 de agosto de 2017). "Uso de la biblioteca de programación de lenguaje natural (NLPL) en el lenguaje de programación Ring". codeproject.com . Code Project .
- ^ Fayed (12 de octubre de 2016). "Programación en lenguaje natural en el lenguaje de programación Ring". codeproject.com . Code Project .
- ^ Open Source Developers (15 de junio de 2019). "Aplicaciones escritas en Ring". Equipo Ring.
- ^ Etqan Company (25 de septiembre de 2018). «Juego Gold Magic 800 de Etqan Company». Steam (software) .
- ^ "ようこそ Anillo 取扱説明書へ! - プログラミング言語 Anillo 1.16 取扱説明書". Archivado desde el original el 30 de octubre de 2021 . Consultado el 30 de octubre de 2021 .
- ^ "Índice TIOBE | TIOBE - la empresa de calidad del software". www.tiobe.com . Archivado desde el original el 21 de febrero de 2018 . Consultado el 28 de febrero de 2022 .
- ^ Emma White (6 de octubre de 2020). «Top 100 Programming Languages». BairesDev . Consultado el 6 de octubre de 2020 .
- ^ "Desarrollemos mejor el software, juntos". GitHub .
- ^ Ciklum (12 de diciembre de 2017). «Nuevos lenguajes de programación: ¿una moda o una realidad?». ciklum.com . Ciklum . Archivado desde el original el 7 de diciembre de 2017 . Consultado el 1 de febrero de 2024 .
{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace ) - ^ "Variables — Documentación de Ring 1.16".
Lectura adicional
- Ghanem (2021) Desarrollo de software Poet utilizando el lenguaje Ring (Libro árabe) , MetaBook (Egipto - Mansoura)
- Ayouni (2020) Introducción a la programación en anillo , Apress (parte de Springer Nature)
- Hassouna (2019) Fundamentos del anillo (libro árabe) , Hassouna Academy
- Documentación de la extensión RingWinCReg de Sobain (2017) , SourceForge
- Fayed (2016) El lenguaje de programación Ring , CodeProject
Enlaces externos
- Página de inicio del anillo
- Ejemplos de RosettaCode
- Documentación del anillo (en japonés) Archivado el 30 de octubre de 2021 en Wayback Machine
- Diseñador de formularios en línea (WebAssembly)