06.04.2011 20:24:11
C++ projekt - Java programmide manipuleerimine C++'st
Mõtlesin, et näitaks oma C++ projekti, millega olen paar päeva tegelenud. Pole veel muidugi täiesti valmis, aga näidata vast kõlbab. Tegemist on C++ teegiga, mis lubab otse C++'st Java programme manipuleerida. Hetkel loob teek ise JVM'i ja laeb sinna klassid sisse. Järgmine etapp oleks lisada võimalus, mis lubab hookida JVMi külge, mis juba eelnevalt töötab.
Vaevalt, et keegi viitsib ilma dokumentatsioonita ise katsetada, seega jagan videot. 720p ja fullscreen on vaatamiseks vajalik.
Väga tore ja iseenesest äge vidin, aga ma hetkel ei näe eriti rakendust sellele.
Selline lähenemine on vastuolus heade tarkvara arenduse praktikatega. Käesoleval hetkel integreerid sa 100% kaks komponenti, mis peaksid olema üksteisest lahus. Lisaks ei kujuta ette funktsionaalsust, mida ei saa C lahendada ilma Java abita.
Miks ei võiks sa läbi environmendi lihtsalt jaris olevaid interface meetodeid executida, kui isegi ongi mingi X põhjus C softile jar külge pookida, ja ongi kõik? Hetkel tundub ikka jube häkk olevat lihtsa java käsu käivitamiseks süsteemis, mida üldiselt kasutatakse.
Väga tore ja iseenesest äge vidin, aga ma hetkel ei näe eriti rakendust sellele.
Selline lähenemine on vastuolus heade tarkvara arenduse praktikatega. Käesoleval hetkel integreerid sa 100% kaks komponenti, mis peaksid olema üksteisest lahus. Lisaks ei kujuta ette funktsionaalsust, mida ei saa C lahendada ilma Java abita.
Miks ei võiks sa läbi environmendi lihtsalt jaris olevaid interface meetodeid executida, kui isegi ongi mingi X põhjus C softile jar külge pookida, ja ongi kõik? Hetkel tundub ikka jube häkk olevat lihtsa java käsu käivitamiseks süsteemis, mida üldiselt kasutatakse.
Tegelikult on asi nii, et kunagi kirjutasin erinevatele Java mängudele botte, Javas muidugi, kasutades siis BCEL'i ja reflectionit. Nüüd mõtlesin, et võiks kirjutada valmis teegi, mis lubaks mul C++'is sama asja teha. Tavalise tarkvara arenduse puhul sellest teegist tõesti erilist kasu pole.
Ehk siis sisuliselt kirjutasid JNI'le wrapperi. Mida su wrapper paremini teeb kui otse JNI kasutamine? Pealtnäha kood küll eriliselt lihtsamaks ei läinud.
Üks rakendus oleks sel olnud mul praegu pooleli olevas projektis kus keegi kavalpea otsustas, et kõige parem draiveri kirjutamise viis on see valmis kirjutada Javas. Mitte just kõige parem kui projekt ise on C++'s
Kas tolle wrapperi sees lahendatud meetodite-klasside puhverdamine või kas igal funktsiooni väljakutsel küsid neid JNI kaudu uuesti Javalt?
Kuidas on asja töövõimekus multithreaded progemise korral (Java funktsioone kävitatakse mitmest paralleelsest threadist)?
Kuidas on lahendatud ressursside vabastamine just taas mitme threadiga majandamise puhul?
Muidu toda koodi nähes on küll mulje, et üleliigset koodi ning üsnagi low-level minekut on rohkem kui oleks vaja kasutajale välja näidata. Too meil praegu kasutuses olev JNI wrapper on oluliselt lihtsama ehitusega ning tänu sellele ka jupp maad robustsem. _________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Ehk siis sisuliselt kirjutasid JNI'le wrapperi. Mida su wrapper paremini teeb kui otse JNI kasutamine? Pealtnäha kood küll eriliselt lihtsamaks ei läinud.
Üks rakendus oleks sel olnud mul praegu pooleli olevas projektis kus keegi kavalpea otsustas, et kõige parem draiveri kirjutamise viis on see valmis kirjutada Javas. Mitte just kõige parem kui projekt ise on C++'s
Kas tolle wrapperi sees lahendatud meetodite-klasside puhverdamine või kas igal funktsiooni väljakutsel küsid neid JNI kaudu uuesti Javalt?
Kuidas on asja töövõimekus multithreaded progemise korral (Java funktsioone kävitatakse mitmest paralleelsest threadist)?
Kuidas on lahendatud ressursside vabastamine just taas mitme threadiga majandamise puhul?
Muidu toda koodi nähes on küll mulje, et üleliigset koodi ning üsnagi low-level minekut on rohkem kui oleks vaja kasutajale välja näidata. Too meil praegu kasutuses olev JNI wrapper on oluliselt lihtsama ehitusega ning tänu sellele ka jupp maad robustsem.
Tegelikult JNI ja JVMTI, antud videos muidugi JVMTI poolt ei demonstreerinud. Puhverdamine on olemas. Multithreadingu jõudluse koha pealt ei oska hetkel kommenteerida.
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.