Kompiuterių tinklai, arba kaip išmokau programuoti CLR/C++ (Visual C++/CLI)
Beje, MS istorija buvo tokia:
1. Visual Basic
2. Bandymai pagerinti ISO C++ – padarytas Visual C++/CLI. Neva turėjo pagerinti GUI kūrimą. Gal ir pagerino, bet yra iš tiesų tai totalus CRAP. Ir tai sakau, perpratęs šią C++ kalbos perdarymo rūšį. Beje, google taip pat tam pritaria, ir dauguma Visual C++/CLI programuotojų perėjo prie:
3. C#.
Nesvarbu kad visi jie naudoja tą patį .NET framework’ą 4.0. Esmė ta, kad Visual C++/CLI kalba praktiškai yra tiesiog ‘useless’. Aš suprantu kad galima surasti ISO C++ programavimo kalbos panaudojimų vietų, tačiau C# neabejotinai yra geriau nei Visual C++/CLI.
Vienas iš tokių atveju – objektų multithreadingas – t.y. GUI po mygtuko paspaudimo pabandus paduoti ‘this’ pointerį į pačią windows formą, nelabai gaunasi daryti ‘mutual connection between objects’. Nes gaunasi begalinė rekursija, arba reikia matyt labai užsiknisti.
O ir šiaip – programinimas per prototipus – headerius, tikrai yra outdated dalykas per daug lėtinantis procesą. Java ir C#, C++ kalbą šiuo atžvilgiu daro į vienus vartus…
Beje, Echo Serverį programinau su standartiniu ISO C++ su CodeBlocks IDE, be GUI. Visual C++/CLI ir Visual Studio buvo reikalingas tik dėl Echo Kliento, nes jis buvo su GUI. Tik čia normaliai ir lengvai galima padaryti ir valdyti C++ GUI, negana to be didesnių keitimų veikia Java GUI(Swing) anksčiau rašytas kodas.
O iš tiesų tai parašiau tik 2 programas – Echo Serverį ir Echo Klientą Java 1.6 su NetBeans IDE. O tik po to tą patį kodą perkėliau į ISO C++, bei Visual C++/CLI.
Port’us tarp aplikacijų daryti jau ne kartą yra tekę: Java -> C#, Java -> Python, tad ir šis portas nebuvo naujiena.
)
Vidutinis 1 programos dydis buvo ~1400 eilučių, na o visas 3 užduotis padaryti prisireikė mažiau mėnesio. Pradėjau rugsėjo vidurį, o spalio viduryje pabaigiau.
)
Ir paslydo tavo C++/CLI variantas destytuvui?
Jo, su C# negalima, o C++/CLI galima
.
Bet ten yra visokių mandrybių, kaip
System::String^ -> char*
Ir pan. konvertavimai. Nes Echo clientas/serveris tai buvo stock C kodas, kurį perrašiau į C++ ir ten reikia old-style būdu duomenis paduoti.
Dar labai, kaip ir sakiau, nesamonė yra su bendravimu per pointerius tarp ‘mutual’ objektų. Šitame dalyke C# easy viskas, o su C++ ne. Ir dar aš naudojau Winsock2, o ne senąjį Winsock – yra daugiau galimybių, veikia galbūt kažkiek patogiau, tačiau vėlgi reikėjo papildomas direktyvas į stdafx.cpp (ar koks ten tas predefined header failas), kišti.
O šiaip tai už visas užduotis po maksimumą ir dar pagyrė už ‘most advanced work in group’. Kaip supratau dauguma net GUI patingėjo padaryti. Nors, jeigu prisiminsiu savo C++ OOP darbą, su kelio paieškos algoritmais, tai konsolėse matricas ir paveikslėlius braižyti buvo gana užknisantis reikalas ir daug darbo.
Dar beje, pavargau nemažai kol pasidariau Debug’ą ant C++/CLI. Bajeris tame, kad labai sunku paleisti Win Forms GUI projektą ir konsole projektą sykių, tai teko į atskirą objectą push’inti debug’ą, ir po to per formoje ‘get debug’ mygtuką išsitraukinėt.
.
Na ir dar tas dalykas kurį paminėčiau, tai aš savo Echo Serverį (ne klientą) rašiau ne ant C++/CLI, bet ant paprasto ISO C++ (naudojant Code::Blocks) ir jis tą kodą gana nemažai nagrinėjo, ir buvo matęs kad moku įgyvendinti socket’us per paprastą C++.
Nors, mano nuomone, manau tau užskaitytų ir jeigu abi parašytum per C++/CLI. Tik tiek kad aš nelabai matau prasmės naudoti C++/CLI serveriui, kuriame nereikalingas Joks GUI.
Ir dar viena pastaba:
Visual Studio 2010 – netaiso kodo parašyto C++/CLI (t.y. nepabraukia klaidų/neatpažintų f-jų, modulių ir kt.). Reikia įsidėti “VA X” pluginą. Kitaip normaliai programinti C++/CLI ant Visual Studio, aš manau, apskritai neįmanoma.