.NET vs Qt

 ( Joejszaka | 2010. március 29., hétfő - 22:22 )

Szeretném a véleményeteket kérni.

Tételezzük fel a következő szituációt:

Adott egy vadonatúj project. A project rengeteg számításigényes algoritmust használ, ezért csak compiled nyelv jön szóba a project jelentős részének a leprogramozásakor. A projectnek szüksége van egy GUI-ra is. Hogy példákat mondjak olyesmi projectekre gondoltam, mint pl. egy zene/videó enkódoló, egy neurális háló betanítását végző framework, mindegy, valami számításigényes desktop problémát képzeljünk el.

Operációs rendszerre nincs megkötés.

Ha C++-t választunk, akkor ma reálisan két alternatíva van a GUI kifejlesztésére: Qt és a .NET.

Rengeteg érvet tudok mondani a Qt mellett, a .NET ellen.

Kérlek írjátok meg, hogy szerintetek miért lenne érdemes mégis .NET-et választani.

.NET alatt nem vagyok tapasztalt, eddig elkerültem elsősorban emocionális, másodsorban performance okokból. A környezetemben sokan preferálják, de enyhén szólva nem nem győztek meg. Szeretném mérlegelni több szempontból is, hogy mi szólhat mellette egy új projectnél, ha nincsennek kényszerű microsoftos függőségeink.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nekem az egyik legjobb érvem a .NET mellett a Visual Studio. Használtam már sok más eszközt, mindentől fényévekkel gyorsabban tudok VS-sel fejleszteni. Meg úgy általában menedzselt nyelvekkel is sokkal könnyebb az élet.

--
joco voltam szevasz

Ha natív C++-ban van a project nagy része, akkor a menedzselt nyelvek által hozott fejlesztési könnyebbség mint előny, elenyészik.

De köszi. :-) Amúgy VS-ben fejlesztek Qt-vel. :-))))

A Visual Studio C# esetén tényleg nagyon jó, de C++-nál már messze nem annyira.
Az IntelliSense nálam rendszeresen összeszarja magát, vannak cpp fájljaim ahol egyáltalán nem működik a kódkiegészítés, de még nem jöttem rá, hogy miért...

Vicces, de igaz, hogy a QtCreator sokkal jobb (pedig csak 1-2 éves a project).
Egyedül talán a debug része jobb egy kicsit a VS-nek.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Jaja, a Debuggere igen kényelmes. QtCreatort még nem próbáltam.

Érdemes.
Én most már használtam gcc-vel és VC-vel is, ugyanaz az érzés.
A debugger is használható, egyedül az "egeret ráviszem a változóra és látom a tartalmát" dolog nem működik olyan jól, min VS-ben.

Illetve van ez a debugging helper ami jól jön, ha bele akarsz nézni mondjuk egy QList-be, aminek a valódi szerkezete ezt gyakorlatilag lehetetlenné teszi normál debugger-rel. Csak ez hajlamos nem működni... :(

Ami hatalmas előnye a Creatornak az a gyorsaság: pl hihetetlen gyorsan beindexeli a fájlokat. Beírok egy include-ot, és a következő sorban már működik a kódkiegészítés, míg VS-ben várnom kell vagy fél percet mire ha szerencsém van, akkor elkezd működni...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

.netben nincsenek layout managerek ha jól tudom (és ha ez számít valamit)

TableLayoutPanel van.

TableLayoutPanel van.

En mindenkeppen .Netben csinalnam a GUIt, ezerszer fejlettebb (van tapasztalat mindkettoben). Rengeteg kesz kontroll, grid, konyvtar, layout, kb. 10x-es a sebessegkulonbseg a Qt es a .Net alapu GUI-fejlesztesben. Es a legtobb idot a GUI veszi el, nem a backend, ilyen az elet. Ja, most WPF-re gondolok, nem Winformsra, persze, Winformsszal ne foglalkozz. A Qt igazi pain in the ass, olyan ezoterikus bugokat tud produkalni, hogy az elkepeszto.

Esetleg azt is fontold meg, hogy a GUI-t C#-ban irod, hiszen a WPF-hez mindenkepp menedzselt kodra van szukseged, szoval legfeljebb managed C++-rol lehet szo.

En meg azt is atgondolnam, hogy biztos-e, hogy C++-ra van szukseg a szamitasigenyes oldalon. A JITter csomo feladatnal gyorsabb kodot tud generalni a futasideju optimalizalas miatt, mint a C++ compiler. Annyi, hogy meg kell tanulni a VM haklis dolgait - pl. el kell kerulni a GC leterheleset, egyebek. Es meg azt is vedd bele, hogy a menedzselt kodot joval gyorsabb fejleszteni (tobbszor gyorsabb).

Ha az algoritmus magja jol korulhatarolhato, kompakt es sok lebegopontos szamitast igenyel, akkor C++-ban megcsinalnam, a tobbit .Netben.

Persze ha erzelmi alapon allsz a fejleszteshez, illetve azok alapjan, hogy 'miket hallottal', akkor mindez irrelevans. :)

