Jakub L.

Jakub L. Programista

Temat: Dalszy rozwój - wybór technologii

Robert Podwika:
Jakub L.:
Czymże w takim razie jest bytecode Javy jak nie kodem maszynowym?
http://en.wikipedia.org/wiki/Bytecode zapraszam do lektury

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ę.
Adam Bąk

Adam Bąk Programista

Temat: Dalszy rozwój - wybór technologii

Jakub L.:
C# i Java są do siebie podobne.
Do C++ mają podobną składnię.

Ostatnio gdzieś wyczytałem że "C++" + "Java" = C# czyli wszystko to co najlepsze w C++ i to co najlepsze w Jave połączono z tego wyszedł C# :)Adam Bąk edytował(a) ten post dnia 14.03.11 o godzinie 22:26
Robert P.

Robert P. Senior PHP Developer

Temat: Dalszy rozwój - wybór technologii

W C# nie jest tak wesoło np programowanie wątków, serwera wg mnie jest trudniejsze. Jednakże support jaki daje microsoft, visual studio, sam język jest fantastyczny. Kod, który można napisać używając zaawansowanych mechanizmów języka też jest przyjemny. Jedyne co mnie denerwuje, że pomimo tego, iż C# jest fajny to programy(przynajmniej te które ja pisałem) są wolniejsze od tych w c++.
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Dalszy rozwój - wybór technologii

Robert Podwika:
W C# nie jest tak wesoło np programowanie wątków, serwera wg mnie jest trudniejsze. Jednakże support jaki daje microsoft, visual studio, sam język jest fantastyczny. Kod, który można napisać używając zaawansowanych mechanizmów języka też jest przyjemny. Jedyne co mnie denerwuje, że pomimo tego, iż C# jest fajny to programy(przynajmniej te które ja pisałem) są wolniejsze od tych w c++.

Cóż, powiedzmy sobie szczerze, że niewiele języków jest szybszych od *dobrze* napisanego c++. Poziomu języka nie przeskoczysz...

Temat: Dalszy rozwój - wybór technologii

Rafał Korszuń:
smart cardy natywnie obsługują javę, kartę sim czy kartę bankomatowa z chipem raczej masz w swoim portfelu :)

Hm... A jak często piszesz aplikacje na karty bankomatowe? Co ostatnio napisałeś?

Nie znam się za bardzo na tajnikach sprzętowych, ale raczej trudno jest mi sobie wyobrazić procesor, który bezpośrednio wykonuje rozkazy (klasy, metody) Javy. Raczej tłumaczy je sobie na prosty kod maszynowy. A emulacja sprzętowa to zawsze emulacja. Szybsza od programowej maszyny wirtualnej, ale zawsze jest ten etap tłumaczenia kodu. A C jest kompilowany bezpośrednio do kodu maszynowego danego procesora. Jak napisał Michał "Poziomu języka nie przeskoczysz..."

No chyba, że o czymś nie wiem i piszę bzdury :)

konto usunięte

Temat: Dalszy rozwój - wybór technologii

Panowie, a jak Wasza dyskusja przekłada się na temat "Dalszy rozwój - wybór technologii" ?? Bo się Wam chyba lekko offtop zrobił.

konto usunięte

Temat: Dalszy rozwój - wybór technologii

Andrzej K.:
Rafał Korszuń:
smart cardy natywnie obsługują javę, kartę sim czy kartę bankomatowa z chipem raczej masz w swoim portfelu :)

Hm... A jak często piszesz aplikacje na karty bankomatowe? Co ostatnio napisałeś?

Nie znam się za bardzo na tajnikach sprzętowych, ale raczej trudno jest mi sobie wyobrazić procesor, który bezpośrednio wykonuje rozkazy (klasy, metody) Javy. Raczej tłumaczy je sobie na prosty kod maszynowy. A emulacja sprzętowa to zawsze emulacja. Szybsza od programowej maszyny wirtualnej, ale zawsze jest ten etap tłumaczenia kodu. A C jest kompilowany bezpośrednio do kodu maszynowego danego procesora. Jak napisał Michał "Poziomu języka nie przeskoczysz..."

No chyba, że o czymś nie wiem i piszę bzdury :)

No trochę tak.

Emulacja sprzętowa to np. komputer PC XT jako karta w Amidze.

