LINUX.ORG.RU

C vs. JVM's benchmark

 , ,


1

0

Стэфан Краузе в своём блоге
http://www.stefankrause.net/
опубликовал новые тесты производительности кода, написанного на C и на Java.

В тесте используются компилятор GCC 4.2.3 и различные версии JVM (Sun JDK 6, IBM JDK 6, Excelsior JET, Apache Harmony, BEA JRockit).

Тесты проводились на ноутбуке Dell Insprion 9400 с 2GB RAM и процессором Intel Core 2 2GHz под Ubuntu 8.04 (x86). Исходные коды прилагаются.

>>> Подробности

Ответ на: комментарий от tailgunner

> Ганимед - это уже CDT5 :D Впрочем, если ты не пробовал даже CDT4... ;)

Интуиция мне подсказывает, что такого же набора фишек IDE, как имеется для Java, для C написать невозможно. Как минимум из-за макросов и ifdef-ов.

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

>> байткодно-компилируемого Си не существует в пригодном для использования виде

> Зато есть Си++ :)

Да? И что это?

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

> Интуиция мне подсказывает, что такого же набора фишек IDE, как имеется для Java, для C написать невозможно.

Ну, я бы сказал, что это значительно сложнее.

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

>Просто нормальные люди различают, когда речь идёт о языках, а когда - об основных реализациях. И ещё различают принципиальную возможность и целевое применение.

Вы как вроде первый день на ЛОРе и никогда не слышали фразу "телепаты в отпуске". Вы хотели показать, что испольняемые Цшные файлы впринципе не портабельны и это является принципиальным приимуществом Жавы. Я Вам возразил, что это при желании не так уж сложно реализовать.

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

>Да? И что это?

Managed C++, насколько я понимаю :)

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

>Вы как вроде первый день на ЛОРе и никогда не слышали фразу "телепаты в отпуске". Вы хотели показать, что...

Вы как вроде первый день на ЛОРе и никогда не слышали фразу «телепаты в отпуску»?

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

>> Интуиция мне подсказывает, что такого же набора фишек IDE, как имеется для Java, для C написать невозможно.

> Ну, я бы сказал, что это значительно сложнее.

СFLAGS=-DNULL=1 gcc main.cpp -omyprog сломает любую сложную систему разбора :)

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

>Повторюсь, кстати: http://www.linux.org.ru/jump-message.jsp?msgid=2903217&cid=2903768

А что здесь повторятся? Чувак пишет "реализуйте на своем С++ алгоритм который я Вам не покажу!" и уже на первой странице признает, что если алгоритм таки показать, что реализация его на С++ будет работать быстрее. Мы уже тут кажется прошли троллинг типа "С хуже Жавы потому, что на моей отдельно взятой работе отдельно взятый программист на С знал структуры данных хуже отдельно взятого программиста на Жаве". Теперь пройдем точно то же, только место "структуры данных" будут "алгоритмы"?

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

> СFLAGS=-DNULL=1 gcc main.cpp -omyprog сломает любую сложную систему разбора :)

Не-а... только ту, что не учитывает содержимое Makefile :) Впрочем, при желании сломать можно всё.

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

> СFLAGS=-DNULL=1 gcc main.cpp -omyprog

тьфу, gcc main.cpp -omyprog -DNULL=1

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

>> СFLAGS=-DNULL=1 gcc main.cpp -omyprog сломает любую сложную систему разбора :)

> Не-а... только ту, что не учитывает содержимое Makefile :) Впрочем, при желании сломать можно всё.

Разве Божественную Жабу можно сломать столь варварским способом?

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

>Можно краткий план реализации?

Испольняемый интерпритируемый файл. Линки на интрпретатор уже были. Даже если интепретатор не стендалон, а встраемая либа, то реализовать на ее основе REPL легко.

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

>> Можно краткий план реализации?

> Испольняемый интерпритируемый файл. Линки на интрпретатор уже были.

Ни одна из указанных систем не катит даже как основа для решения.

> Даже если интепретатор не стендалон, а встраемая либа, то реализовать на ее основе REPL легко.

А потом на основе этого REPL легко реализовать платформу :D

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

>Разве Божественную Жабу можно сломать столь варварским способом?

Можно. Даже квакнуть не успеет.

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

