Propuesta y prototipo de un sistema de programación global para la informática

  1. Aguilar Gutiérrez, Emilio
Supervised by:
  1. Evelio José González González Director
  2. Alberto Francisco Hamilton Castro Co-director

Defence university: Universidad de La Laguna

Fecha de defensa: 11 October 2013

Committee:
  1. Carina Soledad González González Chair
  2. Francisco Javier Carrera Riudavets Secretary
  3. Isaías García Rodríguez Committee member
Department:
  1. Ingeniería Informática y de Sistemas

Type: Thesis

Teseo: 348739 DIALNET

Abstract

Se proponen un lenguaje de programación en español que pueda ser traducido a otros lenguajes de alto nivel; un repositorio de vocabulario y entidades que contenga los elementos que emplear para la construcción de los identificadores en la programación; un repositorio de código público que aloje las acciones desarrolladas; y un entorno de desarrollo básico. Y se valida mediante un prototipo. Motivaciones... Aspectos que mejorar: - Código claro y sencillo. Dificultado por las prisas,... -- Problemas: identificadores sin significado (i, j, p), líneas blancas aleatorias, ... - Estructuras de datos poco claras -- Problemas: mala nomenclatura, falta de ejemplos, ... - Demasiados lenguajes de programación: -- Parecidos en mucho, diferentes en poco. -- Librerías nuevas que hacen lo mismo que las otras. -- Especializados en exceso. - Poca reutilización de código -- No se sabe dónde encontrar el código a reutilizar -- No se sabe lo fiable que es. -- Su código no es muy legible o comprensible. Objetivos I - Un lenguaje de programación sencillo. -- Fácil de aprender. -- Utilizable para documentar comportamientos dinámicos en ingeniería del software. -- Que no compita con otros lenguajes. --- Traducible a otros lenguajes de programación --- Permitir incluir código de otros lenguajes. - Un repositorio global que contenga código fuente escrito en dicho lenguaje de programación. -- Contendría el código que se quiere compartir. -- Escrito en el nuevo lenguaje de programación . -- Sin uso comercial, disponible en Internet, según la filosofía Web 2.0 (mantenido por la comunidad web) Objetivos II - Un repositorio de vocabulario y entidades disponible para facilitar la nomenclatura de nuevos elementos de programación y de posibles estructuras de datos. -- Contendrá un vocabulario reducido. -- En el idioma español, con restricciones como: --- Emplear solo el singular. --- Usar masculino o femenino, no ambos. --- Evitar sinónimos. --- Utilizar verbos solo en infinitivo, gerundio y participio. --- Admitir palabras compuestas, unidas por guion bajo (_). -- Sin uso comercial, disponible en Internet, según la filosofía Web 2.0 (mantenido por la comunidad web) Objetivos III - Un entorno de programación simple para la escritura de programas. -- De código abierto y gratuito, y disponible a todos los programadores, en Internet. -- Integrado con el repositorio de las acciones. -- Incluye un editor de texto sencillo --- Permite incluir instrucciones a través de formularios --- Sintaxis coloreada. -- Con herramientas para: --- La comprobación del código --- La traducción a otro lenguaje de programación. Un nuevo lenguaje de programación I - Nombre: EPI, por sus tres tipos de código: -- Entidad: Definen algoritmos y es fácilmente traducible a otros lenguajes de programación -- Procedimiento: Compatible con los procedimientos dinámicos de la ingeniería del software. -- Interfaz: Permite la mezcla de códigos. - Características del lenguaje Epi (I): -- Alto nivel -- Programación procedural, completa. -- P.O. a Objetos, parcial (solo al nivel de métodos). -- P. Lineal, parcial (sin saltos (goto)). -- P. Estructurada, completa. -- P. Modular, módulos por función o procedimiento. Un nuevo lenguaje de programación II - Características del lenguaje Epi (II): -- Lenguaje genérico. -- Turing completo (como la mayoría de lenguajes p.) -- Gramática tipo 2 (como la mayoría de lenguajes p.) -- Semántica compatible con la dinámica y la estática. -- Tipado dinámico con restricciones por compatibilidad con el tipado estático. -- Fuertemente tipado. -- Implementado mediante traductores a otro lenguaje de programación. -- Con un código programado sencillo y claro. -- Concurrencia en acciones de tipo procedimiento. -- Sin "plantillas" ni "reflexión" de código. Reducir el número de palabras clave - Java: 58, C: 32, C++: 92, C#: 76, PHP: 70, Epi: 44 Epi tiene pocas palabras clave (incompleto) - Instrucciones de control: si, contra, repetir, salir, finbien, finmal, listar, bifurcacion, reunion. - Gestiona las excepciones con: -- tratarexcepcion: y finexcepcion: - Pocas constantes: nulo, verdad, falso. - Operadores lógicos con nombre: no, y, o, u (xor) - Usa los operadores de manera única: +, -, *, /, %, ., =, = ref:, +=, -=, *=, /=, %=, .=, ==, >=, <=, != (no tiene operadores de bit) - Nota: Más adelante se incorporarán nuevas palabras clave por motivos específicos. La nomenclatura de los identificadores en Epi - Se utilizan solo letras minúsculas y sin acentos. - Se recomienda emplear las palabras del repositorio de vocabulario y entidades. -- Los bloques de código en Epi - Palabras clave para los bloques de acción (unión de función y procedimiento): accion, finaccion. - Dos palabra clave: una para el bloque de captura de excepciones y otra para el objeto: tratarexcepcion: objetoexcepcion - Bloque diferenciados: si: {, }; repetitivo: {{, }}; - Bloques específicos de acciones de tipo procedimiento: bifurcación: {{{, }}}; reunión: {{{{, }}}} La sintaxis de Epi (I) - Los saltos de línea forman parte de su sintaxis. Esto pretende forzar un estilo de escritura más uniforme entre programadores - Los bloques de código tienen saltos de línea: -- accion <nueva-línea> ¿ finaccion -- { <nueva-línea> ¿ } <nueva-línea> -- {{ <nueva-línea> ¿ }} <nueva-línea> -- {{{ <nueva-línea> ¿ }}} <nueva-línea> -- {{{{ <nueva-línea> ¿ }}}} <nueva-línea> -- tratarexcepcion: objetoexcepcion <nueva-línea> ¿ finaccion - Los identificadores pueden usar ¿ñ¿ y ¿ç¿. Pero no pueden acabar por ¿s¿ (se impide el plural) La sintaxis de las acciones (I) - Una acción es un módulo en sí. Además de indicarse su nombre y sus parámetros se deben indicar más aspectos. - Su retorno: Siempre se retorna un valor booleno: -- Valor finbien, la acción terminó verdad (sin errores). -- Valor finmal, la acción terminó falso (o con errores). - Si los parámetros son: --- De entrada: , sus datos se usan y se pueden cambiar --- De salida: sus datos son resultados, siempre. - El parámetro que Indica el acciontipo: -- ¿entidad¿; código de programación simple. -- ¿procedimiento¿; definir comportamiento dinámico. -- ¿interfaz¿; captura excepciones, usa otros lenguajes. La sintaxis de las acciones (II) - El parámetro que indica el tipo de gestión de errores de la acción, indicado con accionfin: -- ¿terminarfinmal¿; una acción llamada en el cuerpo de la acción que retorno finmal fuera de un si, causa el fin de la acción con un retorno finmal. -- ¿terminarexcepcion¿; una acción llamada en el cuerpo de la acción que retorno finmal fuera de un si, causa el fin de la acción con una excepción. -- ¿continuar¿; no hay tratamiento de errores. - Las acciones y entidades de los que depende la acción se indican con dependencia: - Nota: Más adelante se describe con más detalle el formato de los parámetros de la acción y el modo exacto de definir una acción. La sintaxis de las expresiones lógicas - Los operadores lógicos son: y, o, u (xor) y no. - Los operadores se agrupan con paréntesis. - Existen más de una forma de escribir las expresiones lógicas. Para simplificar esto, se reduce la sintaxis, de modo que no se permite el operador no delante de paréntesis: Simplificar las estructuras de datos en Epi (I) - No posee palabras clave para definir estructuras de datos. - No posee palabras clave para crear ¿arrays¿ - Las estructuras de datos se definen dinámica-mente mediante la palabra clave de, que permite indicar pertenencia de una entidad a otra. Simplificar las estructuras de datos en Epi (II) - <identificador> de <identificador> significa que el primer identificador es parte del segundo. - Y puede tener una profundidad de múltiples niveles - Se crea una instrucción para poder recorrer secuencialmente (por orden de creación) los identificadores que forman parte de uno dado: -- listar <identificador> nombre: <identificador dentro> -- valor: <referencia al valor> {{ <nueva-línea> -- " -- }} <nueva-línea> Modularidad - Cada acción da lugar a un módulo. - El nombre de una acción comienza por una entidad agrupadora de las acciones, que tiene el mismo formato que un identificador: -- <identificador> (de <identificador>)* (0 o más veces) - Luego le sigue un verbo en infinitivo. - Y el nombre descriptivo de la acción, permiti-éndose el uso de espacios en blanco. - Las acciones se almacenan en el repositorio de acciones, donde se pueden localizar por diferentes criterios de búsqueda. Manejo de excepciones - Debe ser una acción de tipo ¿interfaz¿. - Una excepción se puede lanzar desde una acción de tipo ¿entidad¿ o ¿interfaz¿. -- Usando finexcepcion: <información de excepción> -- Terminando con finmal (habiendo sido llamada por una acción de tipo accionfin: ¿terminarexcepcion¿) - La captura de la excepción se indica en la parte inferior del cuerpo de la acción de tipo ¿interfaz¿. tratarexcepcion: objetoexcepcion -- objetoexcepcion tiene información de la excepción. ... finaccion Variables o entidades estructuradas (I) - Siempre se declaran dentro de las acciones. Dos alcances posibles en la declaración de variables: -- local:; una variable de uso interno -- global:; una variable que perdura fuera de la acción o añadir un atributo a un parámetro entidad. - A continuación el identificador, indicando su pertenencia a otro identificador. -- local: <var. nueva> de <id. padre> - Le sigue un valor inicial, mediante: = <valor o id.> - Se puede usar = ref: <id. que referenciar> para crear una referencia en lugar de una variable. - También se puede usar otras modalidades de declaración de variables. Variables o entidades estructuradas (II) - Usando alias: permite poner delante la entidad que se usa de modelo (se puede usar: de). -- local: <id. modelo> -- alias: <id. nueva> - Usando ref_alias: permite poner delante la entidad [opc. de] de la que crear una referencia. -- local: <id. modelo> -- ref_alias: <nueva ref.> - Se pueden crear referencias a acciones con = ref: -- local: <ref. accion> -- = ref: <prototipo accion> El prototipo de una acción - Se utiliza en la sección de dependencia: de la firma de una acción. - Dentro de un bloque de reunion en una acción de tipo "procedimiento". - Para crear una referencia a una acción - Para pasar una referencia a una acción como parámetro. - Su formato consiste en el nombre completo de la acción seguido de (...) -- No hay polimorfismo. Dos acciones no pueden ser diferentes en función de sus parámetros. -- No se comprueban los parámetros en las llamadas de las referencias a acciones. Lo exclusivo de acciones de tipo "procedimiento" - Este tipo de acciones permiten describir comportamientos dinámicos de ingeniería del Sw. - Para ello cuentan con palabras claves para la concurrencia: -- bifurcacion {{{ -- <llamada a acciones concurrentemente.> -- }}} -- reunion {{{{ -- <prototipo de las acciones esperar a sincronizar> -- }}}} - La bifurcacion llama a las funciones normalmente. - La reunión espera por dos o más funciones llamadas en la bifurcacion. Se indica su prototipo. Declarar parámetros - Se declaran en la firma de la acción. - Los parámetros de entrada: se componen de: -- <nombre común> renombre: <nombre que usar> valor: <valor constante orientativo> -- Son opcionales: renombre: y valor: - Los parámetros de salida: se componen de: -- <nombre común> renombre: <nombre que usar> --- Es opcional: renombre: - Los parámetros se declaran en el orden que tendrán en el paso de parámetros, y dentro de la sección entrada: o salida:. - El paso de parámetro es por referencia siempre. Los comentarios - Se utiliza: // hasta el final de línea. Código ajeno en las acciones de ¿interfaz¿ - Se utiliza noepi: <cualquier código que no es epi> - Y se finaliza con epi: Palabras reservadas de Epi (I) - si, contra, repetir, salir, listar, nombre:, valor: - accion:, entrada:, salida:, renombre:, valor:, dependencia:, accionfin:, ¿terminarfinmal¿, ¿terminarexcepcion¿, ¿continuar¿, acciontipo:, ¿procedimiento¿, ¿entidad¿, ¿interfaz¿, finbien, finmal, finaccion - bifurcación, reunion Palabras reservadas de Epi (II) - finexcepcion:, tratarexcepcion: objetoexcepcion - local:, global:, alias:, ref_alias:, de - = ref: - noepi:, epi: - y, o, u, no, verdad, falso, nulo - ", ", \b, \t, \n, \r, \", \\ - ., e, E - +, -, *, /, %, +=, -=, *=, /=, %=, ., .=, =, ==, !=, <, <=, >, >=, ++, -- - (...) - , - // El repositorio de vocabulario y entidades de Epi (I) -- El objetivo de este repositorio es doble: --- Contener el vocabulario mínimo que realmente se necesita para desarrollar código. ---- Libre de sinónimos ---- Libre de palabras iguales, salvo por tener diferente género. ---- Libre de diferenciaciones de número, al no permitir el plural. ---- Extensible, gracias a la colaboración de la comunidad de desarrolladores en el mantenimiento del mismo. --- Agrupar los vocablos para documentar estructuras jerárquicas de pertenencia, composición, especialización u otro tipo de relación. ---- Una palabra puede aparecer en muchas estructuras. ---- Cada estructura puede aparecer como elemento independiente o como parte perteneciente a otra entidad. El repositorio de vocabulario y entidades de Epi (II) - Los vocablos del repositorio cumplen con: -- Solo se pueden usar minúsculas. No se permiten los acentos. Incluye las letras: ñ, ç, ü y el guión bajo: "_". -- No pueden comenzar por un número, pero si contenerlo. No pueden estar en plural. -- Tener una longitud de una letra, o de más. - Además se debe comprobar que (I): -- Si la palabra es un verbo, debe ir en modo infinitivo, en gerundio o en participio. -- La palabra no es un sinónimo de otra que ya existe. -- Las excepciones de plural, se marcan con un guion bajo ("_") al final de éstas. -- La palabra tiene correspondencia con elementos en el lenguaje natural y entidades del mundo real. El repositorio de vocabulario y entidades de Epi (III) - Además se debe comprobar que (II): -- La palabra no es confusa. Por ejemplo ¿gato¿ puede ser un animal y un mecanismo para levantar peso: --- La palabra de uso más común mantiene su nombre. --- La palabra menos común añade un especializador. Por ejemplo: ¿gato_mecanico¿ o se usa un sinónimo. -- La palabra no es un acrónimo: --- Los acrónimos deberían escribirse extendidos y sepa-rados por el guion bajo (¿_¿); o ser nombres propios. -- La palabra no es una marca comercial. Aunque se permiten los nombres propios, no se desea su uso publicitario. El repositorio de vocabulario y entidades de Epi (IV) - Usar el vocabulario: -- Buscar la palabra que tenía pensado utilizar. -- Si al realizar la búsqueda, ésta no está, puede realizar la búsqueda con palabras que sean sinónimas. -- Si tampoco tiene éxito, entonces puede incorporarla al vocabulario, si es que se desea ponerla a disposición de la comunidad de usuarios para su reutilización. -- Si un nuevo identificador a crear, se compone de varias palabras, éstas se unen mediante el símbolo guion bajo ("_"). --- Y no tiene por qué incluirse en el repositorio, a menos que describa una entidad real o reutilizable. El repositorio de vocabulario y entidades de Epi (V) - Las normas para generar las entidades del repositorio serían: -- Las entidades usan sustantivos para denominarse. -- Una entidad puede contener otras entidades, en función de cualquier tipo de relación: Agregación, Composición, Inclusión, Extensión, Generalización. -- Una entidad puede contener verbos, indicando las acciones que puede realizar. - En el lenguaje Epi, la pertenencia de un atributo a una entidad es "de". -- Un atributo podría tener el siguiente formato: nombre de empleado de empresa. -- La estructura del día de una fecha, podría ser: dia de mes de año. El repositorio de vocabulario y entidades de Epi (VI) - La estructura de las acciones: -- El sujeto de la acción está determinado por una entidad. Se permite utilizar: de. -- Le sigue un verbo en modo infinitivo. -- Le sigue el objeto directo: Se forma con una sucesión de palabras del vocabulario, separadas por blancos. --- No sigue estructura jerárquica y no está prohibido el uso de la palabra reservada "de". - Ejemplos: -- tiempo de fecha restar tiempo de fecha (...) -- frase concatenar detras (...) -- frase extraer subfrase (...) -- numero_real calcular raiz cuadrada (...) -- lista invertir orden (...) El repositorio de acciones (I) - En el lenguaje Epi, las librerías del entorno del lenguaje, consisten en conjuntos de acciones y siguen un modelo distinto, ya que: -- Se inspira en la filosofía de la Web 2.0. -- No son promovidas ni mantenidas por ninguna organización. -- No están limitadas en cuanto a su crecimiento. -- Se nutren de las aportaciones de los propios desarrolladores. -- Incorporan el código fuente de las acciones, de manera pública. -- Presentan un sistema de nomenclatura de las acciones que se centraliza en el repositorio del vocabulario. El repositorio de acciones (II) - Deben cumplir con una serie de requisitos: -- Las acciones deben estar localizables en Internet por todos los programadores. -- Cualquier programador debe poder descargarse el código fuente, en el lenguaje Epi. -- Cualquier programador puede publicar sus acciones en el repositorio. -- No se permiten nombres de acciones repetidos en el repositorio. Aunque pueden diferenciarse, mediante un comentario tras el nombre de la acción. -- No se responsabiliza con los contenidos o los resultados que el uso de estos ocasionen. -- Cualquier programador puede corregir errores en el contenido de las acciones del repositorio. Entorno de desarrollo del repositorio de acciones (I) - El objetivo de este sistema es permitir: -- El acceso de toda la comunidad global de desarrolladores al código de acciones que pueden reutilizarse o servir de modelo para acciones semejantes. -- El uso de convenciones de escritura de código para facilitar la lectura y comprensión del mismo. -- Utilizar el idioma español para el desarrollo de código de programación. -- El trabajo en equipo. -- Permitir desarrollar código en cualquier ordenador conectado a Internet. Entorno de desarrollo del repositorio de acciones (II) - Las características del entorno de desarrollo: -- Facilitar la disposición de todas las palabras claves del lenguaje de Epi, a los desarrolladores, en función del tipo de acción que estén desarrollando. -- Automatizar la detección de las dependencias de la acción y la posibilidad de repasarlas y modificarlas en el momento de la grabación. -- Permitir que la sintaxis esté coloreada. -- Estructurar el código escrito, conforme al formato estricto del lenguaje Epi, sin que sea preciso que el desarrollador deba conocerlo. -- Usar sangrías del texto dentro de bloques y numerar las líneas con sangría, con un formato de esquema numerado. Ejemplo de acción en Epi: -- accion: --- lista ordenar burbuja -- entrada: --- lista -- salida: -- dependencia: -- accionfin: --- "terminarfinmal" -- acciontipo: --- "procedimiento" -- global: posicion_actual de lista -- global: posicion_auxiliar de lista -- lista leer longitud (lista, posicion_actual de lista) - posicion_actual de lista -- repetir {{ --- si posicion_actual de lista <= 0 { --- salir --- } --- posicion_auxiliar de lista --- = 0 --- repetir {{ --- si posicion_auxiliar de lista > posicion_actual de lista { --- salir --- } --- si lista ser mayor valor actual que auxiliar (lista) { --- lista intercambiar valor actual con auxiliar (lista) --- } --- ++ posicion_auxiliar de lista --- }} - posicion_actual de lista -- }} -- finaccion Conclusiones (I) - El lenguaje Epi: -- Reutiliza todas las librerías de los lenguajes de destino de la traducción del código Epi. -- Evita al programador concentrarse en: --- El tratamiento de errores de código. --- La definición previa de estructuras de datos. -- Define las dependencias de las acciones en la firma. -- Se concentra en los algoritmos y se olvida de otros elementos de la programación. -- Permite compartir con la comunidad global. -- Permite construir múltiples versiones de la acciones, diferenciándolas por un comentario libre. -- Permite espacios en blanco en nombres de acciones -- Incluye los saltos de línea en su gramática, lo que da homogeneidad al código escrito. Conclusiones (II) - Las aportaciones del lenguaje Epi (I): -- Utiliza el idioma español. -- Simplifica el número de palabras clave mediante la: --- Reducción de las instrucciones de control. --- Eliminación la definición de estructuras de datos. --- Simplificación de las declaraciones. --- Reducción de los niveles de encapsulación. --- Eliminación de palabras clave al no incorporar POO. -- Tiene una sintaxis estricta que incluye saltos de línea. -- Variables únicamente en minúsculas y singular. -- Acceso a los atributos de las entidades mediante la palabra clave ¿de¿ empleando un orden semejante al de la gramática española. Conclusiones (III) - Las aportaciones del lenguaje Epi (II): -- Un sistema de nomenclatura de acciones que: --- Permite los espacios en blanco. --- Utiliza el ¿sujeto de la acción¿, agrupador de éstas. -- Dos tipos de parámetros, ambos por referencia: --- Entrada: Sus datos son utilizados y se pueden modificar. --- Salida: Sus datos no son solo resultados. -- Dos datos de retorno: finbien: la acción termina bien o verdad; y finmal: termina mal, o falso. -- Permite la traducción de código a otros lenguajes de programación, procedural o orientado a objetos. -- Declara las dependencias de las acciones. Conclusiones (IV) - Las aportaciones del lenguaje Epi (III): -- Diferentes tipos de código: --- Procedimiento: Diseñado para definir acciones que describen comportamientos dinámicos de Ing. del Sw. --- Entidad: Diseñado para la escritura de código traducible a otros lenguajes de programación. --- Interfaz: Diseñado para integrar código Epi con código no Epi, y para la captura y tratamiento de excepciones. -- Incluye un nivel básico del tratamiento de errores, según el retorno de las acciones llamadas en una acción: --- "terminarfinmal" : finmal, fuerza a retornar finmal. --- "terminarexcepcion": finmal, fuerza a lanzar una excepción. --- "continuar": No se hace nada. Conclusiones (V) - Las aportaciones del Repositorio de acciones: -- Basado en la filosofía de la Web 2.0. se mantiene con colaboradores de toda la red global. -- Permite publicar código en un lugar centralizado. -- Da acceso a código fuente de manera gratuita. -- Permite que se utilizar los buscadores de Internet. - El Repositorio de vocabulario y entidades (I): -- Basado en la filosofía de la Web 2.0. -- Utiliza un sistema de formularios. -- Favorece la eliminación de duplicidades, sinónimos o polisemias. -- Permite construir jerarquías de palabras de ejemplo como modelos de entidades. Conclusiones (VI) - El Repositorio de vocabulario y entidades (II): -- Selecciona un vocabulario especializado. -- Favorece la traducción a otros idiomas. - El Entorno de desarrollo integrado con el Repositorio de acciones: -- Disponible en Internet, gratuito y multiplataforma. -- Con un sistema de formularios para la programación. -- Sintaxis coloreada. -- Informa de modificaciones simultáneas. Líneas futuras - Desarrollar un mecanismo automático de traducción de código y vocabulario entre idiomas. - Construir un sistema global, en Internet, donde todos los desarrolladores puedan trabajar empleando el lenguaje Epi y producir código compartido para su reutilización. - Desarrollar traductores de código Epi a Java, C#, C++, Pyton o Perl. - Lograr el uso del sistema en el mundo empresarial. - Lograr que la iniciativa de código abierto en Internet use Epi como lenguaje base de sus desarrollos.