Автор Тема: Защо никой не обича Java?/Sprechen Sie Java? (слети теми)  (Прочетена 18150 пъти)

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Защо никой не обича Java?
« Отговор #15 -: May 08, 2010, 18:36 »
Общо за Java:

Java (чете се "джава") е програмен език. Java се появи преди известно време. По-точно преди 3 години. "Авторите" на Java са американската фирма Sun. Тук е интересно да се спомене, че както повечето "творения" на Sun, Java не блести с "нещо" много голямо на пръв поглед. Например, въпреки че сървърите и работните станции на Sun никога не са били най-мощните за момента (като на Digital или HP например), то те са доста предпочитани и използувани.

По принцип Java е интерпретатор. Тук незапознатите веднага ще кажат "Това е крачка назад". Но Java не интерпретира p-код (като Basic например). Java интерпретира машинен код. Този машинен код обаче не е за никоя конкретна машина, той е за JVM (Виртуална машина на Java). JVM е измислен "супер-risk" стеков процесор, със само няколко регистъра и с много малко инструкции. (Преди известно време Sun представи "реален" JVM - процесора Java_Chip. Той обаче не е предназначен за компютри, а за TV, радио, офис техника, кредитни карти и т.н.). Java машинния код може да се компилира до машинен код за конкретна машина за части от секундата. Това е така, защото "компилацията" се свежда до размяна на едни машинни инструкции с други. Тези компилатори се наричат JIT (Just in time).

JVM може да се намери като отделна програма (java.exe), като част от друга програма (Netscape Fast Track Web Server), в Web Browser (Netscape Navigator, Ms Internet Explorer, IBM Web Explorer, Sun Hot Java), в някой OS (Linux, OS/2)

Sun обещават да създадат истински компилатор за Sun-Spark и 80x86 до една година, но това не е чак толкова важно.
К'во "печелим"?

Java e многоплатформен
той транслира JVM кода. Това е възможно за много процесори и операционни системи. Java код, разработен на PC например, ще тръгне на всяка друга. Това може да не е важно за някой офис приложения, но е много важно за всички Интернет/Интранет приложения. Един потребител може да започне със Windows 95, след време да премине на Windows NT или OS/2, а след като и тази операционна система не му задоволи изискванията, той може да премине на CISK/UNIX или RISK/UNIX. Във всичкото това време той ще може да ползува един и същи програмен продукт. Друг пример може да е потребител, който има различна техника, от Windows 95 и Mac/OS, през Windows NT, UNIX до големи enterprice UNIX сървъри. Този потребител би могъл да работи с един и същ програмен продукт на всичките тези машини.

Java прилича на C++
"Истинският програмист" на C++ може да премина на Java за броени дни. Напоследък все по-често се появява софтуер за автоматичен трансфер между C++ и Java. За съжаление той е полезен за трансфер само на алгоритмите, но транслирания код, радко може да се компилира директно:))
Според автора който все още предпочита Object Pascal пред C++, в Java са премахнати всички неща които са спорни във C++, и са добавени нови възможности, които никога не са били възможни във C++ (като лесни за работа String, тип boolean, предаване на параметри по адрес и др.) Тук е момента да се каже, че в Java има и нереализирани неща (като липсата на възможност за наследяване на constructor-ите на обектите, липсата на destructor-и на обектите, невъзможността за директно сравняване на String-ове, някой доста странни операции като
Date d = new Date();
System.out.print(d);
и др.)

