nedjelja, 19. rujna 2010.

C je high level jezik?!?

Dosta literature, a i predavanja na fakultetu (još uvjek) na spomen programskog jezika C istiće da je isti high level jezik. S druge strane, npr. diskutirate s nekim o izradi grafičkog enginea, kada se kaže da nešto treba napraviti na low level razini, zapravo znači da to treba biti napisano C-u. Uzrok te dvoličnosti C-a se može objasniti tromošću prilagodbe obrazovnih materijala novim tehnologijama. Dok neki iskusan programer napiše knjigu ili postane profesor, prođe 5 do 10 godina a u tom vremenoskom razdoblju svijet se dvaput prevrne.

Kako se mišljenje o tome što je high level mjenja s vremenom, neki su se dosjetili da umjesto pojmova low level i high level uvedu nazive koji zapravo govore što je na kojoj razini. Jedan od takvih pokušaja su generacije jezika (http://www.computerhope.com/jargon/num/1gl.htm), no i tamo je C high level jezik a sve što je iznad je praktički ljudski jezik. Što pak nije istina, između C-a (3. generacije jezika) i skriptnih jezika (4. generacija), postoje jezici kao što su C++, C# i Java. Drugi od pokušaja su paradigme. C je primjer proceduralne paradigme a Java i C#, objektne. Na trećem mjestu idu još dalje, paradigme su omotane u modele:
  • model zasnovan na proceduralnoj paradigmi
  • model zasnovan na objektima
  • model zasnovan na komponentama
  • model zasnovan na uslugama
Taj treći primjer je zanimljiv jer pokazuje kako trenutni modeli već nadilaze moderne programske jezike. Komponenti model se relativno lagano ostvaruje pomoću objektnog modela ali za model usluga, u većini slučajeva, još uvjek nema načina da ga se ostvari bez gubitka apstrakcije. Vjerojatno će se uskoro pojaviti nešto kao što je C++ bio u vrijeme C-a.

Suma sumarum, nakupilo se razina iznad assemblerskih jezika i high i low level nazivlje se svakako treba osuvremeniti. Moji osobni pristup bi bio slijedeći:
  • Sklopvska razina (hardware i možda strojni kod)
  • Assemblerska razina (assembler i možda strojni kod, stari low level)
  • Algoritamska razina (današnje poimanje low levela)
  • Objektna razina (povezivanje algoritama)
  • Komponentna razina (povezivanje procesa)
  • Razina usluga