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). Исходные коды прилагаются.

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

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

>> Да, печально что в плюсах это сломали.

>Плюсы к тебе ещё по ночам не приходят? ;)

Жду когда придут. Это будет значить что они наконец сдохли.

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

> Ну так что там с тестами? {Задачка с ферзями на C и Java}

в последней версии java делает си - 103 против 110 секунд

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

>> Ну так что там с тестами? {Задачка с ферзями на C и Java}

>в последней версии java делает си - 103 против 110 секунд

Специализированное решение на Си она сделать не может ибо VM. Речь может идти о выигрыше над высокоуровненевыми костылями типа STL, которые неэффективно работают с кучей. Но и там более вероятен проигрыш в полтора-два раза, что на практике неважно ибо Жава дает полную защиту памяти в отличие от.

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

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

Одно другое не исключает. Хороший алгоритм пишется на бумажке в терминах задачи, а потом реализуется на чём угодно.

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

>Хороший алгоритм пишется на бумажке в терминах задачи, а потом реализуется на чём угодно.

и начинается все с маллока и забытого лайн терминатора:)

r ★★★★★
()
Ответ на: удаленный комментарий

> Нужды в колбасе нет.

В лиспе есть eval, потому любая попытка написать полноценный рефакторизовщик обречена на провал.

> ТАкие ИДЕ есть для жабы по двум причинам - вследствие популярности языка и вследствии возможности такое реализовать в разумнове время с разумными трудозатратами. Это единственные и основные 2 причины.

Вернулись к моему начальному тезису. Для явы, в силу особенности явы, можно "такое реализовать в разумнове время с разумными трудозатратами".

>> Про odbc уже сказали.

> РАзница в том что оно так и здохло. В отличии от.

Где издохло? В виндах ODBC цветёт и пахнет, в линуксе у меня опенофис тянет за собой какой-то подозрительный пакет unixodbc :)

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

>> Хороший алгоритм пишется на бумажке в терминах задачи, а потом реализуется на чём угодно.

> и начинается все с маллока и забытого лайн терминатора:)

А я начало флейма только позавчера прочитал :)

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

>emacs тесно связан с лиспом, а в лиспе это не нужно.

Это так же ненужно как и в колбасе нужды нет. К лиспу применимы большинство рефакторингов - а когда его изобрели еще до того как ява появилась.

>Да и в любом другом языке, где не надо громоздить 10 строк кода и дополнительный интерфейс на одно вшивое замыкание.

И символов там переименовывать не надо, и extractов делать и code duplicate искать. Ага. Нужды в колбасе нет.

>Необходимость в этом возникла только из-за появления многословных многодублирующихся языков типа явы.

Ага только почему-то она возникла до появления джавы и реализована была в смолтолке где тоже не надо тратить 10 строк на вшивое замыкание.

Ага. Да.

>Да, именно поэтому такие ide есть только для жабы.

ТАкие ИДЕ есть для жабы по двум причинам - вследствие популярности языка (наличие рынка) и вследствии возможности такое реализовать в разумнове время с разумными трудозатратами. Это единственные и основные 2 причины.

>cat $docdir/vim/features;read d;cat $docdir/emacs/features

То есть даже назвать на вскидку нечего?

>Про odbc уже сказали.

РАзница в том что оно так и здохло. В отличии от.

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

>В лиспе есть eval, потому любая попытка написать полноценный рефакторизовщик обречена на провал.

Вот блин - опять все сначала? В жабе есть рефлекшен. И все нормально.

Рефакторино это инструмент помогающий программисту, а не автоматическая система стребованием гарантированно-эквивалентных преобразований кода. Она действует как экспертная система - там где она не может сделать это сама - она задает вопрос человеку.

>Для явы, в силу особенности явы, можно "такое реализовать в разумнове время с разумными трудозатратами".

Нет мы пришли к другому - ява программисты для себя могут _на_ яве это реализовать ... и далее по тексту. На С этого никто сделать не сподобился. Смолтолкеры это тоже сделали для себя.

