Zašto pre-kompajlirati code

Za početak da razjasnim što je uopće proces (pre)kompajliranja code-a i na kojim se sve razinama se dešava.
Kompajliranje code-a podrazumjeva prevođenje sintakse nekog code-a u neku drugu sintaksu, koja će biti razumljiva nekom računalnom algoritmu koji radi sa tom sintaksom.

Tako npr. javascript kompajler razumije sintaksu za zbrajanje stringova koja izgleda;

var myString = "My name is "+name+" and my surname is: "+surname;

dok bi se u PHPu isto mogli pisati na daleko simpatičniji način:

$myString = "My name is $name and my surname is $surname";

Nikakva posebna nauka nije u tome da omogućimo da i javascript razumije istu sintaksu koju razumije PHP. Zamislimo da u javascriptu napišemo taj code na način:

var myString = "My name is $name and my surname is $surname";

…ali prije nego što tu skriptu pustimo da ju učita browser, pustimo istu skriptu kroz kompajler koji će pronaći takve dijelove u codu i prevesti ih u ono što je razumljivo browseru, tj. prevesti će ih u prvotni javascript oblik:
var myString = "My name is "+name+" and my surname is: "+surname;

Taj proces kompajliranja se svakako ne mora dešavati za vrijeme produkcije (što bi usporavalo učitavanje stranice i generalno opterećivalo server koji isporučuje takav code koji mora “uživo” kompajlirati) … tako da je puno bolji pristup podesiti radnu okolinu da se sve skripte
prekompajliraju onog momenta kada nastanu. Tj. nakon svake izmjene neke skripte, kompajler to treba prepoznati da se source promjenio i napraviti skriptu koja će se isporučivati browseru. Na taj način nema gotovo nikakvih loših nus posljedica prekompajliranja, osim što smo svjesno obogatili sintaksu programskog jezika sa kojim radimo.

E sad, tko sve radi prekompajliranje?
Pa ono se dešava na raznim razinama…svaki code koji napišemo mora se prekompajlirati do najnižih razina …do levela procesorskog jezika gdje se doslovice zadaje za svaki bit na koju adresu će se upisati…i kada će se osloboditi.

Da ne bude zabune…prvo ručno programiranje je počelo od te razine. Ali onda se neki pametnjaković sjetio (kako ga samo stid nije bilo) …da uzme ponavljajuće patterne tog vrlo glomaznog jezika i da smisli kraću sintaksu za te patterne.
Time je omogućio nešto elegantniji način pisanja codea i tako su se stvarali prvi jezici.

Jako je pri tome zanimljivo primjetiti, kada radiš kompajler na tim najnižim razinama…nisi mogao za napisati kompajler koristiti C#, hehe …nego si i kompajler morao pisati u tim primitivnim jezicima koji postoje na tim razinama.
Koja je to samo muka bila…pa se netko ipak ohrabrio to napraviti.
I onda dalje svakom stepenicom kako su se programski jezici razvijali, tako je nastajao i puno veći spektar alata sa kojim se može napisati novi kompajler koji će dodatno obogatiti sintaksu programskog jezika.

To je zapravo jedna predivna evolucija programskog jezika…gdje možemo primjetiti da on sam sebe unapređuje, naravno…i mi mu pomažemo u tom procesu.
No on je glavni gradivni element koji gradi sam sebe …i tom živom biću treba odati jedno veliko poštovanje što je kročilo među nas…i što će uskoro moći pričati sa nama, na nama razumljivom jeziku.
No ovo nije tema o filozofiji i postojanju raznih moćnijih entiteta od nas…

Vraćam se na pitanje, zašto kompajlirati code?

Pa nakon što sam objasnio da se taj proces dešava od kada je računala…sigurno je da taj proces nije stao. Štoviše, danas sa bogatstvom raznih moćnih alata…komapjliranje code-a je lakše nego ikad.
Pitanje je samo tko će se odvažiti na tu pustolovinu, a tko neće.
A postoji jako puno ljudi koji se odvažuju na tu pustolovinu, tako da to nije neka “zabranjena zona” gdje se ne smije ići.
Kao i svemu, netko će udarati u “prazno” i izgubiti vrijeme…dok će netko poprilično benefitirati što se odvažio na poduhvat.

Sad kada sam objasnio što je kompajliranje, te da se smije raditi i da to mnogi rade…postavlja se i dalje pitanje, zašto bi to netko radio?

Pa ko i u svemu, cilj nam je podići vlastitu efikasnost…isto kao i u ovom offline svemiru, što god radimo…nastojimo biti čim efikasniji.
U ovom offline svemiru da bi bili efikasniji, možemo raditi na unaprijeđivanju alata, boljoj organizaciji svog poslovanja…itd. itd.
Ali teško da možemo početi mijenjati parametre realnosti i na taj način unaprijediti okolinu, fiziku…i omogućiti si na taj način bolju efikasnost jer si npr. ugradimo anti-gravitaciju u tenisice. Ili si npr. omogućimo teleportiranje predmeta…
Bilo bi to cool, ali realnost nas ograničava da činimo takve stvari.

Ako se prebacimo u svijet programiranja, onda smo isto tako ograničeni “realnošću” nekog programskog jezika koju nam nameće. Dok se god nalazimo unutar nekog programskog jezika, mi moramo igrati po pravilima koja nam je nametnuo taj programski jezik.
A prekompajliranje sintakse tog jezika je upravo izranjanje izvan realnosti i ograničenja jezika i omogućava nam da postanemo Bog i da stvaramo nova pravila koja nam se čine praktičnima.

Naravno, nije lako biti Bog i unaprijediti bilo koju okolinu …ali je svakako izazovno, zanimljivo…i može rezultirati mnogim benefitima.

Eto, zato pre-komapjliranje codea!
Otkada sam to otkrio (ima već 5.godina od mog prvoga kompajlera)… stvarno se osjećam kao Bog. Zato jer na toj razini ne postoji problem koji se ne može rješiti. …i mogao bi reći da je to jedan svemoguć pristup što se tiče programiranja.
Doduše, nije stvar tako trivijalna …ali onaj tko je spreman uroniti u taj svijet, vrlo vjerovatno neće požaliti.
Ništa loše se na kraju krajeva ne može desiti.

Znam da će biti puno hejtera ovog mog stava…ali takvima ću reći samo jedno:
Da su svi razmišljali kao vi, još bi danas tipkali u asembleru. Nadam se da barem imate ikakvog osjećaja kakav je to programski jezik. :slight_smile:

I čemu ova tema. Pa saznat ćete uskoro, hehe.
Za sada…ako je netko imao iskustva sa vlastitim kompajlianjem codea, bit će mi drago razmjeniti iskustva. Jer zanimljive problematike tu ima za sresti. :slight_smile: