You are on page 1of 29

Cmo evaluar un lenguaje?

Tambin es importante determinar cuando un lenguaje es eficiente, para esto existen


determinados criterios o caractersticas que nos ayudan, cabe mencionar que no existen
lenguajes buenos o malos sino apropiados e inapropiados para una determinada situacin o
problema. Para esto cada autor refleja segn su criterio que caractersticas importantes debe
cubrir un lenguaje para un buen desempeo del mismo, cabe mencionar, que los lenguajes
son diseados e implementados, por esta razn es necesario conocer todos los puntos de
vista.

CRITERIOS DE LENGUAJE SEGN DORIS APPLEBY Y JULIUS


VANDEKOPPLE
Definiciones bien definidas. Los programadores de Fortran o Pl/1 trabajan a

menudo como un grupo. Si uno no saba o haba olvidado como escribir el cdigo
para efectuar una tarea particular, la cosa ms fcil por hacer era bajar al vestbulo y
preguntarle a un amigo. Los manuales eran volmenes inmensos pobremente
organizados que enseaban mediante ejemplos con ms frecuencia que por
cualquier otro medio.
Sintaxis BNF y EBNF. Los diseadores de Algol 60 rectificaron esto al
proporcionar una sencilla descripcin del lenguaje en 18 pginas. La sintaxis del
lenguaje est descrita en los forma Backus Naur (BNF), seguida de ejemplos de
programacin. BNF es un ejemplo de un metalenguaje, un lenguaje utilizado
para describir otro lenguaje, en este caso uno de programacin. BNF tiene
smbolos llamados metasmbolos, y reglas propias, las cuales son empleadas
para definir la sintaxis del lenguaje particular de programacin en cuestin.
Por sintaxis entendemos una coleccin de instrucciones formada al seguir un
conjunto de reglas que diferencian los programas vlidos de los no vlidos. La
sintaxis por s misma no da significado a un lenguaje; meramente define la
coleccin de frases y sentencias que son combinaciones vlidas de los caracteres
del lenguaje. Este punto lo estudiaremos en la unidad 2.
Semntica. Un lenguaje tambin debe de estar definido semnticamente al
describir la manera precisa lo que significa una construccin particular. Por
ejemplo, la expresin (X < 3) significa en pseudocdigo que X debe tener un
valor; ese valor es comparable al entero 3, y la expresin es verdadera si el valor
es menor que 3, y es falsa en otros casos. El lenguaje natural es notoriamente
ambiguo, de manera que hace esfuerzos para describir formalmente la semntica
del lenguaje as como tambin la sintaxis.
Comprobabilidad. Probar con certeza matemtica que un programa es correcto es

un proceso lento. Sin embargo, C.A.R. Hoare cree que las ventajas prcticas de la
comprobacin de programas eventualmente se sobrepondrn a las dificultades, en
vista de los costos creciente de los errores de programacin. La prueba de que un

programa es correcto involucra tres pasos: primero la comprobacin de que el


programa cumple con la intencin del programador; segundo la prueba de que el
compilador traduce de manera correcta a cdigo mquina la sintaxis y la semntica
del lenguaje empleado; y tercero, que se compruebe que la mquina misma
funciona correctamente.
Una meta para cualquier lenguaje de programacin es probar que un compilador para el
lenguaje lo interpreta de manera precisa. Esto es a menudo difcil de hacer si la definicin
del lenguaje incluye descripciones en lenguaje natural de lo que se desea mediante un trozo
particular de sintaxis, si la sintaxis puede describirse en un lenguaje formal, y la semntica
puede escribirse axiomticamente, un compilador puede ser probado formalmente para
satisfacer por completo tanto la definicin sintctica como la semntica del lenguaje.
La sintaxis de Pascal fue definida en BNF, y su semntica definida axiomticamente por su
diseador Nicklaus Wirth, en colaboracin con C.A.R. Hoare. El PL/1 fue diseado
utilizando la definicin Viena (VDL, Vienna Definition Language) y Algol 68 fue definida
en una gramtica vW de dos niveles (llamada as por el nombre de su inventor, A. van
Wijngaarden) que era demasiado enigmtica para la mayora de los usuarios. Estos ltimos
dos metalenguajes forman bases para comprobacin de compiladores. Si un lenguaje est
definido en VDL, incluye una descripcin de lo que pasa cuando cada declaracin del
lenguaje se ejecuta tericamente en una computadora terica. Si un compilador implementa
fielmente la computadora terica, puede probarse que la ejecucin del programa es
correcta. La gramtica vW no describe una computadora terica, pero permite que parte de
la semntica que trata con declaraciones sea definida en la gramtica. Por lo tanto no
pueden generarse programas correctos gramaticalmente que vuelvan a declarar variables o
que las definan de una manera inconsistente.
Confiabilidad. El software se considera confiable si se comporta como es

anunciado y produce los resultados que el usuario espera. Cuando se presenta un


error, debera ser fcilmente detectado y corregido. Un lenguaje de programacin
fomenta la escritura de programas confiables de maneras a menudo sutiles. La
declaracin goto es quiz la caracterstica ms notoria de lenguaje pensada para dar
como resultado programas no confiables. El problema que subyace aqu es que los
programas con muchos gotos, hacia atrs y hacia adelante son difciles de leer para
cualquiera que no sea su creador, y por lo tanto difciles de modificar y de depurar.
Las caractersticas de sintaxis poco usuales tambin pueden fomentar errores. El lenguaje C
utiliza = como un operador de asignacin. X=5 asigna el valor de 5 a la localidad de
almacenamiento designada para X. Para hace comparaciones se utiliza ==. X == 5 compara
el valor de X con 5 y si es verdadero o falso, dependiendo si X es igual o no a 5. Puesto que
C permite asignaciones casi en cualquier sitio de una declaracin, la substitucin
inadvertida de = por el smbolo poco familiar == puede no producir un error, nicamente
resultados ininteligibles. Los identificadores tanto en Modula como en C son sensibles a la
capa tipogrfica de las letras. As cuenta y Cuenta representan variables distintas, que son
confundidas fcilmente tanto por un programador como por un revisor subsecuente.

Un lenguaje confiable debera ser capaz de manejar errores durante el tiempo de ejecucin
una sobrecarga (overflow) aritmtica ocurre cuando se calcula un entero que es mayor de lo
que puede ser soportado por el hardware particular involucrado. Puede presentarse gran
variedad de errores durante la entrada de datos, desde la lectura al pasar el final de un
archivo hasta un valor no permitido introducido de manera interactiva. Estas clases de
errores son llamadas excepciones y las provisiones del lenguaje para tratar con ellas se
llaman manejadores de excepciones. La interrupcin de un programa no siempre es
aceptable, en particular para las aplicaciones en tiempo real.
Para los lenguajes de programacin, la confiabilidad por lo general se refiere a los
mecanismos que promueve la escritura, mantenimiento y depuracin de los programas
correctos, y el subsecuente manejo de excepciones cuando un programa se ejecuta.
Traduccin rpida. Los lenguajes de

programacin que se consideran en esta materia,


generalmente son independientes de la mquina. Es
decir, un programa escrito en el lenguaje puede ser
traducido y ejecutado en una variedad de mquinas
diferentes. Un programa que escribimos se encuentra
en cdigo fuente. Este debe ser traducido a un lenguaje
que una mquina particular pueda reconocer, y por ltimo en cdigo de mquina
que pueda ejecutarse en realidad. La mquina en la que un programa se ejecuta se
denomina anfitrin y su(s) lenguaje(s), lenguaje(s) anfitrin(es). Colocamos la (s)
opcional despus del lenguaje porque una mquina puede tener ms de un lenguaje
anfitrin. Cualquier mquina debe tener un lenguaje asociado de mquina de bajo
nivel escrito en cdigo binario. Tambin puede tener un lenguaje ensamblador de
nivel superior especfico de la mquina. Con frecuencia resulta prctico traducir
primero el cdigo fuente a cdigo intermedio, el cual es intermedio entre el cdigo
de mquina y el cdigo fuente. El cdigo intermedio puede ser o puede no ser uno
de los lenguajes anfitrin.
La traduccin del cdigo fuente involucra tres pasos: anlisis lexicogrfico, anlisis
sintctico y anlisis semntico. El anlisis lexicogrfico, o rastreo, identifica cules tokens
representan valores, identificadores, operadores, etc. El anlisis sintctico, llamado
simplemente sintctico, reconoce las declaraciones no vlidas del lenguaje fuente. El
anlisis semntico determina el significado de una declaracin. Algunos traductores pueden
realizar dos o ms de estos tres procesos en un solo paso sobre el cdigo fuente.
Los traductores son intrpretes o generativos, los cuales generan un cdigo intermedio. Un
intrprete es en s mismo un programa que traduce una expresin o declaracin de lenguaje,
calcula y luego imprime o utiliza de otro modo su resultado. Los intrpretes son por lo
regular ms fciles de escribir que los traductores generativos, pero se ejecutan ms
lentamente. Una ventaja de un intrprete es que los errores de ejecucin as como los de
sintaxis son detectados a medida que se encuentra cada declaracin, eliminando as
cualquier duda acerca de dnde reside el problema. Los lenguajes Lisp y Prolog tienen
tanto intrpretes como compiladores, siendo los primeros utilizados para el aprendizaje y la

