Vývoj sw pro Android v C, CPP bez Javy

čumil

Re:Vývoj sw pro Android v C, CPP bez Javy
« Odpověď #30 kdy: 19. 10. 2016, 11:53:07 »
Použij Javu proboha, NDK se používá jen když de o každou kapku výkonu (některé hry obvykle), jinak nemá smysl.


i

Re:Vývoj sw pro Android v C, CPP bez Javy
« Odpověď #31 kdy: 19. 10. 2016, 12:34:46 »
s javou by som neopovrhoval, pokial si tak schopny C expert , prepisat / prelozit C kod do Javy mi pride ako vec na par hodin.

eventualne to narvat vsetko do jednej triedy a namiesto goto metody bez argumentov a vsetky premenne public static.

vybavene

To je přesně názor těch kteří neumí ani jedno pořádně, NELZE přepsat z C do Javy ani obráceně, pokud se má daný jazyk použít správně, tak se musí s každým pracovat jinak.

Java, manipuluješ s objekty, z C-pohledu s komplexními datovými struktůramy o kterých nesmíš mít ponětí o jejich vnitřní struktůře. To že k datům je přibaleny i kód,  (metody tříd), to s tím právě souvisí.

C, manipuluješ se z Java-pohledu velice primitivními datovými strukturami, o jejichž vnitřní reprezentaci máš neustále povědomí.

Tento rozdíl implikuje návyky jak myslet při programování v daném jazyce. Tak že ten kdo je rozepsaný v C nikdy nemůže efektivně psát v javě a obráceně a ten kdo umí oboje, tak určitě neefektivně !

dustin

Re:Vývoj sw pro Android v C, CPP bez Javy
« Odpověď #32 kdy: 19. 10. 2016, 12:48:33 »
Java, manipuluješ s objekty, z C-pohledu s komplexními datovými struktůramy o kterých nesmíš mít ponětí o jejich vnitřní struktůře. To že k datům je přibaleny i kód,  (metody tříd), to s tím právě souvisí.

C, manipuluješ se z Java-pohledu velice primitivními datovými strukturami, o jejichž vnitřní reprezentaci máš neustále povědomí.

Nejsem žádný specialista na Cčko, ale např. v kernelu se hojně používají structy s pointery na funkce. Blíží se to objektům. Konkrétně např. "interface" https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/ice1712/ice1712.h#n362 či celý https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/ice1712/ice1712.h#n297 , kde se defaultní implementace definuje v "předkovi" https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/ice1712/ice1724.c#n2678 a konkrétně některé "metody" "přetěžují" v "potomkovi" https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/ice1712/juli.c#n645 . IMO to má s objektovým programováním leccos společného.



Sten

Re:Vývoj sw pro Android v C, CPP bez Javy
« Odpověď #33 kdy: 19. 10. 2016, 20:42:45 »
Použij Javu proboha, NDK se používá jen když de o každou kapku výkonu (některé hry obvykle), jinak nemá smysl.

NDK se používá také pro aplikace, které mají být multiplatformní. Javu na iOSu či Windows Phone nespustíte. Existuje sice GCJ, ale je s ním výrazně víc práce, než s použitím NDK v Androidu.

To je přesně názor těch kteří neumí ani jedno pořádně, NELZE přepsat z C do Javy ani obráceně, pokud se má daný jazyk použít správně, tak se musí s každým pracovat jinak.

To záleží, jak v tom C píšeš. Z Javy do C to jde celkem snadno, třeba GTK funguje v podstatě stejně (ono tam není moc co vymýšlet). Z C do Javy záleží na způsobu psaní v C, třeba linuxové ovladače (ne celý kernel, ten používá hodně divoký kód, ale API pro ovladače) nebo ty aplikace pro GTK (pokud nedělají nějakou složitou ukazatelovou aritmetiku) by se daly přepsat docela snadno.

Java, manipuluješ s objekty, z C-pohledu s komplexními datovými struktůramy o kterých nesmíš mít ponětí o jejich vnitřní struktůře. To že k datům je přibaleny i kód,  (metody tříd), to s tím právě souvisí.

Java má velmi jasnou specifikaci toho, jak uvnitř funguje, a pokud pracuješ s JNI, tak pracuješ právě s tímhle formátem.

C, manipuluješ se z Java-pohledu velice primitivními datovými strukturami, o jejichž vnitřní reprezentaci máš neustále povědomí.

Obzvlášť když se často používají pointery na forward-declarované struktury jako třeba FILE či pthread_mutex_t :)

Tento rozdíl implikuje návyky jak myslet při programování v daném jazyce. Tak že ten kdo je rozepsaný v C nikdy nemůže efektivně psát v javě a obráceně a ten kdo umí oboje, tak určitě neefektivně !

To, že nedokážeš efektivně psát ve více jazycích ty, ještě neznamená, že by to nezvládl někdo jiný :D Programuju low- i high-level kód pro Android, takže denně dělám v Javě i C++, a nemám nějaké problémy psát v každém jinak. Občas mě štve, že některé skvělé vlastnosti z jednoho dost chybí ve druhém (hlavně anotační preprocersory a šablony), ale to je tak všechno. Mimochodem pokud člověk dělá hodně do hloubky s C++, tak se stejně musí naučit dobře programovat imperativně i funkcionálně (šablony jsou čistě funkcionální), což je mnohem větší rozdíl než mezi C a Javou.