història i característiques del llenguatge c

4
Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/ © Roger Casadejús Pérez | Exatienda Història i característiques del llenguatge C C és un llenguatge orientat a la implementació de Sistemes Operatius, concretament Unix. C és apreciat per l'eficiència del codi que produeix i és el llenguatge de programació més popular per crear programari de sistemes, encara que també s'utilitza per crear aplicacions. Es tracta d'un llenguatge feblement tipificat de mig nivell però amb moltes característiques de baix nivell. Disposa de les estructures típiques dels llenguatges d'alt nivell però, al seu torn, disposa de construccions del llenguatge que permeten un control a molt baix nivell. Els compiladors solen oferir extensions al llenguatge que possibiliten barrejar codi en assemblador amb codi C o accedir directament a memòria o dispositius perifèrics. Un dels objectius de disseny del llenguatge C és que només siguin necessàries unes poques instruccions en llenguatge màquina per traduir cada element del llenguatge, sense que faci mancada un suport intens en temps d'execució. És molt possible escriure C a baix nivell d'abstracció; de fet, C es va usar com a intermediari entre diferents llenguatges. La història inicial de C es va dur a terme en els Laboratoris Bell de AT&T entre 1969 i 1973; segons Ritchie, el període més creatiu va tenir lloc el 1972. Se li va donar el nom "C" perquè moltes de les seves característiques van ser preses d'un llenguatge anterior anomenat "B". Hi ha moltes llegendes sobre l'origen de C i el sistema operatiu amb el qual està íntimament relacionat, Unix. Algunes d'elles són: • El desenvolupament de C va ser el resultat del desig dels programadors de jugar amb Space Travel. Havien estat jugant en el mainframe de la seva companyia, però a causa de la seva poca capacitat de procés i en haver de suportar 100 usuaris, Thompson i Ritchie no tenien suficient control sobre la nau per evitar col·lisions amb els asteroides. Per aquest motiu van decidir portar el joc a un PDP-7 de l'oficina que no s'utilitzava; però aquesta màquina no tenia sistema operatiu, així que van decidir escriure’n un. Finalment van decidir portar el sistema operatiu del PDP-11 que hi havia en la seva oficina, però era molt costós, doncs tot el codi estava escrit en llenguatge assemblador. Llavors van decidir usar un llenguatge d'alt nivell i portàtil perquè el sistema operatiu es pogués portar fàcilment d'un ordinador a un altre. Van considerar usar B, però mancava de les funcionalitats necessàries per aprofitar algunes característiques avançades del PDP-11. Llavors van començar a crear un nou llenguatge, C. • La justificació per obtenir l'ordinador original que es va usar per desenvolupar Unix va ser crear un sistema que automatitzés l'arxiu de patents. La versió original d'Unix es va desenvolupar en llenguatge assemblador. Més tard, el llenguatge C es va desenvolupar per poder reescriure el sistema operatiu. Al 1973, el llenguatge C s'havia tornat tan potent que la major part del kernel Unix, originalment escrit en el llenguatge assemblador PDP-11/20, va ser reescrita en C. Aquest va ser un dels primers nuclis de sistema operatiu implementats en un llenguatge diferent a l'assemblador. (Alguns casos anteriors són el sistema Multics, escrit en PL/I, i Master Control Program per al B5000 de Burroughs, escrit en ALGOL en 1961). Al 1978, Ritchie i Brian Kernighan van publicar la primera edició del llenguatge de programació C, també conegut com La bíblia de C. Aquest llibre va ser durant anys l'especificació informal del llenguatge. El llenguatge descrit en aquest llibre rep habitualment el nom de "el C de Kernighan i Ritchie" o simplement "K&R C" (La segona edició del llibre cobreix l'estàndard ANSI C, descrit més a baix.) Kernighan i Ritchie van introduir les següents característiques al llenguatge:

Upload: roger-casadejus-perez

Post on 26-Jan-2015

107 views

Category:

Documents


2 download

DESCRIPTION

Història i característiques del llenguatge C. Més manuals a: http://www.exabyteinformatica.com

TRANSCRIPT

Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/

© Roger Casadejús Pérez | Exatienda

Història i característiques del llenguatge C

C és un llenguatge orientat a la implementació de Sistemes Operatius, concretament Unix. C és apreciat per l'eficiència del codi que produeix i és el llenguatge de programació més popular per crear programari de sistemes, encara que també s'utilitza per crear aplicacions.