experimentacin, donde los resultados lnea por lnea son deseables. Un compilador es
generalmente ms ventajoso para programas extensos.
Las partes ms comunes de un traductor generativo son el compilador, el ligador y el
cargador. El compilador traduce el cdigo fuente a cdigo intermedio orientado a la
mquina, denominado cdigo objeto. El ligador enlaza de manera conjunta cdigo
intermedio compilado independientemente en un solo mdulo de carga, resolviendo las
diferencias entre tokens. Su salida puede estar en el mismo cdigo intermedio como su
entrada pero est libre de referencias de un mdulo a otro. El cdigo resultante es as
relocalizable, puesto que contiene cualquier informacin que necesita y es independiente de
otros segmentos del programa. El cargador hace la traduccin final en cdigo mquina y
carga el programa en diversas localidades de memoria. La salida del cargador es un mdulo
ejecutable en cdigo de mquina. Durante cada fase, se hacen entradas en varias tablas que
mantienen el registro de los tipos variables, direcciones de memoria, etc.
Es importante en algunos casos, por ejemplo una aplicacin interactiva, que el cdigo
fuente se traduzca rpidamente. Por otro lado, si un programa se va a compilar solamente
una vez y va a ejecutarse a menudo, la velocidad de compilacin puede no ser una
preocupacin principal. Se han hecho intentos exitosos para compiladores de un paso, los
que rastrean el cdigo fuente slo una vez, mientras que algunos traductores efectan
muchos pasos (por ejemplo, algunos de los primeros compiladores Pl/1 de IBM, que
ejecutan ms de 30 pasos para compilar un programa completo). Algunos factores que
afectan el nmero de pasos necesarios para un compilador en particular son:
1. Cunta memoria est disponible? Pueden caber simultneamente en la
memoria tanto el cdigo fuente como el cdigo objeto que estn siendo
generados?
2. Qu tan rpido es el compilador mismo y cuanta memoria requiere?
3. Qu tan grande es el programa objeto y que tan rpido debe ejecutarse? Debe
optimizarse el cdigo objeto?
4. Qu clase de caractersticas de depuracin se requieren para el cdigo fuente?
5. Qu clases de deteccin y recuperacin de errores se requieren para el cdigo
ejecutable?
6. Cuntas personas estarn involucradas en la escritura del compilador? Podra
ser ventajoso permitir que cada una escriba un paso independiente realizando
una fase simple del proceso de compilacin?
Cdigo objeto eficiente. Despus de que el cdigo fuente se compila en cdigo

objeto, no se hace referencia adicional al lenguaje fuente. As es en tiempo de


compilacin que los asuntos de la eficiencia en el uso de memoria y tiempo de
ejecucin deben ser considerados. Existe generalmente un balance comparativo

entre el trabajo que el programador debe hacer y el trabajo que el compilador puede
hacer. Por ejemplo, un lenguaje que tiene todas las declaraciones de tipo y de
variables precediendo a otro cdigo puede asignar todas las localidades de memoria
en un momento, acelerando la compilacin. Por supuesto el programador tendr que
hacer estas declaraciones entes que un programa pueda ser compilado.
Algunos compiladores, llamados compiladores de optimizacin, ejecutan uno o dos pasos
ms despus del anlisis semntico para incrementar la eficiencia del cdigo compilado.
Las primeras optimizaciones, tales como la eliminacin de subexpresiones comunes son
independientes de la mquina, mientras que las mejoras finales dependen de la mquina
particular en la que el programa se ejecutar. Los lenguajes de muy alto nivel, donde los
programas manipulan estructuras complejas tales como registros, listas, relaciones o
conjuntos, dependen de compiladores de optimizacin por eficiencia. Los lenguajes de
programacin ejecutan la gama de los parecidos a C, donde el programador puede trabajar
muy cerca del CPU mismo, hasta lenguajes de manipulacin de bases de datos (DML, por
sus siglas en ingls), donde las estructuras fsicas subyacentes estn profundamente ocultas.
En los lenguajes de menor nivel, un cdigo objeto eficiente refleja con frecuencia la
habilidad o capacidad de los escritores de compiladores.
Ortogonalidad. La palabra ortogonal viene del griego y se refiere a lneas rectas

cruzndose en ngulos rectos. Las variables aleatorias se consideran ortogonales.


Con esto queremos decir que los componentes son independientes entre s y que se
comportan en la misma manera en cualquier circunstancia.
Un ejemplo se encuentra en los conceptos de tipo y funciones. Un tipo describe la
estructura de los elementos de datos, Una funcin es un procedimiento por el que pasa un
nmero finito de valores de parmetro y devuelve un nico valor hacia el procedimiento
que la invoca. En un lenguaje ortogonal, los tipos son independientes de las funciones, y no
se aplican restricciones a los tipos de parmetros que pueden ser pasados o al tipo de valor
que puede ser devuelto. As, podramos ser capaces de pasar una funcin a una funcin, y
recibir una funcin de regreso. Lisp incorpora esta caracterstica particular, pero deben
comprenderse ciertas dificultades inherentes y tratar con ellas.
Algol 68 fue pensado y diseado como un lenguaje completamente ortogonal. Tiene muy
pocas construcciones integradas, y el programador es capaz de construir lo que quiera
mediante la combinacin de diversas caractersticas. Nunca lleg a ser popular en los
Estados Unidos, en parte debido a que era demasiado ortogonal. Los programadores
queran estructuras especiales que se comportaran de maneras predecibles.
La no ortogonalidad puede ser molesta y conducir a errores. Para el programador novato en
Pascal, parece no haber una buena razn por la que una funcin no pueda devolver un
registro o por la que un archivo deba ser pasado como un parmetro var.
Generalidad. La generalidad est relacionada con la ortogonalidad. Se refiere a la

existencia de slo caractersticas necesarias del lenguaje, con las otras compuestas
en una manera libre y uniforme sin limitacin y con efectos previsibles. Como
ejemplo de una carencia de generalidad, considere la del tipo de unin libre en

Pascal. Una unin libre es un registro que puede tener un campo que vara
dependiendo de su uso. En un registro de esta clase, la variable de campo variante
puede funcionar como un apuntador y no ser directamente accesible para impresin
u otros usos. En otro momento durante la misma ejecucin, puede ser tipificado
(declaracin de tipos) como un entero, con su valor disponible para impresin,
operaciones aritmticas, etc. Esta caracterstica no es general, porque la localidad de
memoria relacionada con las variables de campo variante no se trata de manera
uniforme y los efectos no son previsibles.
Consistencia en notaciones comunes. Como hemos mencionado antes, los

problemas para solucin por computadora con frecuencia son concebidos en el


lenguaje de las matemticas. De este modo, la notacin de los lenguajes de
programacin debera ser consistente con las notaciones comnmente usadas en este
campo. Usamos - para indicar resta y nmeros negativos. As, 5-3 y 5 deberan
permitirse en lenguajes que soporten aritmticas de enteros.
1 {1,2,3} es la notacin comn para la pertenencia a un conjunto, y por ello es preferible
a la versin en Pascal 1 In [1,2,3]. Sin embargo, no todos los conjuntos de caracteres
soportan , {, y }, de modo que en ocasiones se hacen sustituciones.
Uniformidad. La consistencia est relacionada con la uniformidad (en algunos

casos es llamada regularidad). Con esto queremos decir que nociones similares
deberan verse y comportarse de la misma manera. Una cuestin de uniformidad
tiene que ver con la necesidad de tener inicios y finales. Debera todo fin estar
precedido por un inicio correspondiente? De manera similar, debera toda
declaracin finalizar con un signo de punto y coma (;)? En un lenguaje
completamente uniforme, la respuesta debera ser s a ambos asuntos.
Subconjuntos. Un subconjunto de un lenguaje es una implementacin de slo una

parte del mismo, sin caractersticas especiales. Las especificaciones originales para
el lenguaje Ada del DOD no permiten subconjuntos. La motivacin para esto fue el
deseo del DOD para hacer que sus contratistas produjeran software que explotar un
Ada con todas sus caractersticas. Despus de todo, las caractersticas innecesarias
no fueron incluidas. Una de las desventajas de este enfoque era que los estudiantes
no podan empezar a aprender el lenguaje hasta que tuvieran disponibles
compiladores completamente validados; por esta razn no existi un cuerpo de
programadores hasta varios aos despus de que el lenguaje haba sido completado.
Algunos lenguajes son extensos, con muchos componentes especiales. stos pueden
ejecutarse solamente en mquinas grandes y no estn disponibles para compaas y
escuelas ms pequeas a menos que se trate de un subconjunto de los mismos. Otra ventaja
de los subconjuntos es el desarrollo incremental de un lenguaje. Con esto nos referimos a la
versin inicial de un lenguaje de ncleo pequeo, con otras caractersticas que van siendo
liberadas a medida que se van desarrollando.

Extensibilidad. El inverso de los subconjuntos es la extensibilidad. Un lenguaje

puede tener un ncleo estndar, el cual es invariable en cada implementacin, pero


con varias extensiones. Las ventajas de los subconjuntos son mejoradas cuando un
lenguaje puede ser extendido en formas tiles. A principios de 1968, los
desarrolladores de Cobol adoptaron este enfoque mediante la definicin de un
ncleo que todos los compiladores deban satisfacer. Once mdulos
estandarizados fueron agregados los cuales pueden o no pueden ser incluidos en
cualquier compilador Cobol dado. Ada 95 ha adoptado un enfoque modular
semejante.
Los diseadores de Pascal incluso usaron otro enfoque, definiendo un pequeo lenguaje
estndar porttil que careca de algunas caractersticas deseables, tales como capacidades de
grficos y manejo de cadenas de caracteres. Los implementadores de Pascal agregaron
varias mejoras, las cuales hicieron a sus compiladores atractivos para los programadores,
pero los programas resultantes eran menos porttiles. Por ejemplo, el Pascal estndar no
tiene tipo de cadenas (string), pero casi todos los compiladores de Pascal proporcionan uno
integrado en el lenguaje mismo o en un mdulo especial para ser incluido con la mayora de
los archivos fuente.
Transportabilidad. Un lenguaje es transportable si sus programas pueden

compilarse y ejecutarse en diferentes mquinas sin tener que reescribir el cdigo


