LINUX.ORG.RU
ФорумTalks

What a horrible language.

 


0

2

Прочитал интервью Линуса о патентах. Заканчивает он историей Oracle vs Google.

Цитата:

I don't actually know the details. I mean Java I really don't care about. What a horrible language. What a horrible VM. So, I am like whatever, you are barking about all this crap, go away. I don't care.

источник

Здесь на лоре тоже видел много кто ругает Java. Я нуб в этом всем, поэтому интересно узнать основные аргументы.

Перечислите, почему Java, по-вашему, хуже чем, скажем, C или С++. И что не так с виртуальной машиной Java. Только важно не само сравнение, а именно аргументы против Java. То есть, не почему C лучше, а почему Java хуже.


И да, С++ - ошибка человечества. Получи свою дозу системного программирования с С и потом пиши на чем-то нормальном

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

О, у ещё одного бугурт от плюсов :3

Deleted
()
Ответ на: комментарий от vertexua

И да, С++ - ошибка человечества

во многом - да, но на ряду с его потомками - Java и C#,

Получи свою дозу системного программирования с С

ручное управление памятью - не системное программирование

wota ★★
()
Ответ на: комментарий от wota

size_t - пример стандартного «количественного» типа, и тот же gcc с флагом -Wconversion ругается на код:
size_t count = -1;

Да, возможно, тем полутора программистам, которые пишут код не получая ни одного warning, это полезно.

metar ★★★
()
Ответ на: комментарий от JFreeM

ну и вообще по-моему, Линуса заносит. Мое мнение о нем резко упало после его финта с нвидией. Такого приличные люди себе не позволяют.

Всё правильно сделал.

eugeno ★★★★★
()
Ответ на: комментарий от hatefu1_dead

что значит многословнее? каждый key word означает определенную функцию, которую метод должен выполнять. Если тебе не нужен static метод, то можешь static не добавлять. Причем тут многословность?

Sonsee
() автор топика
Ответ на: комментарий от metar

тем полутора программистам, которые пишут код не получая ни одного warning, это полезно

однозначно, для них еще и -Werror придумали, использую для дебажных сборок- очень удобно

wota ★★
()
Ответ на: комментарий от Sonsee

то, что этих ключевых слов приходится писать значительно больше, чем в C

hatefu1_dead
()

Потреплюсь по поводу почти субботы.
Первое знакомство с сием чудом - делал железку, сбор данных по последовательным портам и передать по ethernet, ну кабы да, при некотором опыте на С и С++ достаточно быстро сделалась и даже работала на объекте в режиме 7*24. Тут убедился что это тормозилово еще то, такая же программа на С++ просто летала на более слабом железе.
Второй раз , около полуночи разработчик на чуде грузил про кроссплатформенность и нереальную надежность, очень уверенный в своей правоте товарисч, владел совсем непонятными словами типа вебсфера и зетлинукс. Про надежность сомнения закрались, так как это были разборки по поводу падения сего чуда. Вообщем, кривые руки рулят. А верить в кроссплатформенность глядя на строчку типа class bla.bla.IBM.network ну совсем не хотелось.

зы. Цифры зарплат в вакансиях радуют, это да.

ilovewindows ★★★★★
()
Ответ на: комментарий от hope13

но безопасность вм на нулле

Ты linux.org.ru угрожаешь? Ты уже взломал VM LORа? OMG

Karapuz ★★★★★
()
Ответ на: комментарий от grim

ОЧЕНЬ медленно стартует, так как загружает и ВМ и библиотеки, которые не шаратся между приложениями. Изза этого и десктоп приложения на жабе не пишут.

чё то ахинея поперла. у меня firefox стартует с ssdшки дольше чем rssowl, хотя и там ~25 вкладок открыто и там ~25

Karapuz ★★★★★
()

Перечислите, почему Java, по-вашему, хуже чем, скажем, C или С++.

Как язык Java лучше, чем C++, т.к. более удобна и не дает отстрелить себе ногу на ровном месте.

И что не так с виртуальной машиной Java.

Тормозит из-за JIT и жрет много памяти из-за сборщика мусора. Уж лучше бы Java-программы распространялись в байткоде и транслировались в машинный код один раз на целевой машине, а не при каждом запуске.

m0rph ★★★★★
()
Ответ на: комментарий от Sonsee

Пока, кроме «кривого тормозилова» никто ничего конкретного не привел.

