PC Press
O nama
O nama
Pretplata
O nama
Postanite saradnik PC-ja
Kontakt sa redakcijom
PC Press
Novi broj
Novi broj   
Pretrazivanje
Arhiva
Arhiva   
PC Online
PC Plus   
Specijalna izdanja
Softver Softver
PC #39 : Oktobar 1998

 Naslovna  Sadržaj 
Zoran Životić  

Ne samo Lego kocke

Došlo je vreme za ovogodišnju reviziju glavnih programerskih alata - Microsoft je predstavio Visual Studio 6, koji ne donosi promene u osnovnoj koncepciji, ali je i ovog puta sve postalo još bogatije, doteranije, pa i efikasnije...

Microsoft već dugo tvrdi da programiranje može biti jednostavno kao sastavljanje Lego kockica. Ako vam treba nešto jednostavno a niste baš vični sastavljanju, možete uzeti Basic model i naslagati čak i sasvim ozbiljnu kreaciju. Ako smatrate da ste prevazišli „krupne kockice“, možete uzeti moćnije Technik elemente (C++) i postići punu kreativnost. A ako volite nove tehnike, možete probati sa neobičnijim modelima poput Jave... A Internet? I za to imamo sve što treba, u posebnoj kutiji...

Teško je reći da li je ovakva koncepcija dobra ili ne, ali sigurno je da, ako uspeju da tu koncepciju isteraju do kraja, konkurencije u programerskim alatima više neće biti. Visual Studio 6.0 je još jedan jasan korak u tom pravcu, jer je već sada izvesno da će se teško pojaviti konkurentski paket koji sadrži takvu količinu doteranih i bogato dokumentovanih alata. Ipak, nemojte otpisivati ovaj proizvod kao „šminku“ namenjenu isključivo učvršćivanju dominacije Microsoft-a. Ako vam treba dobar, brz i pouzdan kompajler, naći ćete ga u ovom paketu.

Tri varijante

VisualStudio 6.0 se isporučuje u tri varijante – Standard, Professional i Enterprise Edition. Iz dokumentacije koja je nama bila na raspolaganju nije do kraja jasno od čega se precizno sastoji svaki od ovih paketa, pogotovo što se pored Visual Studia, koji se sastoji od više alata, može nabaviti i svaki od alata posebno (npr. Visual C++, u Standard, Professional ili Enterprise izdanju). Koncepcija je da Standard izdanje sadrži neophodan minimum za razvoj aplikacija, Professional izdanje bude potpun komplet, dok je Enterprise paket zapravo Professional, ali formiran oko Microsoft SQL Server-a. Ta verzija je, uz dodatne alate za dizajniranje, razvoj i testiranje komponenti za pristup podacima, orijentisana prevashodno ka poslovnoj primeni u složenim korporativnim okruženjima. Kako to izgleda na primeru Visual C++, samo jednog od alata koji čini Visual Studio, saznaćete iz tebele 1.

Microsoft je na test poslao Visual Studio 6.0 Enterprise Edition. Paket čini šest razvojnih okruženja i dokumentacija: Visual Basic, Visual C++, Visual FoxPro, Visual IneterDev, Visual J++, Visual SourceSafe i MSDN Library. Na žalost, u tekstu ovog obima nije moguće čak ni prosto nabrajanje modula i alata koji čine, tako da smo odlučili da prikažemo dva verovatno najpopularnija dela – Visual C++ i Visual Basic, o kome ćete čitati u tekstu „Bejzik za baze podataka“.

Pre nego što instalirate VS 6.0, obavezno „raščistite“ disk: ako odlučite da instalirate svih šest alata, biće vam potrebno barem 500 MB za tipičnu instalaciju, dok MSDN dokumentacija traži još oko 600 MB. Moguće je, naravno, proći i „jeftinije“, ali ćete kasnije povremeno morati da umećete neki od 7 CD-ova koji čine paket. Čak ni sa varijantom od 1.1 GB, koju sam ja izabrao, nećete biti pošteđeni te operacije jer se, recimo, primeri ne prenose na disk.