fuente. Para conseguir la transportabilidad se han establecido las organizaciones
estndares nacionales e internacionales para producir descripciones de lenguajes a
las cuales deben adherirse las implementaciones. Las ms activas de stas son el
Instituto Americano de Estndares (ANSI), la Institucin Britnica de Estndares
(BSI) la Organizacin Internacional de Estndares (ISO) y el Instituto de Ingenieros
Elctricos y Electrnicos (IEEE). stos grupos tienen varios comits oficiales que
preparan y revisan estndares para diferentes lenguajes.
Los estndares pueden desarrollarse despus de ganar alguna experiencia con un lenguaje
en particular, como es el caso de Pascal, o antes de que un lenguaje sea diseado, como
ocurre con Ada. La estandarizacin temprana puede perpetuar caractersticas de diseo
deficientes no reconocidas, al tiempo que demora el fomento de dialectos incompatibles.
Lisp es quizs el lenguaje con la mayor longevidad no estandarizada. Lisp fue diseado e
implementado a principios de los aos sesenta, pero es solamente hasta ahora que se est
estandarizando a Common Lisp. Sin embargo, la parte estandarizada ser solamente un
pequeo ncleo, con diferentes implementadores libres de hacer cualquier extensin que
ellos deseen.

PROPIEDADES DE UN BUEN LENGUAJE SEGN JORGE CASTRO Y


OTROS
Aspectos de diseo

Claridad, simplicidad y unidad de conceptos. Un lenguaje de programacin ha


de suministrar al programador un conjunto de conceptos claros, simples y

unificados, de manera que puedan ser usados como primitivas para el diseo de
algoritmos con esta finalidad, es deseable tener un nmero pequeo de
conceptos distintos y que las reglas para combinarlos sean tan simples y
regulares como sea posible.
Sintaxis y semntica bien definidas. La necesidad de una sintaxis y una
semntica bien definidas es necesario ya que por una parte una definicin
sintctica formal nos puede asegurar la inambigedad y completitud del
lenguaje y, por otra, la definicin formal de la semntica obligar a que todas las
implementaciones de ste se comporten igual.
De la misma manera tambin es importante dar al lenguaje una sintaxis clara
que lo haga legible. La legibilidad tiene su contrapunto en la facilidad para
escribir programas, especialmente respecto a la rapidez, por eso, en ciertos
casos, puede ser deseable que el lenguaje sea crptico para incrementar la
rapidez en la escritura de los programas y, por tanto que pierda legibilidad.
Consistencia con las notaciones usuales. Es la propiedad de que las cosas
signifiquen lo que uno espera que signifiquen. Por ejemplo, que los smbolos de
operacin sean los usuales, las palabras claves tengan un uso relacionado con lo
que significan, o bien que si definimos constructores que ya aparecen en otros
lenguajes su significado no sea diferente.
Soporte para la abstraccin. Debido a que en muchos casos el conjunto de
operaciones y tipos de datos bsicos est muy lejos de lo que querramos a la
hora de resolver un problema, el lenguaje nos ha de dar mecanismos para poder
abstraer: poder crear tipos de datos nuevos y asociarles nuevas operaciones,
poder definir diferentes niveles dentro de un programa y tratarlos por separado,
etc.
Independencia de la mquina. La mquina sobre la que se trabaja no debe
condicionar la programacin. Esta propiedad est ligada a la portabilidad, es
decir, la capacidad de mover programas de una mquina a otra. Esto se
consideraba una faceta esencial para los lenguajes de alto nivel, pero en muchos
casos (especialmente en los lenguajes imperativos) no se ha cumplido.
Verificabilidad. En principio, se trata de que los programas sean verificables
formalmente. Esta propiedad, adems, garantiza una cierta legibilidad en los
programas.
Redundancia. Es una propiedad muy importante a la hora de detectar errores.
Un ejemplo de redundancia (repeticin de informacin) sera la definicin
explcita de variables, pues el solo hecho de usarlas ya nos dice que son
variables y tambin de qu tipo son. La redundancia puede permitir detectar
errores tipogrficos, por ejemplo, al escribir una variable, ya que el nombre que
hayamos escrito por error (si no es por casualidad) no estar definido. En

general, es muy importante que los errores se detecten cuanto antes mejor,
porque cuanto ms se tarde en detectarlos ms costoso ser corregirlos.
Ortogonalidad. Un lenguaje de programacin ha de tener slo un conjunto de
herramientas bsicas, comprensibles por separado y sin ningn tipo de iteracin
cuando se combinan. Esto quiere decir esencialmente que haya pocas
excepciones dentro del conjunto de cosa que podemos hace combinando los
diferentes elementos del lenguaje.
Aspectos de Implementacin.

Portabilidad. Para muchos proyectos, la portabilidad del programa resultantes es


un criterio muy importante, pues las computadoras donde se desarrollen los
programas no son normalmente los mismos que habrn de ejecutarlos
finalmente. Ya hemos visto que esta propiedad de las implementaciones de un
lenguaje depende directamente de dos aspectos del diseo: la independencia de
la mquina y la definicin formal de semntica.
Soporte Externo. La existencia de un entorno de trabajo apropiado puede hacer
que un lenguaje, en principio menos potente, sea ms fcil de usar que uno ms
potente que no tenga este soporte. Dentro de este entorno podemos incluir, por
ejemplo, programas para encontrar errores (debuggers) o editores especiales que
agilicen el proceso de creacin de programas.
Calidad del compilador o intrprete. Si se trata de un compilador incluye el
costo (en tiempo) de traduccin, como la calidad del cdigo generado. Segn el
tipo de objetivo que tengamos (si tenemos que compilar muy a menudo y
despus ejecutar muy poco, bien al revs), potenciaremos ms la eficiencia en
un sentido o en otro. Si el lenguaje es interpretado, entonces se refiere a la
eficiencia (en tiempo) de la interpretacin.
Bajo costo de mantenimiento. Muchos estudios han demostrado que la mayor
parte del costo que implica cualquier programa que use durante un cierto
perodo de tiempo (aos), no est en el costo inicial del diseo e
implementacin, sino en el mantenimiento que recibe una vez instalado. Este
mantenimiento incluye la reparacin de errores o las extensiones del programa
para responder a nuevas necesidades y es hecho, posiblemente, por
programadores que no son los que hicieron el programa inicialmente. Por lo
tanto, un lenguaje que permita la modificacin, reparacin, y extensin a lo
largo del tiempo de programas por parte de diferentes programadores, puede
reducir notablemente los costos.
Documentacin. Este punto slo hace referencia a la necesidad de disponer de
una buena documentacin sobre el lenguaje. Esta documentacin se compondr
de diversos manuales: de la implementacin del lenguaje, de los complementos
del entorno, etc.

CRITERIOS DE EVALUACIN SEGN TERRENCE PRATT


Claridad, sencillez y unidad de los conceptos del Lenguaje. Un lenguaje de

programacin proporciona a la vez un marco conceptual para pensar acerca de los


algoritmos y un medio de expresar esos algoritmos. El lenguaje debe constituir una
ayuda para el programador mucho antes de la etapa misma de codificacin. Debe
proveer un conjunto claro, sencillo y unificado de conceptos que se puedan usar
como primitivas en el desarrollo de algoritmos. Para ello es deseable contar con un
nmero mnimo de conceptos que se puedan usar como primitivas en el desarrollo
de algoritmos. Para ello es deseable contar con un nmero mnimo de conceptos
distintos cuyas reglas de combinacin sean tan sencillas y regulares como sea
posible. Llamamos a este atributo Integridad Conceptual. Esta claridad de semntica
y de conceptos es el factor determinante del valor de un lenguaje
Claridad en la sintaxis del programa. La sintaxis de un lenguaje afecta la

facilidad con la que un programa puede escribirse, probarse y ms tarde entenderse


y modificarse. La facilidad de lectura (legibilidad) de un programa en un lenguaje es
una consecuencia central aqu. Una sintaxis que sea particularmente breve o
enigmtica con frecuencia hace que un programa sea fcil de escribir (por el
programador con experiencia), pero difcil de leer cuando el programa debe
modificarse posteriormente. Los programas APL a veces resultan tan enigmticos
que sus propios diseadores no pueden descifrarlos con facilidad unos meses
despus de que los terminaron. Muchos lenguajes contienen construcciones
sintcticas que fomentan la dificultad de lectura, produciendo dos instrucciones casi
idnticas que significan realmente dos cosas distintas. Por ejemplo la presencia de
un solo carcter blanco en un proposicin Snobol4 puede alterar completamente su
significado. Un lenguaje debe tener la propiedad de que las construcciones que
tienen un significado diferente tambin tengan un aspecto diferente: por ejemplo, las
diferencias semnticas deben reflejarse en la sintaxis del lenguaje.
Para el programador no basta que una sintaxis no sea engaosa o propensa a errores sino
que adems debe ser una sintaxis que usada adecuadamente permita que las estructuras
lgicas sealadas en el algoritmo. En el enfoque de programacin conocido como
programacin estructurada, los lenguajes se disean jerrquicamente de arriba hacia abajo
(del programa principal a los subprogramas de niveles ms bajos), usando slo un conjunto
restringido de estructuras de control en cada nivel - secuencias de instrucciones simples,
iteraciones y ciertos tipos de ramificacin condicional. Cuando se hace en forma adecuada,
las estructuras algortmicas resultantes son fciles de entender, depurar y modificar. En
forma ideal debera ser posible traducir tal programa directamente a instrucciones de
programacin adecuadas que reflejaran la estructura del algoritmo. Con frecuencia la
sintaxis del lenguaje no permite tal codificacin directa. Por ejemplo, Fortran se basa en
etiquetar las proposiciones e instrucciones goto como estructuras de control y proporciona
poca alternativas. Por eso la forma de un programa Fortran no se puede hacer de manera
ordinaria para reflejar con mucha claridad la estructura de control del algoritmo adyacente,
y gran parte del esfuerzo utilizado en el desarrollo de un algoritmo estructurado es posible
que se pierda en la traduccin al Fortran. Esto es parte de la controversia que provoca el uso

