Ako ste nekim slučajem pročitali tekst istog autora iz prošlog broja časopisa, onda ste imali priliku upoznati se s načinom korištenja poznatog Microsoftovog razvojnog alata za Windows platformu (Visual Studio) za pisanje programa za Linux platformu. Platformu koju zbog svoje raširenosti više ne može ignorirati ni jedan ozbiljniji proizvođač razvojnih alata. Razvoj Linux aplikacija pomoću Visual Studija ipak zahtijeva određenu razinu predznanja oko konfiguriranja razvojne okoline te samog pisanja koda. Drugim riječima, nije riječ o nečem baš idealnom za potpunog početnika.
Postoji li nekakva jednostavnija alternativa za razvoj „prirodnih aplikacija“ za najpopularnije operativne sustave? Kad spominjemo prirodne aplikacije, onda tu mislimo na aplikacije koje se mogu potpuno samostalno pokrenuti u odgovarajućem operativnom sustavu bez potrebe za korištenjem nekakve posebne „infrastrukture“. To znači da u ovom slučaju nećemo uzeti u obzir različita skriptno orijentirana razvojna rješenja kao što su PHP, Go, različite JavaScript tehnologije i slično.
Iako nije jedino rješenje takve vrste, razvojni alat PureBasic (kojim ćemo se detaljnije pozabaviti u današnjem tekstu) sigurno predstavlja jedno od najjednostavnijih. Pogotovo za programere početnike. Budući da je u pozadini programski jezik BASIC (eto, nikako da izumre unatoč brojnim predviđanjima), ovo je ujedno dodatni razlog zbog kojeg pomoću PureBasica čak i potpuni početnici mogu vrlo brzo početi izrađivati različite vrste aplikacija.
1. Verzije, ograničenja i instalacija
PureBasic se može slobodno preuzeti s web adrese https://www.purebasic.com i instalirati na različite operativne sustave: Windows, Linux (Debian, Ubuntu), Mac OS, Raspberry Pi OS i AmigaOS. Da, dobro ste pročitali - PureBasic vam omogućuje da sa svojih starih Amigi obrišete prašinu i ponovo počnete pisati nove programe za njih (ako nekome to zbilja treba).
Na svim nabrojanim sustavima, opremljenima s odgovarajućim (dodatnim) grafičkim sučeljima (tu se prije svega misli na Linux), nisu potrebni nikakvi posebni preduvjeti. Osim - kao što je uobičajeno - za Mac OS. Tu prvo treba instalirati Xcode (srećom, također je riječ o besplatnom alatu). To je jednostavno tako zamišljeno od strane Applea - ograničenje koje proizvođači PureBasica (Fantaisie Software) nisu mogli zaobići.
Instalacija PureBasica je vrlo jednostavna. Nakon preuzimanja odgovarajuće verzije za ciljani operativni sustav, potrebno je pokrenuti program za instalaciju i to je kraj priče. Nakon toga se može pokrenuti razvojna okolina i započeti s programiranjem, to jest, pisanjem vlastitih aplikacija. Ako se osjećate ugodnije kod pisanja programskog koda u nekom drugom editoru ili razvojnoj okolini, nema nikakvog problema da ju koristite tijekom razvoja. Po potrebi, pomoću PureBasic prevoditelja samo prevedete napisani kod u izvršni oblik.
Zajedno s razvojnom okolinom, dobiva se i čitav niz primjera koji demonstriraju različite aspekte korištenja programskog jezika. Od najobičnijeg rukovanja stringovima ili korištenja matematičkih funkcija, preko upravljanja datotečnim sustavom, do 2D ili 3D grafike. Da, i to je izravno dostupno u PureBasicu.
Ako se s novim programskim jezikom više volite upoznavati čitanjem uputa nego isprobavanjem različitih primjera, ni tu nećete biti zakinuti. Za PureBasic su dostupne upute u PDF formatu na tričavih „1.725“ stranica. Toliki broj stranica može djelovati jednostavno zastrašujuće za programera početnika, ali je stvar u tome da ne trebate čitati baš sve redom da biste mogli vrlo djelotvorno koristiti programski jezik. Na primjer, ako želite pisati programe koji barataju datotečnim sustavom, onda detaljnije proučite početno poglavlje koje se bavi razvojem upravo takvih aplikacija. A nakon toga u popisu funkcija dodatno proučite samo funkcije povezane s tim istim dijelom. Na sličan način možete postupiti ako namjeravate izrađivati vlastito korisničko sučelje za unos podataka, pristup bazi podataka, ili razvijati 2D, odnosno 3D grafiku.
Tako opsežne upute pokazuju da PureBasic u sebi zaista obuhvaća mnogo toga, pa je kao takav prikladan za razvoj vrlo širokog spektra aplikacija. Drugim riječima, ne radi se o nekakvom jednostavnom „alatiću“ koji bi samo trebao pokazati da se pomoću njega mogu pisati jednostavnije aplikacije za različite operativne sustave, nego se pomoću PureBasica mogu pripremati zbilja vrlo složeni projekti.
Spomenimo na ovom mjestu (čisto da nam ne promakne) kako je u PureBasic ugrađena podrška za 2D grafiku koja se temelji na DirectX i OpenGL tehnologiji, te podrška za 3D grafiku povezanu s korištenjem popularnog OGRE sustava (https://www.ogre3d.org/). U pogledu korištenja baza podataka izravno u programskom jeziku, podržano je nekoliko najpopularnijih sustava za upravljanjem bazama podataka: SQLite, PostgreSQL, MySQL i DBMaria. Uz pomoć odgovarajuće konfiguriranog ODBC upravljačkog programa na računalu, može se pristupiti i drugim sustavima za upravljanje bazama podataka, kao što su Oracle, Access i ostali.
Budući da se PureBasic može slobodno preuzeti i koristiti, postoje li nekakva ograničenja zbog kojih bi trebalo nabaviti komercijalnu verziju? Najvažnije ograničenje je u tome što u besplatnoj verziji možete pisati programe maksimalne dužine do 800 programskih linija koda. Riječ je o vrlo pametno postavljenoj granici, jer omogućava proizvođaču da pripremi prilično složene primjere za demonstraciju različitih mogućnosti razvojnog alata. Međutim, ako pokušate napraviti vlastitu, nešto složeniju aplikaciju na temelju više takvih primjera (na primjer, upravljanje serijskim portom uz odgovarajuće korisničko sučelje za podešavanje parametara i zapis pročitanih podataka u bazu podataka), gotovo sigurno će tako postavljena granica postati ograničenje u korištenju besplatne verzije.
U tom slučaju, preostaje vam jedino da nabavite komercijalnu verziju. Ona se prodaje po tri različite cijene, ovisno o tome što vam treba. Svaka verzija uključuje potpuno slobodnu distribuciju vlastitih aplikacija, te pravo korištenja na različitim operativnim sustavima.
1. 79 dolara - verzija za jednog programera
2. 199 dolara - školska verzija za jednu učionicu
3. 499 dolara - verzija za neograničeno korištenje u cijeloj tvrtki (za veći broj programera)
Verzije PureBasica: Podržani su operativni sustavi Windows, Linux (Debian, Ubuntu), Mac OS, Raspberry Pi OS i AmigaOS
PDF Upute: Zbilja su vrlo detaljne (1.725) stranica, ali srećom ne morate čitati sve po redu, čak i za ozbiljniji razvoj aplikacija
Korištenje i kompatibilnost
Kao što smo već napisali nešto ranije, PureBasic možete koristiti za razvoj aplikacija iz njegove vlastite razvojne okoline, ili možete pisati kod u bilo kojem editoru te ga pomoću PureBasica samo prevesti u izvršni oblik. U nastavku teksta podrazumijeva se da koristimo njegovu prirodnu razvojnu okolinu, kako bismo detaljnije demonstrirali što nudi taj dio paketa.
Kako izgleda razvojna okolina s učitanim primjerom programa, možete vidjeti na slikama uz tekst. Najvažnije je primijetiti da sve izgleda potpuno jednako na različitim operativnim sustavima, osim neizbježnih razlika u samim operativnim sustavima. Na primjer, na svim prozorima (i u razvojnoj okolini i u vlastitim aplikacijama) razlikuju se načini na koje Windowsi i Mac OS prikazuju gumbe za promjenu veličine prozora. Na taj način nemate nikakvih posebnih problema ako na svojem omiljenom operativnom sustavu razvijate aplikaciju, a onda na ostalim podržanim operativnim sustavima samo napravite prevođenje izvornog koda u izvršni.
Razvojna okolina podržava sve standardne operacije na kakve ste navikli iz drugih razvojnih okolina u pogledu manipulacije datotekama, uređivanja programskog koda (npr. pretraživanje i ostalo), a dostupno je i automatsko dovršavanje naredbi. Premda treba biti pošten i reći da taj zadnji dio nije na istoj razini kao kod nekih drugih razvojnih okolina (na primjer, prikaz svih mogućih parametara naredbe). Također, dostupan je i potpuno funkcionalni program za traženje grešaka s uobičajenim mogućnostima poput postavljanja prekidnih točaka, izvođenja naredbu po naredbu s ulaskom u funkciju ili njezinim preskakanjem, itd. Ako se već niste od prije „navukli“ na neku drugu razvojnu okolinu, ovdje ćete pronaći praktično sve što vam je potrebno, tako da ne trebate tražiti dalje.
Vlastitu aplikaciju možete pisati tako da se cjelokupan kod nalazi u jednoj datoteci, ili možete veći broj datoteka povezati u projekt. Što je također uobičajeni način organiziranja i pisanja programskog koda u različitim razvojnim okolinama.
Idemo sad pogledati kako izgleda programski kod napisan u PureBasicu. Riječ je o primjeru koji dolazi u pratećem „pakiranju“ primjera te pokazuje kako se na prozoru priprema alatna traka.
UsePNGImageDecoder()
If OpenWindow(0, 100, 200, 195, 260, “ToolBar example”, #PB_Window_SystemMenu | #PB_Window_SizeGadget)
If CreateToolBar(0, WindowID(0))
ToolBarImageButton(0, LoadImage(0, #PB_Compiler_Home + “examples/sources/Data/ToolBar/New.png”))
ToolBarImageButton(1, LoadImage(0, #PB_Compiler_Home + “examples/sources/Data/ToolBar/Open.png”))
ToolBarImageButton(2, LoadImage(0, #PB_Compiler_Home + “examples/sources/Data/ToolBar/Save.png”))
ToolBarSeparator()
ToolBarImageButton(3, LoadImage(0, #PB_Compiler_Home + “examples/sources/Data/ToolBar/Cut.png”))
ToolBarToolTip(0, 3, “Cut”)
ToolBarImageButton(4, LoadImage(0, #PB_Compiler_Home + “examples/sources/Data/ToolBar/Copy.png”))
ToolBarToolTip(0, 4, “Copy”)
ToolBarImageButton(5, LoadImage(0, #PB_Compiler_Home + “examples/sources/Data/ToolBar/Paste.png”))
ToolBarToolTip(0, 5, “Paste”)
ToolBarSeparator()
ToolBarImageButton(6, LoadImage(0, #PB_Compiler_Home + “examples/sources/Data/ToolBar/Find.png”))
ToolBarToolTip(0, 6, “Find a document”)
EndIf
If CreateMenu(0, WindowID(0))
MenuTitle(“Project”)
MenuItem(0, “New”)
MenuItem(1, “Open”)
MenuItem(2, “Save”)
EndIf
DisableToolBarButton(0, 2, 1) ; Disable the button ‘2’
;
; The event loop. A ToolBar event is like a Menu event (as tools are shortcut for menu the most
; of the time). This is handy, as if the ToolBar buttons and the MenuItem have the same ID, then
; the same operation can be done on both action without any adds..
;
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
MessageRequester(“Information”, “ToolBar or Menu ID: “+Str(EventMenu()), 0)
Case #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndSelect
Until Quit = 1
EndIf
End ; All resources are automatically freed
Komercijalna verzija: Dostupna je za pojedince, cijele razrede (obrazovna verzija) ili cijele softverske tvrtke.
Razvojna okolina (Windows): Osnovni izgled razvojne okoline s učitanim primjerom programa
Kao što je vidljivo iz prethodnog primjera, korištenje osnovnih kontrolnih struktura ili komentara, odnosno pozivanje funkcija iz biblioteka, jednako je kao i u drugim modernim BASIC-ovima. Bez problema ćete koristiti PureBasic, ako ste već od prije upoznati s nekim drugim sličnim dijalektom jezika.
Ako krećete potpuno ispočetka, uz malo konzultacija s priručnikom ili pregledom pratećih primjera, također ne biste trebali imati previše problema kod započinjanja s razvojem vlastitih aplikacija.
Ono što razlikuje PureBasic od modernih BASIC-ova jest način „hvatanja“ različitih događaja u programskom kodu. Umjesto da takav programski kod dodajete u funkcije pripremljene od strane razvojne okoline i povezane s odgovarajućim objektima, kod PureBasica morate u samom kodu napisati da želite „uhvatiti“ određeni događaj. U prethodnom primjeru je to konkretno naredba:
Event = WaitWindowEvent()
Kad je riječ o objektno orijentiranom programiranju, onda tu PureBasic malo „šepa“ za konkurencijom. Ako ipak želite simulirati takav pristup razvoju aplikacija (bar za neke dijelove), onda možete konzultirati vrlo detaljnu dokumentaciju i primjere na web adresi:
Korištenje 2D i 3D grafike nije previše komplicirano zbog već spomenute podrške za odgovarajuće grafičke biblioteke. Na primjer, sljedeći dio programskog koda demonstrira kako se upravlja kamerom kod korištenja 3D grafike, te istovremeno „hvataju“ operacije korisnika na mišu i tipkovnici.
If Screen3DRequester()
AmbientColor(RGB(0, 200, 0)) ; Green ‘HUD’ like color
CreateMaterial(0, LoadTexture(0, “r2skin.jpg”))
CreateEntity(0, LoadMesh(0, “robot.mesh”), MaterialID(0))
StartEntityAnimation(0, “Walk”)
CreateCamera(0, 0, 0, 100, 50) ; Front camera
MoveCamera(0, 0, 20, 250, #PB_Absolute)
CameraBackColor(0, RGB(55, 0, 0))
CreateCamera(1, 0, 50, 100, 50) ; Back camera
MoveCamera(1, 0, 20, -250, #PB_Absolute)
CameraBackColor(1, RGB(25, 25, 25))
RotateCamera(1, 180, 0, 0)
CameraRenderMode(1, #PB_Camera_Wireframe) ; Wireframe for this camera
Repeat
Screen3DEvents()
If ExamineMouse()
MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
RotateEntity(0, 0, 0.1, 0, #PB_Relative)
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RotateCamera(1, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (1, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester(“Error”, “The 3D Engine can’t be initialized”,0)
EndIf
Kao što smo već ranije spomenuli, jedna od najvažnijih i najvrjednijih karakteristika PureBasica je to što se isti programski kod može prevesti i izvesti bez promjena na svim podržanim operativnim sustavima. Nažalost, postoje situacije u kojima to jednostavno nije moguće. Evo primjera. U datotečnim sustavima za operativne sustave Windows i Linux jednostavno postoje takve razlike u atributima datoteka da dio programskog koda ne može nikako biti isti u oba slučaja, ma koliko se potrudili autori razvojnog alata.
U takvim situacijama rješenje ipak postoji, a to je provjera operativnog sustava na kojem se prevodi i izvodi vaša aplikacija. Nakon otkrivanja trenutno dostupnog operativnog sustava, na jednom operativnom sustavu možete izvesti jedan dio koda, a na drugom drugi. Otprilike nešto slično kao u nastavku:
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
; jedan dio koda
CompilerElse
; drugi dio koda
CompilerEndIf
Za napredne programere koji pomoću PureBasica namjeravaju iscijediti svaki mogući ciklus iz procesora, dostupna je i mogućnost uključivanja asemblerskih dijelova u PureBasic kod. Nešto u stilu:
; x86 assembly
Test = 10
EnableASM
MOV dword [ v_Test ] ,20
DisableASM
Debug Test ; Rezultat je 20
Kao asembler se koristi inače samostalno dostupan razvojni alat s web adrese: http://flatassembler.net/download.php
Razvojna okolina (Mac OS): Sve izgleda praktički jednako osim neizbježnih razlika u operativnim sustavima
Zaključak
Iako postoji mogućnost kupovine i nesmetanog korištenja PureBasica za cijele razvojne timove, nekako nam se čini da to neće biti glavni način korištenja razvojnog alata. U takvom okruženju postoje različite vrste IT stručnjaka - programeri, dizajneri, administratori baze podataka, pa je PureBasic jednostavno nekako „preslab“ da zadovolji sve zahtjeve.
Međutim, ako ste programer početnik koji želi što jednostavnije pripremiti vlastitu aplikaciju za različite operativne sustave, onda ulaganje 79 dolara u kupovinu komercijalne verzije može predstavljati vrlo isplativu investiciju. To isto vrijedi i za iskusne programere koji rade u stilu „one-man band“.
Teško da možete naći alternativu za tako jednostavnu i brzu pripremu različitih vrsta aplikacija za različite vrste operativnih sustava. Naravno, pod uvjetom da još uvijek znate pisati programski kod bez uključene podrške za objektno programiranje.