C es un lenguaje de programación de propósito general originalmente desarrollado por Dennis Ritchie entre 1969 y
1972 en los Laboratorios Bell, como evolución del anterior lenguaje B, a su vez basado en
BCPL.
Al igual que B, es un lenguaje orientado a la implementación
de Sistemas operativos, concretamente Unix. C es apreciado por la eficiencia
del código que produce y es el lenguaje de programación más popular para crear
software de sistemas, aunque también se utiliza para crear aplicaciones.
Se trata de un lenguaje de tipos de datos estáticos,
débilmente tipificado, de medio nivel, ya que dispone de las estructuras
típicas de los lenguajes de alto nivel pero, a su vez, dispone de
construcciones del lenguaje que permiten un control a muy bajo nivel. Los
compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar
código en ensamblador con código C o acceder directamente a memoria o
dispositivos periféricos.
La primera estandarización del lenguaje C fue en ANSI, con
el estándar X3.159-1989. El lenguaje que define este estándar fue conocido
vulgarmente como ANSI C. Posteriormente, en 1990, fue ratificado como estándar
ISO (ISO/IEC 9899:1990). La adopción de este estándar es muy amplia por lo que,
si los programas creados lo siguen, el código es portable entre plataformas y/o
arquitecturas.
Características
- Núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas.
- Es un lenguaje estructurado, tiene estructuras de control y tipos de datos estructurados definidos por el programador a partir de los tipos atómicos típicos y mediante arreglos, estructuras, uniones y apuntadores, incluidos los apuntadores a función.
- En su primera edición no había advertencias sobre asignar a una variable un valor un tipo distinto. Por lo que había un programa llamado lint que detectaba este tipo de errores. Actualmente los compiladores pueden detectar inconsistencias de tipos y otros errores.
- Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente.
- Acceso a memoria de bajo nivel mediante el uso de apuntadores o punteros.
- Manejo de Interrupciones mediante la biblioteca signal.
- Un conjunto reducido de palabras clave.
- El llamado a funciones es por valor. Aunque se pueden pasar apuntadores a variables para hacer llamados por referencia.
- Distintos tipos de almacenamiento que permiten un diseño modular.
- La palabra clave static permite encapsular variables y funciones.
- Las estructuras se declaran mediante la palabra clave struct, implementan el producto cartesiano de tipos también llamados registros.
- Y la unión disyunta, también llamada suma, co-producto o tipos variantes, se declara con la palabra clave union. Las estructuras y uniones permiten la implementación de árboles.
- Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas.
- Se diseñó como un lenguaje de programación de sistemas portátil.
- Es muy poco lo que requiere uso de ensamblador, lo que permitió portar Unix y otros sistemas operativos a distintos equipos.
- Distingue entre mayúsculas y minúsculas, pero conserva su portabilidad en equipos que manejan caracteres de 6 bits, como las computadoras Cyber de CDC que tenían una palabra de 60 bits, (10 caracteres), porque usan trigráficos para codificar símbolos especiales.
- Su compilador de C se ha portado a casi todos los sistemas conocidos. Porque además de que no se requiere codificar en ensamblador, interactúa con los lenguajes especializados YACC y LEX. también escritos en C como parte de Unix.
- Facilita la programación modular gracias a que cuenta con distintos tipos de almacenamiento de las variables y compilación separada. Además del macro procesador integrado cpp, que permite declarar los encabezados de las funciones y los tipos de datos en archivos con extensión h. En el caso de las bibliotecas del sistema Unix y de C se necesita incluir los prototipos con la macros . Ello únicamente sirve para automatizar la declaración de objetos externos que se usarán en el programa, por lo que es necesario pasar los nombres de las bibliotecas como parámetros del compilador que éste pasa al encadenador (linker loader).
Aplicabilidad
Hecho principalmente para la fluidez de programación en
sistemas Unix. Se usa también para el desarrollo de otros sistemas operativos
como Windows o GNU/Linux. Igualmente para aplicaciones de escritorio como GIMP,
cuyo principal lenguaje de programación es C.
De la misma forma, es muy usado en aplicaciones científicas
(para experimentos informáticos, físicos, químicos, matemáticos, entre otros,
parte de ellos conocidos como modelos y simuladores), industriales (industria
robótica, cibernética, sistemas de información y base de datos para la
industria petrolera y petroquímica. Predominan también todo lo que se refiere a
simulación de máquinas de manufactura), simulaciones de vuelo (es la más
delicada, ya que se tienen que usar demasiados recursos tanto de hardware como
de software para desarrollar aplicaciones que permitan simular el vuelo real de
una aeronave). Se aplica por tanto, en diversas áreas desconocidas por gran
parte de los usuarios noveles.
Los ordenadores de finales de los 90 son varios órdenes de
magnitud más potentes que las máquinas en que C se desarrolló originalmente.
Programas escritos en lenguajes de tipo dinámico y fácil codificación (Ruby,
Python, Perl...) que antaño hubieran resultado demasiado lentos, son lo
bastante rápidos como para desplazar en uso a C. Aun así, se puede seguir
encontrando código C en grandes desarrollos de animaciones, modelados y escenas
en 3D en películas y otras aplicaciones multimedia.
Actualmente, los grandes proyectos de software se dividen en
partes, dentro de un equipo de desarrollo. Aquellas partes que son más
"burocráticas" o "de gestión" con los recursos del sistema,
se suelen realizar en lenguajes de tipo dinámico o de guion (script), mientras
que aquellas partes "críticas", por su necesidad de rapidez de
ejecución, se realizan en un lenguaje de tipo compilado, como C o C++. Si,
después de hacer la división, las partes críticas no superan un cierto
porcentaje del total (aproximadamente el 10%) entonces todo el desarrollo se
realiza con lenguajes dinámicos. Si la parte crítica no llega a cumplir las
expectativas del proyecto, se comparan las alternativas de una inversión en
nuevo hardware frente a invertir en el coste de un programador para que reescriba
dicha parte crítica
0 comentarios:
Publicar un comentario