del goto, lo cual se ver en la unidad de control de secuencias. uno de los argumentos
principales que favorecen a Pascal sobre Fortran en la enseanza de la programacin
introductoria, a pesar de que se este se utilizaba mucho, es que Pascal favorece al diseo
elegante de los programas.
Ortogonalidad. El trmino ortogonalidad se refiere al atributo de ser capaz de

combinar varias caractersticas de un lenguaje en todas las combinaciones posibles,


de manera que todas ellas tengan un significado. Por ejemplo, supngase que un
lenguaje dispone de una expresin que puede producir un valor, y tambin dispone
de un enunciado condicional que evala una expresin para obtener un valor falso o
verdadero. Estas dos caractersticas del lenguaje, la expresin y el enunciado
condicional son ortogonales si se puede usar y evaluar cualquier expresin dentro
del enunciado condicional.
Cuando las caractersticas de un lenguaje son ortogonales, entonces es ms fcil de
aprender y de escribir los programas porque hay menos excepciones y casos especiales que
recordar. El aspecto negativo de la ortogonalidad es que un programa suele compilar sin
errores a pesar de contener una combinacin de caractersticas que son lgicamente
incoherentes o cuya ejecucin es en un extremo ineficiente. A causa de estas cualidades en
oposicin, la ortogonalidad como atributo de un diseo de lenguaje es todava motivo de
controversia, pues a ciertas personas le s gusta y a otras no.
Naturalidad para la aplicacin. El lenguaje debe proporcionar estructuras de

datos adecuadas, operaciones, estructuras de control y una sintaxis natural para


resolver un problema. Una de las razones principales de la proliferacin de
lenguajes es justamente esta necesidad de naturalidad. Un lenguaje ajustado
particularmente a cierta clase de aplicaciones puede simplificar mucho la creacin
de est rea. Es importante mencionar que los algoritmos secuenciales, algoritmos
concurrentes, algoritmos lgicos, etc. Todos ellos tienen estructuras naturales
diferentes que estn representadas por programas en esos lenguajes.
Cobol, para aplicaciones en negocios incluyendo el manejo de archivos; Snobol4, para
procesamiento de cadenas; Prolog con su predisposicin hacia propiedades deductivas y
c++ para diseo orientado a objetos son lenguajes con una inclinacin obvia a clases
particulares de aplicaciones.
Apoyo para la abstraccin. Aun con el lenguaje ms natural para una aplicacin,

hay una brecha sustancial de las estructuras de datos abstractos y las operaciones
que caracterizan la solucin de un problema con las estructuras de datos
particulares de datos primarios y operaciones construidas en un lenguaje. Por
ejemplo, Pascal puede ser un lenguaje apropiado para construir un programa que
haga el horario de clases de una universidad pero las estructuras de datos abstractos
de estudiante, clase, instructor, saln de lectura y las operaciones abstractas
de asignar un estudiante a una clase, planear una clase en un saln de lectura,
etc., que son naturales de la aplicacin no son proporcionadas directamente por
Pascal. Una parte substancial de la tarea del programador es disear las
abstracciones usando las caractersticas ms primitivas proporcionadas por el

lenguaje de programacin real. El lenguaje debe ayudar sustancialmente o impedir


la expresin de estas abstracciones. En teora debe permitir que las estructuras de
datos, tipos de datos y operaciones definan y mantengan como abstracciones
contenidas por s mismas, para que el programador pueda emplearlos en otras partes
del programa conociendo slo sus propiedades de abstraccin sin importar los
detalles de su implementacin. Casi todos los lenguajes proporcionan mecanismos
de subprogramas para definir las operaciones de abstraccin, pero la mayora son
muy dbiles en su soporte de otros tipos de abstraccin a excepcin de los lenguajes
de Ada y C++.
Facilidad para verificar programas. La confiabilidad de programas escritos en un

lenguaje es casi siempre una preocupacin central. Existen muchas tcnicas para
verificar que un programa ejecuta correctamente la funcin requerida. Se puede
probar que un programa es correcto a travs de un mtodo formal de verificacin, se
puede probar informalmente que es correcto por la verificacin de escritorio, es
decir, verificar visualmente el texto del programa; se puede poner a prueba
ejecutndose con los datos de entrada de prueba y comparando los resultados de
salida con las especificaciones, etc. Para programas grandes se suele emplear la
combinacin de algunos de estos mtodos. El uso de un programa que dificulta la
verificacin de programas puede ser ms problemtico que el de uno que apoya y
simplifica la verificacin no obstante que el primero pueda proporcionar muchas
capacidades que superficialmente parecen hacer ms fcil la programacin. La
sencillez de la estructura semntica y sintctica es un aspecto primordial que tiende
a simplificar la verificacin de programas.
Entorno de programacin. La estructura tcnica de un lenguaje de programacin

es slo uno de los aspectos que afectas su utilidad. La presencia de un entorno de


programacin adecuado puede facilitar el trabajo con un lenguaje tcnicamente
dbil en comparacin con un lenguaje ms fuerte con apoyo externo. Se podra
incluir una larga lista de factores como parte del entorno de programacin. La
disponibilidad de una implementacin confiable, eficiente y bien documentada del
lenguaje debe encabezar la lista. Los editores especiales y paquetes de prueba
hechos a la medida para el lenguaje pueden acelerar mucho la creacin y puesta a
prueba de los programas. Los recursos para el mantenimiento y modificacin de
mltiples versiones de un programa puede simplificar mucho el trabajo con
programas grandes. Uno de los lenguajes que ofrece un entorno de programacin
compuesto es el Smalltalk
Portabilidad de Programas. Un criterio importante para muchos proyectos de

programacin es el de la portabilidad de los programas resultantes de la


computadora en la cual se desarrollaron para otros sistemas de computadoras. Un
lenguaje que est ampliamente disponible y cuya definicin es independiente de las
caractersticas de una mquina en particular constituye una base til para la
produccin de programas transportables. Ada, Fortran, C y Pascal tienen todos ellos
definiciones estandarizadas que permiten la implementacin de aplicaciones
transportables. Otros, como Ml, provienen de una implementacin de fuente nica

que permite al diseador de lenguajes cierto control sobre las caractersticas


transportables del lenguaje.
Costo de uso. Es indudable que el costo es un elemento importante en la evaluacin

de cualquier lenguaje de programacin, pero son factibles diferentes medidas del


mismo.
Costo de ejecucin de los programas. En los primeros das de la computacin,
las cuestiones de costo se referan casi exclusivamente a la ejecucin de los
programas. Era importante el diseo de compiladores que optimizaran la
asignacin eficiente de registros y el diseo de mecanismos eficientes de apoyo
al tiempo de ejecucin. El costo de ejecucin del programa, aunque siempre ha
tenido cierta importancia en el diseo del lenguaje es de importancia primordial
para grandes programas de produccin que se van a ejecutar con frecuencia. En
la actualidad, sin embargo, para muchas aplicaciones la velocidad de ejecucin
no es la preocupacin mayor. Con mquinas de escritorio que trabajan a varios
millones de instrucciones por segundo y que estn ociosas la mayor parte del
tiempo, se puede tolerar el incremento de un 10 o 20% del tiempo de ejecucin
si ello significa un mejor diagnstico o un control ms fcil por parte del usuario
sobre el desarrollo y mantenimiento del programa.
Costo de traduccin de programas. Cuando un lenguaje como Fortran o C se
utiliza en la enseanza, la cuestin de traduccin eficiente, ms que la ejecucin
eficiente, puede ser de importancia capital. Tpicamente los programas
estudiantiles se compilan muchas veces cuando se estn depurando pero se
ejecutan slo pocas veces. En casos as, es importante contar con un compilador
rpido y eficiente en vez de un compilador que produzca un cdigo optimizado.
Costo de creacin, prueba y uso de programas. Un tercer aspecto del costo de
un lenguaje de programacin queda ejemplificado por el lenguajes Smalltalk.
Para una cierta clase de problemas se puede disear, codificar, probar, modificar
y usar una solucin con una inversin mnima en tiempo y energa del
programador. Smalltalk es econmico en cuanto a que se minimizan el tiempo y
el esfuerzo totales que se invierten en la solucin de un problema en la
computadora. La preocupacin por esta clase de costo de conjunto en el uso de
un lenguaje se ha vuelto tan importante en muchos casos como la inquietud por
la ejecucin y compilacin eficiente de los programas.
Costo de mantenimiento de programas. Muchos estudios han demostrado que el
costo ms grande que interviene en cualquier programa que se utiliza a lo largo
de un perodo de aos no es el costo del diseo, codificacin y prueba inicial del
programa, sino los costos totales del ciclo vital, que incluye los costos de
desarrollo y el costo de mantenimiento del programa en tanto contina en uso
productivo. El mantenimiento incluye la reparacin de errores, los que se
descubren despus de que se comienza a usar el programa, cambios que requiere
el programa cuando se actualiza el hardware subyacente o el sistema operativo,
y extensiones y mejoras al programa que se requieren para satisfacer nuevas

necesidades. Un lenguaje que facilita la modificacin, reparacin y extensin


frecuente del programa por parte de diferentes programadores durante un
perodo de varios aos puede ser a la larga, mucho menos costoso que usar
cualquier otro.

FUNDAMENTOS DE LOS
LENGUAJES SEGN ROGER S.
PRESSMAN.
Tipos de datos y tipificacin. Hoy en da, el

mrito de un lenguaje de programacin moderno