Instalaciona procedura će vas na samom početku naterati da instalirate najnoviju verziju Internet Explorer-a (4.01 SP1) koji je, kako će vam biti predstavljeno, važna komponenta Visual Studia. Ukoliko imate prethodnu verziju (Visual Studio 97), moći ćete da je zadržite (tako je bar u ovoj varijanti instalacije za Release Candidate 1 koji smo dobili), ali će vam biti ponuđena i automatska deinstalacija, kako biste uštedeli prostor na disku.

Visual C++

Kada pokrenete razvojno okruženje, sačekaće vas poznati izgled, organizacija radnog prostora i meniji. Ipak, u svakoj od prethodnih verzija Microsoft je ubacivao po neko prijatno iznenađenje – ovoga puta to je deo IntelliSense tehnologije primenjen na editor. Verujem da vam se ponekad desi da zaboravite tačan naziv svoje funkcije; da i ne govorimo o Win32 funkcijama ili MFC klasama. Do sada ste morali da zastanete i potražite zaglavlje u kome se nalaze deklaracija ili da pretražite dokumentaciju. Sada je dovoljno da pritisnete Ctrl+Space – ako je deo koji ste otkucali jedinstven, editor će sam dopuniti ostatak reči, dok dileme razrešava tako što vam ponudi listu – na vama je da odaberete ono na šta ste mislili. Verujem da će se poneki „pravi programer“ namrštiti nad činjenicom da mu je potrebna pomoć računara da bi se setio nečega što bi, po definiciji, trebalo da zna. Ipak, čak i takav programer mora priznati da nema načina da, pored naziva funkcije, zapamti i sve njene parametre! IntelliSense tehnologija i ovde nudi lepo rešenje – kada otkucate otvorenu zagradu, na ekranu se pojavljuje žuta „nalepnica“ sa ispisanom deklaracijom funkcije. Ova nalepnica nestaje kada zatvorite zagradu, pri čemu će parametar koji trenutno kucate biti istaknut masnim slovima.

Nove opcije u praksi funkcionišu skoro savršeno i u nekim situacijama mogu uštedeti puno vremena. Najvažnije je da ne remete koncentraciju i da deluju nenametljivo, sve do trenutka kada vam zatrebaju. Naravno, ne treba očekivati čuda: editor ne može da zna na šta ste mislili ako otkucate samo dva-tri slova – lista koju ćete dobiti biće ogromna, pa šetnja kroz nju nije mnogo komfornija od pretraživanja odgovarajućeg zaglavlja. Podatke o funkciji, parametru, promenjivima itd možete dobiti i postavljanjem split-hair kursora iznad teksta (kao što je do sada bilo moguće u debug modu videti vrednost promenjive), ali ovo je posebna opcija, pa je i način prikaza drugačiji.

Izmene u hodu

Dok je pronalaženje liste parametara neke funkcije bilo usko grlo pri pisanju koda, u debug režimu su usko grlo greške uočene tokom kretanja kroz program. Do sada je trebalo prekinuti rad programa, izmeniti kod, prekompajlirati program i ponovo započeti debug seansu. Sada je na raspolaganju Edit & Continue – unesete izmene i nastavite kretanje kroz program, a kompajler će u „letu“ prevesti kod i omogućiti da nastavite od mesta na kome ste stali. Kod manjih izmena vreme potrebno da se izmenjeni kod prekompajlira je skoro neprimetno. Kompajler se u ovom delimičnom prevođenju prilično dobro snalazi, pa ga ne zbunjuje čak ni izbacivanje linija koda na kojima se trenutno nalazite.