Еще раз. Разговор был в русле "назовите что принципиально нельзя сделать на С, что возможно реализовать на Жаве". Привели пример: портабельные испольняемые файлы. Вы можете назвать причины по которым _принципиально_ невозможно реализовать интерпритатор С или компилятор под одну из множества доступных ВМ? Я их с удовольствием выслушаю.

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

>Вы можете назвать причины по которым _принципиально_ невозможно реализовать интерпритатор С или компилятор под одну из множества доступных ВМ?

Возможность имеется. Можно даже интерпретатор какого-нть ассемблера написать. Пусть интерпретирует мнемоники команд. Только кому это надо? C проектировался для написания натива. Более того - он проектировался для системного программирования.

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

>Возможность имеется. Можно даже интерпретатор какого-нть ассемблера написать. Пусть интерпретирует мнемоники команд. Только кому это надо? C проектировался для написания натива. Более того - он проектировался для системного программирования.

Я вот, например, удивляюсь кому нудна Жава на десктопе. Но как видите делающие имеются :)

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

> Я вот, например, удивляюсь кому нудна Жава на десктопе. Но как видите делающие имеются :)

А никому не нужна. Нужны приложения. А на чем они написаны нам монопенисуально, главное, чтоб работали.

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

> Я вот, например, удивляюсь кому нудна Жава на десктопе. Но как видите делающие имеются :)

А никому не нужна. Нужны приложения. А на чем они написаны нам монопенисуально, главное, чтоб работали.

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

>> Разве Божественную Жабу можно сломать столь варварским способом?

> Можно. Даже квакнуть не успеет.

Примерчик можно?

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

> Примерчик можно?

mv /usr/bin/javac /usr/bin/javac.orig ln -s /usr/bin/gcj /usr/bin/javac

Компилим какое-нибудь динамичное приложение с генерацией изображений и наслаждаемся мегатормозами.

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

>Не катит. Это проблема не явы а gcj

Ну, в таком случае, в предыдущем примере это проблема не C и gcc а моска gcc-юзера :)

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

>> СFLAGS=-DNULL=1 gcc main.cpp -omyprog сломает любую сложную систему разбора :)

>Не-а... только ту, что не учитывает содержимое Makefile :) Впрочем, при желании сломать можно всё.

Содержимое Makefile никто и не будет читать. Нужно только распарсить все вызовы gcc при компиляции исходника. Чем довольно успешно Eclipse (discovery options) и xrefactory (при построении recipe) занимаются. Т.е. для конкретной конфигурации сборки можно в принципе правильно распарсить :) А вот одновременно для можества конфигураций (под разные платформы например) уже сложнее будет.

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

> char *message = malloc(strlen(text_1)+strlen(text_2)); strcpy(message, text_1); strcpy((message+strlen(text_1)), text_2);

ЛАМЕРЬЕ!!!!! а под '\0' забыл память выделить. Тебе не то что на C писать тебе пообще в сеть ходить надо запретить. А ну вырубай Фрюникс, винда тебе ось!!

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

> назовите что принципиально нельзя сделать на С,
> что возможно реализовать на Жаве

Ну если точно прочитать эту фразу - то к примеру
"Работа с классами"

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

>А что здесь повторятся? Чувак пишет

При чём тут чувак? Есть реальный пример. Чувак легко реализовал его на Java (и исходники потом выложил, кстати, раз дальше первых сообщений ты не читал). На Питоне я задачу решил минут за 40 с тестированием и изучением нужного мне функционала Питона по ходу написания (я его ещё плохо знаю). На Си - было много битья себя в грудь разным народом, но задачу почему-то никто не написал до сих пор :D

>Мы уже тут кажется прошли троллинг типа "С хуже Жавы потому, что на моей отдельно взятой работе отдельно взятый программист на С знал структуры данных хуже отдельно взятого программиста на Жаве".

Троллинг - это когда на конкретную (и несложную!) задачу с конкрентным решением на одном языке, никто не хочет написать аналогичное решение на другом. Это уже очень многое автоматом говорит даже не столько о самом языке (я свой пример на Питоне на Си перенесу за полчаса, но я принципиально не хочу делать этого решения, пока кто-то из спорщиков, доказывющих поголовную крутизну Си/Си++ не сделает это сам), сколько о его поборниках.

Никто не заставляет делать по одному из двух приведённых в теме алгоритмов. Сделай так, как это лучше, проще и быстрее сделать на Си. Задача-то из категории, которые ещё на программируемых калькуляторах решали 20 лет назад, хотя и на маленьких досках :)

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

