| |||
|
|
Тут наткнулся на очередного энтузиаста С++ с незамутненным вполне сознанием. Ну интереса ради написал три тестика - точнее один - на трех языках: void test () { vector 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 строк кода затрахаешься "векторными инструкциями" оптимизировать. Ну о портабельности я уж и не говорю. Хотя боюсь, что и с эффективностью будут траблы - потому что умственные усилия, которые можно на усовершенствование алгоритмики потратить, пойдут на "векторные инструкции". Какая из этого мораль - да очень простая - полезно иногда немного по сторонам смотреть, ну и еще одна - если Вы совершенно точно не знаете, почему вам не подходит Жаба - не лезьте в С++ - просто потратите кучу времени совершенно зря. |
||||||||||||||||