se juzga por algo ms que sintaxis y la amplitud
de construcciones procedimentales. La
tipificacin de datos y los tipos de datos
especficos soportados por un lenguaje de
programacin son un aspecto importante en la calidad del lenguaje. Un objeto de
datos hereda un conjunto de atributos fundamentales del tipo de datos al que
pertenece. Un objeto de datos puede tomar un valor que se encuentre dentro del
rango de valores legtimos del tipo de datos y puede ser manipulado por operaciones
que se apliquen a ese tipo de datos
Los tipos de datos simples abarcan un amplio rango que incluye los tipos numricos, tipos
enumerados, tipos lgicos y tipos de cadena. Los tipos de datos ms complejos engloban
estructuras de datos engloban estructuras que van desde los array simples unidimensionales
hasta las estructuras de listas y los complejos y heterogneos arrays y registros.
Las operaciones que se pueden realizar sobre un tipo de datos particular y la forma en que
se pueden manipular distintos tipos en una misma sentencia se controlan por la
comprobacin de tipos incorporada en el intrprete o compilador del lenguaje de
programacin. Fairley define cinco niveles de comprobacin de tipos que se encuentran
normalmente en los lenguajes de programacin.
Nivel 0: sin tipos. Los lenguajes de programacin sin tipos no incluyen medios
explcitos para la tipificacin de datos y, por lo tanto, no conllevan ninguna
comprobacin de tipos. Los lenguajes ANSI estndar de algunos como Basic,
Apl, Lisp, e incluso Cobol entran dentro de esta categora. Aunque cada
lenguaje permite al usuario definir las estructuras de datos, la representacin de
los datos contenida en cada objeto de datos esta predefinida.
Nivel 1: coercin automtica de tipos es un mecanismo de comprobacin de
tipos que permite al programador mezclar diferentes tipos incompatibles,
permitiendo as que se den las operaciones requeridas. Por ejemplo Pl/1 asigna
un valor numrico de 0 al valor lgico false (falso) y un valor numrico de 1 al
valor lgico true (verdadero). As, las operaciones aritmticas, aplicadas
normalmente a tipos de datos numricos, se pueden aplicar a tipos de datos
lgicos en Pl/1.

Nivel 2: modo mixto conversin de tipos es similar en muchos aspectos a la


coercin automtica de tipos. Para que se pueda dar una determinada operacin,
diferentes tipos de datos dentro de una misma categora de tipos, se convierten a
un nico tipo destino. La aritmtica de modo mixto de Fortran permite que se
usen nmeros enteros y reales en una misma secuencia de lenguajes de
programacin.
Nivel 3: comprobacin de tipos pseudorrgida tiene todas las caractersticas de
la fuerte comprobacin de tipos, pero que se implementan de forma que existan
una o ms vas escapes. Por ejemplo aunque Pascal, comprueba la
compatibilidad de interfaces dentro de un mismo programa compilado, no lo
hace para procedimientos compilados por separado un escape en la aplicacin
de la fuerte comprobacin de datos.
Nivel 4: fuerte comprobacin de tipos se da en lenguajes de programacin que
slo permiten llevar a cabo operaciones entre objetos de datos que sean del
mismo tipo de datos previamente especificado. La comprobacin de tipos se
lleva a cabo sobre los operadores, los operandos y las interfaces de los
subprogramas, tanto en tiempo de compilacin como en tiempo de carga y en
tiempo de ejecucin. Los compiladores de Ada llevan a cabo una fuerte
comprobacin de tipos.
Subprogramas. Un subprograma es un componente de un programa compilado por

separado que contiene datos y estructuras de control. Generalmente se le menciona


con el nombre de mdulo como una manifestacin genrica del subprograma.
Dependiendo del lenguaje de programacin, un subprograma se puede denominar
subrutina, procedimiento, funcin u otro nombre especializado. Sin tener en cuenta
cual sea el nombre, el subprograma tiene un conjunto de caractersticas genricas
Una seccin de especificacin que incluye su nombre y la descripcin de la
interfaz.
Una seccin de implementacin que incluye los datos y las estructuras de
control
Un mecanismo de activacin que permite que el subprograma sea requerido
desde cualquier punto del programa.
En los lenguajes de programacin convencionales, cada subprograma es una entidad en s
misma, operando sobre los datos en la forma que dictan las estructuras de control de un
programa mayor. En lenguajes de programacin orientados a objetos, el punto de vista
clsico del subprograma es reemplazado por el de objeto.
Estructuras de Control. Es un nivel fundamental, todos los lenguajes de

programacin modernos permiten al programador representar secuencias,


condiciones y repetidores las construcciones lgicas de la programacin
estructurada. La mayora de los lenguajes de programacin modernos proporcionan

una sintaxis para la especificacin directa del if then else, del do while y del
repeat until (as como el case). Otros lenguajes, como Lisp y Apl, requieren que el
programador emule esas construcciones dentro de los lmites de sintaxis del
lenguaje.
Adems de las construcciones prodecimentales bsicas de la programacin estructurada,
puede haber otras estructuras de control. La recursividad crea una segunda activacin de un
subprograma durante la primera activacin. O sea, el subprograma se llama a s mismo
como parte del procedimiento definido, la concurrencia da soporte a la creacin de
mltiples tareas, a la sincronizacin de tareas y a la comunicacin de tareas en general esta
caracterstica del lenguaje es de mucho valor cuando se llevan a cabo aplicaciones de tipo
real. El manejo de excepciones es una caracterstica del lenguaje que atrapa los errores del
sistema o los definidos por el usuario, pasando el control a un manipulador de excepciones
para que los procese.
Soporte para el enfoque orientado a objetos. En teora, la creacin de objetos y la

construccin de software orientado a objetos se puede llevar utilizando cualquier


lenguaje de programacin convencional (por ejemplo, C o PASCAL). Pero en la
prctica, el soporte para mtodos orientados a los objetos debe estar incorporado
directamente en el lenguaje de programacin que se vaya a utilizar para
implementar un diseo orientado a objetos
Un lenguaje de programacin orientado a objetos debe proporcionar un soporte directo para
la definicin de clases la herencia, la encapsulacin y el paso de mensajes. Adems de estas
construcciones orientadas a los objetos, muchos de estos lenguajes implementan
caractersticas adicionales, como herencia mltiple y polimorfismo (diferentes objetos que
pueden recibir mensajes con el mismo nombre).
La definicin de clases es fundamental en un enfoque orientado a los objetos. Un lenguaje
de programacin orientado a los objetos define un nombre de clase y especfica los
componentes privados y pblicos de la clase. Para ilustrar la forma general de las
construcciones orientadas a los objetos vamos a utilizar C++. Se puede definir una clase,
denominada contador, de la siguiente forma:
class contador
{
private :
unsigned int valor;
public :
contador ( );

void incrementar ( );
void decrementar ( );
unsigned int acceder_valor ( );
};
A partir de la definicin bsica de la clase se puede obtener una nueva clase, de la siguiente
manera:
class contador_especial: public contador
{
una copia de todos los datos privados de contador
private :
Datos privados de contador_especial;

};
Los objetos derivados de la clase contador_especial pueden utilizar todos los mtodos
definidos para la clase madre contador. La definicin de una clase encapsula las
abstracciones de los datos y los componentes del programa (mtodos) que operan sobre
dichos datos. En C++, los mensajes se envan a los objetos (la instanciacin de una clase)
de la siguiente forma:
Nombre_objeto.mensaje (argumentos);
Donde nombre_objeto identifica el objeto y mensaje (argumentos) describe el mensaje a
enviar.
Los detalles de implementacin y la terminologa para las definiciones de clases, herencia,
encapsulacin y paso de mensajes puede variar dependiendo del lenguaje. Por ejemplo, el
lenguaje de programacin Smalltalk define una clase de la siguiente manera
Definicin: identifica a la clase.
Datos privados: atributos cuyos valores son privados de las instancias
individuales de la clase.
Datos compartidos: atributos cuyos valores son compartidos por todas las
instancias de la clase.
Diccionarios: atributos cuyos valores son compartidos por mltiples clases.

Mtodos de instancia: los procedimientos que implementan mensajes que se


pueden enviar a las instancias de la clase.
Mtodos de clase: los procedimientos que implementan mensajes que se pueden
enviar a la propia clase (por ejemplo: inicializacin de los datos compartidos)
Aunque estos trminos difieren ligeramente de los usados en la definicin de C++, el
concepto fundamental de clase permanece igual. De forma parecida, la herencia, la
encapsulacin y el paso de mensajes, se implementan con una sintaxis diferente, pero con
los mismos fundamentos semnticos. Cualquier construccin est disponible en cualquier
lenguaje que verdaderamente sea orientado a objetos.

CARACTERSTICAS DE UN BUEN LENGUAJE SEGN ALLEN B.


TUCKER
Expresividad. La habilidad de un lenguaje para reflejar claramente el significado

deseado por el diseador del algoritmo, por lo que, permite que una declaracin se
establezca compactamente y refuerce el uso de sentencias asociadas con la
programacin estructurada
Bien definido. Que la sintaxis y semntica del lenguaje no contengan

ambigedades, son internamente consistentes y completas. Entonces el


implementador de un lenguaje bien definido debe tener dentro de su definicin una
especificacin completa de todas las formas expresivas del lenguaje y sus
significados. El programador, por la misma virtud, debe poder predecir exactamente
el comportamiento de cada expresin antes de que realmente se ejecute. Por lo
tanto, los lenguajes bien definidos aumentan la transportabilidad y la prueba.
Tipos y Estructuras de Datos. La habilidad de un lenguaje para soportar una gran

variedad de valores de datos y colecciones no elementales de stos. Los ltimos


incluyen principalmente a los arrays y registros, pero no excluye a las estructura de
datos dinmicas, tales como listas, colas, pilas y rboles.
Modularidad. Esta caractersticas tiene dos aspectos:

El soporte del lenguaje para la subprogramacin, es decir, la habilidad de


