You are on page 1of 6

2.

PRINCIPIOS DE DISEO DE LOS LENGUAJES ...................................................................................................................... 2 2.1. 2.2. o o o o o o o 2.3. o o o 2.4. HISTORIA Y CRITERIOS DE DISEO.............................................................................................................................................. 2 EFICIENCIA ............................................................................................................................................................................ 3 Eficiencia del cdigo .......................................................................................................................................................... 3 Eficiencia de Compilacin .................................................................................................................................................. 3 Capacidad de implementacin .......................................................................................................................................... 3 Eficiencia de la programacin ........................................................................................................................................... 3 Confiabilidad...................................................................................................................................................................... 3 Legibilidad ......................................................................................................................................................................... 3 Capacidad de mantenimiento ........................................................................................................................................... 3 REGULARIDAD ....................................................................................................................................................................... 3 Generalidad ....................................................................................................................................................................... 3 Ortogonalidad ................................................................................................................................................................... 4 Uniformidad ...................................................................................................................................................................... 4 PRINCIPIOS ADICIONALES SOBRE DISEO DE LOS LENGUAJES .......................................................................................................... 4 Simplicidad ........................................................................................................................................................................ 4 Expresividad....................................................................................................................................................................... 4 Extensibilidad .................................................................................................................................................................... 5 Capacidad de restriccin ................................................................................................................................................... 5 Consistencia ante notaciones y reglas convencionales aceptadas .................................................................................... 5 Precisin ............................................................................................................................................................................ 5 Independencia de la mquina ........................................................................................................................................... 6 Seguridad........................................................................................................................................................................... 6

2. Principios de diseo de los lenguajes


El xito o fracaso de un LP puede depender de las interacciones complejas entre los mecanismos del mismo. Toda aplicacin de programacin es distinta y requiere de abstracciones diferentes, por lo que, con el diseo del lenguaje, debemos o bien proporcionar abstracciones adecuadas para situaciones particulares o herramientas de tipo general para la creacin sobre demandas de dichas abstracciones. Por lo tanto, el diseo del LP depende mucho del uso pretendido y los requisitos de este uso. En esto es similar a la programacin misma, se trata de una actividad orientada a metas.

2.1. Historia y criterios de diseo


Al iniciarse los LP, exista un criterio de diseo primordial, eficiencia en la ejecucin (las mquinas eran extremadamente lentas). Este era el objetivo de algunos LP como FORTRAN. Naturalmente, se poda olvidar que la razn principal de la existencia de un LP de alto nivel era facilitar la escritura del programa. Esta capacidad de escritura (la cualidad de un lenguaje que le permite a un programador su uso para expresar una computacin con claridad, correccin, de manera concisa y con rapidez ) siempre qued en segundo trmino en relacin con la eficiencia. Aos 60: o Tanto COBOL como Algol60 pueden considerarse como pasos hacia criterios ms generales que la simple eficiencia del cdigo generado. o Algol60: La estructura en bloques y la disponibilidad de la recursin haca ms adecuado para expresar algoritmos en una forma lgicamente clara y concisa, promoviendo una mayor capacidad de escritura. Fue diseado como un LP para comunicar algoritmos entre personas, por lo que su legibilidad (la cualidad de un lenguaje que le permite a un programador comprender y entender de manera fcil y con precisin la naturaleza de una computacin) tambin era una meta importante en el diseo. o Algol68: Intent reducir la complejidad del lenguaje al hacerse totalmente general (muy pocas restricciones) y ortogonal (se pudieran combinar sus caractersticas en cualquier forma significativa). o COBOL: Intentaba mejorar una legibilidad de los programas haciendo que los programas se parecieran ms al ingls escrito ordinario. o Simula67: Tena como meta proveer mecanismos de abstraccin ms poderosos. Introducen el concepto de clase. Aos 70 a 80: o Lleg un mayor nfasis en la simplicidad y la abstraccin, como PASCAL, C, Euclid, CLU, Modula-2 y Ada. Aos 80 a 90: o Continu con el inters de mejorar la precisin lgica o matemtica de los lenguajes, como Ml, Haskell y Lisp/Scheme. ltimos 15 aos: o El desarrollo de mayor importancia ha sido el xito prctico de los lenguajes orientados a objetos, como Smalltalk, C++ y Java. Las metas de diseo de mayor xito han sido: o La correspondencia de los mecanismos de abstraccin con las necesidades de las tareas de programacin. o El uso de bibliotecas para ampliar la resolucin de tareas especficas. o El uso de tcnicas orientadas a objetos para aumentar la flexibilidad y reutilizacin del cdigo.