----------------------
while (!sleep) sheep++;

"A JITter csomo feladatnal gyorsabb kodot tud generalni a futasideju optimalizalas miatt, mint a C++ compiler."

Az az igazság, hogy ez maximum speciális benchmarkokon jön ki, valós projecteknél soha.

A managed nyelveknek van egy hatalmas hátrányuk, és ez a memóriaéhségük. Amire sajnos nem lehet legyinteni, mondván, hogy vegyél még 2 GB ramot, mert sajnos a proci cache-ét már nem tudod növelni. A magasabb cache miss szám pedig mérhető lassulást okoz, a JIT és a managed környezet minden előnyét könnyen eltünteti.

"el kell kerulni a GC leterheleset, egyebek"
Gondolom using és társai. Itt is látszik, hogy ha gyors kódot akarsz, akkor elkezded nem használni azokat a feature-öket, amik miatt eredetileg a managed környezetet használtad, és amik miatt könnyebb kéne hogy legyen a fejlesztés.

Személyes véleményem egyébként, hogy túlértékelik a GC-t:
Egyrészt a GC-nek hála, az alkalmazás lényegesen több memóriát foglal, mert:
- az adatok használat után is a memóriában vannak amíg a GC rájuk nem néz
- ha a megszüntetendő objektumok destruktorral rendelkeztek, akkor minimum 2x kell a GC-nek ránézni, mire megszűnnének
- egy csomó többlet információt kell tárolni az adatok mellett
- a GC jobb esetben csak akkor takarít, ha a programban szünet van, viszont egy komoly számítás közepén ilyen nincs, azaz csak foglalódik a memória megállás nélkül

Ezzel szemben C++-ban én többezer soros kódokat írok egyetlen delete nélkül, és nem, nem szivárog sehol a memória.
A trükk az, hogy modern/rendesen tervezett C++-os libeket kell használni (pl Qt ilyen, de van még sok), és a saját kódoknál is használni kell a lib-ektől ellesett trükköket.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

"A managed nyelveknek van egy hatalmas hátrányuk, és ez a memóriaéhségük. Amire sajnos nem lehet legyinteni, mondván, hogy vegyél még 2 GB ramot, mert sajnos a proci cache-ét már nem tudod növelni. A magasabb cache miss szám pedig mérhető lassulást okoz, a JIT és a managed környezet minden előnyét könnyen eltünteti."

Igen, ez teny. Ezert vetettem fel, hogy esetleg a numerikus reszt meg lehet irni nativ C++-ban, es a vegeredmenyt siman (=nem tul nagy faradtsaggal) at lehet tolni a megjelenito resznek. Ez attol fuggoen ertelmes vagy nem, hogy mennyire bonyolult a vizualizacio. Nehany grafikon es tablazat miatt valoszinuleg nem kevernek bele .Netet, de komolyabb feluletnel megerheti, hogy kell par napot foglalkozni a marshalinggal.

"Gondolom using és társai. Itt is látszik, hogy ha gyors kódot akarsz, akkor elkezded nem használni azokat a feature-öket, amik miatt eredetileg a managed környezetet használtad, és amik miatt könnyebb kéne hogy legyen a fejlesztés."

