Įvadas
Kas naudinga BeOS kūrėjams? Atsakymas sukelia ne magišką, bet tik bendrą pojūtį. Aš greičiausiai nesu autoritetas, kai kalbama apie įvairių platformų palyginimus, bet aš galiu pasakyti Jums mintis ir įspūdžius iš savo asmeninės patirties įgautos per daugelį metų programuojant įvairioms platformoms. Svarbiausia ką aš pasakyčiau apie BeOS- ji turi aiškią, logišką API, kai daugelyje kitų OS (ypač Win32) to trūksta. Pavyzdžiui, palyginkime lango sukūrimo procedūrą. Win32 aplinkoje, Jūs tai darote šitaip: static void RegisterWindowClass(HINSTANCE hInstance, bool close) { WNDCLASSEX wndClass; wndClass.cbSize = sizeof(wndClass); wndClass.style = CS_HREDRAW | CS_VREDRAW; wndClass.lpfnWndProc = WndProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hInstance; wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.hbrBackground = NULL; wndClass.lpszMenuName = NULL; wndClass.lpszClassName = WindowClassName; wndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if ( close==false ) wndClass.style |= CS_NOCLOSE; RegisterClassEx( &wndClass ); } ... // registruojame lango klasę HINSTANCE hInstance = NULL; RegisterWindowClass( hInstance, ws.close ); // sukuriame langą mWinHandle.hwnd = CreateWindow( WindowClassName, name, mask, 0, 0, width, height, NULL, NULL, hInstance, NULL ); // nustatome win32 hwnd vartotojo duomenis // lango objektui SetWindowLong( mWinHandle.hwnd, GWL_USERDATA, (LONG)this ); Asmeniškai, aš niekada nebuvau vengriškos
notacijos fanas- tai man atrodo, kaip nukrypimas nuo programavimo kalbų
evoliucijos [Taip, BASIC bandė
tai su rimtomis neigiamomis pasekmėm, bet tai dizaino klaida, o ne
lingvistinė klaida] Dabar palyginkime ką Jūs turite daryti BeOS aplinkoje: Paprastam langui sukurti: BWindow *win = new BWindow( BRect( x, y, x+width, y+height), "My test window", B_NORMAL_WINDOW, B_NOT_CLOSABLE|B_NOT_RESIZABLE);Sudėtingesniam: SuperWindow *win = new SuperWindow( BRect( x, y, x+width, y+height), "My test window", B_NORMAL_WINDOW, B_NOT_CLOSABLE|B_NOT_RESIZABLE); class SuperWindow : public BWindow { SuperWindow(.....); // ...... galite įrašyti ir savas f-jas } SuperWindow::SuperWindow(BRect frame, char *title, window_type type, uint32 flags ) : BWindow(frame,title,type,flags) { // papildomas vartotojo kodas..... }
Kaip
galima buvo matyti aukščiau, paprastas langas, su valdyklėmis
pagal nutylėjimą, gali būti sukurtas VIENOS kodo eilutės pagalba,
šaunu! Kuriant langą, jis tuoj pat persikelia į savo nuosavą srautą
(thread), taigi konstruktorius neblokuoja ir įvykių valdyklė (event
handler) iškviečiama
naujame sraute (tread). Po to, Jūs galite keisti šiuos langus paveldėdami
Window klasę savo klasėje; taip, tai tiesa- kaip Jūs greičiausiai ir
manote, Window klasė, kaip ir kitos bazinės API klasės BeOS siūlomos
C++ kalba, skirtingai nuo Win32 ar Unix, kurių API
sukurtos C kalba. Kiekviena BeOS klasė yra lengvai paveldima,
kas leidžia padidinti ir pritaikyti sau funkcionalumą, išlaikant
suderinamumą su kitomis klasėmis. Faktiškai, aš pripažįstu, kad
prieš pradedamas kurti BeOS, aš niekada nesivarginau aiškintis
C++ galimybių, kadangi nesitikėjau jos naudoti didelio greičio grafinėse
programose [pvz. žaidimuose], bet pamatęs kaip elegantiškai ji atrodo
ir dirba ir, kaip paprasta praplėsti jau esantį kodą, aš neįsivaizduoju
savęs nenaudojant tai.
BeOS
remiasi Application Server'iu, programa, kuri seka
visas sistemoje vykdomas programas, dauguma kurių
naudoja GUI, ir atitinkamai išskiria resursus.
Nors tai gali atrodyti keistokai ar nenaudingai, ji
suteikia standartinę struktūrą, kurios pagalba
kiekviena programa gali tvarkingai bendrauti su
kitomis. Gaila, bet aš dar neištyriau šios BeOS
architektūros dalies, bet aš sutinku, kad tai
yra viena iš labiausiai girtina naujovė. Dažniausias
tarprograminis bendravimo metodas yra BMessage,
kuris neatsitiktinai taip pat yra programų viduje
veikiančių objektų bendravimo metodas. BMessage
sudarytas iš identifikacijos kodo ir duomenų
rinkinio, kuo gali būti daugelis egzistuojančių
modelių (tokie kaip taškas ekrane [BPoint klasė]
arba sveikasis skaičius ir t.t.) ar vartotojo
sukurti duomenys. Siuntėju ir gavėju nebūtinai
turi būti ta pati programa. Kažkoks kodas kurioje nors
vietoje:
Pagrindinis Application Message Handler:
Naujoji BeOS OpenGL API yra iš esmės paprastesnė nei WGL, ypač inicializacijoje, nors aš jaučiu, kad senesnė API (matyta R4.5) buvo labiau atitinkanti OS. Pagrinde, naujoji OpenGL Kit paveldėta iš DirectWindow klasės, pastaroji remiasi BWindow su vieninteliu tiesioginio priėjimo prie vaizdo kortos vaizdų buferio (framebuffer) skirtumu. Pradėti dirbti OpenGL yra labai paprasta [nors aš ir nematysiu dirbant su Prophecy]: MyDirectGLWindow *window = new MyDirectGLWindow( BRect( 100.0, 100.0, 100+width-1, 100+height-1 ), "title of the game", B_NORMAL_WINDOW, B_ASYNC_CONTROLS);ir MyDirectGLWindow CTR Jūs turėsite: EnumerateDevices( BGL_MONITOR_ANY, BGL_ANY | BGL_DOUBLE, BGL_ANY, BGL_NONE, BGL_NONE );... tam, kad sužinoti informaciją apie įrangą ir režimą, darykite taip: if(InitializeGL( some_device, BGL_ANY | BGL_DOUBLE, BGL_ANY, BGL_NONE, BGL_NONE ) < B_OK ) { debugger( "Error from InitializeGL \n" ); // to "crash" and invoke debugger w/ message return NULL; }Toliau Jūs turite nurodyti GL, kuri gyja (thread) vykdys atvaizdavimą (rendering). Patarčiau nustatyti atskirą gyją paišymui ir iškviesti: window->MakeCurrent(); call your glXXXX(...) commands window->ReleaseCurrent(); // to allow other threads to render.Pabaigoje iškvieskite: ShutdownGL();ir štai viskas- veikianti GL programa. Aš nenorėčiau dėti čia atitinkamo Win32 kodo Jums =) Dabar galbūt Jūs paklausite savęs [aš tikiu],"API yra šauni, bet kas iš geros API, jei nieko nežinome apie OS? Gerai, pati OS buvo sukurta turint galvoje- media greitis. Turėjome apie 20 metų "malonaus" programavimo Unix ir Win32 palikimą, turėjome atbulinio suderinamumą. OS yra gryna GUI, čia NĖRA tekstinio režimo, tuo pat metu čia yra POSIX suderinamumo sluoksnis, tai tik tarnauja kaip apsiaustas BeOS sisteminėms (native) funkcijoms, ir tai būdas perkelti daugelį Unix programų į BeOS aplinką, nors tai ir CLI[bash], bet jis lange, kaip ir XTerm. Dažnai, daugelis žmonių mano, kad BeOS branduolys (kernel) remiasi Linux branduoliu (kernel), nors iš tikrųjų visas branduolys parašytas nuo nulio. BeOS branduolys, nors ir turi seno kodo, yra vienintelis, mano žiniomis, kuris specialiai optimizuotas SMP [tai todėl, kad BeOs iš pradžių buvo kuriamas dirbti Be, Inc. kompanijos BeBox sistemose (SMP PPC sistema) su novel galimybėmis, kaip belaidžios jungtys (wireless ports) [tai buvo 1991]. BeOS turi originalią failinę sistemą, kurią giria daugelis programų inžinierių. Ji yra viena iš nedaugelio tikroji žurnalinė failų sistema (true journaling file system) (kita, apie kurią aš žinau, yra Aurora [naujausioje OS/2 versijoje]). Jums nebereikia rūpintis duomenų praradimo ar fragmentacijos problemomis. Nelaimei, ji buvo sukurta valdyti labai didelius failus (video ar garso įrašus), todėl mažų failų valdymas joje nėra pats geriausias. Gerai, Jūs išgirdote įprastus žodžius apie šį bei tą. Taigi, kodėl aš naudoju ją? Iš esmės, tai greičiausia OS, kuria aš naudojausi, ji atrodo solidžiai [nulūžo galbūt 5 kartus per 1.5 metų ir tai dėl beta tvarkyklių], API yra didi, ji atrodo šauniai, jokio bjauraus konfigūravimo [a la Linux] ir, kas geriausia, paskutinė jos versija nemokama (BeOS 5 Personal Edition)! Ar aš minėjau, kad ji startuoja per 15-20s? Taigi, kokia nauda? Kadangi yra mažai kūrėjų, Jūs neturite daugelio programų, nors čia ir yra keletas labai šaunių- Gobe Productive teksto redagavimui (MS-Word dalinai palaikomas), Easel ar Artpaint- grafikai (Easel gali naudoti GIMP priedus), ir Digital Tracker garso apdorojimui. Taip pat yra ir žaidimų- Corum III (korejietiško stiliaus animacinė RPG), Civilization: A Call to Power, ir daug perkeliamų- Quake III, Outcast ir Black and White. Man atrodo, kad BeOS yra gera OS žaidimams dėl savo multimedia architektūros. Aš girdėjau kalbas, kad "Jei tai media-OS, tai kodėl aš negaliu matyti šio .AVI failo", ir viskas dėl to, kad nėra koderio (codec), bet juk tai nieko neturi bendro su esamos OS architektūra. Jūs pabandykite pilnaekraninį vaizdą (full screen raw video) redaguoti Win32, o po to- BeOS- ir Jūs tuoj pat pajusite skirtumus! Komp. įrangos (hardware) tvarkyklės taip pat yra problema, jei Jūs turite senesnę įrangą, tai beveik 100% šansų, kad ji neveiks BeOS aplinkoje. Tai labiau priklauso nuo įrangos gamintojo, kurie rašo tvarkykles Win32 platformai, ne pati Microsoft firma. Suprantu, kad jie nerašys tvarkykles BeOS sistemai, kadangi dar yra labai mažai vartotojų, bet tai smarkiai pasikeis, kai nemokama R5 paplis. Aš tikiuosi, kad BeOS populiarumas išaugs ir žmonės galės išbandyti pirmąją vartotojui patogią Windows alternatyvą Intel platformoje. Daugiau informacijos apie BeOS rasite: http://free.be.com/
..R5 atsisiuntimui ir pagrindiniai FAQ Joseph
Mocanu BeOS Development
Coordinator |
||||||||||||||||||||
Atnaujinta: gruodžio 03, 2000.