Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2008-04-29 14:22:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:Компутерщина

Тут наткнулся на очередного энтузиаста С++ с незамутненным вполне сознанием. Ну интереса ради написал три тестика - точнее один - на трех языках:

создание и сортировка (причина выбора теста была в упоминании std::sort в контексте Ну не нужно и все. И списки сортировать без библиотечных функций не нужно) массива из 2 млн строк, представляющих собой числа от 0 до 2_000_000 в дес.записи:

C++:

void test () {
   vector v (2000000);
   char buf [20];
   for (int i = 0; i != v.size (); ++ i)
   {
     sprintf (buf, "%d", i);
     v [i] = string (buf);
   }
   sort (v.begin (), v.end (), less_equal ());
//   for (int i = 0; i != v.size (); ++ i)
//      cout << v [i] << "\n";
}


O'Caml:
let (+>) x f = f x
let s = Array.init 2_000_000 string_of_int      
let _ = Array.fast_sort compare s      
(*let _ = s +> Array.to_list +> String.concat ", " +> Printf.printf "[%s]\n"*)      


Java:
	public static void main(String[] args) {
		final String [] v = new String [2000000];
		for (int i = 0; i < v.length; i++) v[i] = Integer.toString(i);
		Arrays.sort(v);
//		for (String aV : v) System.out.println("s = " + aV);
	}


Результаты оказались ожидаемыми - С++ с O'Caml одинаковы по скорости, программа на O'Caml потребила 36MB памяти против 54MB на С++, Жаба порвала С++ как бобик тряпку - инициализация - массива раза в полтора быстрее, сортировка - раза в 3.

Смотреть код и память у Жабы - занятие то, еще на код O'Caml и C++ я посмотрел:
O'Caml - 84 вполне естественных строчки на асме, С++ - 2895 строчек (без отладочной информации).

Ну собственно - вполне типовой пример того, что получается если "просто писать на С++, как на нормальном языке" - хреново получается. Аффтар исходного поста в конце треда уже что-то несет про то, что вот да с доступом к векторным инструкциям он любой O'Caml уделает.

Может и уделает (хотя я не очень понимаю, как сортировку оптимизировать "векторными инструкциями") - только вот даже 10,000 строк кода затрахаешься "векторными инструкциями" оптимизировать. Ну о портабельности я уж и не говорю. Хотя боюсь, что и с эффективностью будут траблы - потому что умственные усилия, которые можно на усовершенствование алгоритмики потратить, пойдут на "векторные инструкции".


Какая из этого мораль - да очень простая - полезно иногда немного по сторонам смотреть, ну и еще одна - если Вы совершенно точно не знаете, почему вам не подходит Жаба - не лезьте в С++ - просто потратите кучу времени совершенно зря.


(Читать комментарии) - (Добавить комментарий)


[info]kouzdra
2008-04-30 17:51 (ссылка)
Будет быстрее - тут она в предсмертной агонии в основном мусор собирала - это вообще фича языков с GC - если начинает реально не хватать памяти - идет катастрофическое падение производительности.

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

В этом смысле, кстати, Linux сейчас имеет серьезные плюсы перед виндой - потому что в нем сейчас проблемы вроде установки JRE сводятся к
sudo apt-get install jre (да и это можно прописать в зависимостях, если оформлять софтину как пакет).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ppkk
2008-04-30 18:25 (ссылка)
1. Посмотрим дома.

2. Да, как и .net очень не подходит для продаваемых за деньги утилиток, влезающих на дискетку.

3. В Окнах с интернетом ставится не сложнее. Я считаю несерьёзным требование скачивать что-то из интернета (хотя бы см. пункт два).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2008-04-30 18:32 (ссылка)
Сложнее, к сожалению. По части удобства установки более или менее типового софта окошки давно уже в приличном пролете.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ppkk
2008-04-30 18:47 (ссылка)
I.
Вопрос вкуса:
1. На случай новых версий есть автоматическое обновление.
2. Но я его отключаю, ибо для меня зайти на сайт производителя и прочитать, что изменилось и к чему, скачать отдельно файл установочный, который я смогу запустить на любом подходящем компьютере — достаточно удобно.

В броузере ввести "java.com", нажать на кнопку "скачать", нажать нужную ссылку, нажать кнопку "запустить" (когда скачалось), пару раз согласиться с лицензионным соглашением — примерно 16 действий, сравнимо с 25-ю в "sudo apt-get install jre" (то есть: я понимаю, что набить строку и нажать "Ввод" — не требует ожидания загрузок, но на сайте java.com я же могу посмотреть, какие изменения и т.п. [выбрать JDK или JRE, наконец]).

Вот Микрософт Офис, например, — да, с ним приличный пролёт. Он у меня не устанавливается ни на рабочий, ни на домашний компьютер (кроме как на виртуальную машину).

II.
Так что с быстродействием моего текста на Цепепе (на максимальной оптимизации, конечно)? Быстрее, медленнее, также? Можно время в секундах?
Я из дома на Яве ещё измерю быстродействие с увеличенной памятью, но только из дома.

(Ответить) (Уровень выше)


[info]ppkk
2008-04-30 18:52 (ссылка)
Конечно, прописать скачивание и установку Явы (или установку с диска) при необходимости можно и под Окнами: так многие делают.

Кстати, жена пользуется SPSS (неоднозначной осмысленности статистический пакет): последнюю версию переписали на Яве, но кучу окнозависимого, как я понимаю, оставили, а тормозит ужасно (по словам жены, по сравнению с предыдущей версией, достаточно торможения интерфейса, хотя может и вычисления тормозят).

"Налогоплательщик" для ведения электронной переписки с налоговыми органами (на работе поставили) — тоже на Яве, тоже окнозависимого хватает.

А сборщик мусора, например, можно и в Цепепе (даже Страуструп об этом пишет относительно конкретно), и в Паскаль установить: дело нехитрое.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2008-05-02 12:27 (ссылка)
В ЦПП и Пасцаль можно воткнуть только консервативный сборщик мусора. Причем особенно в ЦПП, поскольку там можно откастить указатель к целому и записать в целое поле. Консервативный сборщик может работать хорошо только почти всегда. Но может случайно не попереть - подходящего двоичного вида число может быть перепутано с указателем, что помешает освободить непредсказуемое количество мусора. Дефрагментировать консервативный сборщик тоже не может.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ppkk
2008-05-02 19:18 (ссылка)
Да, там в связи с .net (в Дельфах ведь после 7-й версии .net — первоочередной вариант) всякие возможности работы с указателями (и так в Дельфах чуть-чуть меньшие, чем во Фри Паскале, и намного меньшие, чем в Це) по возможности урезаны или хотя бы сопровождаются жалобами компилятора.

Я имел в виду: если уж вкручивать сборщик мусора, то и стиль программирования менять.

Для разработчиков, как я понимаю, считается достаточно удобным ключ (во Фри Паскале) -gh, который просто на момент закрытия программы сообщает о всём невысвобожденном с некоторыми деталями.

(Ответить) (Уровень выше)

после доработки параметров Явы на стороне пользовател
[info]ppkk
2008-05-02 01:32 (ссылка)
Да, посмотрю на O'Caml при случае.

Ява наверняка что-нибудь кэширует, но 10 запусков последовательных дали:
Цепепе: 61 секунда
Ява: 46 секунд

(подозрительные числа, но повторная проверка дала почти их же)

(Ответить) (Уровень выше)


(Читать комментарии) -