Az using sajnos nem segit eleget, ennel jobban at kell gondolni a dolgot. :/

A GC-t tenyleg meg kell tanulni, de azert lehet hasznos.

Egyszer reszt vettem egy neuralis halos (stb.) projektben, harom fejleszto, 150e sor C++ kod -- en ugy ereztem, hogy a fejlesztesi idot harmadolhattuk volna, igy tobb ido maradt volna a kutatasra, ha mondjuk Java-t hasznalunk (az algoritmus meg mondjuk egy honap helyett 40 napig futott volna, de fel evvel hamarabb indult volna a futas..).

Mindezek mellett nagyon szeretem a C++-t, foleg a templatek miatt, de a fejlesztesi sebessege es a library-valaszteka joval alacsonyabb.

----------------------
while (!sleep) sheep++;

A Javahoz elég sok lib van, ez tény, bár pont ilyen "neuralis halos (stb.) projektben" ezekből szinte semmit nem lehet használni...
Bennem fel nem merülne, hogy egy számolós projektet Java-ban kezdjek, mert bármit amit esetleg máshonnan használnék tuti, hogy C-ben (vagy fortran-ban C felülettel), vagy ha mázlim van C++-ban találok meg (bár ez néha nem mázli :) )

Én abban sem hiszek, hogy sokkal gyorsabb lenne a fejlesztés Java-ban, vagy C#-ban. Jól kitalált felületekkel nagyon hatékonyan lehet C++-ban fejleszteni. Az igaz, hogy ezek sajnos ritkák.
De még mindig kevesebb meló egy C-s libhez jó wrappert írni, mint Managed C++-szal P/Invoke-kal, meg jni-vel szórakozni...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Idézet:
többezer soros kódokat írok egyetlen delete nélkül

backspace-t hasznalod? ;) egyebkent egyetertek, azaz +1.

Dehogy, rögtön szintaktikailag és szemantikailag helyes kódot gépelek. Egy jobb napon néha két sort is. :)

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

"A magasabb cache miss szám pedig mérhető lassulást okoz, a JIT és a managed környezet minden előnyét könnyen eltünteti."

erre tudnal adni valami forrast? erdekelne

"- az adatok használat után is a memóriában vannak amíg a GC rájuk nem néz"

a malloc is kb igy mukodik a hatterben :)

--
NetBSD - Simplicity is prerequisite for reliability

Komolyan nem értem az ez irányú kételyeket.

Ahol nagyon komolyan szükség van sebességre, ott még a malloc/new használatát is kerülni kell, esetleg saját, spéci memoria-managerre van szükség.

Órajelben néha ki lehet mérni, hogy egy pointerre szögletes zárójellel (c[i]), vagy pointer aritmetikával ( *(c+i) ) hivatkozol, legalábbis szarabb fordítóknál.

Ehhez képest a VM, a GC annyi adminisztrációt hoz már elvben is, hogy az elképesztő.

Az pedig, hogy a malloc hogy működik a háttérben, erősen oprendszer és lib függő.

Ezeket az optimalizaciokat azert _altalaban_ egyetemrol kiszabadult sracok szoktak alkalmazni, a vegeredmeny pedig altalaban gyengebb, mintha tiszta kodot irtak volna, jo algoritmusokkal. Ez nem rad vonatkozik, es vannak esetek, ahol esetleg tenyleg szamithat a pointer aritmetika vagy a sima indexeles kulonbsege, de a legtobbszor ezek csak elmeletek.

A VM es a GC elvben, elsore lehet, hogy plusz adminisztracio, de pl. a memoriafoglalas koltsege Javaban kozel 0. (A felszabaditase persze nem, de azt peldaul utemezheted akkorra, amikor nincs epp mas teendo). A Java JITter pedig tenyleg okos - a Microsoft meg nem annyira. Nezz meg egy JITtelt assembly kodot, amit mar jol optimalizalt a Hotspot -- olyanokat megcsinal, amire forditasi idoben eselyed sincs (a legkulonfelebb loop unrollingok, cache optimalizalas, etc.)

