[split] Java - z wątku o patentach

kr2y510

konfederata targowicki
12 770
24 700
RE: Patenty

Premislaus napisał:
No to będą niezłe jaja. Zawsze uważałem, że java to gówno.

Zależy. Jako język programowania Java jest prosta ale typingowo-waginalna. Trzeba naprawdę naklepać sporo, by coś napisać. Ale jako technologia, czyli maszyna wirtualna, jest super. I do tego ma naprawdę potężny ekosystem, choćby języki programowania jak Scala, Clojure, Groovy, Jython czy JRuby, bazy danych jak H2 i od cholery bibliotek.




Voy napisał:
a ja właśnie zacząłem się uczyć javy :(

Nic straconego, ucz się dalej!

Po pierwsze, nie wiadomo jeszcze jaka będzie polityka Oracle w stosunku do ekosystemu na otwartych źródłach.
Po drugie, sąd może orzec, że składna funkcji to wyjątek dozwolonego użytku.
Po trzecie, jest wolne i darmowe OpenJDK.
Po czwarte, Oracle chce zarobić ale nie strzeli sobie w kolano.
Po piąte, nawet gdyby Oracle strzeliło sobie w kolano i sąd by wyrokiem zamknął API, to powstałyby inne maszyny Javy. Czy to z pomocą Google czy FSF.

Oracle musi z czegoś żyć i utrzymywać Jawę. Oracle rozwija projekt zarabiając na każdej implementacji poza PC. Głównie na komórkach. Goooooooogle nie chce OpenJDK, bo aplikację z Androida mógłbyś odpalić na czym innym a inną aplikację na Androidzie. A Android Market czyli Google Play zarobiłby znacznie mniej.

"Jak nie wiadomo o co chodzi to chodzi zawsze o pieniądze."
 

novotarq

Member
73
87
RE: Patenty

Voy napisał:
a ja właśnie zacząłem się uczyć javy :(

Trochę OT, a ja jestem tutaj nowy, ale co mi tam:

Ucz się Ruby (pełna, piękna obiektowość) albo Pythona, a jeśli chcesz nauczyć się programowania na trochę niższym poziomie (w sensie low-level) to wybierz C.

Java została stworzona przez korporację po to, by każdy, nawet małpa, mógł napisać działający program :)
 

Voy

Active Member
386
242
RE: Patenty

pythona się już naumiałem, chociaż osobiście go nie lubię, C, C++ i C# są dla mnie totalnie nieczytelne. A javy uczę się z tego prostego powodu, że po moich studiach ~95% ogłoszeń o pracę wymaga znajomości javy/C++, więc wyboru jako takiego nie mam
 

Słupek

Member
335
2
RE: Patenty

kr2y510 napisał:
Goooooooogle nie chce OpenJDK, bo aplikację z Androida mógłbyś odpalić na czym innym a inną aplikację na Androidzie. A Android Market czyli Google Play zarobiłby znacznie mniej.
To nie tak. Oni początkowo chcieli napisać maszynę wirtualną w 100% zgodną ze standardem JRE i uzyskać od Suna odpowiednie certyfikaty. Tak przynajmniej wynika z korespondencji ujawnionej podczas procesu.

Tylko, że potem stwierdzili, iż wydajnościowo im to będzie leżeć. Stąd niekompatybilność bajtkodu -- inna struktura plików (więcej niż 1 klasa w pliku dex, pula stałych wspólna dla klas), inna abstrakcja VM (wirtualne rejestry zamiast stosów). Poza tym nie implementowali z J2SE klas, których nie potrzebowali.

Wada tego jest m.in. taka, że języki o których wspomniałeś nie bardzo się na Androida nadają. Ze Scalą trzeba się nieźle nagimnastykować, żeby przez zależności nie wyszedł olbrzymi program, a dla języków dynamicznych nie ma w zasadzie żadnego wsparcia, podczas gdy na JRE jest coraz lepsze, ale nie bardzo jest jak to przeportować.

Market tu nie ma nic do rzeczy, bo jaki byłby problem zrobić klienta Google Play (a Google w zasadzie tylko na tym na z Androida przychód) na inne platformy? Poza tym implementacja Dalvika jest otwarta i każdy może sobie ją przenieść gdzie chce, jak się uprze. Powstała zresztą zamknięta implementacja m.in. na iOS, nazywa się toto Alien Dalvik.
 
OP
OP
A

Anonymous

Guest
RE: Patenty

Jest też implementacja na Blackberry. Ciekawe ile programów jest już pisanych z wykorzystaniem NDK?

Ja tam uznaję jedynie języki kompilowane i zacząłem znów ostatnio dłubać w C++.
 

kr2y510

konfederata targowicki
12 770
24 700
RE: Patenty

Słupek napisał:
Tylko, że potem stwierdzili, iż wydajnościowo im to będzie leżeć. Stąd niekompatybilność bajtkodu -- inna struktura plików (więcej niż 1 klasa w pliku dex, pula stałych wspólna dla klas), inna abstrakcja VM (wirtualne rejestry zamiast stosów).

Tego nie wiedziałem, bo nie śledzę tematu.

Słupek napisał:
Wada tego jest m.in. taka, że języki o których wspomniałeś nie bardzo się na Androida nadają

Pisałem o ekosystemie ogólnie. Choć nie widzę przeciwwskazań, by nie doklejać interpreterów języków dynamicznych do programów na Androida (wcześniej czy później ktoś to zrobi).

Słupek napisał:
podczas gdy na JRE jest coraz lepsze, ale nie bardzo jest jak to przeportować.

Czyżby ani Google ani Oracle nie umiało zrobić sensownego portu JRE na Androida?




Premislaus napisał:
Ja tam uznaję jedynie języki kompilowane

Java jest kompilowalna do byte kodu.

Premislaus napisał:
zacząłem znów ostatnio dłubać w C++.

Lepiej naucz się wpierw normalnego C. Tylko tyle by zrozumieć pewne zasady i wskaźniki. A potem możesz zapomnieć C i kombinować jak chcesz. Jak przeskoczysz etap C to będziesz wiecznie niekumatym programistą.
 
OP
OP
A

Anonymous

Guest
Patenty

kr2y510 napisał:
Premislaus napisał:
Ja tam uznaję jedynie języki kompilowane

Java jest kompilowalna do byte kodu.

Premislaus napisał:
zacząłem znów ostatnio dłubać w C++.

Lepiej naucz się wpierw normalnego C. Tylko tyle by zrozumieć pewne zasady i wskaźniki. A potem możesz zapomnieć C i kombinować jak chcesz. Jak przeskoczysz etap C to będziesz wiecznie niekumatym programistą.

1. Ale i tak wymaga to wirtualnej maszyny, co daje spory wydajnościowy narzut. Używałem programów napisanych w Javie i Pythonie. Widziałem jak działały i staram się je omijać. Wiem, że Java się świetnie sprawdza w korporacjach. Tam się sprawdza wiele innych, złych rzeczy i niech tak pozostanie. Programy powinny być pisane i optymalizowane pod daną architekturę.

2. Ale C nie jest lepsze od C++, nie jest też szybsze. Poza tym API Haiku jest pisane w C++. C++ to C plus obiektowość i parę bajerów. W C++ też są wskaźniki.

http://januszg.hg.pl/ksiazki/efektywne_prog_cpp.html - czytałem tę książkę, trochę stara ale bardzo fajna.
 

Słupek

Member
335
2
RE: Patenty

kr2y510 napisał:
Pisałem o ekosystemie ogólnie. Choć nie widzę przeciwwskazań, by nie doklejać interpreterów języków dynamicznych do programów na Androida (wcześniej czy później ktoś to zrobi).
Da się, ale to by musiały być inne interpretery, niż te, które są obecnie dostępne. Tych javowskich się nie da bo wymagają generacji bajtkodu podczas wykonywania programu, co JVM umożliwia, a Dalvik nie. To jest najważniejszy problem, poza tym są jeszcze inne, związane z wydajnością pewnych operacji w Dalviku.

kr2y510 napisał:
Czyżby ani Google ani Oracle nie umiało zrobić sensownego portu JRE na Androida?
Google nie potrzebuje JRE bo ma Dalvika. Chodziło mi o portowanie poszczególnych funkcjonalności.

Premislaus napisał:
Programy powinny być pisane i optymalizowane pod daną architekturę.
Programy powinny być pisane i optymalizowane pod dziedzinę problemu. Jak piszę skrypt, który raz na tydzień będzie przez 10 min. obrabiał jakiś plik tekstowy, to sensowniej go napisać w Pythonie niż w C. Im niższa abstrakcja, tym trudniej się program pisze, a potem utrzymuje. Zwykle jest to gra niewarta świeczki. Wydajność wielu programów jest ograniczona przez operacje odczytu/zapisu i tego nie przeskoczysz używając C++. Poza tym, obecnie Java wcale nie ma tak dużego narzutu w porównaniu do C++. Na benchmarkach od 1-3 razy wolniej:
http://shootout.alioth.debian.org/u64q/ ... astest.php
http://shootout.alioth.debian.org/u64q/ ... lang2=java
w rzeczywistości różnie.

"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil" - D. Knuth

Zresztą, teraz największa zabawa jest z pisaniem na architektury wielordzeniowe. A to się w C++ robi nie za fajnie. Tu jest duża szansa dla języków, które obsługują abstrakcję aktora czy paradygmat funkcyjny, typu Scala, Erlang.
 
OP
OP
A

Anonymous

Guest
RE: Patenty

Słupek napisał:
Premislaus napisał:
Programy powinny być pisane i optymalizowane pod daną architekturę.
Programy powinny być pisane i optymalizowane pod dziedzinę problemu. Jak piszę skrypt, który raz na tydzień będzie przez 10 min. obrabiał jakiś plik tekstowy, to sensowniej go napisać w Pythonie niż w C. Im niższa abstrakcja, tym trudniej się program pisze, a potem utrzymuje. Zwykle jest to gra niewarta świeczki. Wydajność wielu programów jest ograniczona przez operacje odczytu/zapisu i tego nie przeskoczysz używając C++. Poza tym, obecnie Java wcale nie ma tak dużego narzutu w porównaniu do C++. Na benchmarkach od 1-3 razy wolniej:
http://shootout.alioth.debian.org/u64q/ ... astest.php
w rzeczywistości różnie.

"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil" - D. Knuth

Zresztą, teraz największa zabawa jest z pisaniem na architektury wielordzeniowe. A to się w C++ robi nie za fajnie. Tu jest duża szansa dla języków, które obsługują abstrakcję aktora czy paradygmat funkcyjny, typu Scala, Erlang.

C++11 i biblioteka boost. Dla mnie każdy wzrost wydajności jest wart świeczki.

http://pl.wikipedia.org/wiki/C%2B%2B11
http://pl.wikipedia.org/wiki/Boost
http://www.agner.org/optimize/

W Javie np. nie napiszesz systemu czasu rzeczywistego.

W językach skryptowych to sobie można napisać coś doraźnie.

Może ja jestem jakiś dziwny, ale C++ jest dla mnie tak samo trudny jak Java i Python

Dziwne, że Haiku jest pisane w C++ a w porównaniu do innych systemów posiada pervasive multithreading, preemptive multitasking - niestety nie znam polskich odpowiedników.

http://stackoverflow.com/questions/4610 ... ifferences
http://www.osnews.com/story/24945/A_Pro ... e_Haiku_OS


http://en.wikipedia.org/wiki/Criticism_of_Java
http://en.wikipedia.org/wiki/Comparison ... nd_C%2B%2B
http://en.wikipedia.org/wiki/Java_performance

Java ma pewne zalety i do zadań korporacyjnych to się może i dobrze nadaje, ale nie na desktop.
 

Słupek

Member
335
2
RE: [split] Java - z wątku o patentach

Czemu nie napiszę?
http://en.wikipedia.org/wiki/Real_time_Java
Tylko spójrz co wyżej napisałem o doborze narzędzi do problemu. Ilu programistów pisze systemy RT?

Może ja jestem jakiś dziwny, ale C++ jest dla mnie tak samo trudny jak Java i Python
I ani GC, ani większa biblioteka standardowa, ani zabawki typu wyrażenia generatorowe nic a nic ci nie pomagają?

Dziwne, że Haiku jest pisane w C++ a w porównaniu do innych systemów posiada pervasive multithreading.
I jak dokładnie ułatwi mi to pisanie wieloprocesorowej, skalowalnej aplikacji? Powiedzmy, backendu Twittera. Nadal się męczę z wątkami, muteksami i resztą tego barachła.
 
OP
OP
A

Anonymous

Guest
RE: [split] Java - z wątku o patentach

We Francji nie jest już nielegalne używanie systemów czasu rzeczywistego napisanych w Javie? Rozchodzi się Garbage Collector, odśmiecanie pamięci zajmuje czas.

Słupek napisał:
I jak dokładnie ułatwi mi to pisanie wieloprocesorowej, skalowalnej aplikacji? Powiedzmy, backendu Twittera. Nadal się męczę z wątkami, muteksami i resztą tego barachła.

http://code.google.com/p/haikutwitter/ - nie wiem, nie korzystam z Twittera, więc nie wiem czy program jest dobry( na screenie wygląda fajnie), ale obadaj kod. Może coś ci podpowie.

I ani GC, ani większa biblioteka standardowa, ani zabawki typu wyrażenia generatorowe nic a nic ci nie pomagają?

Często korzystam zewnętrznych bibliotek. Na razie nic wielkiego nie piszę, hobby, ale potrzeba mi kilku programów których nie mogę znaleźć w internecie nawet na Windę. Czasem są, ale toporne w działaniu i bez GUI. Co do przydzielania i zwalniania pamięci, wolę samemu się tego nauczyć.
 

Słupek

Member
335
2
RE: [split] Java - z wątku o patentach

Rozchodzi się Garbage Collector, odśmiecanie pamięci zajmuje czas.
No więc trzeba zrobić tak, by przerwy były wystarczająco krótkie:
http://en.wikipedia.org/wiki/Determinis ... _collector
http://www.ibm.com/developerworks/java/library/j-rtj4/

http://code.google.com/p/haikutwitter/ - nie wiem, nie korzystam z Twittera, więc nie wiem czy program jest dobry( na screenie wygląda fajnie), ale obadaj kod. Może coś ci podpowie.
Przecież nie mówię o aplikacji klienckiej.
http://www.artima.com/scalazine/article ... scala.html

Co do przydzielania i zwalniania pamięci, wolę samemu się tego nauczyć.
Umieć fajnie. Pilnować, żeby nie było wycieków już mniej :] Tylko po co robić coś, co zrobi za mnie maszyna?
 
