Sie sind auf Seite 1von 10

c 


    
        Y

c 

    
Un factor importante en un lenguaje de programación es saber cuál lenguaje se
está usando. El lenguaje modela el proceso del pensamiento del programador, y la
calidad del lenguaje puede influir en el diseño de los programas realizados.

En los últimos años, sean producido nuevos lenguajes de programación con un


mejor diseño por lo tanto este capítulo intenta dar un trato más unificado al tema,
con una suficiente profundidad para que sea de utilidad para las personas que
diseñan lenguajes de programación actualmente.Y

   
Una de las artes que aún están prevalecientes es el diseño de lenguajes de
programación. el diseño de estos lenguajes es extremadamente largo. Si bien los
lenguajes primitivos han existido desde hace unos 25 años y hasta hace poco
comenzaron a salir nuevos diseños de lenguajes de programación.

Los primeros lenguajes fueron pioneros, y su diseño era muy pobre, por decir los
diseñadores del FORTAN tuvieron suficientes problemas diseñando e
implementando uno de los primeros lenguajes de alto nivel, FORTAN apunta a los
usuarios quienes se han aferrado tan tenazmente a ciertas características
obsoletas del lenguaje y ciertos diseñadores de lenguajes quienes han perpetuado
entusiastamente los defectos de FORTRAN.

Después del inicio del desarrollo de los lenguajes de alto nivel y la implementación
de los primeros compiladores, sobrevino un periodo bastante largo en el que
intentos inteligentes fueron hechos para diseñar nuevos lenguajes sin los defectos
de los viejos.

La mayoría de esos intentos fueron fallidos, no tanto por la carencia de ideas


sobre cómo diseñar mejores lenguajes si no por exceso de ideas.

En conclusión los diseñadores de lenguajes de programación siempre van a


encontrarle pequeños defectos a otros lenguajes lo que los lleva a tratar de
mejorarlos con un mejor diseño entre otras cosas más.

        


Antes de realizar un lenguaje de programación es necesario pensar bien cómo va
a quedar el diseño de este. Para esto uno se tiene que hacer diferentes preguntas
como: ¿Es necesario diseñar un nuevo lenguaje? ¿Puede un lenguaje existente
ser ampliado? ¿Será posible modificar un lenguaje existente, usando un
microprocesador o algo similar? ¿Cuál es el propósito del lenguaje?

Todas estas preguntas son necesarias para poder diseñar un lenguaje, pero
dentro de estas la más importante es la última que sería el propósito del lenguaje,