To co napisałeś to "interpretacja sprzętowa" i tak naprawdę wykonywana jest obecnie na każdym (albo prawie każdym) PC-pochodnym procesorze (patrz mikrokod).

Coś o procesorze Javy:
http://en.wikipedia.org/wiki/Java_processor
Rafał Korszuń

Rafał Korszuń co-owner @ Kleder

Temat: Dalszy rozwój - wybór technologii

Andrzej K.:

Hm... A jak często piszesz aplikacje na karty bankomatowe? Co ostatnio napisałeś?

Nie znam się za bardzo na tajnikach sprzętowych, ale raczej trudno jest mi sobie wyobrazić procesor, który bezpośrednio wykonuje rozkazy (klasy, metody) Javy. Raczej tłumaczy je sobie na prosty kod maszynowy. A emulacja sprzętowa to zawsze emulacja. Szybsza od programowej maszyny wirtualnej, ale zawsze jest ten etap tłumaczenia kodu. A C jest kompilowany bezpośrednio do kodu maszynowego danego procesora. Jak napisał Michał "Poziomu języka nie przeskoczysz..."

No chyba, że o czymś nie wiem i piszę bzdury :)


tak zwane jcvm (java card virtual machine) często jest rozwiązaniem hardwarowym a nie softwarowym :)

trochę info na temat technologii http://java.sun.com/developer/Books/consumerproducts/j...
Jakub L.

Jakub L. Programista

Temat: Dalszy rozwój - wybór technologii

Andrzej K.:
Rafał Korszuń:
smart cardy natywnie obsługują javę, kartę sim czy kartę bankomatowa z chipem raczej masz w swoim portfelu :)

Hm... A jak często piszesz aplikacje na karty bankomatowe? Co ostatnio napisałeś?

Nie znam się za bardzo na tajnikach sprzętowych, ale raczej trudno jest mi sobie wyobrazić procesor, który bezpośrednio wykonuje rozkazy (klasy, metody) Javy. Raczej tłumaczy je sobie

Robisz proca który ma http://en.wikipedia.org/wiki/Java_bytecode_instruction... podobnie jak proce które mają http://en.wikipedia.org/wiki/X86_instruction_set albo jakieś inne z PowerPC - wszystkie listingi wyglądają podobnie.

konto usunięte

Temat: Dalszy rozwój - wybór technologii

Wracając do tematu wyboru technologii, to poniższy obrazek powinien trochę pomóc w podjęciu decyzji ;)

Obrazek

Temat: Dalszy rozwój - wybór technologii

Tomasz K.:
Wracając do tematu wyboru technologii, to poniższy obrazek powinien trochę pomóc w podjęciu decyzji ;)

Obrazek

A gdzie assembler? ;)

konto usunięte

Temat: Dalszy rozwój - wybór technologii

Andrzej K.:

A gdzie assembler? ;)

Właśnie poleciał w kosmos :D

konto usunięte

Temat: Dalszy rozwój - wybór technologii

Czyli piszący w kodzie maszynowym (vide programiści pierwszych komputerów) mogę się uznawać za Stwórców Wszechświata? ;)

A tak w temacie - język to tylko narzędzie, a wiadomo, że dobrze mieć wiele narzędzi w warsztacie. Dzięki temu jesteś w stanie zawsze dobrać najbardziej właściwe do powierzonego ci zadania. Myślę, że warto spróbować zabawy kilkoma językami i żadnemu nie mówić nie, bo nigdy nie wiadomo, kiedy może się przydać.

Swoją drogą - jako że w PHP programuję od jakichś 10 lat - stwierdziłem, że pora wybrać coś nowego do tworzenia w tzw. Webie. Zabrałem się w końcu do Django i jestem oszołomiony, że tyle czasu tworzyłem w czymś, co przypomina biurko domorosłego elektronika (bez obrazy dla PHP, które ciągle jest potężnym narzędziem ;-) ). Może to trochę wynikło z mojej miłości do Pythona, ale w tej chwili czuję się jakby programowanie zmieniło się w składanie LEGO - masz części, masz świetną instrukcję i tworzysz. Możesz stworzyć wszystko według instrukcji, możesz pewne elementy zmieniać, dokładać nowe, ale ciągle jedna rzecz zachwyca - jak to wszystko do siebie ładnie pasuje ;)



Wyślij zaproszenie do