![]() |
"java" Vs. "c"
Говорят, что "Java" начал заменять "C" и что в учебных заведениях уже по немногу переходят на "Java" (как основной язык) так ли это? Хотелось бы узнать ваше мнение.
П.С. И если у кого вдруг есть книжки для начинающих скиньте плз. Я нашел "The Java Language Specification" (говорят очень хорошая), но хотелось бы на русском. |
Зайди на sun.com ... там все написано.
|
http://www.pingwin.ru/node/folder-0774/ -- найдешь много нужного для программиста на Java.
Цитата:
Цитата:
А вообще Java сейчас преобретает популярность повсюду, слышал, что даже пишут Java-программы для мобилок. И еще, внешне Java очень напоминает C. |
Цитата:
Цитата:
|
Re: "java" Vs. "c"
Цитата:
|
Цитата:
|
Например J++ ...
|
melk
Excelsior JET |
Господа! Не надо путать теплое с мягким (с) Гоблин.
С++ - язык с компилятором, а Java как была с интерпретируемой, так таковой и останется. Если какая-то прога умеет из Java делать exe - это значит только то, что на выходе пак джавы и интерпретатора. Я не понимаю как можно заменить С с его свободными преобразованиями типов и "опасными" операциями с указателями Джавой. Кстати может меня кто-нть просветит можно ли на Java сделать "книжный" или, если угодно, классический пример связанного списка или дерева при отсутствии указателей как таковых? Вообще любой пример с использованием указателей на объекты. Я серьезно. Может я просто так сильно избалован Си-шником или слишком хреново Java знаю? Если преподают чисто объектно ориентированное программирование, то Java подходит как нельзя лучше. |
А кто сказал что языки программирования завтрашнего дня - компилируемые ?
|
RaZEr
Хех... Оригинальное замечание. Думаю, что все-таки компилируемые языки "останутся на своих позициях" и не будут заменены интерпретируемыми. Компилированный код как был самым быстрым так таким и останется. Более того, time critical куски в компилируемом языке можно написать на языке низкого уровня, а на интерпретируемом... Вообще вся эта бодяга с повальным, финансово оправданным RAD-бардаком довела до того, что для работы современной операционки уже и 256Мб мало. Я не говорю, что все нужно писать на асме, но уважать хотя бы самого себя и искать компромис между скоростью написания программы и качеством кода нужно. |
Цитата:
|
RaZEr
Да притом, что они поддаются оптимизации только на "высоком уровне", т.е. на уровне конкретного языка высокого уровня. Окончательная интерпретируемая программа, которая будет выполняться на данном компе и данной операционке посредством интерпретатора, заведомо будет расходовать больше системных ресурсов нежели чем компилированная. С интерпретатором мы получаем дополнительные требования по памяти, выделямую под виртуальную машину (среду) и дополнительный исполняемый код модулей с функциями, которые могут и не вызываться программой, в то время как грамотно скомпилированная программа не содержит ничего лишнего. Причем тут интерпретируемые языки? Да просто становится не по себе если представить себе, скажем, офис от мелкософта, который в рекламных целях может быть переписан на .NET или VisualBasic (я подозреваю, что морда ворда :biggrin: уже написана ма бейсике). А ведь это майкрософтовая пародия на Java, как последствия непрекращающейся ругани с Sun'ом. И это не только микрософт. В качестве отечественого примера могу привести 1С. "Морда" нарисована на Васике, а ядро на си. Поверь, я не являюсь противником интерпретируемых языков. Меня удивляет нездоровое, на мой взгляд, увлечение многих серьезных софтопроизводителей этими языками. Это в конечном счете ударит и по моему карману когда я через год пойду докупать "еще 512" к своему "гигу". Для того чтобы комфортно работать в виндоусе XXX. В области написания мультиплатформенных приложений у той же джавы очень немного конкурентов. С другой стороны можно придерживаться стандартов ansi и писать портируемые программы и на том же си. |
А что плохого в .net ... GAC (Global Assembly Cache) позволяет добиться быстродействия компилируемых языков. Ты так беспокоишься за оперативную память, но ты не думаешь что библиотека в которую для совместимости напиханы ф-ии всех предыдущих стадий разработки сожрет в конечном счете памяти больше чем весь .net framework вместе взятый.
|
RaZEr
Да, я беспокоюсь за оперативную память! А еще за свободное место на винте и скорость работы нужной мне программы. Библиотека может быть прилинкована статически (я писал о ГРАМОТНО СОБРАННОЙ программе). Оптимизирующего компилятора, выкидывающего dead code, который никогда не вызывался и не будет вызываться, никто не отменял... Ничего плохого в GAC нет. Я это уже сказал. Добиваемся скорости работы увеличивая системные требования? Тот же самый .NET framework обрастет устаревшими ф-циями для совместимости с предыдущими версиями гораздо быстрее чем обычный Си-шник и их уже никуда не выкинешь! Да, самое веселое... 46 мегабайт framework'а (я просто посмотрел размер папки %systemroot%\assembly) для того чтобы показать 1 диалог крохотной програмки? Проект в 750 тысяч строк компилится в четырехмегабайтный бинарник, которому ничего (кроме ADO) снаружи не требуется. Я думаю, что есть небольшая разница... |
Цитата:
Цитата:
Впрочем ты можешь жить убеждениями о бессмертности компилируемого С++. Так или иначе время все расставит на свои места. |
Цитата:
Цитата:
|
Цитата:
|
RaZEr
Ок. Чтобы закончить этот разговор объясню. Я не живу убеждениями о бессмертности Си как такового. Разговор начался с принципа компилируемых программ и интерпретирумых. Я еще раз повторю, что на мой взгляд и те и те языки будут сосуществовать, но компилируемые не "сдадут своих позиций". Мое высказывание об "убеждениях" было написано в качестве ответной шутки иначе в конце не стоял бы смайлик. |
Есть грань между шуткой и насмешкой.
|
RaZEr
Ты не прав, если считаешь, что интерпретируемые языки следующая ступень развития после компилируемых. Яркий пример (если помнишь или слышал) - GWBasic - полностью интерпретируемый язык и явно не вчера появился ;-). Просто Софт-индустрию постоянно "кидает" то в сторону компиляторов, то интерпретаторов. А популяризируется то, что продается, а продается то, что ново, а в компиляторах в последнее время ничего нового не появлялось (нужен новый "скачок" технологий). Кстати для прикола (и размышлений): процессор ИНТЕРПРЕТИРУЕТ программный код, который был СКОМПИЛИРОВАН для того, чтобы ИНТЕРПРЕТИРОВАТЬ программу на Java. Вывод: выбирать что лучше - Глупо, пытаться объединять выгодные стороны обоих - Намного умнее. |
Цитата:
|
RaZEr
Во фразе: Цитата:
Но, боюсь, полноценную 3Д игрушку, созданную на интерп. языке ты увидишь не скоро. А компиляторы снова будут "на волне" после инерпретаторов, когда исчезнут проблемы несовместимости платформ и/или когда появятся задачи, требующие наиболее быстро работающего решения. |
А что есть компилятор ? Программа создающая код понятный процессору ... так вот вероятность того, что изобретут процессор который станет первым и последним и других не будет, крайне мала. А значит будут разные поцессоры, старые и новые, большие и маленькие, дорогие и дешевые, и чтобы решения (программы) могли работать везде, придумали двухуровневую компиляцию ... с промежуточным кодом, который уже под конкретной системой и компилируется. По нынешним меркам потеря в скорости не критичная, а ресурсоемкие процедуры можно по прежнему писать используя unsafe code, т.е. тот код, который будет скомпилирован не в промежуточный код для виртуальной машины, а в конечный - для процессора.
|
По-моему, обсуждение уже далеко отошло от темы :)
Изначально утверждалось, что Java якобы заменяет C/C++ в учебных заведениях. IMHO Java куда проще их, поэтому вполне разумным представляется обучать программированию на Java, а уж потом переходить на С/С++, если потребуется. Java действительно не заменит С/С++, в чём я уверен, по причинам производительности в частности и по многим другим причинам тоже. Например, потому, что Java - эта некая задокументированная среда, включающая не только язык, но и библиотеки. Все разработки ведутся только в рамках этой среды. Если появляется какая-либо совершенно новая технология, то органично "подрубить" её к Java гораздо сложнее, чем к языку С/С++. Пример - колёсико мыши, которое, с одной стороны, уже невесть сколько времени существует, а с другой - нельзя было поюзать под Java буквально до 2002 года. А насчёт разницы между компилятором и интерпретатором - на самом деле она довольно условна. Теоретически никто не мешает создать процессор, машинным языком которого будет Бейсик - вот и привет ;) Кстати, процессоры, для которых машинным языком является разновидность Java, существуют (picoJava II). А ситуация с .net ещё более интересна. Разработчики утверждают, что скорость работы .net кода будет выше, чем обычный компилированный EXE C/C++. Причина в том, что система .net осуществляет компиляцию кода на лету (just in time), а поэтому может провести некоторую оптимизацию, рассчитанную конкретно на вашу систему. А средняя среда разработки до сих пор обычно создаёт, по умолчанию совместимый с 386 процессором - т.е. никакого использования инструкций Pentim IV вы не найдёте. |
С процессорами вроде разобрались ;) ... есть конструктивная критика по Java ?
|
Цитата:
Если не затрагивать вопросы компиляции/интерпретации/переносимости/etc., а рассматривать Java именно как язык, то на мой взгляд, он не лишён синтаксических и семантических проблем. 1) В языке Java слабая типизация. С одной стороны, это увеличивает гибкость, с другой - провоцирует ошибки. К примеру, я могу положить в массив любой объект, не заботясь о его типе. А вот когда я его буду вынимать - контроль типов лежит на мне, а не на компиляторе (как в С++). 2) как следствие - постоянные скобки, вызывающие уродливый синтаксис. В С++ "выемка" элемента из хорошего класса массива выглядит естественно: MyObject c = thearray[i]; навряд ли меня кто-то убедит, что синтаксис Java удобнее: MyObject c = (MyObject)(thearray.get(i)); 3) язык Java менее выразителен. Т.е. существуют хитрые философские концепции, которые можно выразить на С++, но нельзя выразить на Java (к примеру, так называемое "наследование реализации" без наследования интерфейса) 4) язык Java порою оказывается непоследовательным в определениях операций над объектами (например, string в ряде случаев ведёт себя как встроенный тип, а в других случаях - как класс). 5) отсутствие шаблонов (templates) трудно понять 6) нерасширяемость языка (перегрузка операций) - момент спорный, но я бы предпочёл, чтобы она была ;) |
"От Java ждут очень многого, особенно в связи с интеграцией с Web, и эти ожидания подстегиваются дорогостоящими маркетинговыми акциями. Время покажет, будет ли Java дееспособен как универсальный язык. Хотелось бы посмотреть, как большинство программистов и менеджеров будут реагировать на "открытие" (для многих уже сейчас очевидное), что безопасность Java и в особенности JavaScript оставляет желать много лучшего. Часто путают безопасность типов языка программирования (что корректная реализация Java обеспечивает) с собственно безопасностью - поддержкой целостности системы и обеспечением конфиденциальности и секретности, что, по-видимому, может серьезно пострадать при использовании Java. В шутку называют Java "языком реализации вирусов". Если же вернуться к сравнению С++ и Java, то вспомним следующие фундаментальные характеристики С++: абстракция данных; поддержка объектно-ориентированного программирования (ООП); "обобщенные" (generic) классы..."
|
Кстати о сравнении:
http://ru.sun.com/win/java/start/intro/compar.gif |
Java уже очень давно (1996-1998) используется в качестве языка-для-студентов. Естественно, что при переходе с Бейсика или ещё чего на "язык покруче", при тех же преподавателях и уровне обучения, пользы мало, если не вред. Многие путают Java и JavaScript (выпускник-программист должен свободно владеть 5-6 языками программирования -- Asm, C/C++, Object Pascal, а ещё 2-3???). Проблем более чем хватает (Особенно если учесть номерацию от самой Sun -- Java2 = JSDK1.2 ~ 1.4).
Преимущество Java перед C/C++, C# и другими языками частично кроется в наличие значительного количества (более 100-150) сред разработки различного уровня. Среди них есть много "за так" -- что для _непередового_ американского вуза весьма хорошо (даром + легально). Хотя для образования существует Academic Edition за $100-200, но они обычно являют собой урезанные варианты. Для Java можно найти несколько _условно свободных_ пакетов для любой области от мобильных устройств (включая embedded) до кластерного ПО уровня предприятия (J2EE). И люди есть толковые, а это важнее красивых коробок... Богатсво разнообразия, хреновый маркетинг и и проблемы со стабильностью (для начала) конечных продуктов самой Sun Microsystems (да, её русский вариант сайта совсем не в дугу :( ) привело к тому что есть -- много шума и падение акций. Слава богу свои JSDK делает ещё и IBM и др. НО... Java, как торговая марка (tm), двигается слишком большим количеством различных производителей (от стиральных машин до корпоративных систем) -- слишком большая инерция у этого поезда -- главное чтобы он нас не подавил. А работы в ближайшее время на Java будет много, особенно в J2EE. Как говорил один мой знакомый -- главное чтобы хорошо платили!!! |
Цитата:
В строке "Simple" Java получает сто из ста (типа, проще некуда), зато С++ - "ужасно сложно"... это кто так оценивал? Дальше читаем: "Object Oriented" - Java получает статус "полностью ОО", а С++ - наполовину?! Объясните, почему... Что означает загадочная строка "Server", по которой С++ получил полный нуль? ;) Почему "Exceptions" для Java - 100%, для С++ - 50%? 100% Portable для Java - тоже в большой степени рекламный трюк. Ну а самая смешная строка - Perfomance: Java = C++ = HIGH :)) Это просто без комментариев. Все критичные по скорости программы (например, игры) пишем на Java! В добрый путь... Одним словом, не внушает доверия. Кстати, существуют приложения, которые в принципе нельзя писать на Java. Например те, которые должны работать строго с постоянной скоростью (кардиостимулятор). Представьте себе, что этот стимулятор стимулирует себе, и тут в один прекрасный момент Garbage Collector решает произвести сборку мусора... |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Ну знаете ;)
Цитата:
Более того, если некто не способен применять эти средства выражения своих мыслей, язык не принуждает к их использованию. Вы можете писать программы на С++ без применения средств, которые вы плохо понимаете. Зато те, кто понимает, может извлечь из этого весьма заметную выгоду. Иными словами, ваша цитата - не более, чем частное мнение некоего человека. разумеется, под словом "вы" я понимаю автора цитируемого тезиса Цитата:
Цитата:
Вы МОЖЕТЕ написать на С++ НЕ-ОО программу, но это ваш личный выбор, а не ограничения языка. Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
PS: А как насчет плюсов ? Есть предложения :biggrin: ? |
Цитата:
Цитата:
"На халяву" получай PHP - сильный интерпретируемый язык. |
Плюсы есть:
1) в одном месте собрано множество полезных пакетов по обработке разнообразных вещей. От регулярных выражений до работы с сетью на различных уровнях (сокеты и высокоуровневые протоколы). 2) качественно написанные задачи (везде есть свои нюансы :) ) работают нисколько не медленнее своих собратьев на C++. В некоторых задачах скорость определяется временем реагирования пользователя а не количеством терафлопс. Правда нужно вдвое больше памяти... 3) при производстве ПО играет роль стоимость: среды разработки, дополнительных пакетов, лицензионных отчислений, времени кучи людей (аналитик, постановщик задач, технический писатеоль, кодер, тестер...) и прочего. Главное чтобы в итоге был $++ :biggrin: 4) Знание (ну и опыт конечно)! Уже сколько спорят про Win* VS *nux -- сплошные повторы (очень интересная тема для диссертации). Если человек знает *чего* хочет, и при этом хорошо понимает *как* этого добится, то выбор языка программирования чисто технический фопрос -- молоток или кувалда ;) Java имеет ряд заточек под конкретные задачи. 5) В Java есть поддержка 3D Graphics, Music & Sound, Даже поддержка речи -- все модные слова. На W3C есть проект JigSaw -- это реализация прокси на Java. Кто чего ещё хочет? По поводу кардиологии -- что-то в медицине я видел только специализированную технику, спец. ПО (можно конечно использовать супер комплекс LinWin-PC-Ухо-Горло-Проктолог++). Для таких вещей есть Embedded Java (это вам не стандартная JRE). В мобильниках памяти не так уж и много, а в Prince of Persia играть можно! Java такое же широкое слово как и "Персональный Компьютер" -- кто что имеет, тот то и понимает... P.S. В последнее время слишком много пошло _разборок_ по поводу Java -- Java vs C++, Java vs C#, Java vs $$$, SUN vs MS... Ну не умеете программировать, или не хотите, то так и скажите. Лично я имеют опыт работы с Asm, Object Pascal, C/C++, Perl, Java и ещё пару языков (причём не только для x86 платформы) и в упор не вижу причин так сильно "бузить". Обычно выбор стоит не между языками программирования, а между -- быстро, красиво, за $. Сначала из этого и исходят, если другое не оговорено в контракте/постановке_задачи (учтно или писменно, роли не играет). В противном случае вы будете много знать и считатся крутым во всём-и-везде, но реальных завершённых дел будет мало :( Java так просто Вам не здастся!!! Боритесь с этой заразой! (Если зашли в тупик, то лучше на время переключится на что-то другое, не Java). Одним словом дерзайте :yees: |
aleh
Цитата:
Может быть стаж не так велик, но за 7 лет работы программистом (читать программистом, а не эникейщиком) можно составить свою точку зрения о языках программирования и обсудить ее с себе подобными... Не надо сразу клеймить людей. :yees: |
BigFoot
Не надо сразу же всё принимать на свой счёт. :) Просто я уже устал от таких тем: *чтото-с-Java vs нечто-другое. Особенно после того, когда после злобных дебат в какой-то теме оппонент спрашивает в другой теме как сделать что-то простое (Опять не надо всё принимать на свой счёт :biggrin: ). Очень много таких "бесед", за последние полгода, было на: www.theserverside.com www.javalobby.org www.javable.com -- иногда доходило до драки :blin: P.S. Извините и простите... Наверное лучше создать отдельный раздел и рассматривать конкретные темы/направления. Иначе это грозит перерости в вариант флейма. Мир можно облететь за 80 дней... чтобы жениться этого хватит, но чтобы узнать его -- нет. |
|
| Часовой пояс GMT +4, время: 04:28. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.