definir procedimientos y funciones independientes y comunicarlos va
parmetros o variables globales con el programa llamador.
La extensibilidad del lenguaje en el sentido de permitir operadores y tipos de
datos definidos por el programador
Facilidades de Entrada Salida. En las Entradas y Salidas de un lenguaje,

nosotros estamos examinando cmo soporta los archivos de acceso secuencial,


indexado y directos, as como las funciones sobre base de datos y de recuperacin
de Informacin. Los archivos de datos generalmente residen sobre el
almacenamiento secundario. Un archivo es normalmente demasiado grande para

que todos sus registros quepan en la memoria, al mismo tiempo y, por lo tanto se les
aplican diferentes estrategias de programacin.
Transportabilidad. Es cuando el lenguaje que est implementado en distintas

computadoras. Esto es, su diseo es relativamente independiente de la mquina. Los


Estndares de los lenguajes generalmente son ms transportables.
Eficiencia. Permite la ejecucin y traduccin rpida sobre las mquinas en dnde

est implementado.
Pedagoga. La facilidad de ensear y aprender, existencia de mejores libros de

texto, estn implementados en un entorno de desarrollo de programas mejor; son


ampliamente conocidos y usados por los mejores programadores en el rea de
aplicacin.
Generalidad. Que el lenguaje sea til en un amplio rango de aplicaciones de

programacin.

CRITERIOS DE EVALUACIN DE LOS LENGUAJES SEGN ROBERT


SEBESTA
Legibilidad. Uno de los ms importantes criterios para juzgar a un lenguaje de

programacin es la facilidad con la cual los programas pueden ser ledos o


entendidos. Antes de 1970, el desarrollo de software fue intentado largamente en los
trminos del cdigo de escritura. En la dcada de 1970, sin embargo el ciclo de
vida de los conceptos de software fue desarrollado; la codificacin fue relegada a
una representacin en un papel ms pequeo y el mantenimiento fue reorganizado
como gran parte del ciclo, esto en los trminos de costo. Porque la facilidad de
mantenimiento es determinada en gran parte por la legibilidad de los programas, la
legibilidad es un punto muy importante en de la calidad de programas y los
lenguajes de programacin.
Sencillez. Dentro de las caractersticas que contribuye a la legibilidad de un
lenguaje de programacin es la sencillez, la cual puede afectar fuertemente a la
legibilidad. Un lenguaje que tiene un gran nmero de componentes elementales
es ms difcil de aprender que uno que contenga un nmero pequeo. Los
programadores que utilizan los lenguajes de programacin tienen la tendencia de
aprender una parte de los mismos sin embargo ignoran otras caractersticas de
ellos. Esta razn muchas veces es utilizada como pretexto, cuando el lenguaje
tiene un gran nmero de componentes o elementos, pero este argumento no es
vlido. Los problemas de legibilidad ocurren cuando el programador aprende de
una forma diferente una aplicacin, con la cual el analista este familiarizado.
Teniendo tambin muchas caractersticas no es solamente el detrimento de la simplicidad
del lenguaje Otro problema es la multiplicidad de caractersticas, es decir, tener ms de una

forma determinada para realizar una operacin en particular. Por ejemplo, en el lenguaje C
se puede incrementar una simple variable entera de cuatro diferentes maneras:
Contador = contador + 1
Contador =+ 1
++ contador
contador ++
Aunque la ltima sentencia tiene una pequea diferencia semntica en comparacin con las
otros en algunos usos, las cuatro tiene el mismo significado cuando son usadas como
expresiones estando solas.
Un tercer problema potencial es el operador sobrecargado, en el cual un simple smbolo
operador tiene ms de un significado. Aunque esto es una caracterstica til, puede reducir
la legibilidad al leer si los usuarios estn permitiendo ellos mismos la generacin de
sobrecarga y ellos no lo hacen evidentemente. Por ejemplo, es claramente aceptada la
sobrecarga del signo + para usarlo en la suma tanto de enteros como de reales o punto
flotantes. En efecto esta sobrecarga simplifica un lenguaje porque reduce el nmero de
operadores. Sin embargo, supuestamente, la definicin del programador del signo + usado
entre arreglo de dimensin simple puede significar la suma de todos los elementos de
ambos arreglos. Porque el significado usual de la adicin de vectores es completamente
diferente de esto, puede hacer ms confuso el programa para ambos, el autor y los lectores.
Un nivel de ejemplo ms extremo de la confusin de programa puede ser un usuario
definiendo el signo + usado entre dos vectores para significar la diferencia entre los
primeros elementos de los mismos.
Las sentencias del lenguaje pueden ser tambin muy simples. Por ejemplo la sintaxis y el
significado de las sentencias del lenguaje ensamblador son un modelo de simplicidad. Es
muy simple, sin embargo hacer programas en lenguaje ensamblador es poco legible. Porque
ellos carecen por completo de sentencias de control, su estructura es ms sutil, porque sus
sentencias son ms simples, para realizar mejor esto se requiere un lenguaje equivalente de
alto nivel
Ortogonalidad. Ortogonalidad en un lenguaje de programacin significa que
hay una pequea relacin entre un conjunto de construcciones primitivas que
pueden ser combinados en un numero relativamente pequeo de manera que se
pueden construir las estructuras de control y de datos en el lenguaje. Adems,
cada combinacin posible de primitivas es legal y significativa as, la
ortogonalidad sigue de una simetra de lazos entre primitivos, mientras un
concepto del uso de ortogonalidad en el diseo puede ser ilustrado comparando
un aspecto de los lenguajes ensamblador de los ordenadores centrales de la IBM
y de la serie de VAX de superminicomputadoras. Nosotros consideraremos
solamente una sola situacin simple, la de agregar dos valores numricos de 32bit que residen o en memoria o en un registro y substituir uno de los dos valores

con suma para este propsito, la unidad IBM tiene dos instruccin que tienen la
siguiente forma:
A Reg1, memory_cell.
R

Reg1, Reg2

Donde Reg1 y Reg2 representan registros. La semntica de ellos es


Reg1 contenido(reg1) + contenido (memory_cell)
Reg1 contenido(reg1) + contenido(reg2)
La instruccin de adicin VAX para valores enteros de 32 bits es
ADDL operando1, operando2
La semntica de la misma es:
Operando2 contenido(operando1) + contenido(operando2)
En este caso, cualquier operando puede ser uno colocado en una celda de memoria con una
instruccin.
El diseo de VAX tiene ortogonalidad por que aqu con una sola instruccin se puede
utilizar para colocar, en la celda memoria, un operando. Hay dos maneras de especificar el
operando, que puede ser la combinacin en cualquier manera concebible. El diseo IBM
disear no es ortogonal. Solamente dos combinaciones de operaciones son legales fuera de
las cuatro posibilidad, y se requiere dos diferente instrucciones, A y AR. El diseo IBM es
ser ms estricto y por lo tanto menos fcil de escribir, por ejemplo, usted no puede agregar
un valor y colocarle el valor en una localizacin de memoria. Adems, el diseo de IBM es
ms difcil de aprender debido a las restricciones y adiciones de la instruccin.
La ortogonalidad se relaciona de cerca con la simplicidad: cuanto ms ortogonal es el
diseo de un lenguaje, menos son las excepciones que se requieren de las reglas del
lenguaje. Pocas excepciones significan un grado ms alto de regularidad en el diseo, que
hace que el lenguaje sea ms fcil de aprender, leer y entender. Cualquiera que ha
aprendido una parte significativa del lenguaje ingls puede atestiguar la dificultad de la
multiplicidad de aprender las excepciones de una regla (por ejemplo, i antes de e excepto
despus c).
Sin embargo Pascal es un moderno lenguaje relativo, su diseo fue un largo
nmero de tipos de reglas inconsistentes para ser seguidas. Los procedimientos
pueden tener a los dos tipos de parmetros var y value, a menos que el
procedimiento mismo lo pase como un parmetro. La funcin puede retornar
solamente tipos no estructurados. Un parmetro de tipo formal para ser
llamado; ello no puede ser completado con la descripcin de tipos. Los

archivos no pueden ser pasados por valor. La lista de regla en y en. En otras
palabras los tipos de reglas de Pascal no son ortogonales.
Demasiado ortogonalidad tambin puede causar problemas. Quizs el lenguaje de
programacin ms ortogonal es ALGOL 68. Cada construccin del lenguaje en ALGOL 68
tiene un tipo, y no hay restricciones en esos tipos. Adems, la mayora de las
construcciones producen valores. Esta libertad de combinaciones permite construcciones
extremadamente complejas. Por ejemplo, los smbolos condicionales pueden aparecer como
los izquierdos en las asignaciones, junto con la declaracin y otras declaraciones
clasificadas, mientras el resultado es una localizacin. Esta forma extrema de ortogonalidad
conduce a una innecesaria complejidad. Adems, porque los lenguajes requieren una gran
cantidad de primitivas, un alto grado de ortogonalidad da lugar a una explosin de la
combinacin. Tan incluso si las combinaciones son simples, sus nmeros escarpados
conducen a la complejidad. La simplicidad en un lenguaje, por lo tanto, es por lo menos en
parte un resultado de una combinacin de un nmero relativamente pequeo de
construcciones primitivas y del uso limitado del concepto del ortogonalidad.
Algunos creen que los lenguajes funcionales ofrecen una buena combinacin de la
simplicidad y de ortogonalidad. Un lenguaje funcional es aqul que: sus operaciones son
hechas aplicando funciones a parmetros dados. En contraste, los lenguajes imperativos,
tales como C y PASCAL, las operaciones se especifican sobre todo con variables y
declaraciones de asignacin. El Lisp es actualmente el lenguaje ms extensamente usado
que utiliza la programacin funcional. El Lisp no es un lenguaje funcional puro, porque
tambin contiene algunas caractersticas de lenguaje imperativo. Los lenguajes funcionales
ofrecen potencialmente la simplicidad total ms grande porque pueden lograr todo con una
sola construccin, la llamada de la funcin, que, se puede combinar con otras llamadas de
funciones de manera simple. Esta elegancia simple es la razn por la que atraen al
investigador de muchos lenguajes a los lenguajes funcionales, como alternativa primaria a
los lenguajes no funcionales complejos, tales como Ada y PL1
Sentencias de Control. La programacin estructurada revoluciona en la dcada
de 1970 fue un reaccin para la pobre legibilidad causada por la limitadas
estructuras de control de algunos lenguajes surgidos en la dcadas de 1950 y
1960. Particularmente, se reconoci ampliamente que el uso indiscriminado de
las declaraciones del goto reduce seriamente la legibilidad del programa. Los
programas que se pueden leer de arriba hacia abajo (top down) son mucho ms
fciles de entender que los programas que requieren saltar visualmente la lectura
del programa a partir de una declaracin a otra declaracin no adyacente para
seguir el orden de la ejecucin. Sin embargo, en cierto lenguaje, los gotos que
ramifican hacia arriba son a veces necesarios; por ejemplo, se requieren para
construir los ciclos MIENTRAS QUE en FORTRAN 77. Sin embargo, las
siguientes restricciones del goto puede hacer que los programas sean menos
legibles:
1. Deben preceder sus tarjetas, exceptan cuando estn utilizados en los ciclos
2. Que sus tarjetas deben nunca ser demasiado distantes.

