Pregled dva nova programska jezika

Pregled dva nova programska jezika

Programski jezici: Zig i Mojo

Dva programska jezika za budućnost

Na početku svake kalendarske godine obično se donose predviđanja na različitim područjima ljudskog djelovanja. Programski jezici po tom pitanju nisu nikakav izuzetak. U prošlom broju časopisa osvrnuli smo se na to koji bi od već dobro poznatih programskih jezika mogli voditi glavnu riječ u 2026. godini. Ovaj put ćemo se malo detaljnije pozabaviti s dva relativno nova i slabo poznata jezika, ali s popriličnim potencijalom za širenje u 2026. i godinama iza nje.

Iako njihovi nazivi (Zig i Mojo) više djeluju kao nazivi patuljaka iz priča za malu djecu, odnosno kao nazivi svemiraca iz nekog SF uratka, riječ je o vrlo ozbiljnim, ali istovremeno dosta različitim proizvodima po svojoj namjeni. Premda nijedan od ovih programskih jezika trenutačno nije baš previše popularan među programerima, čini nam se da u njima ima „nečega“.

Prema istraživanju provedenom od strane dobro poznatog web foruma Stack OverFlow, Zig je nešto popularniji od programskog jezika Mojo (koristi ga 2,1% prema svega 0,4% sudionika ankete). Razloge za nešto veću popularnost sigurno treba tražiti u tome što je Zig nastao 2016. godine, a Mojo je predstavljen javnosti tek 2023. godine. Ono što im je slično jest to da oba alata imaju prilično veliki rast popularnosti među programerima. Glavni razlog zbog čega ih detaljnije opisujemo u ovom broju časopisa.

 

Slika01-zigmojo.jpg

https://survey.stackoverflow.co: Pregled popularnosti programskih jezika

 

