S o f t v e r
PC home - osnovna strana
PC #39 - Oktobar 1998

Ne samo lego kocke

Visual Studio 6.0 ne donosi nikakve promene u osnovnoj koncepciji, ali je i ovog puta sve postalo još bogatije, doteranije, pa i efikasnije... 

Zoran Životić


  

 

1

Razvojno okruženje - bez primetne razlike u odnosu na prethodnu verziju

 

2

Koristan dodatak - lista modula

 

3

Novi izgled MSDN biblioteke

Sadržaj Stand Pro Enterp
Licenca za distribuciju aplikacija Da Da Da
MFC Database Classes Da Da Da
Active Template Library (ATL) Da Da Da
Automatsko dovršavanje izraza Da Da Da
Razvoj klijent-server aplikacija Da Da Da
OLE DB Templates Ne Da Da
Optimizacija koda Ne Da Da
Profiler Ne Da Da
Statičko linkovanje sa MFC bibliotekama Ne Da Da
Databound kontrole (RemoteData) Ne Da Da
InstallShield Ne Da Da
Custom AppWizard Ne Da Da
Visual Database Alati Ne Da Da
Extended Stored Procedure Wizard Ne Ne Da
Visual SourceSafe Ne Ne Da
SQL debugging Ne Ne Da
SQL Server 6.5 Developer Edition Ne Ne Da
SQL Server 6.5 Service Pack #3 Ne Ne Da
Visual Modeler Ne Ne Da
ASA400 database pristup preko via OLE DB Ne Ne Da
Microsoft Transaction Server Ne Ne Da
Internet Information Server 4.0 Ne Ne Da
   

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 samo dobar, brz i pouzdan kompajler, naći ćete ga u ovom paketu.

   

Tri varijante

VisualStudio 6.0 se isporučuje u tri varijante - Standard Edition, Professional Edition 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 (na primer Visual C++, u Standard, Professional ili Enterprise izdanju). U svakom slučaju, koncepcija je da Standard izdanje sadrži neophodan minimum za razvoj aplikacija, da 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.
Ako niste iskusni Internet surfer, 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. Ostatak procedure je potpuno standardan, uz mogućnost da do najsitnijih detalja odredite koja od opcija, biblioteka, izvornih kodova i dokumentacije će biti instalirani.

   

Visual C++

Kada pokrenete razvojno okruženje, sačekaće vas poznati izgled, organizacija radnog prostora i meniji - vidljve razlike u odnosu na prethodnu verziju nema. 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 ne možete da se setite tačnog naziva vaše 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 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 funkcija, zapamti i sve njihove parametre! IntelliSense tehnologija i ovde nudi zaista lepo rešenje - u trenutku kada otkucate otvorenu zagradu, na ekranu se pojavljuje žuta "nalepnica" na kojoj je ispisana deklaracija funkcije. Ova nalepnica će se na ekranu zadržati sve dok ne 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 pri pisanju 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 će te dobiti biće ogromna, pa šetnja kroz nju nije mnogo komfornija od pretraživanja odgovarajućeg zaglavlja. Ukoliko otvorite zagradu, počnete sa kucanjem parametara i zatim kursorom krenete na neko drugo mesto, prozor sa deklaracijom nestaje - nisam našao drugi način da ga pozovem sem da se ponovo pozicioniram na otvorenu zagradu i prekucam je još jednom. 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. Interesantno je da se kompajler u ovom delimičnom prevođenju prilično dobro snalazi, pa ga ne zbunjuje čak ni izbacivanje linija koda na kojima se trenutno, u procesu izvršavanja, nalazite.
Ukoliko umoseći izmene napravite grešku, biće vam ponuđena mogućnost da nastavite sa originalnim kodom ili da prekinete debug. Microsoft naglašava da se radi o "jednostavnijim izmenama" zbog kojih ne morate prekidati rad - ostaje da se, sa više iskustva, proceni da li ovakva opcija može u praksi proizvesti i neki problem - mogućnost da kompajler počne da pravi greške zbog neke opcije koja je uvedena da bi dobro zvučala u oglasima izaziva neprijatnost.
Debager je dobio još nekoliko manjih, ali 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š korisna, opcija je "Lista modula" (Debug / Modules) - dobijate pregled svih .dll-ova (redosledom kojim su učitavani u memoriju), opseg adresa koje zauzimaju (zgodno kod pojave exception-a na adresi van vašeg programa) i, što je ponekad posebno korisno, punu putanju do .dll datoteke kako biste bili sigurni da ne postoji problem starije verzije zaostale nepažnjom u nekom drugom direktorijumu.
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će 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. Naravnom, potpuno tačna analiza u fazi kompajliranja nije ni moguća ali su ipak napravljene osnovne provere. Ako napišete:

int ReturnZero(void) {
   int i;
   for(;;) {
      return 0; }
}

kompajler će korektno zaključiti da u petlji nema uslova za izlazak, pa neće prijaviti da nakon for petlje postoji mogućnost izlaska bez return. Ako se doda samo deo sa uslovom (na primer for(i=0; i<0;;) pojaviće se upozorenje, pošto kompajler nema načina da zna kakve će sve vrednosti promenjiva i imati u toku rada programa.
Druga izmena se odnosi na analizu složenih logičkih izraza. Tačan algoritam koji je primenjen nije lako detektovati, ali je činjenica da ć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 da biste jasno naznačili šta želite. Naravno, 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 naznačiti konstantnost nekog izraza u odeređenom delu koda, bez obzira što izraz, u run-time-u može biti promenjiv. Jedna od upotreba je i:

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

Na ovaj način ste kompajleru "rekli" da izraz expresion nikada neće imati vrednost van direktno navedenih slučajeva (case). Uz ovu informaciju komapajler može da generiše kraći i nešto 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

Konačno, nekoliko reči i o izmenama u dokumentaciji koja je takođe značajno reorganizovana. U verziji 5.0 smo imali mešavinu browser/interni help sistema. Sada je browser koncepcija dosledno sprovedena, kao surfovanje po MSDN biblioteci. Svaki poziv za pomoć (pa čak i F1 taster) poziva poseban browser koji sada 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 pojmova, pretraživanje ili vašu listu najčešće potrebnih dokumenata. Ako vam se u prethonoj 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. Ukoliko vam ne smeta još jedan stalno otvoren prozor (dimenzije MSDN-a, zbog organizacije prostora, moraju biti značajne), 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 koji je potpuno bez konkurencije najkorisnija i najobimnija dokumentacija ikad napravljena za neko razvojno okruženje.
Oni 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 verovatno 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 velike želje da svakome omogući da sastavi program od Lego kocki, ipak nije zaboravio šta znači kompajler i svakodnevni posao kodiranja. Zato u ovom tekstu o novostima iz "Lego" tehnologije i nije bilo reči - verujem da će njih Microsoft mnogo bolje objasniti kroz svoju kampanju.


PC home - osnovna strana Novi broj|Arhiva|Pretrazivanje svih brojeva|O nama
Pretplatite se na PC|Postanite saradnik casopisa PC|Pitanja i komentari u vezi casopisa