Jakub L. Programista
Temat: Dalszy rozwój - wybór technologii
Robert Podwika:
Jakub L.:http://en.wikipedia.org/wiki/Bytecode zapraszam do lektury
Czymże w takim razie jest bytecode Javy jak nie kodem maszynowym?
W kontekście Javy http://en.wikipedia.org/wiki/Java_bytecode przebija bardziej ogólny, szczególnie kawałek http://en.wikipedia.org/wiki/Java_bytecode#Execution
Jakub L.:
Programista generalnie przegrywa z kompilatorem w dziedzinie optymalizacji > programu.
Nie zgodzę się. Programista ma o wiele większe pole manewru gdy wie co robi.
Szczególnie gdy jest jednym z kilku programistów w zespole, używa zewnętrznych bibliotek i interfejsów do kodu który już jest stworzony.
Jakub L.:
Ale przed Oakiem olali C++ i zaczęli tworzyć język od zera, właśnie Oaka: Gosling attempted to modify and extend C++ (which he referred to as "C++ ++ --") but soon abandoned that in favor of creating an entirely new language, which he called Oak, after the tree that stood just outside his office.
No spoko zgadzam sie ale wczesniej pisałeś, że w historii javy nie ma w ogóle odniesień do C++...
Gdzie? Pisałem że jest oparty na motywach i składnię ma podobną.
Jakub L.:
Składnia ma subtelne różnice, jak na przykład słówko finally.
Dziedziczenie jest okrojone do pojedynczego, programowanie generyczne i szablony zostały dopchnięte kolanem do Javy jak Microsoft zrobił C#, do Javy 1.4, czyli przez całe 8 lat tego nie było.
Takie coś się nazywa konwergencja.
Jaka konwergencja C# i JAVY? Najpierw porównujesz c++ i jave i mówisz, że te języki są całkowicie inne wrzucając słówko finally jako argument, a potem piszesz, że C# jest podobny do JAVY...
Bo Java i C# względem C++ są inne, składnię mają podobną ale różnice leżą w samej filozofii - zarządzanie pamięcią - automatyczne w tych pierwszych, ręczne w C++, obiektowe typy danych zrośnięte z samym językiem (w Javie możesz rzucić tylko coś implementującego interfejs Throwable, w C++ cokolwiek, ).
No i historia Javy mówi wyraźnie, że to nowy język.
Natomiast C# jest podobny do Javy, o wiele bardziej podobny niż Java i C++.
Podobne są na pewno z tym nie ma co polemizować, ale różnic jest wiele. Np więcej typów bazowych C#, różnica w typach prostych. Całkowicie inne podejście do słów kluczowych struct,
class, brak obsługi wskaźników w javie, mechanizm delegatów, przeładowania operatorów itd...
Czyli tego co w Javie (języku konkretnie starszym i do którego programiści go używający zgłaszali uwagi że im czegoś brakuje) brakowało (tym którzy marudzili że Java to nie C++, druga grupa to są ci którzy marudzą, że Java to nie Smalltalk i im brakowało czegoś innego).
W C# względem Javy część ficzerów wyleciała: 11 wymienionych, praktycznie każdy wylatujący ficzer może zostać uzasadniony albo wprowadzeniem CLR albo problemami które powodował (jak na przykład wyjątki), a część (prawie sześć razy więcej) została dorzucona. Zauważ że po tym, jak C# został wypuszczony przez M$, rozwój Javy dostał niezłego kopa z powodu konkurencji gdyż oba języki walczą o pokrywającą się niszę.
Dla kontrastu w przypadku pojawienia się Javy nie było tak, że Java zawierała większość z C++, wręcz przeciwnie - nie było wspomnianych enumów, przeciążania operatorów, części obecnych w C++ operatorów, wskaźników (oprócz zagadkowego NullPointerException rzucanego w przypadku użycia nullowej referencji), template'ów.
Artykuł o podobieństwie http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and... - tam stoi, że ani C# ani Java nie są nadzbiorem C++, i fajny kawałek: Before creating C#, Microsoft implemented a modified Java environment, called J++, adding new features in a manner which was in direct contravention to the standards and conventions that ensure the platform neutrality which lies at the heart of Java. This violated the license agreement Microsoft had signed, requiring that standards and specifications be strictly adhered to in return for using the Java name and brand logos. Sun Microsystems sued, and in settling the suit, Microsoft agreed to discontinue J++.
http://www.sun.com/lawsuit/summary.html
Po wprowadzeniu C# w Javie dodano enumy, powiedzmy że dodano templejty i autoboxing (tutaj akurat interesujące efekty może dawać obejrzenie co robi kompilator po kompilacji takiego kodu i jak się go zdekompiluje).
C# i Java są do siebie podobne.
Do C++ mają podobną składnię.