>В виндах ODBC цветёт и пахнет

Пусть пахнет. Кто через него аппликухи пишет кроме микрософта для access и прочихз извразщений типа scv over odbc? Даже для .NET своя архитектура драйверов и свои драйвера. OLEDB опять же. ADO опять же. Похоже ODBC такое удачно пахнущее решение, что все только им мечтают как от него избавится.

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

>В лиспе есть eval, потому любая попытка написать полноценный рефакторизовщик обречена на провал.

Там немного не тот eval который интепретирует код в стринге. Там это одна из базовых операций, которая вычисляет форму.

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

> Там немного не тот eval который интепретирует код в стринге. Там это одна из базовых операций, которая вычисляет форму.

"Та" конструкция там тоже есть: (eval (compile "мояпрограмма"))

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

> В жабе есть рефлекшен. И все нормально.

Я показал места, где оно споткнётся. И не спотыкается только потому, что эти места в яве используются редко.

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

И чем это _принципиально_ лучше grep?

> Нет мы пришли к другому - ява программисты для себя могут _на_ яве это реализовать ... и далее по тексту. На С этого никто сделать не сподобился. Смолтолкеры это тоже сделали для себя.

Я опять же показывал, почему для C эта задача неприподъёмна. А для малоговорилки и явы подобное сделано быстро в силу особенностей языка.

> Пусть пахнет. Кто через него аппликухи пишет кроме микрософта для access и прочихз извразщений типа scv over odbc?

То есть универсальный интерфейс внезапно стал не нужен?

> Даже для .NET своя архитектура драйверов и свои драйвера. OLEDB опять же. ADO опять же.

И к чему перечислен этот набор велосипедов? Может ещё стоит сказать что графическая оболочка как таковая сосёт, ведь вон сколько различных гуйковых библиотек наплодили, а стандарта нет.

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

>> Там немного не тот eval который интепретирует код в стринге. Там это одна из базовых операций, которая вычисляет форму.

>"Та" конструкция там тоже есть: (eval (compile "мояпрограмма"))

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

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

>И чем это _принципиально_ лучше grep?

Тем что оно реально анализирует код и гарантированно не промахивается.

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

>> "Та" конструкция там тоже есть: (eval (compile "мояпрограмма"))

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

Я тебе "нехорошую" конструкцию показал? Показал. Где те самые уши, за которые я тяну?

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

>> И чем это _принципиально_ лучше grep?

> Тем что оно реально анализирует код и гарантированно не промахивается.

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

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

>Я показал места, где оно споткнётся.

_и что_? Хочешь сказать доказал невозможность рефакторинга или что ты эти хочешь сказать? Пускай споткнется! _где проблема_? Или потому что эксковатор имеет ограниченное использование в археологии - отменим эксковаторы и возьмемся за лопаты?

>И чем это _принципиально_ лучше grep?

А что между поиском, и семантиески верным реплейсом - есть что-то общее?

>Я опять же показывал, почему для C эта задача неприподъёмна.

Вопрос не в _для С_. А _на С_. Эта задача неподъемна _на с_ даже для примитивного бейсика. Никто пока не поднял. В то время как на жабе это подняли для многих языков. В этом суть.

>То есть универсальный интерфейс внезапно стал не нужен?

Спроси техз кто ей не пользуется в пользу перечисленных.

>И к чему перечислен этот набор велосипедов?

К тому что при наличии кошерного ODBC вместо его развития большие конторы занимаются велосипедостроением. В в области JDBC все почему-то кооперируются для развития стандарта. Почему?

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

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