Ну ты сам посуди:

  • VM во время работы основной программы постоянно осуществляет кучу проверок, что программа не пытается сделать что-то плохое. Проверка на выход за границы массива, проверка на jump за пределы метода(edited: выполняется один раз при верификации байткода) и т.п.
  • VM постоянно профилирует программу, выявляя наиболее часто выполняющиеся куски кода и оптимизирует их на лету.
  • VM время от времени запускает сборку мусора, что само пе себе не является тривиальной задачей. Сборщик мусора должен определить недосягаемые объекты (объекты на которые отсутствуют ссылки или же объекты с циклическими ссылками, до которых больше нельзя добраться), поддерживать в актуальном состоянии пулы поколений объектов, возможно проводить дефрагментацию этих пулов и т.п.

И все это делается параллельно с работой основной программы. Тут как ни крути, все равно производительность программы на C++ если и достанешь, то только в отдельно взятых участках кода. А самое главное - на компьютере выполняются и другие программы, которым тоже нужны процессорные такты, прожигаемые VM впустую, и память, резервирующаяся и возможно простаивающаяя для пулов объектов.

m0rph ★★★★★
()
Последнее исправление: m0rph (всего исправлений: 1)

> почему Java, по-вашему, хуже чем, скажем, C или С++.

unsigned integers.

arsi ★★★★★
()
Ответ на: комментарий от Karapuz

чё то ахинея поперла. у меня firefox стартует с ssdшки дольше чем rssowl, хотя и там ~25 вкладок открыто и там ~25

Действиетельно редкостная ахинея.
Как это вас так прикольно получается?

grim ★★☆☆
()
Ответ на: комментарий от m0rph

Уж лучше бы Java-программы распространялись в байткоде и транслировались в машинный код один раз на целевой машине, а не при каждом запуске.

mono так умеет.

grim ★★☆☆
()

Последнее время находят много уязвимостей в их VM, но язык очень хороший. Я сам люблю этот язык, из недостатков могу назвать только отсутствие перегрузки операторов.

CYB3R ★★★★★
()

I am like whatever, you are barking about all this crap, go away.

Три раза прочитал эту фразу, и каждый раз понял по-новому. Интересно, что же имел в виду Линус? И почему он не сказал это по-английски?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Sonsee

Такой вариант я прочитал в первый раз, но потом было:

Мне нравится вся хрень, что вы лаете об этом дерьме, чешите дальше.

В третий раз:

Мне нравится что угодно, а вы сретесь из-за хрени, валите.

Ох уж мне этот финнский английский…

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

«Im like whatever» - дословно будет звучать на русском примерно: «Я, такой, да какая разница..»

whatever - отвечают когда хотят сказать, что им все равно, что ты скажешь. Но когда говорят whatever you say - это уже переводится «как прикажешь».

Sonsee
() автор топика
Ответ на: комментарий от vertexua

Лучше б Java так умела, от нее хоть польза

польза есть от всего.
даже от фанатиков не принимающих ничего кроме объекта их поклонения.

grim ★★☆☆
()
Ответ на: комментарий от Sonsee

ну или не как прикажешь, а скорее «как скажешь».

Sonsee
() автор топика

java простой и понятный язык. jvm - хорошая, быстрая, vm(правда сильно направленная в сторону всякого серверного). все.

RedPossum ★★★★★
()

Перечислите, почему Java, по-вашему, хуже чем, скажем, C или С++.

1. Медленно работает.

2. Нет доступа к низкоуровневым возмжностям компьютера. Банально по segmentation fault упать нельзя.

3. Нет средств для метапрограммирования, очень плохие возможности для расширения языка. BigInteger c = a.add(b); просто супер, ага.

4. Если сравнивать с последним стандартом С++, нет автовывода типов (точнее есть убогий для параметров дженериков).

5. Нет деструкторов, нет возможности автоматически освобождать ресурсы при выходе из области видимости.

6. Контролируется коммерческой организацией.

И что не так с виртуальной машиной Java.

1. Направленность исключительно на поддержку языка Java, игнорирование других языков. Немного изменилось в Java 7.

2. Не шарятся общие классы (библиотеки) между процессами, чрезмерное потребление памяти при использовании нескольких программ с пересекающимся множеством библиотек.

3. Долго стартует, минус для небольших пользовательских программ, апплетов.