Szoval tovabbra is elhiszem, hogy neked a C++ a legjobb valasztas (jelenleg en is azt tolom, mert pl. halozatrol erkezo adatot betolni a managed kornyezetbe nem mindig idealis), de kozel sem ennyire fekete-feher mar a vilag.

----------------------
while (!sleep) sheep++;

Ha ilyen kérdések nem merülnek fel, akkor nincs értelme C/C++-szal szívni, szvsz.
:)))

Pl. képen gyors pixelműveleteket nem tudom hogyan lehet pointerek nélkül csinálni. Leginkább sehogy, vagy nagyon lassan. Java-t nem tudom, de egy jól megírt C# elemi képfeldolgozó kód 1.5-5x lassabb, mint az alig optimalizált C++-os változata.

Oke, a kepfeldolgozas az szigoruan numerikus feladat, ahol az adatok altalaban negyzetes strukturaja miatt meginkabb megeri C++-ban kodolni. Mondjuk egy nem tul primiv neuralis halonal(tehat nem 1+2 retegu, elorecsatolt backprop halora gondolok, amit lenyegeben egyszeru matrixszorzasokkal szimulalsz / tanitasz, hanem mondjuk valami 'komolyabbra') mar kicsit mas a helyzet, siman lehet, hogy adott fejlesztesi ido alatt gyorsabb szoftver az eredmeny.

Nade: probaltal mar teljesitmeny-kritikus alkalmazast irni menedzselt kodban (nem primszamkeresore gondolok)? Csak kerdezem.

Meg mielott tovabb tepnem a szamat: nem gondolom, hogy a C++-nal lehet (lenyegesen) gyorsabb kodot irni menedzselt kornyezetben. A kerdes az, hogy C++-ban sikerul-e tenyleg optimalis kodot irnod, illetve hogy a megoldando feladat egesze hamarabb kesz lesz-e es gyorsabb lesz-e, mint C++-ban. Es itt most nyilvanvaloan olyan feladatokra gondolok, ahol komoly UI van, hiszen innen indult el a beszelgetes, nem altalanos C++ / etc. osszehasonlitasokbol.

----------------------
while (!sleep) sheep++;

A beagyazott rendszereknel kicsit mas a helyzet.

Nyilvan nem irnek .Netben mosogep-vezerlot. Ez tenyleg ide tartozik? :)

----------------------
while (!sleep) sheep++;

"Ezeket az optimalizaciokat azert _altalaban_ egyetemrol kiszabadult sracok szoktak alkalmazni, a vegeredmeny pedig altalaban gyengebb, mintha tiszta kodot irtak volna, jo
algoritmusokkal. Ez nem rad vonatkozik, es vannak esetek, ahol esetleg tenyleg szamithat a pointer aritmetika vagy a sima indexeles kulonbsege, de a legtobbszor ezek csak elmeletek."

Csak erre reflektaltam, hogy ezek nem elmeletek, hanem gyakorlatok. ;-)

elore le kell foglalni mindent es akkor nincs ilyen gond :D

--
NetBSD - Simplicity is prerequisite for reliability

Bocs, de mi a kulonbseg a c[i] vagy a *(c+i) kozott?

Ha olyan a fordítód és a processzorod, akkor más asm kódot fordíthat belőle.

C szabvány szerint pl. a kettőnek ekvivalensnek kell lennie!

Ezért én furcsállanám ha nagyon más kódot fordítana. Vagy ha valami más kódot fordít esetleg nem is szabványos...

Ki lehet próbálni:

main(){
char a[]="Hello";
putchar(2[a]);
}

Mivel C++-ban az operátorok túlterhelhetőek, ezért igazából compliler függő erősen, hogy mi történik. Főleg, ha valamilyen típusnál proxy osztályt használ. (Pl.: vector<bool>)

http://sourcemaking.com/design_patterns/proxy/cpp/1

--
http://www.naszta.hu

Pedig előfordul ilyesmi....

Inkább ilyen példát vegyél:

for (int i = 0; i < len; ++i ) {
a0[i] = 0;
*(a1 + i) = 0;
}