OP
OP
A

Anonymous

Guest
RE: [split] Java - z wątku o patentach

Słupek napisał:
http://code.google.com/p/haikutwitter/ - nie wiem, nie korzystam z Twittera, więc nie wiem czy program jest dobry( na screenie wygląda fajnie), ale obadaj kod. Może coś ci podpowie.
Przecież nie mówię o aplikacji klienckiej.
http://www.artima.com/scalazine/article ... scala.html

Co do przydzielania i zwalniania pamięci, wolę samemu się tego nauczyć.
Umieć fajnie. Pilnować, żeby nie było wycieków już mniej :] Tylko po co robić coś, co zrobi za mnie maszyna?

1. Właśnie się skapnąłem. A to nie wiem... Użyj po prostu adekwatnego narzędzia. Zauważ, że ja rozróżniam przeznaczenia języków. Moim zdaniem Java dla użytkownika domowego nie ma racji bytu. I staram się nie używać programów napisanych w Javie, Pythonie, z przyczyn wydajnościowych. Co nie znaczy, że nie używam w ogóle takich programów. Często nie można znaleźć lepszego zamiennika( w sensie funkcjonalności programu). Sam wiesz, że języków programowania jest od cholery, nie powstały one bez przyczyny.

2. Bo można to zrobić wydajniej i szybciej( w sensie działania). I fajnie jest mieć pełną kontrole nad tym co się dzieje. Wystarczy pamiętać o dezalokacji pamięci.