4. Сложная модель управления памятью. Нет возможности просто запустить и не думать о памяти. Нужно знать, сколько программа сможет потребить памяти по максимуму. Кроме того Java не отдаёт память операционной системе, даже если программа в ней больше не нуждается.

5. Плохая модель безопасности. Любой небезопасный вызов в стандартной билиотеке - уязвимость. Стандартная библиотека очень огромная, в итоге часто находят уязвимости, позволяющих процессу выбраться из песочницы. Я бы без очень большой надобности не стал разрешать браузеру джаву.

Legioner ★★★★★
()

Большинство недостатков явы решается переходом на скалу.

note173 ★★★★★
()
Ответ на: комментарий от Deleted

Ну, это он тоже зря. Иногда на плюсах определенные задачи решаются проще, чем на сях. Правда, я таких задач не могу придумать.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от m0rph

А вот это как раз ее огромный плюс.

О да... а ведь те же самые property можно было реализовать ну прям на коленке за пару минут.

Исключение ненужных частей кода (профайлеров для примера) в продакшн билде.

Это так на вскидку...

anonymous_
()
Ответ на: комментарий от Eddy_Em

Согласен с предыдущими, что для создания GUI плюсы подходят больше. Вот что пишет отец-основатель:

*YOU* are full of bullshit.

C++ is a horrible language. It's made more horrible by the fact that a lot of substandard programmers use it, to the point where it's much much easier to generate total and utter crap with it. Quite frankly, even if the choice of C were to do *nothing* but keep the C++ programmers out, that in itself would be a huge reason to use C.

In other words: the choice of C is the only sane choice. I know Miles Bader jokingly said «to piss you off», but it's actually true. I've come to the conclusion that any programmer that would prefer the project to be in C++ over C is likely a programmer that I really *would* prefer to piss off, so that he doesn't come and screw up any project I'm involved with.

C++ leads to really really bad design choices. You invariably start using the «nice» library features of the language like STL and Boost and other total and utter crap, that may «help» you program, but causes:

- infinite amounts of pain when they don't work (and anybody who tells me that STL and especially Boost are stable and portable is just so full of BS that it's not even funny)

- inefficient abstracted programming models where two years down the road you notice that some abstraction wasn't very efficient, but now all your code depends on all the nice object models around it, and you cannot fix it without rewriting your app.

In other words, the only way to do good, efficient, and system-level and portable C++ ends up to limit yourself to all the things that are basically available in C. And limiting your project to C means that people don't screw that up, and also means that you get a lot of programmers that do actually understand low-level issues and don't screw things up with any idiotic «object model» crap.

So I'm sorry, but for something like git, where efficiency was a primary objective, the «advantages» of C++ is just a huge mistake. The fact that we also piss off people who cannot see that is just a big additional advantage.

If you want a VCS that is written in C++, go play with Monotone. Really. They use a «real database». They use «nice object-oriented libraries». They use «nice C++ abstractions». And quite frankly, as a result of all these design decisions that sound so appealing to some CS people, the end result is a horrible and unmaintainable mess.

But I'm sure you'd like it more than git.

Linus

Deleted
()
Ответ на: комментарий от Deleted

- inefficient abstracted programming models where two years down the road you notice that some abstraction wasn't very efficient, but now all your code depends on all the nice object models around it, and you cannot fix it without rewriting your app.

не совсем понял, что он имеет в виду здесь. Абстрагирование как раз эту проблему решает, не? Т.е. чтобы изменить какой-то объект НЕ нужно переписывать код, а только один клас, потому что все объекты НЕ зависят от друг друга. А когда используется не ооп модель, тогда действитльно прийдется переписывать все.

о чем он вообще?

Sonsee
() автор топика
Ответ на: комментарий от vertexua

Кстати, используя моно можно и джаву откомпилировать в бинарник.

grim ★★☆☆
()

Жаба плоха тем, что на ней в принципе невозможно писать без ООП. Разработчики этого языка сделали так, что любая программа обязана иметь объекты именно написанные разработчиком программы. Такой язык не может быть универсальным.

Quasar ★★★★★
()
Ответ на: комментарий от Bad_ptr

вроде и оптимизировали его оптимизировали, а всё равно какое-то кривое тормозилово.
Моно как-то приятнее.

Плюсую этого оратора, хоть и не люблю дотнет.

buddhist ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.