Wpis z mikrobloga

trochę o językach #programowanie żeby lepiej zrozumieć #naukaprogramowania
Kod maszynowy są to zrozumiałe dla urządzenia polecenia. Czyli po prostu ciąg instrukcji procesora zapisanych niezrozumiałym dla człowieka językiem, tj są po prostu ciągiem bajtów oznaczających polecenia, dane i adresy komórek pamięci (informacja dla procesora skąd ma pobrać, albo gdzie zapisać jakąś informację, albo gdzie ma przeskoczyć).

Asm jest językiem programowania stworzonym w celu uczynienia kodu maszynowego danego procesora bardziej przystępnym dla człowieka. Każdej instrukcji procesora (jej kodowi binarnemu w języku maszynowym) odpowiada jakieś słowo w języku naturalnym, co naturalnie sprawia że każda rodzina procesorów będzie miała swój własny assembler. Dodatkowo asm oferuje makra. Tj jedno słowo może być tuż przed assemblacją (tłumaczeniem asm do kodu maszynowego) zmieniane na dowolny ciąg innych słów asma.

Jeszcze wyżej są języki kompilowalne (C/C++/Pascal) które stanowią już gigantyczne ułatwienie dla programisty. Tutaj kompilator zajmuje się zbudowaniem asm lub od razu kodu maszynowego na podstawie kodu danego języka i robi za nas wiele podstawowych związanych z achitekturą urządzenia optymalizacji. Na tym poziomie nie musi nas interesować zestaw rejestrów czy poleceń procesora. Nie mniej dalej operujemy często na adresach a bardziej doświadczeni programiści domyślają się jak będzie mniej więcej wyglądał wynikowy kod asm.

Jeszcze wyższy poziom to JJI (Just in time). Języki takie jak C# i Java, które są kompilowane do własnego formaty (tzw bytecode), by zostać dopiero w czasie odpalenia przebudowanymi na asm przez swoją maszynę wirtualną. Zalety tego rozwiązania są takie, że raz skompilowany program może być odpalony na wielu różnych urządzeniach (pod warunkiem że mają zainstalowaną maszynę wirtualną danego języka). Języki te są najczęściej znacznie prostsze do nauki i programowania, jednakże utrudniają, czy wręcz uniemożliwiają robienia bardziej hardcorowych optymalizacji. Co sprawia że pomimo swojej prostoty nie zdominowały w 100% rynku. (Nikt nie pisze sterowników, czy silników do gier w C# czy Javie, bo byłyby zbyt wolne)

Jeszcze wyżej można usadzić języki skryptowe jak python/JavaScript/php. Które nie są w ogóle kompilowane tylko interpretowane przez programy napisane w innych językach. W takim przypadku, to przykładowo przeglądarka internetowa, wie, że kiedy napotka słowo alert to ma wyrzucić wyskakujące okienko. Języki skryptowe są dużo wolniejsze od wszystkich pozostałych.

Oczywiście to wszystko jest bardzo uproszczony opis rzeczywistości i jak przeczyta to ktoś znający się na temacie, to się nie zgodzi. Wiele, jeśli nie większość języków programowania może być używane także w inny sposób niż mówi ich pierwotne przeznaczenie. Można kompilować programy napisane w pythonie, i można użyć C++ jako języka skryptowego. Ale pierwotny cel języka determinuje sposób w jaki jest on skonstruowany, więc nikt rozsądny nie używa C++ do pisania skryptów.
  • 3