http://en.wikipedia.org/wiki/Garbage_co ... plications
http://xion.org.pl/productions/texts/co ... gc-in-cpp/
 

kr2y510

konfederata targowicki
12 770
24 700
RE: [split] Java - z wątku o patentach

Premislaus napisał:
Moim zdaniem Java dla użytkownika domowego nie ma racji bytu. I staram się nie używać programów napisanych w Javie, Pythonie, z przyczyn wydajnościowych.

Nie masz do końca racji. Tak jest jedynie w przypadku prostych programów lub pewnych klas algorytmów.

Wyobraź sobie, że piszesz w języku niższego rzędu bardzo, bardzo złożony program. Tak złożony, że nie zauważyłeś, że ten zawiera w sobie 1/3 interpretera Pythona, 3/4 biblioteki wyrażeń regularnych i 1/8 maszyny Erlanga.
I uważasz że to co napisałeś będzie szybsze? Mało prawdopodobne, bo ci co piszą te interpretery, maszyny wirtualne, optymalizatory i kompilatory cały czas to optymalizują.

Niechęć do Jawy bierze się głównie z okresu apletów Jawy w przeglądarkach. Ich koszt odpalenia był duży (problemem nie była szybkość działania a czas uruchomienia). Niechęć do Pythona bierze się głównie z tego, że narzędzia do kompilacji Pythona do pliku exe nie odsysają z Pythona rzeczy, które nie będą używane tylko doklejają zawsze całego Pythona, przez co program jest duży i wydaje się ciężki. Takie odessanie rzeczy niepotrzebnych jest trudne, bo to język mocno dynamiczny. :(

Na koniec tej kwestii. Pewne rzeczy pisane w Jawie będą działać równie szybko jak te pisane w C/C++ z innego powodu. W tym języku też można optymalizować.
A czyste interpretery jak Ruby czy Python same są pisane w C. Jeśli program przez większość czasu (procesora) będzie korzystał z gotowych funkcji z tego języka napisanych w C, to będzie podobnie szybki jak jego odpowiednik w C.

Premislaus napisał:
Bo można to zrobić wydajniej i szybciej( w sensie działania). I fajnie jest mieć pełną kontrole nad tym co się dzieje. Wystarczy pamiętać o dezalokacji pamięci.

Weź pod uwagę czas pracy programisty. Koszt napisania programu w Pythonie jest 5-10 razy niższy od programu w C/C++/Pascal. Gdyby wszystkie programy miały by być pisane w C (itp.) to wiele z nich by w ogóle nie powstało. Nie każdemu chciało by się w to bawić.
Przykład TorChat. Autor zapytany dlaczego wybrał Python odpowiedział, że w innym języku nie chciałoby mu się tego pisać!
 

kr2y510

konfederata targowicki
12 770
24 700
RE: Patenty

Słupek napisał:
Wada tego jest m.in. taka, że języki o których wspomniałeś nie bardzo się na Androida nadają.

Nawet jak masz rację to Google jest innego zdania.
GSoC2012 ➤ Toolchain for dynamic Clojure development on Android
Dla nich wszystko się nadaje, bo "każda paszteta i każda potwora znajdzie swojego amatora". ;)
A nawet jak Gogle uzna, że się nie nadaje to znajdzie się taki co to zrobi, dlatego "bo można".
 

