|
petak, 22.02.2008.
Visual Studio 2008 - bug u STL/CLR implementaciji !!!
Ccccc ...
Microsoftu je trebalo nekoliko godina da napravi port STLa (Standard Template Library) da se može koristiti i na .NET platformi i onda naprave ovako traljavi release !!!
Za neupućene, kratka rekapitulacija. Dakle, STL je biblioteka za programski jezik C++ u kojoj se nalaze implementacije mnooooogobrojnih izrazito korisnih struktura podataka (što bi rekli – „kolekcija“ iliti containera – vector, list, map, set, hash, queue, stack) i algoritama za operiranje nad njima.
Prije nešto više od destak godina, kad sam se prvi put upoznao s STLom, to je bilo vauuuu :-))))). Dinamičke i strogo tipizirane strukture podataka, s ugrađenim efikasnim algoritmima – što je više mogao poželjeti C/C++ programer !?
Klasični ArrayList iz .NET-a je u usporedbi s time bio čisti smijeh ...
Nažalost (u stvari na sreću ;-), .NET je imao „poneku“ :-) drugu prednost pred native C++om tako da je danas broj developera na .NET razvojnom okruženju vjerojatno puno veći od broja developera koji koriste C++.
Treba priznati i da se situacija značajno popravila s uvođenjem sa u C# 2.0 i ugrađivanjem tipiziranih kolekcija podataka pa je ArrayList (ne koristite ga više, je'l da ;-) zamijenjen s List i onda se dalo nekako živjeti bez STL-a.
Stoga, kad sam vidio da je STL/NET konačno postao dio Visual Studio 2008 okruženja, nisam mogao dočekati da ga malo okušam.
Pa sam lijepo kreirao novi Visual C++ projekt (tab CLR pa CLR Console Application) i ukucao najtrivijalniji mogući primjer:
#include "stdafx.h"
#include
using namespace System;
int main(array ^args)
{
cliext::vector c1;
c1.push_back(L'a');
c1.push_back(L'b');
c1.push_back(L'c');
for each (wchar_t elem in c1)
System::Console::Write(" {0}", elem);
return 0;
}
Pravi C++ gurui će ovdje odmah graknuti da „kakav for each“, da nema toga u STLu i gdje su const_iterator, begin i end ? OK, može i tako, ali for each je idiom koji je u .NET svijetu bread-and-butter i ruku na srce, ima puno manje kucati :-)))) I mislim da je sasvim zgodno da su implementatori STL/CLRa omogućili korištenje tog idioma sa STL/NET kolekcijama. Uostalom, to je ionako syntactic sugar ...
Ostalo je manje više jasno. Treba uključiti header cliext/vector da bi kompajler imao potrebne deklaracije (nešto ala „Add reference“ za C# programere), push_back je „klasičan“ način za dodavanje elementa na kraj kolekcije (Add za C#ovce) i tu bi sve trebalo biti jasno.
F7 i ...
1>C:Program FilesMicrosoft Visual Studio 9.0VCincludecliext/xutility(9) : fatal error C1107: could not find assembly 'Microsoft.VisualC.STLCLR.dll': please specify the assembly search path using /AI or by setting the LIBPATH environment variable
Neba ti nebeskog ... ???
Što je sad ?
Otvaranjem xutility headera (.h nastavak za headere standardnih biblioteka je „izgubljen“ u zadnjoj inkarnaciji C++ standarda) i odlaskom na liniju 9 se nađe „uzrok“ pogreške i tamo piše:
#using
U redu, jer TO JE TOČNO NO ŠTO BI TREBALO PISATI !!!???
Dotični dll-u je library u kojem je duša STL/CLR i #using direktiva je nužna kao pointer kompajleru. Taj dll se fizički nalazi u C:Program FilesMicrosoft Visual Studio 9.0VClib direktoriju, gdje se nalaze i mnogobrojne druge biblioteke za Visual C++ kompajler, i referenciran je kroz Libraries setting.
Dakle, kompajler bi ga morao vidjeti !!!
A on kaže da ga nema ?
Pokušao sam nekoliko trikova (npr. staviti ga ručno u referencirane biblioteke za projekt) ali nije mi baš išlo :-(. Ipak, na kraju sam našao spasonosno rješenje.
U xutility headeru sam dotičnu liniju promijenio u:
#using "C:Program FilesMicrosoft Visual Studio 9.0VClibMicrosoft.VisualC.STLCLR.dll"
I sve je proradilo kako treba ... Prijavio sam bug Microsoftu, i sad se na miru mogu (možete) poigrati sa STL/CLRom ...
|
- 15:50 -
Komentari (0) -
Isprintaj -
#
ponedjeljak, 28.01.2008.
Drugi pokušaj ...
Eh ...
Dolazak C++ bildera i nije ostavio neki trag ! Možda zato što je od prethodnog (i jedinog !) posta prošlo 6 mjeseci :-). Yap, mora biti da je to.
Al' popraviti ću se ! Obećavam !
Moj politički alter ego je zadnjih pola godine (znate da su bili izbori, jel'da ;-) bio poprilično zauzet ispravljanjem razno raznih krivih Drina a usput i lamentiranjem o jadnom stanju našeg obrazovanja, ali nekako se mislim da je došlo vrijeme angažirati se i u IT blogosferi.
Iako me je iskustvo naučilo da je objavljivati unaprijed „planove“ za postove vrlo tricky stvar (iskustvo moje a i s drugih blogova mi govori da je dostizanje i 50 % plana u većini slučajeva nedostižan cilj !), I'll go for it ! Uostalom, reaktivacija bloga bez malo konkretnijeg plana baš i nije pametan potez i lako bi moguće odvela ovaj blog u još jednu hibernaciju :-)
Prva tema kojoj se planiram posvetiti u par postova je STL/CLR. Za one slabije upućene u C++, STL (Standard Template Library) je biblioteka standardnih programskih komponenti koju su sa zavišću gledali pripadnici vjera u druge programske jezike (ili bar tako C++ gurui vole misliti ;-).
U svakom slučaju, STL je jedan od najjačih aduta C++a, iako se mora reći da je s uvođenjem sa u .NETu i pripadnih strogo tipiziranih kolekcija (ne koristite više ArrayList, jel'da ?) stvar malo ujednačena.
Elem, STL/CLR je port STL librarya na .NET koji dolazi standardno sa Visual Studiom 2008 i koji sam jedva dočekao ! Međutim, pri prvom pokušaju korištenja STL/NET-a sam naišao na bug :-(, i to će biti tema prvog posta.
Nakon toga slijedi malo istraživanje runtime performansi standardne (native) C++ implementacije STL-a i implementaciju STL/NET. Jedna od ključnih osobina STL biblioteke je da garantira određene performanse za pojedine vrste operacija nad containerima/strukturama podataka (npr. O(1) za vector<>, O(n) za find u list<>, a O(log2n) za map<>).
Očekivano je da će ista O-složenost vrijediti i za STL/NET containere, ali mene živo zanima usporedba apsolutnih vremena za izvršavanje ekvivalentnog skupa operacija nad pojedinim vrstama containera. Da li postoji penalty zbog Garbage Collectora, i ako da, koliki je ?
A nakon što obradim STL/NET, krećem(o) u nepoznato :-).
F# !
Programski jezik proizašao iz Microsoft Research Laba koji kombinira proceduralnu, objektnu i funkcionalnu paradigmu, baziran je na .NET Frameworku, može ga se koristiti i kao skriptni jezik i sve u svemu it smells good :-)
Vrijeme je za novi paradigm shift i krajnje je vrijeme za hvatanje tog vlaka ...
A oni koji će na to odmahnuti rukom i reći: „Što će nam još jedan jezik, C#/Java su zaaaakon !“ ...
Heh, to su isto meni govorili Visual Basic-aši prije 10 godina kad sam ih pilio sa C++om i OO programiranjem :-))) Istina, nisu završili u C++ već u C# kampu, ali više od njih ne čujem „ih, što će nam ti objekti, kakvi su to bakrači, vidi kako ja to, klik, klik, klik i evo forme s podacima iz baze“ :-P.
OO paradigma je tu da ostane, ali popularnost dinamičkih/skriptnih jezika (Ruby, Python) ipak dosta govori. Late binding is all the rage, a i C# u svojoj 3.0 verziji ide u tom smjeru !
U svakom slučaju, biti će zanimljivo učiti novi programski jezik ... nisam već dugo .
A ako mislite da je s F#om iscrpljena lista potencijalno zanimljivih jezika, evo popisa iz mog ComputersProgramming languages bookmark foldera:
F# – sve rečeno
Ruby – ka' da su malo pali (u spinu :-), ali pratim IronRuby i Ruby.NET
Python – čisti Python mi se čini idealan za skripte, a IronPython obećava
Scala – to je sada in
Boo – idealna zamjena za C kao prvi programski jezik (a i dolazi free sa SharpDevelop razvojnim okruženjem – vidi jednostavne primjere na Wikipediji)
D – improved C++ !?
Erlang – concurrency će za par godina biti all the rage (lako kad ih je dvije, ali što kad u računalu postoji 8 jezgara u 2(4) procesora) ?) a tu je, barem tako kažu people in the know, Erlang naprosto neprejebiv :-)
LISP – bol u teoretical-computer-science srcu mom ...
Daaa, mogli bi biti zanimljivo ...
|
- 23:15 -
Komentari (4) -
Isprintaj -
#
utorak, 12.06.2007.
C++ bilder is coming to town ...
Početi ćemo s disclaimerom – naime, nisam osobiti pobornik Borlandovog C++ Builder razvojnog okruženja jer, ... Visual Studio RULEZ :-)
A ime bloga je zbog nadimka koji su mi nadjenuli moji študenti na FERu (Fakultetu elektrotehnike i računarstva) gdje radim kao asistent (u biti „povjerenik predavanja“ – što je taktička caka kojom je FER omogućio onima koji su „samo“ dr.sc. a nisu docenti da mogu/smiju držati predavanja ;-) i trudim se prenositi znanja o programiranju, algoritmima, strukturama podataka i JEDNOM I JEDINOM, MASTER OF THE UNIVERSE C++ PROGRAMSKOM JEZIKU (vječna hvala i slava Bjarneu Stroustrupu).
Ali avaj i kukulele, C++ je definitivno preteška artiljerija za "rutinske" zahtjeve koji se danas stavljaju pred developere ("rutinske" - mo'š mislit :-) ! Pa će ovdje biti i podosta postova o .NET tehnologiji, što je u redu jer je .NET druga najbolja stvar na svijetu poslije C++a :-)) (a po važnosti u financijskom departmentu, debelo prva).
Pa to bi bilo to za početak ...
|
- 23:13 -
Komentari (0) -
Isprintaj -
#
0
|