Es tracta d'un llenguatge feblement tipificat de mig nivell però amb moltes característiques de baix nivell. Disposa de les estructures típiques dels llenguatges d'alt nivell però, al seu torn, disposa de construccions del llenguatge que permeten un control a molt baix nivell. Els compiladors solen oferir extensions al llenguatge que possibiliten barrejar codi en assemblador amb codi C o accedir directament a memòria o dispositius perifèrics.

Un dels objectius de disseny del llenguatge C és que només siguin necessàries unes poques instruccions en llenguatge màquina per traduir cada element del llenguatge, sense que faci mancada un suport intens en temps d'execució. És molt possible escriure C a baix nivell d'abstracció; de fet, C es va usar com a intermediari entre diferents llenguatges.

La història inicial de C es va dur a terme en els Laboratoris Bell de AT&T entre 1969 i 1973; segons Ritchie, el període més creatiu va tenir lloc el 1972. Se li va donar el nom "C" perquè moltes de les seves característiques van ser preses d'un llenguatge anterior anomenat "B".

Hi ha moltes llegendes sobre l'origen de C i el sistema operatiu amb el qual està íntimament relacionat, Unix. Algunes d'elles són:

• El desenvolupament de C va ser el resultat del desig dels programadors de jugar amb Space Travel. Havien estat jugant en el mainframe de la seva companyia, però a causa de la seva poca capacitat de procés i en haver de suportar 100 usuaris, Thompson i Ritchie no tenien suficient control sobre la nau per evitar col·lisions amb els asteroides. Per aquest motiu van decidir portar el joc a un PDP-7 de l'oficina que no s'utilitzava; però aquesta màquina no tenia sistema operatiu, així que van decidir escriure’n un. Finalment van decidir portar el sistema operatiu del PDP-11 que hi havia en la seva oficina, però era molt costós, doncs tot el codi estava escrit en llenguatge assemblador. Llavors van decidir usar un llenguatge d'alt nivell i portàtil perquè el sistema operatiu es pogués portar fàcilment d'un ordinador a un altre. Van considerar usar B, però mancava de les funcionalitats necessàries per aprofitar algunes característiques avançades del PDP-11. Llavors van començar a crear un nou llenguatge, C.

• La justificació per obtenir l'ordinador original que es va usar per desenvolupar Unix va ser crear un sistema que automatitzés l'arxiu de patents. La versió original d'Unix es va desenvolupar en llenguatge assemblador. Més tard, el llenguatge C es va desenvolupar per poder reescriure el sistema operatiu.

Al 1973, el llenguatge C s'havia tornat tan potent que la major part del kernel Unix, originalment escrit en el llenguatge assemblador PDP-11/20, va ser reescrita en C. Aquest va ser un dels primers nuclis de sistema operatiu implementats en un llenguatge diferent a l'assemblador. (Alguns casos anteriors són el sistema Multics, escrit en PL/I, i Master Control Program per al B5000 de Burroughs, escrit en ALGOL en 1961).

Al 1978, Ritchie i Brian Kernighan van publicar la primera edició del llenguatge de programació C, també conegut com La bíblia de C. Aquest llibre va ser durant anys l'especificació informal del llenguatge. El llenguatge descrit en aquest llibre rep habitualment el nom de "el C de Kernighan i Ritchie" o simplement "K&R C" (La segona edició del llibre cobreix l'estàndard ANSI C, descrit més a baix.)

Kernighan i Ritchie van introduir les següents característiques al llenguatge:

Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/

© Roger Casadejús Pérez | Exatienda

• El tipus de dades struct.

• El tipus de dades long int.

• El tipus de dades unsigned int.

• Els operadors =+ i =- van ser substituïts per += i -= per eliminar l'ambigüitat semàntica d'expressions com a i=-10, que es podria interpretar bé com a i =- 10 o bé com a i = -10.

El C de Kernighan i Ritchie és el subconjunt més bàsic del llenguatge que un compilador deu suportar. Durant molts anys, fins i tot després de la introducció del ANSI C, va ser considerat "el mínim comú denominador" en el qual els programadors havien de programar quan desitjaven que els seus programes fossin transportables, doncs no tots els compiladors suportaven completament ANSI, i el codi raonablement ben escrit en K&R C és també codi ANSI C vàlid.

En aquestes primeres versions de C, les úniques funcions que necessitaven ser declarades si s'usaven abans de la definició de la funció eren les que retornaven valors no sencers. És a dir, es pressuposava que una funció que s'usava sense declaració prèvia (prototip) retornaria un sencer.

Les característiques amb les quals explica aquest llenguatge són:

Propietats