kr2y510

konfederata targowicki
12 770
24 700
RE: Patenty

Słupek napisał:
Wada tego jest m.in. taka, że języki o których wspomniałeś nie bardzo się na Androida nadają.

Nawet jak masz rację to Google jest innego zdania.
GSoC2012 ➤ Toolchain for dynamic Clojure development on Android
Dla nich wszystko się nadaje, bo "każda paszteta i każda potwora znajdzie swojego amatora". ;)
A nawet jak Gogle uzna, że się nie nadaje to znajdzie się taki co to zrobi, dlatego "bo można".
 

Słupek

Member
335
2
RE: Patenty

kr2y510 napisał:
Nawet jak masz rację to Google jest innego zdania.
Akurat projekty w ramach GSoC to nie jest coś co sam Google planuje. Do tego się zgłaszają organizacje z zewnątrz, w tym wypadku sam zespół Clojure. Że się ludzie znajdą to prawda; Ruby na Androida jest już od jakiegoś czasu (wersja alpha chyba). Ja nie mówię, że się nie da (bo z Turing-zupełności Dalvika tak po mojemu wynika, że się da, przynajmniej w teorii), tylko że dla każdego języka dynamicznego trzeba robić osobne narzędzia dla Androida, a i tak będzie to pewnie chodzić dużo gorzej niż na JVM.
 