Y { {   !"   # 


c 


c 

    
        Y

ya que si no se tiene un propósito no tendía caso diseñar el lenguaje, ya que un


lenguaje es diseñado específicamente para una área de aplicación. Entre más
atención se ponga en restringir el área de aplicación del lenguaje, mejor será el
lenguaje para los problemas en ésa área. No es recomendable intentar diseñar un
lenguaje de propósito general ajustable a cualquier problema.

î   
La inspiración para el diseño de un lenguaje de programación ha brotado de varias
fuentes en el pasado. Muchas de estas importantes fuentes serán discutidas en
ésta sección: lenguajes naturales, matemáticas, leguajes de programación
existentes, y propio uso y experimentos.

De forma general las construcciones derivadas del lenguaje natural son válidas
por obvias y legibles o sea hacen lo que dicen hacer, dejemos en claro que
programar no son matemáticas, generalmente los programadores y matemáticos
usan diferentes métodos y resuelven diferentes problemas porque tienen
diferentes objetivos.

Algunas características deseables pueden apreciarse observando la manera en


que los programadores usan las facilidades de los lenguajes existentes. En
particular, es posible obtener restricciones que pueden mejorar el chequeo de
errores o la legibilidad sin restringir al programador, observando que partes del
lenguaje se usan muy raramente.

La investigación continuará en las áreas de medición de uso de un lenguaje de


programación y experimentos en el diseño de un lenguaje de programación.

 î   c 



    
Cuando un lenguaje de programación es diseñado se debe de prestar atención en
las metas de dicho lenguaje. Por ejemplo la comunicación humana, detección de
errores entre otras más cosas por eso en este punto también van anexadas
filosofías como ortogonalidad, generalidad entre otras cosas.

       

Este punto nos menciona que es importante comunicarnos con la máquina, para
detectar algunos errores y demás cosas, la meta de la programación es la
comunicación con los humanos.

Una faceta final referente a los lenguajes de programación es que los


programadores no son computadoras Solo porque un compilador pueda entender
una instrucción dada no por eso el programador es una computadora.

Además puede ser que una instrucción sea ambigua para un humano pero no
para un compilador. Un buen ejemplo de esto es la expresión ³a/b/c´. En general,

Y { {   !"   # 


c 


c 

    
        Y

un derivador no considera esto ambiguo, pero cómo puede un humano


comprenderlo sin usar paréntesis.

   c  

Es un hecho que los programadores cometen errores ya que no hay manera de


que los errores desaparezcan por completo. Es por eso que el programador no
solo tiene que prevenir ciertos errores, si no también detectarlos, identificarlos y
corregir los errores.

La reducción de errores está basada en la redundancia útil. un error es detectado


si una porción del programa no coincide con la otra. La redundancia útil puede ser
construida en el lenguaje esto se hace a través de declaración de variables y
estricta verificación de tipos.

   

Es importante que un lenguaje sea fácil de utilizar ciertos aspectos merecen una
mención específica, la más importante es legibilidad, e deseable que los
constructores del lenguaje sean fácil de leer y recordar para que una vez que el
programador esté familiarizado con el lenguaje no tengan que consultar manuales,
hay algunos lenguajes que son adorados por su flexibilidad , de lo contrario la inútil
flexibilidad puede ser un problema, por ejemplo ALGOL 60 que el compilador tiene
que lidiar con variables que tienen el mismo nombre y por lo tanto emergen
errores.

     


    

La mayor preocupación en la ingeniería de software es el recordatorio de las


decisiones echas durante el desarrollo del programa. El programa es el mejor
lugar para grabar decisiones, a su vez el lenguaje debe permitir a los
programadores mantener sus deseos y el compilador haga la implementación.

Además de establecer decisiones claramente también es deseable el poder


localizar el efecto de los cambios de estas decisiones.El aspecto final de la
efectividad de la programación es que los lenguajes deberán descartar engaños.
Inteligentes trucos de programación sin altamente perjudiciales a la legibilidad y
son pocas veces justificados.

      

Un lenguaje debe de ser compatible, o sea que debe de ser tan simple como sea
posible para compilar sin ninguna reducción en su efectividad comunicativa y su
utilidad. Además de los problemas de compilación, algunas ideas deben ser
otorgadas a las ayudas al eliminar errores, herramientas de medida y otras ayudas
para probar el programa. Estas facilidades son importantes para los usuarios de
un lenguaje si los programas son verificados apropiadamente. La compatibilidad
de un lenguaje no es enteramente apreciada sino hasta la parte de la
Y { {   !"   # 
c 


c 

    
        Y

implementación. En este sentido, la compatibilidad no cumple con lo ideal de tener


distintas fases de diseño e implementación más que ningún otro diseño programa-
lenguaje

    

La eficiencia debe ser considerada en el contexto del ambiente total, recordando


que las maquinas se vuelven más baratas y los programadores más caros. Por
ejemplo, es generalmente indeseable pagar una significante suma para aumentar
la eficiencia de un programa un 10% por que lo ahorros simplemente no justifican
la inversión.

Finalmente, buenas mejoras en la eficiencia pueden obtenerse haciendo el


lenguaje bastante simple para que sea fácil generar código razonablemente
eficiente.

     

Aunque una de las esperanzas originales de los lenguajes de algo nivel era que
serían independientes de la máquina, esta esperanza no ha sido totalmente
realizada. La mayoría de los lenguajes actuales siguen siendo fuertemente
dependientes de máquina, y la transportabalidad de programas sufre como
consecuencia.

Entonces definimos lo que llamamos independencia de maquina: es un lenguaje


es independiente de la máquina si y solo si un programa que ha sido compilado y
corrido correctamente en una máquina X será, cuando sea transportado a la
maquina Y, corrido con exactamente la misma salida, dada la misma entrada.

Algunas máquinas utilizan algunos caracteres pero en cambio otras confían en


una longitud fija o una cuenta de longitud. En conclusión la independencia de
maquina no esta requerida para todos los lenguajes. En particular, los lenguajes
intencionados para escribir sistemas operativos u otro software especializado
dependiente de máquina inevitablemente tendrán un grado significativo de
dependencia de máquina. Para algunos lenguajes orientados para la aplicación
(p.ej., lenguajes de control en tiempo real), es cuestionable si es necesario quitar
todas las dependencias de máquina.

!    

Es la pregunta de cualquier diseño de lenguaje, y nos referimos a que la mayoría


de los usuarios prefieren un lenguaje simple La simplicidad se alcanza lo mejor
posible con la restricción de objetivos, el gran cuidado en cuanto a legibilidad y
evidencia, y basar la lengua alrededor de algunos conceptos simples bien
definidos.

Y { {   !"   # 


c 


c 

    
        Y

   

La uniformidad se define como ³haciendo la misma cosa la misma manera a pesar


del contexto.´

Si en un principio adopta el diseño de un lenguaje, podrá ayudar en la reducción


del número de cosas que los programadores tienen que pensar, puesto que no
necesitan considerar contexto para saber cómo actuará una característica.

Un subtema de la ³uniformidad´ que merece la consideración es la cuestión de


eliminar casos especiales. Haciendo algo de una sola manera la mayor parte del
tiempo y entonces otra manera en un caso particular (posiblemente por razones
de la implementación) debe ser evitada. Un buen ejemplo de esto es el método
usado para asignar un valor a una variable de etiqueta en PL/I, que es totalmente
diferente del método usado en asignar un valor a un elemento de un arreglo de
etiqueta. Tales casos especiales tienen tres problemas específicos:

1. Complican el lenguaje.
2. Conducen a la implementación de las diferencias, desde que algunas
personas las implementaron fielmente y otras ³mejorarán´ el obviamente
mal diseño eliminándolas.
3. tienden a ser ³endurecidos´ y no pueden ser removidos incluso después
de haber sobrevivido su utilidad, a partir de esto invalidaría las
implementaciones existentes.

"
   

La ortogonalidad es otra filosofía de diseño, prominente en gran parte debido a su


uso extenso. Que la idea básica de la ortogonalidad es tener varios conceptos
generales, que funciona sin el conocimiento de la estructura interna de las
otras.Aunque la ortogonalidad puede dar lugar a mejoras considerables en
simplicidad, el ejemplo de ALGOL 68 proporciona una advertencia; es dudoso si la
ortogonalidad es útil como substituto para la simplicidad.

La alternativa a ortogonalidad (que se ha caracterizado a veces como


³proporcionar todas las características por todas partes´) se llama a veces, la
³diagonalita´ (³proporcionar las características cuando sea necesario o útil´). Por
ejemplo, la ortogonalidad de valores tiene acceso y la aritmética, mencionada
arriba, tiene indiscutiblemente valor.

#   $     $   

La filosofía básica de la generalidad es ³si permitimos esto, entonces vamos a


permitir todo de forma similar´. De una forma similar la ortogonalidad, esta noción
es un asistente a la simplicidad pero no un substituto para la simplicidad. Si está
llevada demasiado lejos, la generalidad puede dar lugar a las características
raramente usadas, error-prone que pueden ser difíciles de poner en ejecución.

$Y { {   !"   # 


c 


c 

    
        Y

c c  
La selección se organiza en base de los varios tipos de estructuras los objetos
expuestos de los programas, y el énfasis se pone en cómo las estructuras son
adiós influenciado el lenguaje de programación funcionando. En este contexto las
implicaciones para el diseño de la lengua se discuten. Las estructuras se piden
esencialmente en una secuencia Final-Inicio(Bottom-Up), trabajando del nivel más
bajo a del más alto nivel.

    

Cubre básicamente el diseño de la lengua, de esas adiciones que afectan el


aspecto de la lengua pero no cambia su semántica. El principio más significativo
de la microestructura de la lengua es que el significado de una construcción, tal
como un operador, debe ser obvio de es aspecto. Es decir el símbolo de las
idiomas debe ser reconocido fácilmente para cuáles son y lo que lo hacen.

El aspecto del nivel más visible y más bajo de la microestructura es el juego de


caracteres usado. Un juego de caracteres demasiado grande puede dar lugar a los
usuarios que desconciertan sobre el significado de los jeroglíficos obscuros en un
programa.

Si el sistema tiene un carácter de salto de página disponible, es algo fácil arreglar


para que el explorador del recopilador no haga caso de los caracteres tales como
símbolo. Cuando se hace salir la fuente , el carácter de salto de página generaría
el salto requerido para paginar después.

    %  

La expresión es a menudo la unidad fundamental del cómputo en una lengua. Sus


componentes, operadores y accesos del valor, son demasiado peculiares a las
idiomas específicas para ser dadas mucho tratamiento aquí, pero algunos
comentarios se pueden hacer en expresiones en general.

Un asunto relacionado con las expresiones es la cuestión de la orden de la


evaluación. El método normal de determinar la orden de la evaluación se basa en
dos niveles: atascamiento explícito el corchete y del operador.

El alternativa y la lengua de la expresión es la lengua de la declaración, donde una


distinción se hace a entre las declaraciones y las expresiones. Expresiones rinda
un valor y generalmente, salvo el uso erróneo de las llamadas de función, no
tenga efectos secundarios. Esto el tipo de organización corresponde bien a la
manera que los programadores piensan normalmente de sus programas:
producciones la ³declaración´ realiza una acción, de una ³expresión´ un valor.


Y { {   !"   # 
c 


c 

    
        Y

    

El aspecto cuatro de la estructura de datos será considerado en esta subdivisión.


Primero, una discusión de las formas alternativas para los declaraciones de los
datos se presenta. Después, una descripción de la variedad de tipos de datos que
están disponibles en lenguajes de programación y que deben ser considerados si
se emprende un diseño de la nueva-lengua. Los efectos de las estrategias de la
almacenaje-asignación en lengua-diseñan aspecto son entonces describen. El
asunto final se ocupa de una discusión del alcance de variables en un lenguaje de
programación.

Otro aspecto en la declaración de constantes es que es útil para poder escribir una
constante por cualquier otro tipo de datos en el programa. Por ejemplo, debe ser
posible escribir un arreglo constante. Tales constantes deben de eliminar en gran
parte la necesidad de inicializar los arreglos ya que la mayoría de los arreglos son
realmente arreglos constantes, y evitarle al programador destruir accidentalmente
el contenido de una constante.

Si el diseñador decide no permitir la inicialización de variables ,la sintaxis de la


declaración de variables se convierte en algo muy sencillo. Una sintaxis muy
legible es la usada por PASCAL:

VAR a,b,c :integer;

Tenga en cuenta que esta sintaxis es realmente apropiada sólo cuando toda la
información es sobre, por ejemplo, matriz límites se localiza en el tipo de
especificación. La facilidad de lectura de esta forma disminuye rápidamente si la
lista de nombres de variables se complica con otras cosas como la inicialización.

En conclusión nos dice cómo va a ser estructurado el programa, para realizar


diferentes operaciones.

     

A habido una gran controversia con respecto a la mejor opción para las primitivas
estructuras de control. Muchas de las discusiones se centran alrededor de la
inclusión o exclusión del GOTO. Es casi universalmente aceptado que es mejor
usar estructuras de control de alto nivel en lugar que el restringido GOTO. Es
igualmente ampliamente aceptado que un apropiado set de construcción de alto
nivel que eliminara a alas dos la necesidad de y el deseo por el GOTO. En lo que
no se está muy de acuerdo es en lo que se debe de comprender en dicho set.

Las estructuras de control más simples es la combinación de varios enunciados en


un sencillo enunciado así como en los enunciados ALGOL´s BEGIN-END. Los
lenguajes sin dicha construcción (FORTRAN, BASIC) sufren gravemente de esta
ausencia. Dadas esta conveniencia hay 3 métodos distintos para obtener dicha
combinación: Soportes explícitos, estructuras de soportes y soporte por hendidura.

Y { {   !"   # 


c 


c 

    
        Y

Y la parte importante de las estructuras del control que no se ha investigado a


fondo es la cuestión entera de la dirección de excepción. ¿Cómo uno construye
las estructuras del control para hacer frente a la divulgación y a ocuparse de
condiciones de error, es detectado por el hardware, los cheques run-time, o los
user´s poseen programa? Un número de preguntas abiertas existen, y más
investigación será emprendida indudablemente en esta área. Un aspecto de
menor importancia de las estructuras del control es la pregunta: ¿Dónde el
programa comienza la ejecución?

El siguiente control de las construcciones son claros fracasos o primitivos intentos


de hacer lo que se ha hecho mejor y más simplemente:

1.- ETIQUETA variables.

2.- Dinámica de la instrucción, y modificación (por ejemplo, COBOL del


ALTER).

3.-El carácter excesivamente restrictivo de FORTRAN DO-loop.

Para el diseñador es aconsejable hacer caso omiso de estos.

3.5.5 Estructura del Compilador.

"Estructura del Compilador" es el término usado aquí para cubrir determinados


aspectos de un idioma que en el empate muy fuertemente con el proceso de
compilación. Los principales temas de interés son las directivas para el
compilador, el lenguaje dentro de las operaciones que se realizan en tiempo de
compilación en lugar de en tiempo de ejecución, y la cuestión de separar
recopilación de las diferentes "módulos" de un programa. A menudo es
conveniente dar al compilador de ciertos elementos de información que no puede
ser fácilmente expresada en el propio idioma.

En conclusión es como programamos de una forma estructurada por medio de un


lenguaje que solo la maquina entiende.

      &!   '&!(

Un último elemento importante en cualquier lenguaje de programación es el


conjunto de instalaciones para el manejo de entrada y salida. El idioma no puede
optar por hacer caso omiso de este aspecto de la mala experiencia resultante de
la concepción de ALGOL 60 dicta que esto es así. El segundo nivel es el tipo de
formato de entrada / salida. E n esta forma el valor de cada variable en una lista
de entrada o salida es leído o escrito, de acuerdo con los controles de formato
predefinido. Estos controles suelen indicar un campo de longitud y el tipo de datos
que se aplican al valor de una determinada variable en el formato lista. FORTRAN
el formato de E / S y PL / I-dirigido de edición de E / S ofrecen ejemplos de este
tipo de estructura.

%Y { {   !"   # 


c 


c 

    
        Y

El lenguaje C se presenta una variación inusual e innovadora para el formato de I /


O. El formato de los caracteres de control se incluyen como parte de una cadena
de texto utilizados para anotación. Porejemplo:

printf(³El valor de x es %d:\ n El valor destes %s´,x,st)

Imprimirá:

El valor de x es 4:

El valor de st es string

if x = 4 and st = ³string.´ El formato de control de caracteres corresponde a entero


(base10) y al formato tipo cadena, respectivamente, y el conjunto de caracteres
³\n´ indica una nueva línea.

Además, los tipos de facilidades que se ofrezcan dependerá de la cantidad de


procesamiento de datos de actividad previsto que se complete el uso de la lengua.

c  ")c*++,"
Aunque "el mantenimiento de los pequeños que" es importante en todo el diseño
de un idioma, es útil prestar atención especial a la reducción de tamaño una vez
que el diseño se ha solidificado.

Las razones básicas para el mantenimiento de un idioma pequeño se puede


resumir simplemente: cuanto más pequeño es el idioma, es la más fácil de leer,
más fácil es escribir, más fácil es para producir un fiable, eficiente compilador, y la
más fácil es De escribir claro y fácil de leer la descripción de la documentación.

La eliminación de una construcción deben ser considerados cuidadosamente


como su remoción requiere el usuario para simular su efecto. Si la construcción no
será utilizada, obviamente, debe ser eliminado. Si la construcción se utiliza con
poca frecuencia, pero es difícil o imposible de simular con las demás
construcciones, debería ser, probablemente, en la izquierda (la declaración CASE
es un buen ejemplo).

+#-* +
Esta sección se refiere a determinados aspectos de la práctica de la programación
en idioma diseño. En particular, se discute una serie de herramientas que se
pueden utilizar para especificar un idioma, el problema de la evaluación de un
lenguaje de diseño, el lenguaje y la aplicación consideración.

El método que utiliza para describir su idioma es una importante herramienta de


diseño. Actualmente, el idioma es la descripción férula en tres partes; contexto
independiente de la sintaxis (lo que normalmente se piensa como de la sintaxis),

&Y { {   !"   # 


c 


c 

    
        Y

que dependen de la sintaxis de contexto (el tipo de control, la coherencia, etc) y la


semántica (lo que la construcción de hacerlo).

Es posible describir una lengua de arriba hacia abajo (empezar con "el programa")
o de abajo hacia arriba (empezar con "número", "identificador", etc.) Para los
idiomas de tamaño razonable, hay poco para elegir entre ellos. El enfoque de
arriba hacia abajo es tal vez un poco más clara para situaciones en las que hay
poco de anidación de las definiciones (por ejemplo, la descripción de la
"declaración")

{Y { {   !"   # 


c 



Das könnte Ihnen auch gefallen