Java е наистина обектно-ориентиран
Тук е важно да се отбележи, че за разлика от привидно обектно ориентираните езици като Power Boulder, New Era, Arc View Avenue и "др. от този сорт", Java е истински обектно ориентиран език, със всички възможности като наследяване, полиморфизъм и т.н. Недостатък е липсата на destructor, но тя се компенсира до някъде от gc (garbage collector, събирач на боклуци). Също е много важно да се отбележи, че Java "идва" с много класове, не само за визуален интерфейс (като Power Builder, Delphi или Visul C++ и др.), но и такива за паралелни процеси, достъп до бази данни, работа със данни в паметта и мн.др. Ползуването на тези класове е от особено значение, когато предаваме своята програма по Internet, т.к. тези класове са при клиента и мрежовия трафик се намалява значително. Това спомага и за сигурността на данните.
Много е важно да се отбележи, че Java използува собствените си класове (т.е. ние може да ги пренапишем) за неща като зареждане на системните класове от диска (а защо не от мрежата?), зареждане на картини GIF и JPEG (а защо не и някакъв наш формат?) и т.н.
K'во "губим" с Java?

Java е бавен
Java e бавен, даже понякога отчайващо бавен. Не трябва да се забравя обаче, че той е напълно 100% преносим.

Понякога Java не е достатъчно стабилен
Докато въпросът за скоростта не е толкова важен стабилността на дадена програма е нещо от първостепенно значение. Java е идеален за програми които работят известно време (до няколко часа), но все още не е достатъчно стабилен за сървър приложения, които трябва да работят дни, месеци даже години без спиране или изключване. Авторът лично е изпитал това когато е писал WWW сървър на Java. Въпросният WWW сървър (с "кодово" име `Octtarion`) е достатъчно бърз, но недостатъчно надежден. Въпросният сървър `забива` след 4-5 часа работа при максимално натоварване, когато оперативната памет е вече доста фрагментирана и "garbage collector", не успява да си 'свърши работата'. Ако се направи анализ обаче тези 4-5 часа биха се равнявали на 4-5 месеца в един не чак толкова натоварен Web сайт.

Относно сървърния софтуер трябва да се спомене, че Sun Microsystems са разработили "JAVA Web Server", но той се предлага на доста висока цена за такъв (около $400 - $500). Преди известно време беше разработен и безплатен SQL сървър базиран също на Java с `open source`.
Къде да използваме Java

Java може да се използува доста добре за множество цели (авторът няма пред вид 'шаренийте' по web страниците), като едни от най-добрите му качества са преносимостта и лесната разбираемост на програмния код написан с Java. Той наистина е бавен, но това много лесно може да се компенсира по различни начини.

Авторът лично смята, че Java не е подходящ за сървърен, а по-скоро за клиентски софтуер, и то при случаите на хетерогенна мрежа (какъвто е и Internet) или когато операционната система на клиента не е известна. Другото голямо приложение на Java е Java_Chip и по-точно монтирането му в кредини карти, телевизори и друга техника за бита.

//
Оригинална статия тук.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

Ivshti

  • Напреднали
  • *****
  • Публикации: 322
  • Distribution: Linvo 2010.3
  • Window Manager: Gnome
    • Профил
    • WWW
Re: Защо никой не обича Java?
« Отговор #16 -: May 08, 2010, 18:54 »
@backtolife: разбра ме погрешно. Харесвам Java, харесвам и C++. Идеята ми е че са създадени за различни цели ;)
Лично на мен Java ми харесва заради мултиплатформеността си, и заради това, че е "полу-интерпретиран" език (схемата с виртуалните машини). Не ми допада синтаксиса на езика, но това не е по вина на Java, просто не съм се сблъсквал преди с езици, които още от началото са били проектирани с идеята да са обектни.
« Последна редакция: May 08, 2010, 18:56 от Ivshti »
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Защо никой не обича Java?
« Отговор #17 -: May 08, 2010, 18:58 »
@Ivshti да бе, тя Марчето ми каза, че съм те разбрал погрешно, но не ми се преправяше пост-а :)
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

pikimos

  • Напреднали
  • *****
  • Публикации: 49
  • Distribution: Kubuntu 9.10
    • Профил