Nos, azt állítom tapasztalatból, hogy van olyan fordító, aki nem ugyanazt a kódot fordítja a0-ra és a1-re, pedig ugyanaz történik magasabb szinten.

"A magasabb cache miss szám pedig mérhető lassulást okoz"
Ezt gondolom nem kell magyarázni. :)

Az egészre meg nincs konkrét forrásom, de ha megnézek bármely komolyabb benchmarkot (ami nem megy rá mondjuk arra, hogy hány objektumot tudsz létrehozni másodpercenként), illetve elfogadom azt, hogy a JIT hatékonyabb kódot generál, akkor nem marad más magyarázatom arra, hogy a C++ miért tud gyorsabb, vagy ugyanolyan gyors maradni mint a java...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

"elfogadom azt, hogy a JIT hatékonyabb kódot generál"

Ne fogadd el, mert a JIT jo esetben ha pont mazlid van akkor tud a te platformodra jo kodot generalni, ami egyebkent a szegeny kokori c++-nal (szinte szegyen, hogy azzal akarjak mindenhol osszehasonlitani) ujabb statikus nyelvnel pontosan ugyanugy megteheto.

Szinte erzem a felhordulest a sok Java szakitol, ugyhogy inkabb arra kernem oket, hogy a felesleges szalak helyett most inkabb szivesen hallanek egy osszefoglalot arrol, hogy a Java hol es miben gyenge, milyen projekteknel nem hozta az elvarasokat, stb. A kudarcokbol ugyanis tobbet lehet tanulni mint a majmolt sikersztorikbol. Ha mar ennyi szaki van itt, hasznaljuk oket, akkor tanulunk is.

"Ne fogadd el, mert a JIT jo esetben ha pont mazlid van akkor tud a te platformodra jo kodot generalni, ami egyebkent a szegeny kokori c++-nal (szinte szegyen, hogy azzal akarjak mindenhol osszehasonlitani) ujabb statikus nyelvnel pontosan ugyanugy megteheto."

Azért ez nem ilyen egszerű.
Tényleg van, hogy a JIT hatékonyabb kódot generál, egyszerűen azért mert több információ van a kezében. Erre példák is vannak. Több oldal is van a neten, ahol beharangozták már a C++ vereségét, mert találtak egy kódot ahol a Java gyorsabb.
Az egy más kérdés, hogy már más bechmarkoknál sem jön ki ez az előny, konkrét nagy projecteknél meg kb soha...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

+1

talán annyi kiegészítés, hogy az ilyen projekt összehasonlításoknál kifelejtik
a fejlesztési időt, a tesztelési időt (automatizált tesztek, stb.) a deploy
időt, illetve költséget.

"- az adatok használat után is a memóriában vannak amíg a GC rájuk nem néz"
"a malloc is kb igy mukodik a hatterben :)"

Csak nem mindegy, hogy az a memoria csak a jvm szamara elerheto vagy a teljes OS szamara.

C++ és .NET?
Akkor inkább C#-ban gondolkodj. (Vagy Managed C++-ban, de annál azért a C++/Qt jobb megoldás.)

_nagyon_ számításigényes cuccokat csinálunk Qt-vel, visual studio-val, CUDA-val
alapvetően egy nagyon-nagyon jó minőségű toolkit ez, de néha látszanak a hátrányai

.net mellett szól
- ha már komolyabb rendszert akarsz benne összerakni (>300kloc), akkor Qt/c++-ban neked kell megírni pl. property-ket, databinding-ot, introspecting-et, szépen mindent az alapokról, amit a .net nyelvek nyújtanak. Ez talán inkább GUI intenzív alkalmazásoknál jön elő, ott viszont több év alap library fejlesztési munkát spórolhat neked a .net
- layout rendszere a Qt-nek valahogy nem intuitív, iszonyú időt rabol el a komponensek össze-vissza átméreteződése, nem lehet rájönni a logikájára

Qt mellett szól
- többplatformos! linuxra átteheted a rendszered pl egy klaszterben futtatva, és ingyen van minden szoftvered hozzá. ez a mai "cloud" buzzword miatt döntő lehet.
- kiforrott párhuzamosítás támogatása van (OMP), míg .net-nél párhuzamos futtatás támogatás most lép be
- Elég jó a c++ CUDA támogatása, pl debuggolható. Alaposan nézz utána, mennyire jó a .net CUDA támogatása, mert ha ez nem OK, akkor falnak mész.