• Un nucli del llenguatge simple, amb funcionalitats afegides importants, com a funcions matemàtiques i de maneig d'arxius, proporcionades per biblioteques.

• És un llenguatge molt flexible que permet programar amb múltiples estils. Un dels més emprats és l'estructurat "no portat a l'extrem" (permetent certes llicències de ruptura).

• Un sistema de tipus que impedeix operacions sense sentit.

• Usa un llenguatge de preprocessat, el preprocessador de C, per a tasques com definir macros i incloure múltiples arxius de codi font.

• Accés a memòria de baix nivell mitjançant l'ús de punters.

• Interrupcions al processador amb unions.

• Un conjunt reduït de paraules clau.

• Per defecte, el pas de paràmetres a una funció es realitza per valor. El pas per referència s'aconsegueix passant explícitament a les funcions les adreces de memòria d'aquests paràmetres.

• Punters a funcions i variables estàtiques, que permeten una forma rudimentària d'encapsulat i polimorfisme.

• Tipus de dades agregades (struct) que permeten que dades relacionades (com un empleat, que té un ID, un nom i un salari) es combinin i es manipulin com un tot (en una única variable "empleat").

Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/

© Roger Casadejús Pérez | Exatienda

Avantatges

• Llenguatge molt eficient posat que és possible utilitzar les seves característiques de baix nivell per realitzar implementacions òptimes.

• Malgrat el seu baix nivell és el llenguatge més portat en existència, havent-hi compiladors per gairebé tots els sistemes coneguts.

• Proporciona facilitats per realitzar programes modulars i/o utilitzar codi o biblioteques existents

Desavantatges

El major problema que presenta el llenguatge C enfront dels llenguatges de tipus de dada dinàmica és la gran diferència en velocitat de desenvolupament: és molt més lent programar en C. La raó estreba que el compilador de C es limita a traduir codi sense amb prou feines afegir-ne gens.

La gestió de la memòria és un exemple clàssic: en C el programador ha de reservar i alliberar la memòria explícitament. En altres llenguatges (com BASIC, Matlab o C#) la memòria és gestionada de forma transparent per al programador. Això alleuja la càrrega de treball humà i en moltes ocasions prevé errors.

El manteniment també és més difícil i costós que amb llenguatges de més alt nivell. El codi en C es presta a sentències curtes i enrevessades de difícil interpretació. Encara que el llenguatge admet codi escrit de forma fàcilment llegible, si no se segueixen normes en el equip de programació alguns programadors poden acabar escrivint codi difícil de llegir. Això complica la revisió i el manteniment.

C no disposa de sistemes de control automàtics i la seguretat depèn gairebé exclusivament de l'experiència del programador. La major part dels problemes de seguretat en els sistemes informàtics actuals deriva d'haver estat realitzats en C. La fallada de seguretat clàssica consisteix que algunes entrades d'informació al programa no es comproven en longitud. Si un atacant introdueix dades el bastant grans pot provocar la sobreescriptura de codi en la pila del programa i fins i tot arribar a forçar l'execució de codi perniciós. Els llenguatges de tipus dinàmic compten amb controls de gestió de memòria i d'entrada de dades automàtiques.

Per aquestes raons, els directors de desenvolupament han de sospesar l'avantatge en eficiència d'un bon programa en C enfront de la major durada del treball i els riscos de seguretat i estabilitat. Han de tenir en compte a més, que els equips baixen de preu amb el temps mentre que el cost dels programadors augmenta.

Manques

• Recol·lecció d'escombraries natives, no obstant això es troben a aquest efecte biblioteques com la "libgc" desenvolupada per Sun Microsystems, o el Recol·lector d'escombraries de Boehm.

• Suport per a programació orientada a objectes, encara que la implementació original de C++ va ser un preprocessador que traduïa codi font de C++ a C.

• Encapsulació.

Más manuales en: http://www.exabyteinformatica.com/manuales-y-apuntes-freeware/

© Roger Casadejús Pérez | Exatienda

• Funcions niades, encara que GCC té aquesta característica com a extensió.

• Polimorfisme en temps de codi en forma de sobrecàrrega, sobrecàrrega d'operadors i només disposa d'un suport rudimentari per a la programació genèrica.

• Suport natiu per a programació multifil i xarxes de computadors.

En conclusió podem recalcar la importància que té la programació avui dia, doncs amb aquesta es creen programaris que són de gran ajuda per a les persones que treballa en l'àmbit informàtic tant com les quals no, doncs facilita processos matemàtics, econòmics i fins i tot químics.

En si podríem dir que la programació facilita treballs de processos llargs.