3. El nmero de gotos debe ser limitado


Las versiones de Basic y de FORTRAN que estaban disponible en los aos 70 le faltaban el
control de sentencias que permitan fuertes restricciones en el uso de gotos, as que los
programas eran altamente legibles pero la escritura en esos lenguajes era difcil. La
mayora de los lenguajes de programacin se disearon desde los ltimos aos de la dcada
de 1960, sin embargo, han incluido suficientes sentencias de control que se necesitaban
para eliminar en las declaraciones el uso de goto. As, el diseo de las sentencias de control
en un lenguaje puede ser un factor importante para la legibilidad de los programas escritos
en ese lenguaje.
Estructura de Datos. La presencia de facilidades adecuada para la definicin de
estructuras de datos en un lenguaje es otra caracterstica significativa de la
legibilidad. Por ejemplo, se supone que un tipo de dato entero es usado para una
bandera indicadora porque no hay tipos de datos boleanos en los lenguajes. En
tal lenguaje, nosotros podemos tener una sentencia semejante a la siguiente:
Suma_es_muy_grande 1
Mientras este significado no es muy claro, entonces en un lenguaje que incluye los tipos
booleanos nosotros podemos tener la sentencia:
Suma_es_muy_grande true
Entonces este significado es perfectamente claro, de manera similar, los tipos de datos
registro proveen un mtodo para representar como se emplean los registros que es ms
legible que usar una coleccin de arreglos: un arreglo para cada tem de dato en un registro
empleado, el cual es mas usado en los lenguajes que no tiene el tipo registro

Diseo de sintaxis. La sintaxis o forma de los elementos de un idioma tiene un


efecto significante en la legibilidad de los programas. Lo siguientes son tres
ejemplos de diseo sintctico de opciones que afectan la legibilidad

Forma de los identificadores. Los identificadores restringidos a longitudes


muy cortas disminuyen la legibilidad, si los identificadores pueden tener seis
caracteres a lo sumo, como en FORTRAN 77, no es a menudo posible usar
nombres connotativos para las variables. Un extrem ms es el ejemplo del
Instituto Nacional Estndar Americano original (ANSI) (BASIC) (ANSI
197b) en que un identificador pudiera consistir de una sola carta seguida de
otra.

La posibilidad del carcter de conexin como lo raya baja de los identificadores es una gran
ayuda a la legibilidad SUMA_DE_CUADRADOS en ciertamente el que
SUMADECUADRADOS.

Se discuten otros problemas del plan acerca de las formas de identificadores en el captulo
4.

Las palabras especiales. La apariencia y la legibilidad del programa es


fuertemente influenciado por las formas de palabras especiales de un idioma
(por ejemplo begin, end, y for) especialmente importante en el mtodo de
formar declaraciones compuestas o grupos de las declaraciones
principalmente en estructuras del mundo. Varios idiomas usan emparejando
pares de palabras especiales o smbolos para formar grupos. Pascal requiere
begin, los pares del extremo a los grupos de las formas para todo el mando
de estructuras excepto repeat, declaraciones en las que ellas pueden omitirse
(otros ejemplos de la falta de Pascal es la ortografa). C usa abrazaderas
para el mismo propsito. Los dos de estos idiomas sufren porque siempre se
termina los grupos de las declaraciones de la misma manera, que hechuras si
es difcil determinar que grupos esta acabndose cuando un extremo
aparece.

FORTRAN 77 y ADA hacen a este el que despeja cuando una sintaxis del cierre distinta
para cada tipo de grupos de las declaraciones para los ejemplos, ADA usa un extremo si
para terminar una estructura de la seleccin y vuelta del extremo para una estructura de la
vuelta. Esto es y ejemplo de conflicto entre simplicidad que es el resultado de usar palabras
reservadas, como en Pascal, y la legibilidad mayor que los resultados de usar palabras
reservadas, como ADA.
Otro problema importante si se pueden usar las palabras especiales de un idioma como
nombres para las variables del programa. En ese caso, los programas resultantes pueden ser
muy confusos, por ejemplo en FORTRAN 77 la apariencia especial de estas palabras en un
programa puede o no encontrar algo especial.

Forma y significado. Declaraciones anteriores para que en su apariencia, por


lo menos parcialmente, indica que su propsito es una ayuda obvia a al
legibilidad. Semntica o significado debe seguir directamente de la sintaxis
o apariencia. En algunos casos, este principio es violado a travs de dos
idiomas por las estructuras que son similares en apariencia pero tienen
significados diferentes.

En FORTRAN 77, por ejemplo, hay dos declaraciones, el GOTO asignado y los GOTO
computados cuyas apariencias son muy similares pero cuyo los significados son diferentes,
aunque los dos son mltiples saltos alejados. Por ejemplo, las declaraciones
GO TO (10, 20, 30), I
GO TO I, (10, 20, 30)
Se usa bastante diferentemente. En el primero, la variable I es de tipo ENTERO; en el
segundo, etiqueta valores. Una de las quejas primarias sobre los rdenes de la cscara de

siempre haga pensar en su funcin. Por ejemplo, el comando grep de UNIX puede ser
descifrado a travs de conocimientos anteriores, o quizs la destreza y familiaridad con el
editor, ed de UNIX. Su apariencia no connota nada a los principiantes de UNIX. En ed
[comando/ expresin_reguladora] busca una subcadena igual a la expresin_reguladora.
Precediendo esto con hechuras de g, haciendo de esto un comando global que hace que el
archivo entero se revise hasta alcanzar la bsqueda. Siguiendo el comando con p se
especifica esa lnea con la subcadena equivalente para que se imprima. Para que el
g/expresin_reguladora/p, pueda abreviarse, por su puesto como grep, las impresiones de
todas las lneas en un archivo que contiene subcadena que son iguales a la
expresin_reguladora
Fcil Escritura. Escriturabilidad es que la medida de qu fcilmente un lenguaje

puede usarse para crear programas para un dominio del problema escogido. La
mayora de las caractersticas del lenguaje que tambin efectan legibilidad la
escriturabilidad de efecto. Esto sigue directamente del hecho que el proceso de
escritura un programa exige la frecuencia del programador de releer las porciones
del programa existente.
Rescriturabilidad debe ser considerado en el contexto del dominio del problema designado
de un lenguaje en el reino de una aplicacin particular y el otro no era. Por ejemplo, la
escriturabilidad de COBOL y APL es extremadamente diferente para crear un programa
para tratar con estructura de datos bidimensionales, por que de los dos APL es ideal. Sus
escriturabilidades tambin son bastante diferentes para la pizca de los informes producto
de los formatos complejos, para eso es la finalidad por lo que COBOL se dise.
Las subdivisiones siguientes describen los factores ms importantes que influyen en la
escriturabilidad de un lenguaje
Sencillez y Ortogonalidad. S un lenguaje, tiene una gran cantidad de diversas
construcciones, algunos programadores pueden no ser familiares con todos
ellos. Esto puede conducir a un uso errneo de algunas caractersticas y de un
desuso de otros que puedan ser ms elegantes o ms eficientes, o ambos, que los
que se utilicen. Esto puede ser posible, segn lo observado por Hoare, para
utilizar caractersticas desconocidas accidentalmente, cuando los resultados son
extraos.
Por lo tanto, un nmero pequeo de primitivas construcciones y del conjunto de las reglas
constante para combinarlas (esto es ortogonalidad) es mucho mejor que simplemente
teniendo una gran cantidad de nmeros primitivos. Un programador puede disear una
solucin para un problema complejo despus de aprender solamente un conjunto simple de
construcciones primitivas.
En la misma vena, demasiada ortogonalidad puede ser detrimento de la fcil escritura. Los
errores en programas de la escritura pueden ir desapercibidos cuando casi cualquier
combinacin de primitivos es legal. Esto puede conducir a las absurdidades en el cdigo
que puede no ser descubierto por el compilador.

Soporte para la abstraccin. Abreviadamente, medios de la abstraccin, la