Longinos Recuero Bustos (http://longinox.blogspot.com)

2.2. Eficiencia
Este principio puede abarcar prcticamente todos los dems principios en varias formas: o Eficiencia del cdigo: El diseo del lenguaje debe ser tal que un compilador pueda generar un cdigo ejecutable eficiente (optimizabilidad). o Eficiencia de Compilacin: Compilacin rpida, usando un compilador de tamao reducido. La verificacin de errores puede ser un problema grave de eficiencia, ya que verificar la existencia de un error en tiempo de compilacin puede hacer ineficiente al compilador, y la generacin de cdigo para verificar el error durante la ejecucin podra hacer que el cdigo objetivo resulte ineficiente. Por otra parte, ignorar esa verificacin, viola otro principio de diseo, la confiabilidad (el aseguramiento de que un programa no se comportar en formas no esperadas durante su ejecucin). o Capacidad de implementacin: Es la eficiencia con la que se puede escribir un compilador. El xito de un lenguaje se puede obstaculizar simplemente porque es demasiado difcil escribir un compilador. o Eficiencia de la programacin: Rapidez y facilidad en la escritura de programas en el lenguaje. Facilidad para expresar procesos y estructuras complejas (capacidad de expresin del lenguaje). Resumiendo, facilidad con la que se puede correlacionar el diseo en la cabeza del programador con el cdigo real. Lo conciso de la sintaxis y evitar detalles innecesarios, como son las declaraciones de variables, a menudo tambin se consideran factores importantes en este tipo de eficiencia. o Confiabilidad: Se puede considerar la confiabilidad como un problema de eficiencia en s mismo. Un programa que no sea confiable genera muchos costos adicionales (modificaciones, pruebas, ). Este tipo de eficiencia es un problema de consumo de recursos en la ingeniera del software. o Legibilidad: Facilidad con la que un lenguaje puede ser comprendido. o Capacidad de mantenimiento: Facilidad con la cual se pueden localizar errores y corregirse, as como agregarse nuevas caractersticas.

2.3. Regularidad
Es una cualidad algo mal definida de un lenguaje que expresa lo bien que estn integradas las caractersticas del mismo. Una mayor regularidad implica: o Pocas restricciones en el uso de constructores. o Menos interacciones raras entre dichos constructores. o En general, menos sorpresas en la forma en que se comportan las caractersticas del lenguaje. La regularidad se puede dividir en tres conceptos: o Generalidad: Un lenguaje logra tener generalidad eliminando casos especiales en la disponibilidad y uso de los constructores y combinando constructores ntimamente relacionados en uno solo ms general. Algunos ejemplos de violacin de este concepto podran ser la carencia de: Variables de procedimientos (Pascal). Anidacin de funciones / procedimientos (C). Arreglos de longitud variable (Pascal). Extensin y creacin de operadores (==, +, ) hacia nuevos tipos de datos (C) .
3
Longinos Recuero Bustos (http://longinox.blogspot.com)

Ortogonalidad: Los constructores del lenguaje no deben comportarse de manera diferente en contextos diferentes, por lo que las restricciones que dependen del contexto son no ortogonales, en tanto que las que se aplican independientemente del contexto son no generales. Los constructores del lenguaje se pueden combinar en cualquier forma significativa y que la interaccin entre los constructores o el contexto del uso no debe generar restriccin o comportamientos inesperados. Los constructores no pueden comportarse de manera diferente en contextos diferentes. Algunos ejemplos de violacin de este concepto podran ser la carencia de: Las funciones solo devuelven valores escalares o apuntadores (Pascal). Las variable locales slo pueden declararse al principio de un bloque (C). Paso de todos los parmetros por valor, excepto los arreglos (C). La ortogonalidad fue una meta principal de Algol68 y se mantiene como el mejor ejemplo de un lenguaje donde los constructores pueden combinarse en todas las formas significativas. Uniformidad: Las cosas similares deben verse de forma similar y tener significados similares, y a la inversa, las cosas diferentes se tienen que ver de forma diferente. Las no uniformidades son de dos tipos: Cosas similares no parecen ser o se no comportan de manera similar. Cosas no similares, parecen ser o se comportan de manera similar. Ejemplo de violacin de este concepto puede ser: En C++ es necesario un punto y coma despus de la definicin de clase, pero est prohibido despus de la definicin de una funcin.
class A { ... }; int f() { ... }

El afn por hacer imponer una meta, como puedan ser la generalidad o la ortogonalidad en el diseo de un lenguaje, puede resultar peligroso. Si una no regularidad no puede justificarse de forma razonable entonces se puede decir que es un error de diseo.

2.4. Principios adicionales sobre diseo de los lenguajes


Simplicidad: o La simplicidad pareca ser un principio fcil de lograr, pero en la prctica es asombrosamente difcil. o No debe confundirse simplicidad con regularidad, Algol68 es uno de los lenguajes ms regulares, pero no es simple. o Tampoco tener muy pocos constructores bsicos es simplicidad, LISP y Prolog tienen unos cuantos constructores bsicos, pero dependen de un ambiente de ejecucin complejo. o Un LP demasiado simple puede hacer que la tarea de utilizarlo resulte ms compleja. BASIC es un lenguaje simple, pero la carencia de algunos constructores fundamentales (declaraciones, bloques, ) hace mucho ms difcil de programar aplicaciones grandes. o Todo debera hacerse tan simple como sea posible, pero no ms simple. Albert Einstein. o La sobresimplicidad puede hacerse que el lenguaje sea difcil de utilizar, carente de expresividad, legibilidad o seguridad y sujeto a demasiadas restricciones. Expresividad: o Es la facilidad con que un lenguaje puede expresar procesos y estructuras complejas. o Es una ayuda a la eficiencia de programacin. o Uno de los primeros adelantos en expresividad fue la adicin de la recursin en los LP (LISP y Algol60) o Puede entrar en conflicto con la simplicidad.
4
Longinos Recuero Bustos (http://longinox.blogspot.com)

o o

Es una de las razones del aumento de popularidad de los lenguajes orientados a objetos. En ocasiones la expresividad se considera como concisa, lo que puede, sin embargo, comprometer la legibilidad, como por ejemplo en la siguiente expresin de C:
while(*s++ == *t++);

Extensibilidad: o Principio que indica que debera de haber algn mecanismo general que permita al usuario aadir nuevas caractersticas al lenguaje. o Podra significar simplemente el aadir: Nuevos tipos al lenguaje. Nuevas funciones a una biblioteca. Nuevas palabras claves. o A lo largo de los ltimos 10 aos la extensibilidad ha pasado a ser de importancia primordial como una propiedad de los lenguajes. En concreto la simplicidad sin extensibilidad, prcticamente tiene garantizado el fracaso del lenguaje. Capacidad de restriccin: o Un diseo de lenguaje debera dar la posibilidad de que un programador pudiera programar de una forma til empleando un conocimiento mnimo del lenguaje, por lo que el diseo de un lenguaje debera promover la capacidad de definir subconjuntos del lenguaje. o Esto resulta til de dos maneras: No es necesario que el programador aprenda todo el lenguaje para utilizarlo con efectividad. Un escritor de compilador podra elegir implementar nicamente un subconjunto en el caso de que la implementacin de todo lenguaje resultara demasiado costosa e innecesaria. Consistencia ante notaciones y reglas convencionales aceptadas: o Un LP debera ser fcil de aprender por un programador experimentado. o Por lo tanto un lenguaje debe incorporar tantas caractersticas y conceptos posibles que se hayan convertido en estndar. o Ley del mnimo asombro: Las cosas no deberan de parecer y comportarse de manera totalmente inesperadas. Por ejemplo, FORTRAN ignora los espacios en blanco y esto podra viola la ley del mnimo asombro:
DO 99 I = 1.10

Pudiera parecer que se quiere ejecutar 99 veces la asignacin del valor 1.10 a la variable I, cuando en realidad lo que se hace es asignar el valor 1.10 a la variable DO99I. Precisin: o A veces conocida como claridad. o Es la existencia de una definicin precisa para un lenguaje, de tal manera que el comportamiento de los programas pueda ser predecible. o Pasos para lograrlo: Publicacin de un manual o informe del lenguaje por parte del diseador. Adopcin de un estndar emitido por una organizacin nacional o internacional de estndares: ANSI. ISO.

Longinos Recuero Bustos (http://longinox.blogspot.com)

Independencia de la mquina: o El mtodo primordial para lograr la independencia de la mquina es el uso de tipos de datos predefinidos que no involucran detalles de asignacin de memoria o de la arquitectura de mquina. o Desafortunadamente, este tipo de datos no pueden nunca estar totalmente libres de problemas de la mquina. Seguridad: o Este principio se basa en minimizar los errores de programacin y permitir que dichos errores sean detectados e informados. o La seguridad est ntimamente relacionada con la confiabilidad y con la precisin. o Este es el principio que condujo a los diseadores del lenguaje a introducir los tipos, la verificacin de tipos y las declaraciones de variables en los lenguajes de programacin. o Con esto se puede comprometer tanto la expresividad como lo conciso del lenguaje.

Longinos Recuero Bustos (http://longinox.blogspot.com)

You might also like