+1 Qt layout, az horror sajnos.

Viszont a databinding-es résznél nem vágom mire gondolsz. Ott a Qt-ben a signal/slot baszás, az a databindig tipikus esete.

signal slot az egy primitív, funkcionális módszer az eseménykezelésre. nagy rendszernél már a könyöködön jön ki, hogy 555-ször kell megcsinálni:
- editbox változásra slotot csinálni
- abban kiparsolni az editbox-ból az értéket
- az értéket besettelni valami osztály példány memberének
- frissítést hívunk 1,2,3,4 objektumra

ellenkező irányú frissítésre ugyanez még egyszer, plusz lekezelni hogy ne legyen hurok a frissítésben

ehelyett databinding:
x objektum z property-je legyen összekötve y objektum w propetyjével és kész

igen sokat lehet vele spórolni

Igy oké, sajnos ez igaz.

Lehet, hogy én nem csináltam még ennyire perverz felületet, de nekem a Qt layout teljesen jól működik.
Néha mondjuk 3 szintnyi layout kell hogy azt kaptam amit szeretnék, de utána hiba nélkül méreteződik. WinForms-nál biztosan fényévekkel jobb.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

+1 a layout problémát én sem értem, igaz 2 évig voltam olyan mazo hogy csak kódoltam a layout-ot (órabérben?? :)), de mindig össze tudom rakni amit elképzelek és az úgy is működik ahogy.

A tizedet sem irtad le a borzaszto nagy Qt elonyoknek, de termeszetesen amiket leirtal, azok nagyon nagy elonyok :-) Mindamellett a Mono linuxon nem eleg jo, es sokat bugzik meg mai napig is, ugyhogy, ha cross-platform megoldas kell a legkonnyebben, akkor Qt, ha csak kindoz, akkor viszont a .NET szerintem nyerobb lehet.

http://djszapi.homelinux.net

subscribe

+1

+1
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Ha azt kérdeznéd, hogy C#-.Net, vagy C++-Qt, akkor még lehetne érvelni,
de a C++-.Net nem embernek való.

A managed-sima C++ keverésével óriási nagyokat lehet szívni. Amit viszont nem nagyon tudsz elkerülni ha külső lib-eket használsz, már pedig gondolom biztos fogsz mátrix libeket és hasonlókat használni...

Pont most volt egy project amit C#-ban kezdtünk, számolgatott is dolgokat, nagyrészt C++-ban, működött is, de annyit szívtunk vele mikor máshol is futtatni akartuk, illetve a .Net i18n támogatása olyan hihetetlenül nevetséges, hogy átírtuk az egészet Qt-ra.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

>>a .Net i18n támogatása olyan hihetetlenül nevetséges
Mit nem tudtatok megoldani vele? Miben jobb a Qt? (no offense, azt nem ismerem, csak kíváncsi vagyok)
--
geri / otperc.net

Hat pl. abban, hogy nem dll-ben tarolja a lokalizalt stringeket. Aki kitalalta, azt paros labbal kene ulepen billenteni.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Ez még viccnek is rossz...

?
Abban tárolod, amiben akarod. Az alapműködés emlékeim szerint pont az, hogy befordítja .dll-be embedded resource-ként. De ha bármi nem tetszik, provideres ez is, lecserélheted.
--
geri / otperc.net

Ilyen alapbeallitast sosem allitanek be, de ez mar az en problemam. Egy nyelvi sztringhalmaz nem dll-be valo szerintem.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Szerintem már az egész rendszer gáz kicsit, de arra például nem jöttem rá, hogy hogyan lehet a már létrehozott form összes stringjét frissíteni nyelvváltásnál...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Első ötletként rekurzívan végigmásznék a Form összes kontrollján. Nem egy metódushívás, az igaz, de nem tűnik lehetetlennek sem.
--
geri / otperc.net

Na erre mondom én, hogy ez nevetséges...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