capacidad de definir y despus de utilizar las estructuras complicadas de
operaciones de manera que muchos de los detalles. La abstraccin es un
concepto dominante en los lenguajes de programacin contemporneos. Esta es
reflexin del rol central que las abstracciones juegan en la designacin de las
metodologas de la programacin moderna. El grado de la abstraccin que
permite un lenguaje de programacin y la naturaleza de sus expresiones es muy
importante para su codificacin.
Un ejemplo simple de un proceso de abstraccin es el uso de un subprograma en la
implementacin de un algoritmo, que en ejecucin se requiera varias veces en un programa.
Saliendo del subprograma, el cdigo tendra que ser replegado en todos los lugares donde
sea necesario, que hara el programa mucho ms largo y ms aburrido para la escritura. Ms
importante, si el subprograma no fue utilizado, el cdigo del subprograma podra ser
eliminado del algoritmo y as evitar, el entorpecimiento del flujo del cdigo.
Como ejemplo de la abstraccin de los datos, considere un rbol binario que salve datos del
nmero entero en sus nodos. Un rbol binario sera puesto en ejecucin generalmente en
FORTRAN 77 en tres matrices paralelas del nmero entero, donde dos de los nmeros
enteros se utilizan como subndices para especificar nodos del descendiente. En PASCAL,
estos rboles pueden ser implementados usando una abstraccin de un nodo del rbol en la
forma de una unidad de registro simple con dos punteros y un nmero entero. Lo natural de
la ltima representacin hace mucho ms fcil escribir un programa de PASCAL que
utilice un rbol binario que para escribir uno en el FORTRAN. El dominio de la solucin
del problema del lenguaje est ms cercano al dominio del problema. La ayuda total para
la abstraccin es claramente un factor importante en la codificacin del lenguaje.
Expresividad. La expresividad en un lenguaje puede referirse a varas
caractersticas diferentes. En un lenguaje como APL, sus operaciones existentes
cuentan con poderosos operadores que permiten un problema grande de
computacin pueda realizarse con un pequeo programa. Generalmente los
medios que un lenguaje tiene son relativamente cmodos antes que incmodas
rutas de especificacin computacional.
Por ejemplo, en C, la expresin Contador++ es
ms cmoda y ms pequea que Contador =
Contador + 1. Tambin el operador boleano AND
THEN de Ada es un camino cmodo para
especificar la valoracin de expresiones booleanas
de corto circuito. La inclusin de la declaracin
FOR en Pascal hace ms fcil de escribir ciclos
que con el uso de WHILE. Todo esto ayuda a incrementar la facilidad de escritura en un
lenguaje de programacin.
Confiabilidad. Un programa es confiable si ejecuta sus especificaciones bajo todas

las condiciones. Aunque una meta deseable en los lenguajes de programacin es la


facilidad para permitir el diseo de programas confiables, pero no es completamente

claro que sta sea una caracterstica para la estimacin y comparacin entre los
lenguajes de programacin.
Legibilidad y Fcil Escritura. Ambos facilidad de escritura y la legibilidad
implica confiabilidad un programa escrito en un lenguaje que no soporta formas
naturales para expresar los algoritmos requeridos necesitara mtodos de uso
menos posible corregir en todas las situaciones. El programa ms fcil para
escribir, es el ms conveniente para corregir. Legibilidad da confiabilidad en
ambas fases del cielo de vida de mantenimiento y escritura. Los programas que
son difciles para leer tambin son difciles de escribir y modificar.
Verificacin de Tipos. La verificacin de tipos es probar la compatibilidad de
los tipos entre dos variables o una variable y una constante, es de algn modo la
relacin de uno con otro. Dos de las formas ms comunes de tales impedimentos
son los operadores de las operaciones aritmticas y el resultado de la operacin,
teniendo en cuenta ambas partes (izquierda y derecha) del signo de asignacin.
La verificacin de tipos es un factor importante en la confiabilidad del lenguaje.
Esto se debe a que la verificacin de tipos en el tiempo de ejecucin es bastante
cara, por lo que es ms deseable la verificacin de tipos en el momento de la
compilacin. Adems que permite de una manera ms fcil la deteccin de
errores, por lo que es menos costoso la reparacin de los mismos. En el diseo
de los lenguajes contemporneos, como el ADA, se requiere la verificacin de
tipos de casi todas la variable en tiempo de compilacin, salvo en el caso de que
el usuario utilice estados explcitos entonces la verificacin de tipos se
suspende. Esto elimina la posibilidad de errores en tiempo de ejecucin en los
programas realizados en ADA.
La manera de cmo fracasa la verificacin de tipos tanto en tiempo de compilacin como
en el de ejecucin, es manejado por los innumerables errores de los programas que
envuelven a los parmetros de los subprogramas en el lenguaje C. En este programa el tipo
de parmetros reales en una llamada a funcin no se verificaba para determinar si
correspondiente parmetro formal de la funcin era el mismo. Por ejemplo una variable de
tipo int puede ser usada como parmetro real en una llamada a una funcin que espera un
float en su parmetro formal, por lo que el compilador descubre el problema de la
inconsistencia en el tiempo de ejecucin, por lo que da como resultados una serie de
Problemas, recurso del cual es con frecuencia difcil de determinar (En respuesta a este
problema, el sistema UNIIX incluye un programa de utilidad llamado LINT que checa
programas en C para dichos problemas), Mtodos de parmetros paso y subprogramas
son discutidos en el captulo 8.
En General, el rango escrito de una variable de un arreglo es parte del tipo de chequeo.
Por eso el chequeo del rango escrito es parte del tipo de chequeo, aunque debe ser
realizado al momento de correrlo. Porque muchos tipos son checados en Pascal, los rangos
del algoritmo tambin son checados. El chequeo es extremadamente importante para la
confiabilidad del programa, debido aquel rango de salida de algoritmo con frecuencia causa
errores que no aparecen hasta mucho despus de las violaciones actuales.

Manejo de Excepciones. La habilidad de un programa para detectar errores al


momento del corrido, as como otras condiciones inusuales, para tomar medidas
correctas y para continuar es una gran ayuda de confiabilidad. Esta facilidad es
llamada Manejo de excepcin; El lenguaje Ada incluye capacidades extensas
para manejo de excepcin, pero las facilidades son prcticamente no existen en
muchos lenguajes usados como Pascal, C, y Fortran.

Restriccin de Alias. De manera holgada el alias quiere decir que se tienen dos
mtodos de referencia distintos, o dos nombres, para la misma celda de memoria.
Ahora es muy aceptado que el alias represente un peligro en un lenguaje de
programacin, lo anterior, porque a la mayora de los lenguajes de programacin
se les permite hacer algunos tipos de alias, por ejemplo: variables equivalentes
en Fortran y punteros en Pascal. En ambos casos, las dos variables de diferentes
subprogramas pueden significar la misma celda de memoria; algunos tipos de
restricciones de alias pueden ser prevenidos por la designa an del lenguaje.
En algunos lenguajes, el alias es usado para prevenir deficiencias en la facilidad
de abstraccin de datos del lenguaje. Otros lenguajes restringen extremadamente
el alias para incrementar su confiabilidad.
Costo. El costo total de los lenguajes de programacin es

una funcin de muchas de estas caractersticas. Los primeros


costos de entrenamiento y el costo de la escritura del
programa en un lenguaje puede reducirse significativamente
en un buen ambiente de programacin.
Entrenamiento del programador. Esta es una funcin de la simplicidad y
ortogonalidad del lenguaje, esto aproxima en propsito a una aplicacin en
particular, y a la experiencia de los programadores. Aunque el ms poderoso de
los lenguajes no necesita ser duro para leer, y ellos frecuentemente lo son.
Escritura del programa. Esta es una funcin de la fcil escritura de los
lenguajes. El esfuerzo original para disear e implementar un lenguaje de alto
nivel es manejado por el deseo para bajar el costo de creacin de software.
Compilacin. El tercero es el costo de compilacin de los programas en el
lenguaje. Un impedimento principal para el uso adelantado de Ada fue la
prohibicin de los altos costos de ejecucin en la tercera generacin de los
compiladores Ada. Este problema es conveniente en compiladores menos
seguros como el Ada llega a ser el ms apropiada.
Ejecucin. El cuarto es el costo de ejecucin de programas escritos en un
lenguaje es influenciado grandemente por el diseo del lenguaje. Un lenguaje,
tal como el PL1, que requiere mucho tiempo de ejecucin para la verificacin de
los tipos impide que el cdigo se ejecute rpidamente, a pesar de la calidad del
compilador.

Mantenimiento. Finalmente tenemos al costo de mantenimiento de programas,


con la cual se incluyen las correcciones y modificaciones para aadir nuevas
caractersticas. El costo de mantenimiento depende de un gran nmero de
caractersticas del lenguaje especialmente la legibilidad. Porque el
mantenimiento es realizado frecuentemente por otras personas diferentes al
autor original del software, la pobre legibilidad puede hacer lar tarea
extremadamente desafiante. La importancia del mantenimiento del software no
puede ser desafiante. Esto se ha estimado para un software de aplicacin de
aplicacin con una vida relativamente larga, los costos de mantenimiento
pueden subir de dos a tres cuartos de tiempo tanto como el desarrollo.
Todas estas contribuciones para los costos de un lenguaje nos indican que hay dos muy
importantes: el de desarrollo y el de mantenimiento de los programas. Porque son las
funciones de legibilidad y fcil escritura las que intervienen en ellos, y stos son los dos
criterios ms importantes en la evaluacin de los lenguajes de programacin.
Una nota final para el criterio. Los criterios, especialmente legibilidad y escriturabilidad, no
se pueden precisar en su definicin ni limitarse de una manera exacta. Los conceptos son
tiles sin embargo nos proporcionan una perspicacia en el diseo y evaluacin de los
lenguajes de programacin. Existen por supuesto otros criterios para la evaluacin de los
lenguajes de programacin, por ejemplo la portabilidad (la facilidad con el que el programa
puede ser movido de una mquina a otra), su generalidad (la aplicacin del lenguaje a un
extenso ramo de aplicaciones) y sobre todo Buenas Definiciones (la integridad y precisin
del lenguaje en la definicin de la documentacin). Sin embargo las que hemos explicado
consideramos que son las ms importantes.

You might also like