Debager je dobio još nekoliko manjih, izuzetno korisnih mogućnosti. Prva je stalan uvid u rezultat GetLastError() funkcije, koji se vidi kao pseudo registar ERR. Ako u Watch prozoru otkucate err,hr (hr je novi tip modifikatora) dobićete tekstualni ispis tekućeg statusa sistemske promenjive koja sadži kod poslednje greške. Ređe potrebna, ali još korisnija opcija je „Lista modula“ (Debug / Modules) – dobijate pregled svih .dll-ova (redosledom kojim su učitavani), opseg adresa koje zauzimaju i, posebno korisno, punu putanju do .dll datoteke.

Vremenom ćete primetiti i druge izmene u debageru – bolji prikaz „nedekorisanih“ C++ imena, prikaz naziva funkcija i njihovih parametara refereisanih preko pointera umesto sadržaja samog pointera, prikaz sadržaja MMX registara i slično.

Unapređeni kompajler

Ni kompajler nije ostao bez poboljšanja. Prva razlika je nešto bogatiji prikaz potencijalnih grešaka u programa (upozorenja). Do sada se kompajler „bunio“ u situaciji kada funkcija treba da vrati neku vrednost a nigde u njoj ne postoji return izraz. Ovakva najgrublja mehanička analiza nije pružala zaštitu od funkcija koje mogu završiti rad u jednoj od više mogućih grana – return samo u jednoj od njih je bio dovoljan da zadovolji kompajler.