/o\ Ezt a szalat eszre sem vettem. 3 napot elkestel a viccelodessel.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Cirka 10 perc alatt implementáltam egy ilyen megoldást - úgy, hogy nem vagyok desktop fejlesztő, ez volt életem kb. tizedik WebForms alkalmazása. Tény, hogy nem túl elegáns megoldás (meg a példa-applikációm is elég Móricka-alkalmazás volt), de azért ez miatt nem írnék újra semmit egy teljesen más platformon... De ti tudjátok. :) A kibicnek semmi sem drága, ugye.
A késésért én kérek elnézést, sajnos van saját, valódi életem, nem tudom minden időmet a hup-on tölteni. :)
--
geri / otperc.net

Nem ezert mondtam, apr. 1.-i trefanak jo az otlet, semmi egyeb masra nem jo. Egy 10-15 kontrollos ablakocskanal meg talan megoldas, de komplexebb alkalmazasnal akar ket percet is elhomokorazhat ha igy akarsz nyelvet valtani. Raadasul rengeteg esetet le kell kezelni, szoval nem biztos, hogy a legjobb dolog csak vegigmaszni egy List elemein.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Két percet??! Az laikusként is gyanús. Az első, "gyári" inicializáláskor hogy tud ugyanez szemvillanás alatt megtörténni?
--
geri / otperc.net

A mi alkalmazásunk nem túl komplex, de _nem_vagyok_hajlandó_ egyenként végigmenni az összes form összes stringjén, és frissíteni. Azért használok fejlett UI-t és magas szintű nyelvet, hogy ilyeneket ne kelljen.
Hogy a rengeteg plusz hibalehetőségről ne is beszéljek amit egy módosítás hoz magával.

Én egyébként megoldottam úgy, hogy kilőttem a fő formot, és újra létrehoztam,(azaz lényegében újraindult a program). Működik, csak undorító.

Nem ez volt egyébként a fő oka a váltásnak, ez csak az egyik...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Hát nem a legelegánsabb megoldás, az biztos. Úgy látszik a Microsoft ecosystem-ben paradigmálisan ott van az újraindítás. :)
--
geri / otperc.net

en ezt hasznalom.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Ezt találtam QT témában: http://people.inf.elte.hu/nacsa/Qt_alkalmazasok.htm
Talán van akinek hasznos lehet.
--
Tertilla; Tisztelem a botladozó embert és nem rokonszenvezem a tökéletessel! Hagyd már abba és kész!

A Qt3-as részt gyorsan el kell felejteni, a maradéknak meg egyetlen előnye lehet, hogy magyarul van, de egyrészt az már nem kezdőknek szól, másrészt magyarázat nélkül van.

A Qt hivatalos dokumentációja egyébként igen jó, én azt javasolnám inkább.

Szerk:
Kezdőknek inkább ez:
http://people.inf.elte.hu/gt/eva1/eva1.html

De csak akkor, ha egy szót sem tud az illető angolul...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Ez a link jó, én innen szereztem az alapokat. Én pl örülök, ha valami magyarul van. :) Persze, ha nincs magyarul, akkor jó az angol is.
---------------------------
Oszt jónapot!

nem ide

Nem lehet elosztott rendszert használni? Igy azt az időt, amit kód hegesztéssel/javítással töltötök,
meg lehetne spórolni...

Mielőtt optimalizálsz, lődd be a célplatformot és a probléma méretét is. Simán kiderülhet, hogy Javában vagy C#-ban is meg lehet csinálni, és az is, hogy ASM-ben sem.

Azután döntsd el, hogy a programod melyik része teljesítménykritikus, és ennek milyen interfésze van a - természetesen - nem teljesítménykritikus nyomogatós felület felé. 99%, hogy teljes mértékben megfelel a menedzselt programnylev a GUI megírásához.

Érdemes lehet a teljesítménykritikus részből egy erősebb hardveren magasabb szintű nyelven prototípust csinálni (erősebb vasra), ezzel idejekorán ellenőrzöd az interfészeid működőképességét, és demozni tudod a rendszert a megrendelő felé.

(nemide)