Re: Защо никой не обича Java?
« Отговор #18 -: May 08, 2010, 19:35 »
Голям плюс на Java е, че може да се ползва една и съща IDE под всички операцонни системи и да се програмира на вскякви платформи за всякакви платворми.
Положителна черта също е, че се интерпретира веднага. Нямам сведения дали има възможност примерно IDE на Microsoft  за C# да се инсталира и да се ползва с успех под Linux.
Определено Java има много преимущства и ако се ползват професионалните IDE като Eclipse и най-вече Netbeans, Java става един много мощен инструмент в ръцете на опитен програмист. Java има също и изключително добро API, ако изчистят някой неща в този език в бъдеще ще е  прекрасно, но както писах преди, откакто ORACLE влязоха в играта бъдещето е малко неясно.
Активен

c111100101

  • Гост
Re: Защо никой не обича Java?
« Отговор #19 -: May 08, 2010, 19:39 »
Извинявайте по грешка писах със стария си ник, който вече не ползвам "pikimos".
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Re: Защо никой не обича Java?
« Отговор #20 -: May 08, 2010, 19:54 »
task_struct и той не я харесва
Не е вярно! Аз я мразя !  ;D

1) Мулти платформено ... друг път. Аз на С/С++ мога да пиша по-мултиплатформено ( особено с Qt :) )

2) Адски е бавна. Според мен не е нормално 1 приложение да ми пуска по 20 000 нишки за да следи 3 променливи и да иска по 1ГБ рам. Заради употребата на такива езици колкото и бърз процесор да измислят, приложенията няма да се изпълняват по-бързо.

3) Последното пренаписване на диспечъра на процесите в ядрото (scheduler) е направено, точно за да се оптимизира с цел по-бързо изпълнение на джава нишките. Дали е случайно, че го пренаписаха точно заради този език ??
Цитат
The 2.6 scheduler was designed and implemented by Ingo Molnar. Ingo has been involved in Linux kernel development since 1995. His motivation in working on the new scheduler was to create a completely O(1) scheduler for wakeup, context-switch, and timer interrupt overhead. One of the issues that triggered the need for a new scheduler was the use of Java™ virtual machines (JVMs). The Java programming model uses many threads of execution, which results in lots of overhead for scheduling in an O(n) scheduler. An O(1) scheduler doesn't suffer under high loads, so JVMs execute efficiently.
- http://www.ibm.com/developerworks/linux/library/l-scheduler/

4) Езика отдалечава програмиста от компютъра. Повечето джава програмисти, с който съм говорил си нямат на идея какво е това стек, хийп и въобще какво става в паметта, колко бързо се изпълнява кода им и колко памет заема. Никой не мисли за оптимизицаии :( Явно паметта и прозосорното време са безкрайни ...

Това ми хрумна на първо време :) Ако има още нещо ще го споделя :)

Приятна вечер на всички  [_]3
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Защо никой не обича Java?
« Отговор #21 -: May 08, 2010, 21:27 »
На мене ми харесва, откакто видях едно IDE за разработване на софтуер, свързан с java-базиран message bus. Голяма красота, 1/5 от работата е писане на код, останалото е влачене на стрелки с мишката и рисуване на някакви UML-подобни картинки. Може да звучи малоумно, но крайният резултат беше потресаващ и не мога да си представя колко зор ще отиде, за да напишеш подобно нещо, също толкова гъвкаво, само че на C++. Щото то не е просто да имаш конектори за най-различни протоколи, да се дефинира някакъв формат на данните и да конвертираш от външния формат във вътрешния XML формат и обратно. Това имаше транзакционни наклонности примерно и доста дълги последователност от неща можеха да се rollback-ват при положение, че някаква малка стъпка пропадне. На всичкото отгоре, самият език има навика да прощава някои неща.

Е да, това е език, който предразполага към големи свинщини, но пък не бих казал че го мразя. Мразех единствено свинщината на девелоперите, които физическата памет и процесорното време за нищо ги нямаха. За тях проблеми нямаше, като се появи проблем - вдигаме хийп сайз-а и толкова. И в един момент се чудят с многото памет защо като мине колектора и всичко се влачи едва-едва. Ама те не са виновни, то това там е философия - колкото повече, толкова повече.
Активен