Sada se analiziraju sva moguća grananja i daje upozorenje ukoliko u nekom od njih postoji izlaz bez povratne vrednosti. Iako se ova analiza generalno može smatrati korisnom, postaje dosadna u situacijama kada je iz run-time toka programa sasvim jasno da program nikada ne može doći do mesta na kome postoji izlaz bez povratka vrednosti. Naravno, potpuno tačna analiza u fazi kompajliranja nije moguća ali su ipak napravljene osnovne provere. Ako napišete beskonačnu for petlju, kompajler će korektno zaključiti da u petlji nema uslova za izlazak, pa neće biti upozorenja. Ako se doda samo deo sa uslovom (na primer for(i=0; i0;;) pojaviće se upozorenje, pošto kompajler nema načina da zna sve vrednosti promenjive u toku rada programa.

Druga izmena se odnosi na analizu složenih logičkih izraza. Tačan algoritam nije poznat, ali ćete za konstrukciju:

if ( a  b | c  d ) ..

dobiti zasluženo upozorenje da se radi o sumnjivom razumevanju redosleda operacija i da je bolje da upotrebite zagrade. Kompajler ne može da zna da ste greškom umesto logičkog OR operatora ( || ) upotrebili binarni BIT-OR operator, ali ćete i sa ovako „pogrešnim“ upozorenjem lako otkriti grešku.

Uvedena su i dva dodatka koji omogućavaju kompajleru bolju optimizaciju koda. Uz pomoć __assume možete da naznačite konstantnost nekog izraza u određenom delu programa, bez obzira što izraz u vreme izvršavanja može biti promenjiv. Jedna od upotreba je i:

switch( expresion) {
  case 0: do_something(); break;
  case 1: ...
  default: __asume(0); }

Ovako ste kompajleru „rekli“ da expresion nikada neće imati vrednost van navedenih slučajeva (case). Uz tu informaciju komapajler može da generiše kraći i brži kod.

Drugi dodatak se odnosi generisanje in-line koda funkcije. Standardna in-line direktiva ostavlja slobodu kompajleru da proceni da li će se, prema ostalim zadatim uslovima (tip tražene optimizacije i slično) postići odgovarajući efekat ako generiše in-line kod. Sada možete koristiti __forceinline direktivu kojom direktno naređujte kompajleru da upotrebi in-line kod u svim situacijama kada je to uopšte moguće.

Staro i novo

U internim strukturama datoteka koje čine projekat je opet napravljena izmena (ovo je već postala redovna pojava sa svakom novom verzijom), ali će i ovog puta VC ponuditi da odmah preformatira stari projekat, uz čuvanje prethodne verzije. Učinjene izmene omogućavaju i da se deo informacija do sada skrivenih u nepoznatom binarnom formatu pojavi u čistom ASCII obliku kako bi se lakše pravile izmene kada eksportujete makefile i želite da koristite konzolnu verziju NMAKE. Interesantno je da je Microsoft procenio da ima dovoljno interesovanja za ovakav način rada, pa je u paket stavio i MSDEV program koji kompajlira projekat iz komande linije i koristi direktno project (.dsp) ili workspace (.dsw) datoteke (jedan od programskih primera pokazuje kako se može u određeno vreme aktivirati kompajliranje programa i rezultate operacije poslati e-mail-om na zadatu adresu)

Što se tiče samog procesa prevođenja i optimizacije, imamo i dobru i lošu vest. Microsoft navodi da je brzina prevođenja poboljšana kod projekata koji imaju velika predkompajlirana zaglavlja i da se ubrzanja kreću od 15 do 30%. Verovatno postoje slučajevi u kojima je ova tvrdnja tačna, no ako uporedimo onu svakodnevnu brzinu prevođenja, VC6.0 je nešto sporiji od prethodne verzije. Merio sam brzinu prevođenja jednog od složenijih projekata (oko 60 programskih celina sa 20-tak zaglavlja) i za ono što VC5.0 prevede za 1 minut i 55 sekundi (Pentium II, 300 MHz) „šestici“ treba 2 minuta i 25 sekundi – približno 25% više.

Dobra vest je da novi komapajler generiše primetno kraći kod. Ovakva konstatacija teorijski ne mora da znači ništa, ali poznajući Microsoftove C kompajlere od prvih dana, onda obično ukazuje na još bolju optimizaciju i efikasniji kod. Microsoft je poznat po tome što ponekad „pretera“ pa uključivanje maksimalne optimizacije može da generiše pogrešan kod. Utvrditi postojanje takvih grešaka je izuzetno teško – one obično „isplivaju“ posle dužeg korišćenja (i naravno baš onda kada vam to najmanje treba). Zato o pouzdanosti mogu reći samo ono što stoji za verziju 5.0 sa kojom do sada imam dovoljno iskustva, a ipak nisam primetio nikakve probleme. Ostaje da se nadamo da je tako i u ovoj verziji.

Dokumentacija

Dokumentacija je reorganizovana. U verziji 5.0 smo imali mešavinu browser/interni help, a sada je browser koncepcija dosledno sprovedena, kao surfovanje po MSDN-u. Poziv help-a aktivira poseban browser koji liči na klasičan MSDN u kome se dalje krećete sistemom hiperlinkova ili preko kontrole na levoj strani koja nudi sadržaj, indeks, pretraživanje... Ako vam se u prethodnoj verziji prelazak na HTML format i sporost help sistema nisu svideli, tek sada ćete imati razloga za žalbu! Pokretanje help-a je još sporije, zbog obimnog sadržaja koji je manje fokusiran nego ranije. Ako vam ne smeta još jedan stalno otvoren prozor, pristup sadržaju je znatno brži.

Verujem i da će izmene u izgledu strana i preglednosti biti dobro prihvaćene. Ipak, zamerke operativnosti ne mogu osporiti značaj MSDN-a, najkorisnije i najobimnije dokumentacije ikad napravljene za neko razvojno okruženje.

Programeri koji su do sada koristili Microsoft-ove alate nemaju razloga za dilemu – treba preći na novu verziju. Za one koji su koristili neka druga okruženja, prelazak na ovu verziju će biti teži nego da su to učinili ranije jer je sve još glomaznije i složenije, ali sa novim adutima za prelazak. Što se mene tiče, zadovoljan sam činjenicom da Microsoft, i pored želje da svakome omogući da „sastavi program od Lego kocki“, nije zaboravio šta znači kompajler i svakodnevni posao kodiranja. Zato u ovom tekstu nije bilo mnogo reči o novostima iz „Lego“ tehnologije – verujem da će njih Microsoft bolje objasniti kroz svoju kampanju.

Korisna adresa

CET, Knez Mihailova 6/VI, Beograd, tel. 011/328-1614