> Если текст не осилишь, посмотри хотя бы на статистику.

Да, текст тут лучше всего осилить - минуты смеха гарантрованы, особенно понравились аргументы вроде

>> The danger for Java comes from inside and it is caused by too many “features” making their way into the language and transforming if from a language that wanted to keep only the essential features of C++ into a trash box for features and concepts from all languages.

Сразу видно - автор просто не смог осилить (может он просто не понял зачем нужны пакеты ??).

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

>>>Не надо страдать демагогической херней...

Еще один алтернативно одарённый ? 8)

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

>зато у MS сейчас политика десктопа на .NET и приложений появилось столько, что даже в линукс пролезают.

Да? И какие же приложения с висты я могу использовать в линуксе?

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

Не интересовался этим вопросом. Если что, политика MS влияет на множество софтовых компаний и приложения я имел в виду от других производителей.

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

Там без поворотов. Подобное решение я сам писал на сборах в 10 классе за 8 минут, если не ошибаюсь :) Было у нас там такое соревнование :) Впрочем я уже нашёл, там поиск этих поворотов и отражений тупой в лоб. Я думал, там что то хитрое.

Я так понял, можно потоки использовать? Это радует :) Задача хорошо параллелится.

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

>Scala, Scheme, Groovy, ...

>У них вроде как плачевная производительность. Если не так, ткните меня носом. Самому будет интересно.

Плачевная?

http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all

1.0 C++ Intel 1.20
1.6 Java 6 -Xms64m 1.97
1.7 D Digital Mars 2.01
1.7 Fortran Intel 2.05
1.9 OCaml 2.30 3
2.4 Scala 2.82 7
2.7 C# Mono 3.19

Scala обходит даже сиране моно. А жаба обходит сиране D Digital Mars, который болтается где-то рядом с динозавром Интел Фортраном

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

>Кстати сейчас вот начинаеться эра недобуков - ну тама еееPC и подобных.

Не недобуков, а НЕТбуков, или полноценных карманных x86десктопов связанных с интернетом. Читай про Атом http://www.3dnews.ru/mobile/msi_wind_u100/print

>Как Вы думайте какие проги тама будут востребованы ? на Java или на Си?

Я жду читалку в формате PDA с 4-6" экраном, в формате HP hx4700, весом <200гр, ценой <9000руб. и работающую >8 часов.

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

>Я попробую, если получится, завтра опубликую решение в этом топике на C++.

Ждём :)

...

Я прекрасно понимаю, что Си/Си++ при грамотном написании на этой задаче _обязан_ уделать Java. Вопрос в том - на сколько. И сколько времени уйдёт на написание и отладку задачи :)

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

Получилось неожиданно показательно :)

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

>Вот кстати примеры решения

Боюсь, что для 14 ферзей памяти не хватит :)

Кроме того - там, как я понял, нет фильтрации поворотов и отражений. А вся соль - в этом.

KRoN73 ★★★★★
()

Вот меня реально раздражают красноглазые яватроли которые удверждают на плюсах программить трудозатрат больше чем на яве. Есть пара штук которыми явисты/нетчики могут радоваться:

* Reflection (фича языка)
* Простота языка повзоляет развивать фичи ИДЕ, такие как рефакторинг, автоподсветки, проверки, навигации, и т.п.)
* Стандартная библиотека

Однако эти фичи во первых не бесплатны, во вторых не поднимают скорость разработки существенно, поскольку они компенсируются в плюсах (кроме рефлекшн). В остальном выбора платформы определяется внешними требованиями.

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

>Вот меня реально раздражают красноглазые яватроли которые удверждают на плюсах программить трудозатрат больше чем на яве.

...

>Однако эти фичи во первых не бесплатны, во вторых не поднимают скорость разработки существенно

Э... Можно узнать, сколько лет ты программировал на Си и сколько - на Java?

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

> А так - я думал, что народ выдаст сишное решение оппоненты выкатят сразу, после написания топика. Но за прошедшие месяцы так этого и не дождался, хотя шума в теме (и параллельной - эта тема ещё где-то в ЖЖ вызвала бурное обсуждение) было много.

> Получилось неожиданно показательно :)

А что показательного? Крикуны засунули язык в задницу и удалились, а знающие люди либо не слышали, либо не были к этому мотивированы.

Почти уверен, что если б была готовая реализация на С++ и требовалось бы написать подобное на жабопитоне, то и там бы решения не образовалось :)

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