"Knowledge is power" - France is Bacon

tyuio

  • Гост
Re: Защо никой не обича Java?
« Отговор #22 -: May 08, 2010, 22:57 »
Цитат
Понякога Java не е достатъчно стабилен
Докато въпросът за скоростта не е толкова важен стабилността на дадена програма е нещо от първостепенно значение. Java е идеален за програми които работят известно време (до няколко часа), но все още не е достатъчно стабилен за сървър приложения, които трябва да работят дни, месеци даже години без спиране или изключване. Авторът лично е изпитал това когато е писал WWW сървър на Java. Въпросният WWW сървър (с "кодово" име `Octtarion`) е достатъчно бърз, но недостатъчно надежден. Въпросният сървър `забива` след 4-5 часа работа при максимално натоварване, когато оперативната памет е вече доста фрагментирана и "garbage collector", не успява да си 'свърши работата'. Ако се направи анализ обаче тези 4-5 часа биха се равнявали на 4-5 месеца в един не чак толкова натоварен Web сайт.
Това сериозно ли?

Цитат
4) Езика отдалечава програмиста от компютъра. Повечето джава програмисти, с който съм говорил си нямат на идея какво е това стек, хийп и въобще какво става в паметта, колко бързо се изпълнява кода им и колко памет заема. Никой не мисли за оптимизицаии :( Явно паметта и прозосорното време са безкрайни ...

И какво от това? Който иска ще се научи който не иска няма, това не прави един програмист добър или лош, нито програмата.

Активен

dvd

  • Участници
  • ***
  • Публикации: 11
  • Distribution: Debian testing/unstable
  • Window Manager: E17
    • Профил
Re: Защо никой не обича Java?
« Отговор #23 -: May 08, 2010, 23:22 »
Ами и аз съм писал на Java и не я харесвам:
1) Не дава свобода (даже в идеите ѝ е всичко да е по-строго) - харесвам езици в които човек има дадена сваобода, например в C имаш свободата да работиш с паметта както ти е удобно, в Ruby и Python имаш свободата, която ти дава метапрограмирането, доката Java гледа да ограничи местата на които можеш да сбъркаш при писането на код и така ограничва свободата на програмиста.
2) Тежка е. Да, Ruby, което съм посочил по-горе е по-тежко, но както вече казах дава свобода.
3) Не ми харесва стилът на писане на Java, колкото и да е лесна и да се пише лесно, самият език е направен така, че се опитва да те кара да си структурираш и организираш кода, по начин, който не харесвам.
4) Тежка е.
5) Тежка е.
6) Бавничка е.
7) Тежка е.
« Последна редакция: Jul 11, 2011, 15:30 от dvd »
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 2834
    • Профил
Re: Защо никой не обича Java?
« Отговор #24 -: May 08, 2010, 23:47 »
8 ) Тромава е.
9 ) Мудна е.
Активен

Perl - the only language that looks the same before and after encryption.

Lord Bad

  • Напреднали
  • *****
  • Публикации: 1667
  • Distribution: Fedora 13
  • Window Manager: GNOME
  • Jedi Knight
    • Профил
Re: Защо никой не обича Java?
« Отговор #25 -: May 09, 2010, 00:24 »
Докато четях отговорите до тук по темата сериозно обмислях да изчезна завинаги от тоя форум. С риск да си предизвикам гнева на модераторите - по-идиотски изказвания на едно място и в някой индийски форум за програмиране не могат да бъдат събрани... И подозирам, че никой от хората, които само търкалят като латерни "Java е бавна, Java е тежка" не е разработвал нищо смислено на Java...
Аз обичам езика Java(макар и не толкова колко Ruby и Lisp например), обичам безкрайно много Java Virtual Machine, която е фондацията на половината "модерни" езици за програмиране като Clojure, Scala, Groovy, etc...