OP
OP
A

Anonymous

Guest
RE: [split] Java - z wątku o patentach

Jeszcze co do Javy. Jej przenośność to mit i wielkie kłamstwo. Ta przenośność działa w ograniczonym stopniu tylko na PeCetach. Kod napisany na smartfony nie zadziała na PeCetach, bo nie ma choćby akcelerometru, żyroskopu czy ekranu dotykowego. Co prawda są gówniane monitory z nakładkami dotykowymi, ale używanie tego nie ma sensu.

Już prędzej coś w stylu Kinecta się przyjmie na PieCykach:

[video=youtube]http://www.youtube.com/watch?feature=player_embedded&v=_d6KuiuteIA[/video]

To wszystko wymaga innego API( każdy producent dodaje swoje). Jak wytłumaczyć fakt, że aplikacje Java2ME nie działały na różnych telefonach i trzeba było gry przepisywać? A implementacje Javy na ARM są kiepskie...

Java jest dobra na rynku enterprise i tam powinna pozostać popularna.

Albo taki Windows Mobile, można tam pisać tylko z wykorzystaniem .Net, czy też iOS gdzie nie zainstalujemy w ogóle maszyny wirtualnej. Programy z Andorida działają tylko na Androidzie, bo Dalvik nie jest z niczym kompatybilny.

Jak napiszesz program które odwołuje się do sprzętu, to jest on nieprzenośny, bez względu na platformę i system.
 
Do góry Bottom