Lasot Performance of Java versus C++ uzdūros vienam interesantam teikumam.
Another evidently well known problem in C++ is the overhead of returning an object from a function (several unnecessary object create/copy/destruct cycles are involved).
C++ problēma? Un kādēļ Java nav šīs “problēmas”? Java nenodod metodēm objektus un neatgriež objektus no metodēm. Java darbojas ar atsaucēm (reference) uz objektiem heap atmiņā. C++, turpretī, “problemātiskajā” gadījumā darbojas ar objektiem stekā. Tas jau līdzinās “ābols ir slikts, jo tas nav apelsīns” uzbraucienam. Kas gan liedz arī C++ darboties ar heap objektiem?
SomeClass getSomeClass() {
return SomeClass();
}
...
SomeClass a = getSomeClass();
a.doSomething()
jāpārraksta par
SomeClass *getSomeClass() {
return new SomeClass();
}
...
std::auto_ptr<SomeClass> a(getSomeClass());
a->doSomething();
Š ausmīgā C++ problēma pazuda nebūtībā, jo objekts vairs netiek atgriezts. Protams, otrajā gadījumā atmiņu var atbrīvot arī manuāli ar operatoru delete, tomēr šajā gadījumā tas ir maksimāli tuvināts oriģinālajam variantam.
Pieriebusies mērīšanās ar krāniņiem. Java virtuālā mašīna šajās sacensībās izdara tikai to, kas C++ gadījumā būtu bijis jādara programmētājam ar profiler: atrast šaurās vietas un nooptimizēt. Kā šīs Java fīāas ietekmē programmu bez izteiktas šaurās vietas (analizēšana tomēr nav bezmaksas)? Katrā ziņā mums ir izvēle: veltīt mazāk laika kodēšanai un paļauties uz instrumentiem vai darīt netīro darbu pašiem.
Tieši vakar palasījos par valodu aizstāvjiem, kas gatavi darīt gandrīz visu, lai uzbrauktu citai valodai utt.
pāaardon, aizmirsās tagu aizvērt ;D
Pretty insightful post. Never thought that it was this simple after all. I had spent a good deal of my time looking for someone to explain this subject clearly and you’re the only one that ever did that. Kudos to you! Keep it up