Между другото са за информация на всички дето се изказваха колко бавна е Java(което е идиотско изказване само по себе си с оглед на това, че един език не може да е бавен като език, а не ми се струваше че някой визираше виртуалната машина) - генериния от компилатора bytecode се изпълнява от JIT компилатора на Java 6 само за около 20% повече време отколкото еквивалентен С код, което е впечатляващо. При Ruby говорим за загуба на ефективност около 300 пъти в много сценарии(300 пъти, не 300%). Най-бързата имплементация на Ruby е JRuby, която върви върху JVM... Мога си продължавам така до утре, но има чувството, че каквото и да се каже тук някои хора все ще си продължават с тяхното... За Бога, братя, мислете преди да пишете :-)
Активен

Fuelled by Fedora 13 "Goddard"
====================================
Rock it!

foxb

  • Напреднали
  • *****
  • Публикации: 175
    • Профил
    • WWW
Re: Защо никой не обича Java?
« Отговор #26 -: May 09, 2010, 01:01 »

"готова" - какво означава това? Да не искаш да кажеш инсталирана?

Не имам напредвид написана...

Иначе идеята не е нова - OS/390 обаче по-добре се справя с байткода -> просто при инсталация се компилира до машинен код за съответната машина.

Ето какво правят ентусиастите:
http://jnode.org/
« Последна редакция: May 09, 2010, 01:27 от foxb »
Активен

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: Защо никой не обича Java?
« Отговор #27 -: May 09, 2010, 04:45 »
LordBad, зачезването от форума няма да промени нечие мнение, така че е излишно действие. В крайна сметка всеки си има свое мнение, къде аргументирано, къде не чак толкова. По-добре свикни с това, че има и негативни мнения за нещата, които харесваш, вместо да бягаш от реалността :) А иначе ти, според мен, имаш принос за по-доброто име на Java, не помня някой да се е оплакал (мрънкал трайно), че Spellbook е написан на точно този език.  [_]3
Колко бавна и тежка е Java (пък и Ruby, Python и т.н.) е вечен въпрос. Независимо колко много се развива в тази посока, не може да достигне да речем C, поради особеностите на архитектурата си. Но това е нормално, това е част от "атмосферата" на езика, Java (както и Ruby, Python и т.н.) просто си има други, свои, приложения.
Активен

dvd

  • Участници
  • ***
  • Публикации: 11
  • Distribution: Debian testing/unstable
  • Window Manager: E17
    • Профил
Re: Защо никой не обича Java?
« Отговор #28 -: May 09, 2010, 05:00 »
Най-бързата имплементация на Ruby е JRuby, която върви върху JVM...
Не бих казал: http://antoniocangiano.com/2007/02/19/ruby-implementations-shootout-ruby-vs-yarv-vs-jruby-vs-gardens-point-ruby-net-vs-rubinius-vs-cardinal/
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Защо никой не обича Java?
« Отговор #29 -: May 09, 2010, 09:03 »
Директен въпрос към Марчето (пък и към другите, които харесват С) - мен в училище са ме учили, че С не е обектно ориентиран, защо тогава толкова го харесвате. И за да не се отклонявам от темата за Java искам да попитам има ли нещо което може да се реализира на Java, а на C не, и обратното (само ви моля без това, че Java е преносима (JVM) и че в С можеш да си бърникаш из паметта и т.н.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
приложение на Java
Общ форум
laik 3 2247 Последна публикация Jun 17, 2004, 13:10
от JOKe
JAVA програмиране
Общ форум
smitev 8 3138 Последна публикация Jul 13, 2004, 00:26
от JOKe
За Java програмисти
Общ форум
smitev 1 1894 Последна публикация Sep 15, 2004, 21:49
от JOKe
Стартиране на Java приложение !
Общ форум
Diabolic_Soul 4 3229 Последна публикация Feb 22, 2005, 00:22
от JOKe
Java IDE?
Идеи и мнения
toxigen 9 3775 Последна публикация Apr 06, 2005, 23:00
от Ivozen