Zig ( https://ziglang.org/ )

Zanimljivo je da Zig zapravo nije nastao kao svjesno pokrenuti projekt razvoja novog programskog jezika, nego prije kao nusproizvod sasvim drugačijeg projekta. Početna ideja njegovog autora Andrewa Kelleyja je u stvari bila razviti softver za upravljanje digitalnom radio stanicom, ali je tijekom procesa razvoja postao jako frustriran ograničenjima programskog jezika C. Zato je odlučio prvo razviti svoj vlastiti programski jezik (Zig), kako bi onda pomoću njega lakše dovršio glavni projekt. Tijekom rada na Zigu početni projekt je polako pao u drugi plan, a Andrew se potpuno posvetio razvoju novog programskog jezika.

Prva javna verzija programskog jezika objavljena je 8.2.2016. Kakve li slučajnosti – upravo na godišnjicu tog datuma, autor piše ovaj tekst! Danas o Zigu brine neprofitna organizacija Zig Software Foundation (ZSF). Trenutačna verzija jezika je 0.16.0 i može se besplatno preuzeti na vlastito računalo, pri čemu su podržani svi najpopularniji operativni sustavi (Windows, MacOS, Linux, FreeBSD i NetBSD). Zig je objavljen pod MIT licencom, što znači da ga možete slobodno koristiti, mijenjati i distribuirati (čak i u komercijalne svrhe) bez ikakvih naknada autoru ili spomenutoj organizaciji.

Na svaki od podržanih operativnih sustava Zig možete instalirati ručno tako da prvo preuzmete odgovarajuću kompresiranu datoteku, a onda izvršite njezino raspakiravanje te sve ostale neophodne naredbe. U nastavku ćemo se usredotočiti na operativni sustav Windows 11.

 

Slika02-zigmojo.jpg

https://ziglang.org/: Početna web adresa za programski jezik Zig

 

Najjednostavniji način da instalirate Zig na svoje Windows računalo je to da u terminal prozoru Windowsa (cmd) ukucate naredbu:

winget install -e --id zig.zig

Nakon toga će instalacijski program odraditi ostatak. Potrebno je još samo zatvoriti terminal, a onda ga ponovno pokrenuti kako bi sve postavke postale dostupne u novoj kopiji terminala.

Nakon pokretanja naredbe Zig u terminalu, programeru su na raspolaganju očekivani parametri potrebni za prevođenje Zig koda u izvršni oblik, odnosno njegovo izvođenje: build, build-exe, build-obj, run i slično, ali također i nešto manje očekivani parametri, koji zapravo predstavljaju vrlo pozitivno iznenađenje.

 

Slika03-zigmojo.jpg

winget install: Najjednostavniji oblik instalacije u Windows okruženju

 

Na primjer:

fmt – izvodi automatsko formatiranje programskog koda, tako da sav Zig kod bude međusobno što sličniji u pogledu strukture koda.
translate-c – prevodi postojeći programski kod u C-u u Zig.
cc, c++ – mijenja postojeći program prevoditelj za programske jezike C i C++ sa Zigovim programom za prevođenje (a on u sebi sadrži C/C++ prevoditelj).

Ovi i drugi slični parametri bitno olakšavaju integraciju postojećeg C/C++ koda u nove projekte gdje se planira korištenje Ziga. Ovo je ujedno jedan od najvećih pluseva Ziga koji može pomoći njegovom širenju, jer je - osim pisanja softvera ispočetka - olakšan nastavak održavanja i unapređivanja postojećeg softvera.

Zig se ne isporučuje s posebnim razvojnim sučeljem, što znači da programeri mogu koristiti sve na što su već prije navikli. Od vi kompatibilnih editora (Vim, gVim i slični) do najnovijih razvojnih okolina kao što je Microsoft Visual Studio Code.

Što je napravljeno „bolje“ u samom programskom jeziku? Zig nastoji biti što jednostavniji i transparentniji za korištenje od C/C++. To znači da ne postoje nekakve skrivene alokacije memorije ili skriveni pozivi funkcija, nego sve mora biti navedeno eksplicitno. Uveden je takozvani „comptime“ koncept koji omogućava izvršavanje običnog Zig koda tijekom prevođenja, što u konačnici dovodi do mogućnosti da se prilikom korištenja funkcija mogu koristiti različiti tipovi podataka, smanjuje se dio korištenih resursa, a uvjetno prevođenje moguće je bez potrebe nekakvih dodatnih alata izvan samog Ziga.

 

Slika04-zigmojo.jpg

Dostupni parametri: Osim samog prevođenja Zig koda, dostupno je više parametara za vezu prema C jeziku.

 

Na temelju navedenog moguće je pripremiti funkciju koja radi s različitim tipovima podataka:

const std = @import(“std”);

// Funkcija prima ‘T’ koji je tip (type) poznat u trenutku kompilacije
fn zbroji(comptime T: type, a: T, b: T) T {
return a + b;
}

pub fn main() void {
// 1. Korištenje s cijelim brojevima (i32)
const cijeli_broj = zbroji(i32, 5, 10);

// 2. Korištenje s decimalnim brojevima (f64)
const decimalni_broj = zbroji(f64, 3.14, 2.5);

std.debug.print(“Cijeli: {d}, Decimalni: {d}\n”, .{cijeli_broj, decimalni_broj});
}

Jedna od najzanimljivijih stvari i ujedno najvećih prednosti u cijeloj priči oko Ziga je to da možete prevoditi postojeći C/C++ kod u izvršni oblik (koji zbog prenosivosti Ziga radi na svim podržanim platformama), ili ga prvo pretvoriti u Zig kod, kako biste vidjeli razlike između programskih jezika, naučili novi, ili jednostavno nastavili razvoj u novom programskom jeziku.

Pogledajmo kako to izgleda na primjeru. Krenimo od jednostavnog C koda za zapisivanje sadržaja u tekstualnu datoteku, pohranjenog u datoteku test.c.

#include <stdio.h>

int main() {
FILE *datoteka;

datoteka = fopen(“datoteka.txt”, “w”);

if (datoteka == NULL) {
perror(“Pogreška pri otvaranju datoteke”);
return 1;
}

fprintf(datoteka, “Prvi red.\n”);
fprintf(datoteka, “Drugi red.\n”);
fclose(datoteka);

printf(“Podaci su zapisani u datoteka.txt\n”);
return 0;
}

Za prevođenje C koda u izvršni oblik pomoću Ziga treba upisati sljedeće:

zig cc -lc test.c -o test.exe

Datoteka test.exe se sada može normalno izvesti na Windowsima i zapisati podatke u tekstualnu datoteku. U prethodnom primjeru, dio -lc je dodatak za povezivanje sa standardnim bibliotekama koje su sastavni dio samog Ziga. Ako taj dio oko povezivanja slučajno nije uspio, automatski će ga odraditi program za instalaciju.

Ako probate izvesti sljedeću naredbu, dobit ćete C kod pretvoren u Zig, pa možete provjeriti kako to izgleda. Zgodno, zar ne?

zig translate-c -lc -I . test.c > test.zig

Kao jedan od glavnih nedostataka Ziga mogli bismo spomenuti to što njegova online dokumentacija nije baš predviđena za učenje programiranja ispočetka za potpune početnike. Dokumentacija je prije svega usmjerena prema C/C++ programerima koji već znaju programirati u navedenim programskim jezicima, a zbog prednosti Ziga htjeli bi započeti koristiti novi programski jezik.

Mojo (https://www.modular.com/mojo)

Slično kao što je Zig planiran da bude unapređenje za programske jezike C/C++, tako bi Mojo trebao donijeti poboljšanje na drugom kraju spektra programskih jezika, a to je AI orijentirano programiranje. A tu danas u najvećoj mjeri dominira Python. Python je jedan od najjednostavnijih jezika za učenje, pa ga zato koristi i ogroman broj „neIT“ profesionalaca za svoje vlastite projekte. Nažalost, zbog svoje koncepcije, Python je ujedno jedan od najsporijih programskih jezika tijekom izvođenja, što predstavlja glavno područje za njegovo poboljšanje. Ujedno jedno od važnih poboljšanja koje donosi programski jezik Mojo.

Mojo je razvila tvrtka Modular Inc., koju su osnovali Chris Lattner (tvorac jezika Swift i LLVM-a) i Tim Davis. Mojo je jedan od najmlađih programskih jezika, jer se s njegovim razvojem započelo tek 2022., da bi prvo javno predstavljanje bilo održano u svibnju 2023. godine. Trenutačno je Mojo kao besplatna verzija dostupan za preuzimanje na operativne sustave Linux i macOS.

 

Slika05-zigmojo.jpg

https://www.modular.com/mojo : Programski jezik Mojo razvila je tvrtka Modular

 

Još uvijek ne postoji službena verzija namijenjena za izravno korištenje na operativnom sustavu Windows. Uz pomoć modula WSL (Windows Subsystem for Linux) može se ipak napraviti instalacija i na Windowse te ujedno koristiti Microsoft Visual Studio Code za pisanje koda. To ne ide tako glatko kao instalacija Ziga, pa ćete ipak morati uložiti određeni napor u pripremu Windowsa i samu instalaciju. Na ostalim sustavima se Mojo može instalirati kao Python ili Conda paket. Na web adresi https://docs.modular.com/mojo/manual/install/ mogu se pronaći sve potrebne informacije za instalaciju na različite operativne sustave.

Pogledajmo sada zbog čega je zapravo razvijen Mojo, odnosno koje bi probleme trebao riješiti.

 

Slika06-zigmojo.jpg

Mojo i GPU: Mojo olakšava pisanje GPU orijentiranog koda bez obzira na korištenu arhitekturu računala

 

Prvi razlog je, naravno, brzina. U određenim situacijama, prema tvrdnjama autora i provedenim mjerenjima, Mojo rješava iste zadatke čak 35.000 puta brže od Python koda!!! Neki od uzroka takvog povećanja u izvođenju programskog koda su prevođenje u izvršni kod prije izvođenja umjesto interpretiranja koda kao što to radi Python, optimizacija za izvođenje i iskorištavanje višejezgrenih (i danas uobičajenih) arhitektura računala, takozvani „autotuning“ - to jest, automatsko podešavanje nekih karakteristika koda prema konkretnoj arhitekturi računala – kao i mogućnost korištenja statičkih (i ujedno bržih) tipova podataka, i tako dalje. Naravno, ubrzanja nisu uvijek tako dramatična, ali se gotovo uvijek može očekivati brži rad programa za čitave redove veličine.

Na taj način se svi AI algoritmi (ali i ostali) mogu pisati izravno u jeziku Mojo. Nema potrebe da prvo nekakva ekipa AI stručnjaka napravi prototipiranje modela u Pythonu, a da onda druga ekipa programera (nakon detaljne provjere prototipa) ide istu stvar riješiti u nekom drugom, bržem programskom jeziku kao što je C++. Što je, naravno, ogromna ušteda u pogledu ljudskih i financijskih resursa.

Mojo bi trebao biti potpuno neovisan od arhitekture računala (NVIDIA CUDA, AMD ROC ili Intel oneAPI). Što opet predstavlja ogromno smanjenje potrošenih ljudskih i financijskih resursa za različita „podešavanja“ modela i aplikacija za jednu ili više hardverskih infrastruktura. Također, trebao bi ukloniti različite probleme povezane sa sigurnošću i upravljanjem memorijom kakvi se susreću u drugim programskim jezicima i alatima.

Iako je u startu Mojo namijenjen prije svega rješavanju različitih problema na AI području, u konačnici bi trebao postati potpuni „nadskup“ programskog jezika Python, što znači da bi se trebao moći koristiti za rješavanje svih problema iz domene tog jezika.

 

Slika07-zigmojo.jpg

Povezanost s naprednim alatima: Mojo je dizajniran za izravno korištenje u kombinaciji s alatima kao što su VSCode debugger, Cursor i Claude

 

Ne treba zanemariti ni činjenicu kako je od samog starta planirano izravno korištenje programskog jezika Mojo s alatima kao što su VSCode debugger, Cursor i Claude. Kakve to prednosti donosi u praksi nije potrebno posebno objašnjavati.

Da bi se mogla postići sva već spomenuta poboljšanja u brzini izvođenja programskog koda i prenosivosti između različitih arhitektura računala, Mojo obuhvaća nekoliko dodataka u sintaksi u odnosu na standardni Python. Evo nekoliko najvažnijih primjera iz prateće dokumentacije:

Dok Python može kreirati varijablu u bilo kojem trenutku, Mojo omogućava korištenje ključne riječi let za deklariranje nepromjenjivih (immutable), te var za deklariranje promjenjivih (mutable) varijabli.

Osim dobro poznate ključne riječi def za definiranje funkcija iz Pythona, Mojo podržava i fn za definiranje strogo tipiziranih funkcija čijim se korištenjem postižu bolje performanse i sigurnost operacija povezanih memorijom.

Mojo potiče eksplicitno navođenje tipova podataka (npr. Int, Float64) kako bi program prevoditelj mogao generirati brži izvršni kod.

Za dodatno povećanje brzine izvođenja Mojo koristi ključnu riječ struct, što rezultira boljim (i bržim) korištenjem od sporijih Python klasa. 

 

Slika08-zigmojo.jpg

Online upute: Detaljne, ali nisu napisane baš za početnike

 

Kako izgleda primjer programskog koda s proširenjima karakterističnima za Mojo prikazano je u nastavku:

# 1. Korištenje ‘struct’ umjesto ‘class’
struct MojaStruktura:
var x: Int # Obavezna deklaracija tipa polja
var y: Int

# ‘fn’ umjesto ‘def’ za tipiziranu funkciju
fn __init__(inout self, x: Int, y: Int):
self.x = x
self.y = y

fn main():
# 2. korištenje ‘let’ za konstante i ‘var’ za varijable
let fiksno = 10
var promjenjivo: Int = 5

promjenjivo += fiksno

let objekt = MojaStruktura(fiksno, promjenjivo)
objekt.ispis()

U vezi s programskim jezikom Mojo treba svakako spomenuti planove za budućnost. Jedna od ideja je da se Mojo proširi u smjeru sistemskog programiranja te da uz takva proširenja može zamijeniti programske jezike kao što su C, C++ ili Rust. Ako se uspije u tome, onda bi programeru na raspolaganju bio jedan jedinstveni programski jezik koji bi pokrivao sve razine programiranja – od sistemskog programiranja i upravljanja hardverom do najsloženijih AI aplikacija.

Online dokumentacija za korisnike koja prati programski jezik Mojo nalazi se na web adresi https://docs.modular.com/mojo/manual/parameters/. Slično kao što je to bio primjer i kod Ziga, ni ova dokumentacija nije pisana u stilu namijenjenom apsolutnim početnicima, nego korisnicima s bar nekim predznanjem Pythona.

Zaključak

I Zig i Mojo predstavljaju vrlo dobro rješenje na područjima za koja su namijenjeni. Međutim, kod programskih jezika je vrlo teško unaprijed predvidjeti sve faktore koji dovode do uspjeha ili neuspjeha nekog proizvoda u praksi.

Na kraju krajeva, danas živimo u vremenima kad možda više uopće neće biti važno je li neki programski jezik dobar za programere, nego će odlučiti to prihvaća li ga za razvoj budućih sustava neki od AI sustava (ili više njih), zar ne?

 

 

 

Vezani sadržaj:

  • OWASP Sigurnost aplikacija

    OWASP sigurnost aplikacija: što se promijenilo, a što nas i dalje muči

    OWASP je izbacio novu listu ranjivosti, a izbacuje ju svakih četiri godine. Idemo vidjeti ima li značajnih promjena.

  • iTop Easy Desktop

    Jednostavnost kad je trebaš

    Isprobajte drugačiju organizaciju desktopa.

  • Windows 10 na aparatima

    Potpuni kraj za Win10?

    Windows 10 era je, barem prema Microsoftu, završila. Službene podrške više nema i čest je scenarij da ljudi u rukama imaju sasvim solidna računala i/ili prijenosnike koji u potpunosti i dalje zadovoljavaju njihove potrebe. Međutim, dovoljno su „stari” da ne ispunjavaju minimalne zahtjeve za nadogradnju sustava na Windows 11 koje je zadao Microsoft te je prema njihovom naputku takva oprema spremna za reciklažu. Win 11 je sve što ima smisla ovoga trena i svima u toj situaciji je najbolje rješenje nabava novog računala. Realna situacija, naravno, nije toliko drastična, a rješenja i opcija za produljenje životnog vijeka takvih računala ima nekoliko: od produljenja podrške, neslužbenih metoda nadogradnje, pa sve do alternativnih operativnih sustava. Mogućnost odabira je u svakom slučaju i dalje na strani korisnika

  • AI agenti: MCP i A2A

    Od izoliranih agenata do umreženih inteligentnih sustava

    MCP i A2A mogu dramatično povećati produktivnost poslovnih informacijskih sustava.

  • SMPlayer

    Besplatan i svestran

    Odličan player koji je s nama već dvadeset godina.

// možda će vas zanimati

Newsletter prijava


Kako izgleda naš posljednji newsletter pogledajte na ovom linku.

Copyright © by: VIDI-TO d.o.o. Sva prava pridržana.