void f() { int i=0; ....

void f2() { int i = 0; ... }

воспользуйся грепом. Хочу чтобы i в первой функции стало j.

Усложняем:

void f() { int i=0; ....

void f2() { int i = 0; f(); ... }

заинлайни вызов f() внутри f2 так чтобы получить компилируемый результат.

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

>> Пускай споткнется! _где проблема_?

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

>> И чем это _принципиально_ лучше grep?

> А что между поиском, и семантиески верным реплейсом - есть что-то общее?

Блин, grep, sed & brain.

> Вопрос не в _для С_. А _на С_. Эта задача неподъемна _на с_ даже для примитивного бейсика. Никто пока не поднял. В то время как на жабе это подняли для многих языков. В этом суть.

На чём написаны ctags и astyle?

> К тому что при наличии кошерного ODBC вместо его развития большие конторы занимаются велосипедостроением. В в области JDBC все почему-то кооперируются для развития стандарта. Почему?

Аналог: почему microsoft пишет точканет, когда есть java?

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

>Я тебе "нехорошую" конструкцию показал? Показал. Где те самые уши, за которые я тяну?

Откуда ты решил что она "нехорошая"? Просто понимания лиспа у тебя нет, вот и все.

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

> воспользуйся грепом. Хочу чтобы i в первой функции стало j.

# vim
/void f1
V
/void f2
:\<\>s/\<i\>/j/gc

Следующий урок работы в vim по стандартной таксе.

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

>> К тому что при наличии кошерного ODBC вместо его развития большие конторы занимаются велосипедостроением. В в области JDBC все почему-то кооперируются для развития стандарта. Почему?

>Аналог: почему microsoft пишет точканет, когда есть java?

Потому что просрали Сану в суде по иску что ихняя среда разработки вставляла COM-вызовы в жавакод, форсируя работу только на винде. А до того как Сан спохватился, MS всеми руками и ногами пропихивали жаву.

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

>>> И чем это _принципиально_ лучше grep?

>> Тем что оно реально анализирует код и гарантированно не промахивается.

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

Ключевое слово "спрашивает".

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

> Потому что просрали Сану в суде по иску что ихняя среда разработки вставляла COM-вызовы в жавакод, форсируя работу только на винде. А до того как Сан спохватился, MS всеми руками и ногами пропихивали жаву.

Переформулирую: дотнет пишется потому что надо привязать к винде. Ровно как и BDE писалось чтобы привязать к борландоподелкам.

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

>> Откуда ты решил что она "нехорошая"?

>Не нравится та, возьми вот эту: (funcall (symbol-function (intern "hello"))) .

Ну и что с ней не так?

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

>> Ключевое слово "спрашивает".

>grep --color=auto даже делает превью. И?

Недостаточно. Инструмент для рефакторинга должен знать язык на 100%, а grep его не знает.

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

>дотнет пишется потому что надо привязать к винде.

Дотнет пишется оттого что COM-говно, я свою JVM делать они теперь не имеют право.

>Ровно как и BDE писалось чтобы привязать к борландоподелкам.

Потому что ODBC был убог. Потом в борландподелках использовался ADO.

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

> Недостаточно. Инструмент для рефакторинга должен знать язык на 100%, а grep его не знает.

Язык знаю я. От неоднозначностей в прочтении языка меня спасает мой coding style.

Кроме того, покажи язык, для которого есть инструмент для рефакторинга, покрывающий все 100%.

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

> свою JVM делать они теперь не имеют право.

Всегда считал, что им "зарезали" только ту реализацию. Линк есть?

> Потому что ODBC был убог. Потом в борландподелках использовался ADO.

Да-да, и почему же сейчас в явоподелках используется Hibernate/Spring? (то, что они стоят на базе jdbc -- только деталь еализации)

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

>> Недостаточно. Инструмент для рефакторинга должен знать язык на 100%, а grep его не знает.

>Язык знаю я. От неоднозначностей в прочтении языка меня спасает мой c сoding style.

Задолбаешься писать форвардинг для 30 делегируемых методов или экстрактить интерфейс. В тикле, возможно с этим проблем нет но в Яве и С++ они есть. Решение в виде автоматических безопасных рефакторингов для явы есть, для плюсов его не может быть в принципе.

>Кроме того, покажи язык, для которого есть инструмент для рефакторинга, покрывающий все 100%.

Либо язык этого не требует (в лиспе есть функции высокого порядка для этого) либо язык прост (ява, Си). С++ не входит в оба множества.

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

>Всегда считал, что им "зарезали" только ту реализацию. Линк есть?

Написать еще одну реализацию JVM они конечно могут. Но тот вариант который Сан в теории сертифицировал бы их не устроит. Я понял это как-то так.

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

>Да-да, и почему же сейчас в явоподелках используется Hibernate/Spring?

Болше бабла можно распилить.

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

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

Не спорю. Это один из моих тезисов.

>> Кроме того, покажи язык, для которого есть инструмент для рефакторинга, покрывающий все 100%.

> Либо язык этого не требует (в лиспе есть функции высокого порядка для этого) либо язык прост (ява, Си). С++ не входит в оба множества.

Да понятно, что c++ не входит. А всё же, какой именно язык имеет или теоретически может иметь стопроцентный рефакторизатор? Просто интересно.

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

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

ТАк же часто как и eval.

> В других языках это проблема.

А ниче что это не проблема для писателей языковых плугинов под эклипс и идею?

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

>Блин, grep, sed & brain.

То есть руками. Ясно. Нужды в колбасе нет.

>На чём написаны ctags и astyle?

Им хватает синтаксиса. Семантики они не понимают.

>Аналог: почему microsoft пишет точканет, когда есть java?

Ага - драйвера баз данных несоответствующие никакому стандарту - это способ захвата рынка С программеров. Дада.

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

>Следующий урок работы в vim по стандартной таксе.

Что будет если i поле структуры и ссылка на него во многих файлах? "Шашлык"?

Какой ужас о чем тут спорить.

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

>Переформулирую: дотнет пишется потому что надо привязать к винде. Ровно как и BDE писалось чтобы привязать к борландоподелкам.

Почему-то оракл, бимеры, интербейс и вообще все ничего не имеют против написания JDBC драйвера.

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

>А всё же, какой именно язык имеет или теоретически может иметь стопроцентный рефакторизатор?

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

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

>Дотнет пишется оттого что COM-говно, я свою JVM делать они теперь не имеют право.

Имеют. Вопрос в том что может называться JVM а что нет.

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

>Кроме того, покажи язык, для которого есть инструмент для рефакторинга, покрывающий все 100%.

Сюрприз - это никому не надо. 99% - выше крыши.

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

>>Дотнет пишется оттого что COM-говно, я свою JVM делать они теперь не имеют право.

>Имеют. Вопрос в том что может называться JVM а что нет.

Да, юридически их только лишили права на трейдмарк.

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

>Да-да, и почему же сейчас в явоподелках используется Hibernate/Spring? (то, что они стоят на базе jdbc -- только деталь еализации)

Нет - у них задача совсем иная. И ждбс - это не деталь - а необходимость.

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

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

К стати в жаве текстовый eval - есть. Я активно и широко пользуюсь jexl. И еще не умер. Натыкаюсь на ошибки рантайма по подобной причине раз в год.

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

> Что будет если i поле структуры и ссылка на него во многих файлах? "Шашлык"?

Букву "c" в параметрах команды "s" пропустил?

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

>> В других языках это проблема.

> А ниче что это не проблема для писателей языковых плугинов под эклипс и идею?

Да, это их проблема, ибо они пишут неполноценные плугины.

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

>> На чём написаны ctags и astyle?

> Им хватает синтаксиса. Семантики они не понимают.

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

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

> К стати в жаве текстовый eval - есть. Я активно и широко пользуюсь jexl. И еще не умер.

Очередь ещё не дошла. Не уходи сегодня ночью из дома, за тобой придут сиплюсплюсы. :)

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

>> Кроме того, покажи язык, для которого есть инструмент для рефакторинга, покрывающий все 100%.

> Сюрприз - это никому не надо. 99% - выше крыши.

Сюрприз -- рефакторизаторы не нужны. Грепа выше крыши.

Наши высказывания имеют одинаковую ценность.

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