Professional Documents
Culture Documents
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
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
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
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
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
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.
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.
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
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 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
FUNDAMENTOS DE LOS
LENGUAJES SEGN ROGER S.
PRESSMAN.
Tipos de datos y tipificacin. Hoy en da, el
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
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.
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
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
est implementado.
Pedagoga. La facilidad de ensear y aprender, existencia de mejores libros de
programacin.
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
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.
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.
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.
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.
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.
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