Re[30]: C++ vs ???
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.12.05 03:24
Оценка: 29 (4) +11 :)
Здравствуйте, reductor, Вы писали:

R>Вы думаете, у меня есть такая цель, кого-то убедить в том, что С++ тормоз?

R>Те, для кого это критично и сами давно во всем разобрались.
R>В моем случае я лишь просто объясняю почему для числодробильных задач я возьму скорее фортран, чем С++.
Пока что никакими объяснениями здесь и не пахнет. Только так — пара намеков здесь, пара ссылок там. Зачем тратить время на написание очевидных фраз типа "программы на функциональных языках меньше связывают руки компилятору, что теоретически позволяет написать более эффективный оптимизатор", когда можно вместо этого добавить пару абзацев про отсутствие абстрактного мышления у собеседника?
Когда оппонент следует вашей же рекомендации и выполняет сравнение результатов кодогенерации, вы обвиняете его в том, что он "ничтоже сумняшеся готов все буквализировать".

Я понимаю, что не мне учить такого великого гуру излагать свои мысли. К тому же лично мне безразлично, сможете ли вы снискать себе популярность на этих форумах. Но все же позволю сделать себе один комментарий: такая манера защиты функциональных языков оттолкнет людей не только от вас лично, но и от самих этих языков. У нас уже есть достоверный опыт — большая часть посетителей плюется при слове "оберон", и не потому, что имеет значительный негативный опыт его использования, а от того, что его апологет вел себя похожим на вас образом.

Поэтому я искренне рекомендую воздержаться от высмеивания собеседников, особенно тех, кто искренне пытается следовать вашим советам и мог бы стать вашим сторонником в споре. Вовсе незачем стараться настроить всех против себя. А вообще, скромность только украшает человека, независимо от его квалификации.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: C++ vs ???
От: reductor  
Дата: 02.12.05 09:54
Оценка: +1 -6 :))) :))) :)
Здравствуйте, alexeiz, Вы писали:

A>Здравствуйте, zip_, Вы писали:


_>>Здравствуйте, reductor, Вы писали:


R>>>И кстати-кстати. по поводу Си и низкого уровня — рекомендую обратить внимание: http://www.research.att.com/projects/cyclone/

R>>>И система типов там похожа на окамловскую. Да и много что (кроме синтаксиса и управления памятью). Правда QNX там официально вроде пока не поддерживается, но попробовать можно. В любом случае, всяко лучше чем просто си.

_>>Интересно. Но сейчас реально нужен язык для высокого уровня. Два языка изучать параллельно — это слишком


A>А чем C++ не язык высокого уровня?


Ничем.
Это ассемблер.
Который к тому же медленный и многословный.
Re[28]: ocamlopt и MSVC - кто быстрее?
От: jedi Мухосранск  
Дата: 04.12.05 21:46
Оценка: 71 (3) +9
Здравствуйте, reductor, Вы писали:

R>Думаю, трех человек достаточно.

R>Кто-нибудь может сказать как здесь удалить аккаунт вместе со всеми своими сообщениями?

R>А то я явно здесь засиделся.


При этих словах все вероятно должны начать посыпать голову пеплом ...

А если серьезно, то никто не сомневается в вашей компетентности, вот только
безаппеляционно-менторский стиль суждений здесь никому неинтересен. Гораздо конструктивнее
было бы написать пару статей из той области которой вы похоже владеете — функциональное
программирование, верификация программ итп. Думаю они были бы действительно интересны
многим участникам форума, мне уж точно
Re[5]: C++ vs ???
От: reductor  
Дата: 01.12.05 19:00
Оценка: 31 (2) +1 :))) :))) :)))
Здравствуйте, Anton Batenev, Вы писали:

AB>Возможно. Однако, прежде чем откланятся, разрешите сделать лирическое отсупление?


AB>Ради приличия, дочитал внимательнейшим образом главу до конца. Я не имею ни малейшего понятия об этом языке. В оглавлении стоит ремарка о том, что предполагается, что я уже скачал дистриб языка, установил его и жажду деятельности. Однако, за всю главу Basics мы не написали "Hello Word". Вам интересно было бы читать дальше при такой вводной как у меня?


Знаете, по-моему, вам лучше перестать уже мучить себя и прекратить читать этот туториал.
Это дурацкий язык и в нем нет hello world
Re[21]: ocamlopt и MSVC - кто быстрее?
От: gear nuke  
Дата: 04.12.05 17:03
Оценка: 80 (6) -1 :)
Лучше один раз увидеть, чем сто раз услышать

Поэтому провёл сравнение сам.
Использованы исходники отсюда

С++ компилировался так:
cl ray.cpp /Ox /EHsc /Gr /GS- /GL
получен исполняемый файл размером 139264 байта.

OCaml компилировался так:
ocamlopt -inline 100 ray.ml -o ray
получен исполняемый файл размером 278528 байт.

Размеры файлов в общем-то мало зависят от полезного кода, больше — от runtime библиотек.


Измерения проводились при помощи отладчика (режима ядра, поэтому влияние на системную кучу отсутствует) Soft ICE. Каждая программа запускалась 3 раза так:
ray > out.txt

Измерялось время исполнения кода от точки входа в главную функцию и до точки выхода из неё.
Время инициализации runtime библиотек в полученные цифры не входит.

Тестовая машина:
Athlon XP2000+ (1666MHz) 512Mb DDR (266MHz) XP SP2.

Результаты:
ocalmopt                                        MSVC 8 
(Microsoft-based native Win32 port  3.09.0)     (14.00.50727.42 for 80x86)

30,60 сек                                       18,54 сек
30,69 сек                                       18,54 сек
30,59 сек                                       18,55 сек

Вне конкурса проходит тот же MSVC с ключиком /clr
Замеры выполнялись "на глаз" — запускался экзешник и секунды смотрелись по часам Windows, пока не закроется окно консоли.
В этом случае неизвестно что измерялось, и точность сомнительна, но результаты интересны.
Время выполнения ~ 28-29 сек.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[20]: кодогенератор ocamlopt
От: gear nuke  
Дата: 04.12.05 14:12
Оценка: 48 (6)
Здравствуйте, reductor, Вы писали:

R>Просто откомпилируйте что-нибудь простое на окамле и си++ — увидите в чем разница


Попробовал ray.ml остсюда.
Компилировал при помощи Microsoft-based native Win32 port так:
ocamlopt -inline 100 ray.ml -o ray -S

В качестве backend используется masm, поэтому я смотрел полученный asm листинг.

Все замечания не относятся к качеству трансляции O`Caml -> asm, поскольку я не знаком с языком, сложно делать выводы о оптимальности трансформаций. Буду говорить только касательно качаства самого вывода x86 asm (исключительно субъективная оценка).

На первый взгляд, вывод относительно неплох.

ocamlopt использует передачу параметров не через стек, а в регистрах CPU — более быстрый вариант. Более 2х параметров нигде не передавалось, поэтому непонятно, как будут передаваться дальнейшие. (компиляторы С++ так же позволяют использовать подобную конвенцию или делают тоже самое при whole program optimization)

Используется регистр esp вместо ebp для построения кадров стека — это наиболее быстрый способ, поскольку исключаются лишние команды. Многие старые С++ компиляторы делают наоборот (очевидно, тяжёлое наследие 16 бит). Современные используют аналогичный ocamlopt подход.
Дальнейшее изучение показало, что кадры стека в OCalm совсем не нужны.

Используются вызовы подобные косвенным в С++ через VTable. Кое что из этого настраивается в runtime



Оптимизатор ничего не знает об архитектуре x86, вывод похож на нечто после кросплатформенного кодогенератора. Из всех возможных оптимизаций увидел только использование lea для сложения сразу 2х чисел (будут ли использоваться для умножения на некоторые константы — не ясно).
Никак не учитывается возможность параллельного выполнения.
Нет никакого выравнивания меток для переходов. Это плохо, проблемы с конвеером.
Не используются "новые" команды. Сейчас довольно странно расчитывать на 486 и терять в скорости.



Это первый кусок ассемблера, который вывел ocamlopt:
_camlRay__fun_209:
    sub esp, 8            ; 1*
L101:
    mov ecx, eax
    fldz                  ; 2*
    fld REAL8 PTR [ecx]   ; 2*
    fcompp                ; 2*
    fnstsw  ax            ; 2*
    and ah, 69            ; 2*
    jne L100
    mov eax, ecx
    add    esp, 8         ; 1*
    ret
L100:
    mov eax, DWORD PTR [ebx+8]
    add    esp, 8         ; 1*
    ret
1. Совершенно не нужное выделение памяти в стеке. (часто встречается)
2. Таким образом сравнивается double с нулём. Сейчас уже есть быстрые команды вроде ficomm.
Очень странно, что подобную небольшую функцию компилятор не заинлайнил.
Оказывается, далее делается так:
    mov DWORD PTR [edx],OFFSET _camlRay__fun_209
и вызов происходит косвенно



Ещё несколько пёрлов.

Это всё делается одной командой:
    and ah, 69
    dec ah
    cmp ah, 64
встречается часто.

Многократная загрузка одного и того же значения из памяти:
    fld    REAL8 PTR [esi]
    fmul    REAL8 PTR [edx]
    fstp    REAL8 PTR [eax]
    fld    REAL8 PTR [esi]
    fmul    REAL8 PTR [edx+8]
    fstp    REAL8 PTR [eax+8]
    fld    REAL8 PTR [esi]
    fmul    REAL8 PTR [edx+16]
    fstp    REAL8 PTR [eax+16]
встречается везде, где только "можно". Это может быть оправданно, когда стек FPU полон, но не в нашем случае.

Вот так происходит смена знака double:
    fld1
    fchs
    fmul    REAL8 PTR [edx]
    fstp    REAL8 PTR [ecx]
умножение на -1 есть специальная команда, которая, впрочем, здесь применяется тоже
В некоторых других местах проблем с этим нет.

Смысл следующего куска для меня остаётся загадкой:
    mov eax, 1
    mov DWORD PTR 0[esp], eax
    cmp eax, 7
    jg  L200
L201:
    mov ecx, 1
    mov DWORD PTR 20[esp], ecx
    cmp ecx, 7
    jg  L202
аналогичное можно делать так:
    mov DWORD PTR 0[esp], 1
    mov DWORD PTR 20[esp], 1

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

Напоследок, заключительный кусок ассемблера:
L196:
    mov eax, 1
    mov eax, 1
    add    esp, 40
    ret

Как в старом анекдоте:

-- ты зачем 2 перехода подряд поставил???
-- это на случай, если первый не сработает!!!

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[35]: C++ vs ???
От: reductor  
Дата: 07.12.05 16:45
Оценка: +2 -1 :)))
Здравствуйте, gear nuke, Вы писали:

[..флейм скипнут..]

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

Будь по-вашему, С++ самый быстрый, а окамл медленный и нелепый.
С++ я уважаю и вас уважаю.

Так проще.
Re[15]: C++ vs ???
От: jedi Мухосранск  
Дата: 04.12.05 00:02
Оценка: 8 (3) +2
Здравствуйте, reductor, Вы писали:

R>Здравствуйте, jedi, Вы писали:



J>>Т.е. по существу вопроса ответить нечего? См. совет вверху.


R>По какому существу? Что вы хотели услышать и против какого моего утверждения возражаете?

R>Если можно, конкретнее.

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

"Все очень просто. Что на С++ или на ассемблере _можно_ обогнать O'Caml, я не спорю. Вопрос чего это будет стоить."
Хочу услышать: конкретный пример где это будет стоить дорого.

"Не бывает универсальных языков. И С++ не такой быстрый."
Хочу услышать: где язык С++ не такой быстрый, как мог бы (не знаю в сравнении с чем вы утверждали).

Вы тут за последние три недели наплодили почти столько же сообщений, как и я за полтора года участия в форумх рсдн.
Вот только конкретики в ваших опусах маловато, все больше какие-то общие фразы. Вам есть что сказать по делу? В конце концов здесь
не религиозный форум, а форум программистов, да и вы претендуете на научный подход. Потрудитесь обосновывать ваши
утверждения в таком случае. Иначе это флуд.
Re[28]: ocamlopt и MSVC - кто быстрее?
От: EvilChild Ниоткуда  
Дата: 05.12.05 18:23
Оценка: +5
Здравствуйте, reductor, Вы писали:

R>>На что же я вам должен отвечать?

R>>И если можно поименно этих многих.

R>Думаю, трех человек достаточно.

R>Кто-нибудь может сказать как здесь удалить аккаунт вместе со всеми своими сообщениями?
Не думаю, что наличие людей, которым ваши посты неинтересны аргумент в пользу того, чтобы не писать,
в конце концов у них всегда есть опция их не читать, а вот опция читать пропадёт у всех, кому они интересны.
Я, например, читаю с большим интересом.
Можно их посты просто игнорировать.

R>А то я явно здесь засиделся.
Re[22]: C++ vs ???
От: gear nuke  
Дата: 06.12.05 22:20
Оценка: 46 (4)
Здравствуйте, reductor,

GN>>Тогда не знаю, что и как там может быть более эффективно. Смотрел код, но никаких гениальных решений не увидел.


R>Вы же сами видели, что из окамла можно генерить эффективный код


К сожалению, Вы как-то не правильно интерпретируете выделенное. "Эффективность" полученного asm я комментировал — Re[20]: кодогенератор ocamlopt
Автор: gear nuke
Дата: 04.12.05
.

R>даже _без оптимизирующего_ компилятора.


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

R>причем, случай с float'ами далеко не лучшая сторона окамла


Это было заметно

R>лучшая — это вызов функций


В чём это выражается? Вариации на тему fastcall делает любой нормальный компилятор С++.

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


Как это может сказаться на качестве результирующего asm?

R>программа на окамле не играет со стеком


Факты:
_camlRay__aux_106:
    sub esp, 24
L111:
    mov DWORD PTR 12[esp], eax
    mov DWORD PTR 8[esp], ecx
    mov eax, DWORD PTR [eax]
    mov DWORD PTR 4[esp], eax
    movzx   eax, BYTE PTR [ebx-4]
    test   eax, eax
    je  L109
    mov DWORD PTR 0[esp], ebx
    mov ebx, DWORD PTR [ebx]
    mov eax, DWORD PTR [ecx+12]
    call    _camlRay__ray_sphere_94
L112:
    fld REAL8 PTR [eax]
    fstp    REAL8 PTR 16[esp]
    mov eax, DWORD PTR 4[esp]
    fld REAL8 PTR [eax]
    fcomp   REAL8 PTR 16[esp]
    fnstsw  ax
    and ah, 69
    dec ah
    cmp ah, 64
    jae L110
    mov eax, DWORD PTR 12[esp]
    add    esp, 24
    ret


R>не играет с пойнтерами и адресной арифметикой, не делает никаких джампов и тп.


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

R>там можно без статического анализа много выжать на чистом знании этого.


"Мы хотим здесь и сейчас" (с)

R>а уж если прикрутить оптимизатор как у MSVC...


Для этого нужно-то — почитать IA-32 Intel® Architecture Optimization Reference Manual или взять в команду человека, который это сделал. Я вот не пойму, что этому мешает. Может быть элитизм?

R>http://shootout.alioth.debian.org/benchmark.php?test=all&lang=ocaml&lang2=icpp

R>вот, скачайте акермана посмотрите или там бинарные деревья

Посмотрю 2й раз, ничего не увижу, начну задавать вопросы... и получу очередную ссылку "посмотреть"

R>Только очень прошу, без цирка на этот раз.


Спасибо, приятно осознавать себя клоуном.

R>Здесь все же речь о языках шла, а не о том какая компания выпускает самый навороченный компилятор


Вот и взял
Автор: gear nuke
Дата: 04.12.05
первый попавшийся компилятор, ничего сверхестественного. MSVC — обычный mainstream. В представлении не принимали участие платные Intel C++ и Vector C или что там самое навороченное, даже не знаю.

R>и какая библиотека лучше всех считает.


Никаких сторонних библиотек не было.

R>Можно иногда и профессионализм проявить.


Работа у меня такая — копаться в песочнице с машинным кодом.

R>дело не в конкретном компиляторе.


А в том, что гипотетически OCaml быстрее С++ ?

Вот MS придумали .NET. Все кричали, что это тормоз. Но сделали качественный компилятор, и скорость более чем на уровне для своих задач.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[31]: C++ vs ???
От: reductor  
Дата: 07.12.05 04:06
Оценка: 43 (3) +1
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, reductor, Вы писали:


R>>Вы поняли то, что хотели

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

GN>Не так:

GN>

Просто откомпилируйте что-нибудь простое на окамле и си++ — увидите в чем разница

просто откомпилировал и посмотрел. рейтрейсер — первое, что попалось.


А не надо первое что попалось. И я не предлагал тут устраивать глупые микробенчмарки.
Смысл всего сводился к тому, что в случае окамла, "даром" мы получаем больше, чем в случае С++. ВСЕ.

R>>имелась в виду некоторая абстракция — окамл можно откомпилировать красивее и быстрее, чем с/с++ код.


GN>По другой теории, с/с++ код можно откомпилировать лучше, чем это делается сейчас.


Теоретически, окамл, как более формальный язык откомпилировать "лучше" — проще.
В любом случае, полный статический анализ невозможен в случае с окамлом так же, как и в случае с С++.

Но как бы то ни было, представьте, что у вас система из 2 000 000 (двух миллионов) строк на С++, которая моделирует погоду или рулит данными на какой-нибудь бирже и как вы каждый день в течение нескольких лет приходите на работу, чтобы переписать calling conventions у очередных 10 функций и вычистить оттуда всю адресную арифметику и прочую гадость.

Это все по сравнению с такой же системой на, например, O'Caml, которая и занимать будет не два миллиона, а 500 000 строк и у которой заранее нет ничего, что бы мешало получить приемлимый результат.

Потому мы и не можем любой функции на C++ сделать fastcall и потому С++ _заранее_ — тормоз.
Ну и разумеется, разрыв увеличивается на RISC-архитектурах с большим количеством регистров и большим кешем.

Все.

R>>и в некоторых случаях это уже происходит, в других — нет. устраивать цирк с флотами, да еще на х86 — это неадекват. уж извините.


GN>Зачем повторяете, что я клоун с неадекватным поведением? Оскорбить меня так не получится, не обращаю внимание на такое :))


Ну, клоуном вас я не называл. И характеристику давал не вам, а происходящему. Так что это мимо.

R>>прежде чем вы начнете здесь возражать, давайте определимся точнее — в разряд чего вы отнесете фразу

R>>"фортран быстрее, чем С++"
R>>вы согласны с этим утверждением, не согласны или что-то третье?

GN>Не знаю. На фортране только лабы делал когда-то. Думаю, не быстрее. С++ — это же ассемблер :)


Тем не менее, все численные задачи у физиков-теоретиков до сих пор пишутся на фортране.
И вот, например, некоторые бенчмарки: http://www.oonumerics.org/blitz/benchmarks/

R>>что напечатает эта программа и почему?


GN>В некоторых случаях напечатает 2й параметр, переданный в test. Потому что в ISO/IEC 14882 ничего не говориться про стек.


Вот именно.
Это то, что я называю непредсказуемостью.
И это то, что создает проблемы для компилятора и еще какие.

GN>>>И какие проблемы это даёт для компилятора?

R>>Очень смешно.
GN>Это не смешно — постоянно уходить от ответа.

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

GN>>>Например:

GN>>>Способ представления целых чисел в OCaml (x * 2 + 1) делает невозможным производить арифметику одной машинной командой. В случае со сложением, они выкручиваются за счёт LEA (хотя это потребует 2й команды, для проверки результата на 0, с переполнением ещё хуже). В остальных случаях всё очень плохо. Как будем вычислять X / Y ?

R>>Вы узнать хотите или что? :)


GN>Это пример, как представление целых чисел в OCaml мешает компилятору.

GN>Хотелось бы увидеть аналогичный пример, как мешает компилятору стек.

Представление чисел может представлять интерес для того, кто будет потом с этими числами работать.
Если же это число не пойдет никуда дальше того места, в котором с ним идет работа и мы можем быть в этом уверенны в случае с O'Caml, то каким оно будет не должно волновать никого.
В случае же с С++ такой гарантии у нас нет и проблемы со стеком некоторым образом относятся к этому.
гарантий, что какая-то функция не получит доступа к любому значению у нас нет.

R>>>>В явном виде или нет, но в случае с С++ нельзхя быть уверенным ни в чем.


GN>Хорошо, перефразирую вопрос.

GN>Почему "нельзя быть уверенным ни в чем" ?

Потому что мы не можем написать статический анализатор который даст нам ответ "используется ли это значение где-нибудь еще".


R>>Вы думаете, у меня есть такая цель, кого-то убедить в том, что С++ тормоз?


GN>Высказывания о тормознутости С++ принадлежат имеено Вам, не знаю, какую смысловую нагрузку они несут.


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

R>>Те, для кого это критично и сами давно во всем разобрались.


GN>Для меня критично. Я разобрался :)


Я рад. Чего же вы от меня тогда хотите, если во всем разобрались?

R>>В моем случае я лишь просто объясняю почему для числодробильных задач я возьму скорее фортран, чем С++.


GN>Хех, уже FORTRAN вместо OCaml :xz:


fortran, sisal, clean. o'caml, java — что угодно что даст мне как можно меньше проблем для компилятора.
меня не интересует варианты типа _возможности_ оптимизировать что-то руками.
меня интересуют варианты, когда я могу как можно больше работы скинуть компилятору.

Все, давайте прекращать это дело. Мы тратим время на обсуждение того, что давно было обсуждено еще в 80ые.
Я не знаю что у вас за пристрастие к С++, что вы его так ожесточенно защищаете.
Мне конкретные языки безразличны, мне интересен комфорт, который они мне могут предоставить.
Потому я и стремлюсь знать их побольше, чтобы уметь выбирать.
Re[7]: C++ vs ???
От: Pzz Россия https://github.com/alexpevzner
Дата: 02.12.05 17:17
Оценка: 15 (2) +2
reductor wrote:
>
> A>А чем C++ не язык высокого уровня?
>
> Ничем.
> Это ассемблер.
> Который к тому же медленный и многословный.

Не согласен.

C (не C++) это язык, который выражает абстрактным образом архитектуру
современного компутерного железа (современного в смысле повседневного).
В этом плане он исключительно хорош. Прошло уже 20 лет, а на C
по-прежнему можно писать железноориентированные программы, не опускаясь
при этом до уровня особенностей работы ALU на данном конкретном процессоре.

Конечно, C не идеален. Например, для полноценной работы хотелось бы
уметь описывать раскладку данных на биты, не прибегая при этом к
трюкачеству. Хотелось бы так же, чтобы идея endian'а была как-то
отражена в языке. И хоть какие-то примитивы синхронизации, типа
read_and_set, или atomic_increment. В общем, как раз тех вещей, которые
иначе приходится писать на ассемблере безо всякой осмысленной причины.

Мда. Так вот, будучи языком, предназначенным для абстрактного
представления современного компутера, C, безусловно является языком
высокого уровня. Просто он не универсален, а domain-specific, но domain
у него при этом весьма специфический

C++ же, это не язык, а какой-то кошмар. Что он отражает, не очень
понятно. Скорее всего, "все на свете" с весьма переменным успехом...
Posted via RSDN NNTP Server 2.0
Re[25]: ocamlopt и MSVC - кто быстрее?
От: Cyberax Марс  
Дата: 04.12.05 19:24
Оценка: 1 (1) +3
reductor wrote:

> с удовольствием бы с вами поиграл в этой песочнице и показал что

> произойдет на PowerPC и после того, как окамлу заменить вектор на
> CamlG4 например или что-нибудбь еще такое, но как-то не увлекает,
> знаете ли...

А мне ничего менять не надо — Blitz++ поддерживает векторные процессоры.
Для этого надо просто поставить соответствующую реализацию.

> Давайте лучше сразу прямо здесь запишем, что С++ это самый быстрый,

> разумный, добрый и вечный язык.
> А то спам в ящике надоел.

Ну так отвечайте по существу. А то тут спамом многие считают ваши сообщения.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[24]: C++ vs ???
От: gear nuke  
Дата: 06.12.05 22:33
Оценка: 1 (1) +3
Здравствуйте, reductor,

GN>>Результирующий код построен таким образом, что затруднено распараллеливание инструкций — многие команды зависят от результатов предыдущих.


R>Что в функциональных языках нельзя распараллеливать выполнение — это очень ценное замечание и архиценное в силу своей редкости мнение.


Вы каким-то интересным способом вырываете смысл (цитаты) из контекста. Инструкция — это команда процессора. К ФЯ не имеет никакого отношения.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[30]: C++ vs ???
От: gear nuke  
Дата: 07.12.05 03:13
Оценка: 1 (1) +3
Здравствуйте, reductor, Вы писали:

R>Вы поняли то, что хотели

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

Не так:

Просто откомпилируйте что-нибудь простое на окамле и си++ — увидите в чем разница

просто откомпилировал и посмотрел. рейтрейсер — первое, что попалось.

R>имелась в виду некоторая абстракция — окамл можно откомпилировать красивее и быстрее, чем с/с++ код.


По другой теории, с/с++ код можно откомпилировать лучше, чем это делается сейчас.

R>и в некоторых случаях это уже происходит, в других — нет. устраивать цирк с флотами, да еще на х86 — это неадекват. уж извините.


Зачем повторяете, что я клоун с неадекватным поведением? Оскорбить меня так не получится, не обращаю внимание на такое

R>прежде чем вы начнете здесь возражать, давайте определимся точнее — в разряд чего вы отнесете фразу

R>"фортран быстрее, чем С++"
R>вы согласны с этим утверждением, не согласны или что-то третье?

Не знаю. На фортране только лабы делал когда-то. Думаю, не быстрее. С++ — это же ассемблер

R>>>>>Я таковыми считаю свойства исходного кода.

R>>>>>Это касается и игры со стеком и всего прочего.
R>
R>void test(int a, ...) {
R>        int* x = &a;
R>        x++;
R>        cout << *x;
R>}

R>int main() {
R>        test(5, 6);
R>        return 0;
R>}

R>что напечатает эта программа и почему?

В некоторых случаях напечатает 2й параметр, переданный в test. Потому что в ISO/IEC 14882 ничего не говориться про стек.

GN>>И какие проблемы это даёт для компилятора?


R>Очень смешно.


Это не смешно — постоянно уходить от ответа.

GN>>Например:

GN>>Способ представления целых чисел в OCaml (x * 2 + 1) делает невозможным производить арифметику одной машинной командой. В случае со сложением, они выкручиваются за счёт LEA (хотя это потребует 2й команды, для проверки результата на 0, с переполнением ещё хуже). В остальных случаях всё очень плохо. Как будем вычислять X / Y ?

R>Вы узнать хотите или что?


Это пример, как представление целых чисел в OCaml мешает компилятору.
Хотелось бы увидеть аналогичный пример, как мешает компилятору стек.

R>>>В явном виде или нет, но в случае с С++ нельзхя быть уверенным ни в чем.


GN>>Я уверен. Почему я заблуждаюсь?


R>Откуда я знаю почему.


Хорошо, перефразирую вопрос.
Почему "нельзя быть уверенным ни в чем" ?

R>Вы думаете, у меня есть такая цель, кого-то убедить в том, что С++ тормоз?


Высказывания о тормознутости С++ принадлежат имеено Вам, не знаю, какую смысловую нагрузку они несут.

R>Те, для кого это критично и сами давно во всем разобрались.


Для меня критично. Я разобрался

R>В моем случае я лишь просто объясняю почему для числодробильных задач я возьму скорее фортран, чем С++.


Хех, уже FORTRAN вместо OCaml
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[32]: ocamlopt и MSVC - кто быстрее?
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.05 01:24
Оценка: 1 (1) +1 -2
Здравствуйте, reductor, Вы писали:

VD>>Незнаю как у кого, но вид американской сотни давно меня не приводит в восторг. Я бы еще понял если бы ты заговорил о пачке европейских пятисоток.


R>Я уже давно не нахожу между ними разницы.


Между одной 100-доллоровой бумажкой и пачкой пятисоток евро то? Ну, ты крут.

R>Я многих раздражаю по-жизни, многих здесь. Что ж теперь делать.


Аргументировать и принимать чужие аргументы. А стойкое стояние на своем оно только это свое отдавливает.

R>Или привыкайте или удаляйте все мои сообщения вместе с моим аккаунтом.


Видел как тут народ на Оберон реагирует? Это потому, что Губанов палку перегнул. Вот тоже будет с Окамлом если его так "поддерживать". Пойми, тут на форуме почти все сочувствующие функциональному подходу вообще и Окамлу в частности. А гиперпропаганда просто отталкивает.

R>А читать нотации — это неэффективный способ. Мне не 15 лет.


Нотации никто и не читает. Тебе говорят о том как это выглядит со стороны.

Мы с удовольствием послушаем интересные мысли. Даже с удоволствием поспорим в честном споре. Но когда начинается пиар и фанатизм, то хочется только противодействовать.

На этом форуме давно извесно кто за что ратует. Я вот дотнет пропагандирую, ПК плюсы, Губанов Оберон, Гапертон и т.п. ФЯ. Каждый по своему прав. И каждый дает остальным некоторые новые знания. Потому мы тут сидим, а не разбежались по углам или не перенабили друг-другу морду. Так что присоеденяйся.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: ocamlopt и MSVC - кто быстрее?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.12.05 21:10
Оценка: +1 -2 :)
Здравствуйте, reductor, Вы писали:

C>>Ну так отвечайте по существу. А то тут спамом многие считают ваши сообщения.


R>И если можно поименно этих многих.


eao197
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[40]: C++ vs ???
От: reductor  
Дата: 11.12.05 23:11
Оценка: :))) :)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, reductor, Вы писали:


R>>Другая:

R>>
R>>let rec qsort array = match array with 
R>>     []              -> []
R>>     | pivot::rest   -> let left,right = List.partition (function x -> x < pivot) rest
R>>                        in (qsort left) @ pivot::(qsort right);;
R>>


VD>Кстати, о быстрой сортировке. На Питоне и Руби она не хуже выглядит... пока в качестве pivot используется первый эелемнт. А как насчет того чтобы взять pivot из центра списка? А то ведь такая версия очень не эффективна на отсортированных списках.


да, говно язык окамл, согласен.
Re[43]: C++ vs ???
От: reductor  
Дата: 13.12.05 13:10
Оценка: :))) :)
Здравствуйте, VladD2, Вы писали:


VD>И, что, после этого я таки получу полиморфный "+" как в "обычных" языках? И при этом ничего не посыпется? И приоритеты останутся?...


Нет, разверзгнутся хляви небесные, наступит армагеддон и мы все очутимся в геене огненной.
Re[45]: C++ vs ???
От: reductor  
Дата: 14.12.05 19:46
Оценка: -2 :))
Здравствуйте, VladD2, Вы писали:

R>>Нет, разверзгнутся хляви небесные, наступит армагеддон и мы все очутимся в геене огненной.


VD>Смешно. Но ответа как всегда нет.


Сочувствую.
Re[29]: C++ vs ???
От: Костя Ещенко Россия  
Дата: 14.12.05 03:56
Оценка: 31 (3)
Здравствуйте, VladD2, Вы писали:

S>>Как минимум MS VS 7.1 вообще не будет делать вызова factorial в релизе. Вместо него в operator << будет сразу передан результат вычисления 7!.


VD>Ну, незнаю. Может я что-то делаю не так, но вот что я получил под отладчиком (Release VS 2005):


[]

VD>Так что как раз VC похоже тут звезд с неба не хватает.


Ты, видимо, не установил #pragma inline_recursion(on). А вычислит ли vc константу, зависит от значения N в #pragma inline_depth(N). Т.к. по умолчанию N=8, то 7! вычисляется в константу.

Но интересно не это. Интересно, что vc7.1 устраняет хвостовую рекурсию. Переписываем factorial в хвостово-рекурсивном виде:
unsigned __fastcall fact_(unsigned n, unsigned accum)
{
  return n > 1 ? fact_(n-1, n*accum) : accum;
}

unsigned factorial(unsigned n)
{
  return fact_(n, 1);
}

и получаем цикл:
unsigned __fastcall fact_(unsigned n, unsigned accum)
{
    return n > 1 ? fact_(n-1, n*accum) : accum;
00401000  cmp         ecx,1 
00401003  mov         eax,edx 
00401005  jbe         fact_+12h (401012h) 
00401007  mov         edx,ecx 
00401009  imul        edx,eax 
0040100C  dec         ecx  
0040100D  jmp         fact_ (401000h) 
}
00401012  ret
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[23]: Жульничество?
От: gear nuke  
Дата: 14.12.05 21:31
Оценка: 12 (2) :)
Здравствуйте, Gaperton, Вы писали:

G>http://www.rsdn.ru/Forum/Message.aspx?mid=1539715&amp;only=1
Автор: Gaperton
Дата: 14.12.05


Re[23]: ocamlopt и MSVC &mdash; кто быстрее?
Автор: gear nuke
Дата: 15.12.05


G>Ксатити, по приведенной тобой ссылке используется как раз gcc. А не MSVC последней версии, у которого кодогенератор заметно качественнее.


Можете конкретезировать где gcc? Мне плохо понятно о чём речь.

G>Короче, твои аргументы в этом грандиозном флейме высосаны из пальца, на самом деле.


Так же как и обвинения в жульничестве.
Потрудитесь привести аргументы.

G>ocamlopt использует gcc для кодогенерации. Вот и все. Так что для правильного сравнения надо или заставить OCaml использовать MSVC, или использовать gcc (для чего можно и по ссылке сходить — посмотреть, как плюсовая прога немного проиграет окамловой — такие случаи иногда бывают).


По какой ссылке?

G>Если ты, конечно, хочешь сравнить языки.


Я хочу сравнивать языки не в теории, а на практике.

Теоретически, самый хороший язык — это ассемблер. Знаете как на нём всё быстро будет работать после ручной оптимизации? А если автоматическую прикрутить? Почему же на нём не пишут? Может быть, люди хотят синицу в руках сейчас, а не журавля в небе к старости?

Мне, честное слово, надоело в этом топике читать ответы "пойди туда, не знаю куда". Сказали скомпилируй и посмотри — так и сделал. Ну, сделал не правильно — покажите, где ошибка. А то просто смешно получается — "ты не прав, потому что не прав".


P.S.
Я могу так же утверждать, что оригинальный тест — подтасовка. Выбрали компилятор, который проигрывает OCaml.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: C++ vs ???
От: GlebZ Россия  
Дата: 01.12.05 12:50
Оценка: 11 (2) +1
Здравствуйте, Anton Batenev, Вы писали:

AB>Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на

AB>первых разделах
Харпер. Лучший учебник по SML. Далее документация по всем ML языкам читается как художественная литература.http://www.cs.cmu.edu/~rwh/smlbook/. У меня русская версия есть, но взята с интера. Если хорошо прогуглиться, можно и такую найти.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[35]: C++ vs ???
От: vdimas Россия  
Дата: 07.12.05 20:38
Оценка: 8 (1) +2
Здравствуйте, gear nuke, Вы писали:

GN>А я не пойму, как невалидная программа может служить примером помехи оптимизатору.


Там невалидность видна невооруженным взглядом и специально демонстрировалась. Получить подобную невалидность на 3-м или 5-м уровне коссвенности — легко и наблюдалось мною не раз (она возникает из-за отсутствия четких спецификаций и ограничений на параметры методов, а компилятор пропускает все подряд, есс-но).

Насчет оптимизаций, ты зря споришь. Наличие хороших компиляторов от Intel или MC++7.0 не говорит о легкости стат-анализа кода программы на С++. Ты не можешь предвычислять участки кода (или оптимизировать алгоритм), если обращаешься к данным через указатели, значение которых устанавливается где-то вне контекста. Это же очевидно и reductor просто не находит слов (или желания) для объяснения очевидных вещей. Очевидные вещи порой сложно объяснить

R>>Да чем мешает-то. Как будто он обязан всегда оставлять это представление.

R>>Это представление — оно для GC и для внешнего кода, а не для компилятора.

GN>Это не важно. Арифметика будет проигрывать аналогу в С++ всегда за счёт оверхеда на сдвиги (деление/умножение на 2).


Тебе сказали о том, что подобное представление не специфицировано. Т.е. на других компиляторах возможно другое представление. Вообще, я бы скорее выделил лишнее слово памяти, чем 1 бит

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

R>>по этой причине и с GC у С++ проблемы.

GN>У С++ нет проблем с GC кроме его отсутствия в языке. Там так же нет и функций ввода-вывода и много ещё чего, что делается #include


GC на С++ не так прост и реализуется более-менее приемлимо только через хендлы (а не прямые указатели). Однако, используя хендлы, невозможно описывать традиционным способом, например, методы объектов.

R>>Думаете, его скорость нуждается в защите?


GN>Да, нуждается — от необоснованных нападок. И другие вещи так же заслуживают, что бы их не называли порнографией. Этот язык можно как минимум уважать — его влияние на индустрию в целом не может видеть только слепой.


С++ — это универсальный язык, помимо прочего. Мне даже трудно определиться, что лучше: владение универсальным инструментом, или владение множеством узконаправленных, но идеально подходящих для конкретных случаев инструментов.

Достаточно много бенефитов у обоих подходов. Но у первого подхода все бенефиты скорее организационно-административного плана, как с технической т.з., так и с т.з. управления ресурсами (людскими)
Re: C++ vs ???
От: reductor  
Дата: 30.11.05 16:58
Оценка: 7 (2) +1
Здравствуйте, zip_, Вы писали:

_>беглый анализ ситуации показал, что претендентов не так уж и много, а именно:

_>1. ocaml
_>2. D

Их на самом деле больше, но приводить их здесь и сейчас смысла нет — только растерянности прибавит.


_>по певому:

_>- так ли он хорош и универсален? несколько напрягает сложность перехода на него, т.к. времени свободного нет, а проекты делать надо, и делать в срок.

Да. Универсален и очень хорош. Без шуток. Особенно как замена С++

_>по второму:

_>- а дорос ли он уже до реального применения в промышленных системах?

А вот здесь встает вопрос об осмысленности выбора. Ничего _качественно_ нового D в себе не несет, причем разные features, которыми он гордится мало связаны между собой в единую систему (формально).
Кроме всего прочего, тот же синтаксис, что и в С/С++, нагло влияющий на семантику языка. Что может и не является такой уж проблемой, но в общем зачете очков не прибавляет.

_>опыт программирования приближается к 15 годам, в основном это С и C++.


Плохо. Меньший опыт был бы лучше. Честное слово. Будут проблемы с освоением Окамла. Если все-таки соберетесь учить, рекомендую постараться забыть как можно больше о своем опыте, иначе кроме раздражения ничего не получите. Потом уже можно будет вспомнить и сравнить :)
http://www.ocaml-tutorial.org/ — туториал специально для С/С++ программистов.


_>сейчас задачи связаны с разработкой под встраиваемые системы (QNX/ARM): протоколы обменов, сетевые интерфейсы, встраиваемые базы данных, GUI (touchscreen) и т.п.

По идее проблем быть не должно, в самом крайней случае FFI у окамла на случай общения с железом приличный.
Re[13]: C++ vs ???
От: reductor  
Дата: 03.12.05 21:50
Оценка: 4 (1) :))
Здравствуйте, EvilChild, Вы писали:

EC>Здравствуйте, reductor, Вы писали:


EC>>>А что скажешь о Nemerle?



R>>Я его раньше не видел

R>>Сейчас глянул — по-моему очень даже неплохо
R>>Не без маразмов, но неплохо
R>>Правда вот не знаю даже насколько он вообще будет полезен человеку, никогда не програмировавшему на ML и Lisp
R>>Там весь этот "синтаксический оверхед" вместе с какими-то "угодить всем" конструкциями могут заслонять собой то, что по-настоящему там мощно, но что необходимо просто прочувствовать в языках, которые более стройны в этом смысле.
EC>Т.е. как первый функциональный язык не рекомендуешь?

Нет. Тем более, что он и не функциональный язык как таковой.
Просто поддерживает некоторые идиомы.
Это метаязык. Как Common Lisp

R>>С С++, кстати, та же фигня — до сих пор очень мало народу понимает как по-настоящему можно использовать нормально те же шаблоны и иксепшены.

EC>Можешь привести краткую иллюстрацию или ссылку дать, раскрывающую эту мысль?
EC>А то за этой фразой слишком много может скрываться, чтобы я мог сделать какие-то осмысленнык выводы...

О нет. Можно я не буду этого делать?
Я просто не хочу открывать новый флейм на эту тему. Я уже тут пару раз сделал эту ошибку, потом пришлось отбиваться от жрецов культа
Re[21]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.12.05 12:24
Оценка: +3
Здравствуйте, reductor, Вы писали:

E>>Не преувеличивай, есть масса твоих сообщений, которые я даже не считаю возможным комментировать.


R>Тем не менее, тенденция есть. Никто другой пока что в подобном замечен не был. Так что делайте выводы.


<offtopic>
Форум окрытый, любой читатель может вмешаться в любую тему. Таковы правила.
И выводы мне делать не зачем. Если я перехожу какие-то нормы этики и правил, то модераторы возвращают все на свои места.
</offtopic>

R>Вопрос был в том, где С++ является медленнее, чем другие языки — я показал. Отметив непосредственно MLTon и O'Caml.


Читаем (Re[16]: C++ vs ???
Автор: reductor
Дата: 04.12.05
):

J>Хочу услышать: где язык С++ не такой быстрый, как мог бы (не знаю в сравнении с чем вы утверждали).

Везде, где возникает потребность для запуска профайлера.
Самый простейший пример из возможных: http://www.ffconsultancy.com/free/ray_tracer/languages.html

Заходим по ссылке, видим раздел Speed и читаем:

The fastest languages are Stalin-compiled Scheme and C++. OCaml and MLton-compiled SML are slightly slower.


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

R>При чем здесь вообще Scheme.


При том, что в указанной тобой статье Scheme был вторым из самых быстрых языков.

R>И самое главное — Проблемы с производительностью С++ — это фундаментальные проблемы с его семантикой. Вы, если так гордитесь своим знанием С++, должны их знать и не поднимать вопль каждый раз, когда на них кто-то указывает.


Вот про проблемы производительности связанные с семантикой хотелось бы услышать подробнее. И если не в виде такого же интересного рассказа про монады, то хотя бы в виде конкретных ссылок (раз уж этот способ тебе наиболее удобен).
Что касается моего знания C++, то я никогда не говорил, что я его знаю очень хорошо. Я говорил, что долго на нем программирую. Т.е. я знаю то, что использую, но использую я далеко не весь спектр возможностей С++. Опять же "13 years of C++ and still learning".

R>>>Никто тут про схему не говорил. Кому вообще придет в голову Scheme здесь рассматривать — это динамический язык, а сталин — это игрушка одного человека и некий proof-of-concept. По какому поводу и кому вы здесь возражаете?


E>>Возражаю по поводу:

E>>

E>>Он медленный не по сравнению с ассемблером. Он медленный по сравнению с более высокоуровневыми языками, но у которых лучше дизайн и нет всего этого легаси от Си.

E>>Re[8]: C++ vs ???
Автор: reductor
Дата: 02.12.05


R>А с какой стати вы по этому поводу возражаете?


А по поводу того, что если на каких-то тестах C++ проигрывает некоторым экзотическим языкам (типа OCaml или Clean), то это не значит, что он медленный. Максимум, что он медленнее чем OCaml или Clean, но не медленный вообще. Если же еще вспомнить про Java, VB, Smalltalk, Python, Ruby, Perl и пр., то C++ не просто быстрый язык, а очень быстрый язык.

R>>>Если вы не заметили, вся эта ветка была о другом.

R>>>И никаких проблем со средствами разработки у Окамла нет.

E>>Ok. Я сам не сторонник IDE, но если уж говорить про средства разработки, то покажи, пожалуйста, аналоги для OCaml таких вещей, как Visual Studio, Visual Assist, ReSharper, IDEA?


R>Еще раз. Здесь речь _не_о_том_

R>У него есть. Но я не буду даже называть их. Ищите сами в гугле. Там все в порядке.

В гугле все в порядке? Не сомневаюсь.

Названия (хотя бы), а лучше точные ссылки, на IDE для OCaml, пожалуйста.
В противном случае утверждение о том, что у OCaml нет проблем со средствами разработки остаются в разряде bla-bla-bla.

<...аналогичный по уровню доказательств фрагмент про библиотеки OCaml пропущен...>

R>Давайте не будем, ладно?

R>Идеальную совместимость не обеспечивает никто.

Java?
C#?
Да тот же C++.

R> Это нормальная и стандартная ситуация. И это хорошо, потому что 100% совместимость в ущерб качеству, это гораздо более губительно для больших и проектов и компаний и всего прочего.


Сильно сказано. Даже не знаю, как прокомментировать.

R>>>И кстати в случае с С++ и в случае с его компиляторами далеко не все так гладко. Одна изменение манглинга в gcc 3.0 чего стоило.


E>>Не видел никаких проблем с переносом исходного кода на C++ из gcc 2.95.* в gcc 3 или gcc 4. Так же, как в Visual C++ или с89. Проблемы были только с системно-зависимыми, не стандартными расширениями, вроде __declspec.


R>Вы смеетесь видимо.


Ничуть. Внимательно прочитай мои слова: "с переносом исходного кода на C++". К исходному коду манглинг не имеет никакого отношения.

R>Все, для себя я эту тему тоже закрываю, что у вас нет проблем с совместимостью, рассказывайте в детском саду на утреннике.


Боюсь в детском садике не поймут, раз даже такой специалист, как reductor не понимает.
Приведи, пожалуйста примеры, где исходный код на C++ успешно компилировался на gcc 2.95.*, но не компилировался в gcc 3?
И чтобы проблемы имели отношение именно к языку C++, а не к библиотекам.

Подозреваю, что этот вопрос, как и другие конкретные вопросы от меня и Cyberax-a останется без ответа. Есть у тебя такая привычка -- не отвечать на конкретные вопросы или отделываться ничего не значащими общими фразами.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: C++ vs ???
От: ie Россия http://ziez.blogspot.com/
Дата: 05.12.05 05:52
Оценка: :)))
Здравствуйте, c-smile, Вы писали:

CS>В простоте Java есть свои плюсы.


А в простоте плюсов нет своей Java
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Re[39]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.12.05 09:15
Оценка: :)))
Здравствуйте, Глеб Алексеев, Вы писали:

V>>гораздо более слабые языки (с т.з. выразительности)

ГА>Разрешите поинтересоваться, о какой выразительности идет речь? Я вот выбрал ОКамл именно из-за выразительности, верифицируемость пока на втором плане, может быть зря?

Конечно зря! Ruby -- вот правильный выбор. Ну или Oberon. В самом крайнем случае -- C#.

... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[48]: C++ vs ???
От: reductor  
Дата: 14.12.05 19:35
Оценка: :)))
Здравствуйте, VladD2, Вы писали:

[..наезды поскипаны..]

Если кто-то не заметил, то это была не quicksort-функция, а mergesort

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

Личные наезды оставьте для вашего окружения.

Всего хорошего.
Re[31]: C++ vs ???
От: z00n  
Дата: 07.12.05 04:42
Оценка: 52 (2)
Здравствуйте, gear nuke, Вы писали:


R>>прежде чем вы начнете здесь возражать, давайте определимся точнее — в разряд чего вы отнесете фразу

R>>"фортран быстрее, чем С++"
R>>вы согласны с этим утверждением, не согласны или что-то третье?

GN>Не знаю. На фортране только лабы делал когда-то. Думаю, не быстрее. С++ — это же ассемблер


Про Fortran vs C++ почитать можно у Veldhuizen'а (Blitz++).
http://osl.iu.edu/~tveldhui/papers/iscope97/index.html ( http://osl.iu.edu/~tveldhui/papers/iscope97.ps )
http://osl.iu.edu/~tveldhui/papers/DrDobbs2/drdobbs2.html

или тут с его участием:
http://www.oonumerics.org/oon/oon-list/archive/index.html#314
Re[34]: C++ vs ???
От: gear nuke  
Дата: 07.12.05 15:47
Оценка: 22 (2)
Здравствуйте, reductor, Вы писали:

R>А не надо вообще гонки здесь устраивать.


Никто Вас за язык не тянул давать голословные утверждения, что С++ медленный. Я всего лишь это опроверг. Никаких претензий к OCaml у меня нет.

R>Обсуждать же результаты каких-то тестов на непонятной системе с непонятными условиями и прочим, избавьте. Это развлечения для подростков — выяснять у кого быстрее идет новая "гама".


Это Вы про авторов оригинальных бенчмарков — я согласен. Их тесты не имеют достаточно информации для воспроизведения, в отличие от моих.

R>Вот обсуждения представления данных в окамле уже ближе к теме.

R>Можно обсудить как можно компилировать это эффективно на интересующих архитектурах.

Вы пишете компилятор OCaml?

R>В случае с окамлом для анализа доступно больше. В нем мы можем определить имеет ли функция побочный эффект или нет, например.


Стандарт С++ чётко оговаривает какие функции имеют наблюдаемый эффект, а какие нет. Остаётся лишь построить дерево вызовов. Сейчас control flow анализируется не толко для этого.

R>У него гораздо более мощная и консистентная система типов, которая дает нам гораздо больше информации о данных, с которыми работает программа. Нет никакого RTTI и адресной арифметики, никакого кастинга и нельзя тем более закастить int в указатель.


А чем оптимизатору мешает адресная арифметика и кастинг? RTTI можно использовать по желанию.

R>И так далее.

R>Если вы когда-нибудь писали свой компилятор, вы не будете спорить, что это все важные вещи.

Да, мне важно, что бы компилятор поддерживал такие фичи.

R>>>Но как бы то ни было, представьте, что у вас система из 2 000 000 (двух миллионов) строк на С++, которая моделирует погоду или рулит данными на какой-нибудь бирже и как вы каждый день в течение нескольких лет приходите на работу, чтобы переписать calling conventions у очередных 10 функций и вычистить оттуда всю адресную арифметику и прочую гадость.


GN>>Да зачем же calling conventions переписывать? Это всё делает либо один ключик, либо компилятор автоматически при whole program optimization. Про это никто никогда не думает, пока не потребуется оптимизировать десяток каких-то жалких строк. Да и зря Вы к стеку цепляетесь — на том же Itanium всё в регистрах передаётся.


R>Ну как зачем. А что делать с 2000 функций, которые произвольно шуруют в памяти и просто так их как fastcall не откомпилишь?


Читайте выделенное. Никто не мешает это делать безо всякого рефакторинга.

R>а что про Itanium — это тоже замечательная тема о языке, который ведет себя по-разному на разных архитектурах.

R>Или думаете перенос кода внутри одной компании с альфы на спарк — это такая уж редкость?

Я думаю только, что на Итаниум С++ по умолчанию передаёт параметры в регистрах, как и на других RISC. На x86 текущая традиция берёт своё начало ещё от i8080 и Зилога.

R>ООО. Так вот при таком количестве кода и наступает самое интересное. Тут и GC начинает вдруг становиться незаменимым и модульность языка становится ой как заметной и то что все вызовы без разбора через регистры идут тоже приятности не убавляет.


Про регистры не надо больше. Что до количаства строчек — виндойс имеет их 10 миллионов. На С, немного С++. Что там у *них не знаю, но думаю не меньше.

Кроме того, меня совершенно не интересует это мифическое количество строчек. Если мне будут платить за строчки, я их напишу в 5 раз больше, чем можно — ещё в школе на сочинениях научился. И сейчас вот пишу — тренируюсь. Да и генерацию исходников никто не отменял. (надо уже думать над ботом для форума )

Я считаю, что написание непосредственно кода — не более 20% от всей работы.

Если бы не было обвинения С++ в тормознутости, совсем бы писать сюда не стал.

R>Ну это все бессмысленно. производительность скомпилированного кода — это не только кто быстрее 2+2 сложит.


Я пока не вижу каких-либо других причин для более высокой производительности. Всё что видел — признак наоборот, другого. Ну это ничего страшного, NET я считаю глупо обвинять, что он проигрывает в скорости. И Perl тоже. Всему своё место.

R>>>Ну и разумеется, разрыв увеличивается на RISC-архитектурах с большим количеством регистров и большим кешем.


GN>>Я про кеш с удовольствием бы послушал. На С++, с его ручным управлением памяти, можно этот кеш даже использовать как нужно (пример. после начальной теории на asm приводится код на С, который это делает). На OCaml такое возможно?


R>Возможно что — писать код, оптимизированный для AMD? Слава богу, нет.


Понятно, про разрыв и кеш Вы случайно не к месту сказали.

R>Вам, кстати, не кажется, что это, на секунду, задача анализатора, оптимизатора и векторизатора?


Конечно компилятора. Я думаю, такое делает всего несколько компиляторов в мире .

R>Последний раз, когда я пытался подобные фокусы на c/ppc вытворять (очень давно. даже не вспомню что делал), я лишь получил по мордам _уменьшением_ производительности.


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

R>Но вообще, убедить компилятор окамла всегда держать поблизости значение какого-нибудь указателя — это запросто.


То есть, можно в ручную хачить? Значит он всё таки не такой сверхвысокоуровневый, как пугают

R>Ну и вообще, если самому сесть писать компилятор окамла, то можно много чего


GN>>Большее количество регистров — поможет С++. Пока что компилятор OCaml использует очень ограниченное их количество (избитый пример с рейтресером использует регистр EBP всего 4 раза).


R>Ну так сделайте окамлу более продвинутый кодогенератор, в чем проблема-то?


Дык социализм вроде как признали неэффективной отраслью экономики. Да дело и не в этом, думаю, что даже на ассемблеры спрос выше, даже забесплатно

R>>>Тем не менее, все численные задачи у физиков-теоретиков до сих пор пишутся на фортране.

GN>>Никто не хочет выкидывать в карзину наработки?

R>Им задачи нужно решать, а не наработки сохранять.

R>Потом, наработки можно и из кода на другом языке вызывать.

Вот "вызывать" — это как раз долго. Потому квиксорт в плюсах обгоняет С. Нужно именно inline.

R>>>И вот, например, некоторые бенчмарки: http://www.oonumerics.org/blitz/benchmarks/


Как-то в одни ворота, бенчмарками игра идёт. Почему мои называются цирком

GN>>

The below table shows median performance of Blitz++ on 21 loop kernels, relative to the best native Fortran compiler with typical optimization switches (-O3, -Ofast)


GN>>Вполне на уровне результаты для 90го года — в среднем 90% от лучшего компилятора.


R>А ведь здесь С++ оптимизировали, да по полной. Что же мешает обогнать древний фортран?

R>С++ же к железу ближе.

Приблизились вплотную к порогу автоматической оптимизации.

R>Этот код с ошибками откомпилировался без единого warning'a в gcc и вывел именно второй параметр.

R>Так что не нужно...

Ошибки в логике компиляторы ещё не скоро научатся искать. Можно и такое откомпилировать:
*(int*)0 = 0;


R>>>И это то, что создает проблемы для компилятора и еще какие.


GN>>Уже устал читать это. Объяснений, как я понял, не будет


R>А что мне вам объяснять? Миллион причин и вариантов.


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

R>И куча сайтов и книг по компиляции.


Другонбук что ли? Это хорошо, но уже старо.

R>>>Я не пониаю почему я вообще должен отвечать на такие вопросы.


GN>>Вы ничего не должны.

GN>>Нет аргументов — вполне возможно, утверждение ложно.

R>Аргументов в пользу чего?


Вы так долго уходили от вопрса, что я его уже успел забыть
Началось с причин невозможности эффективно компилировать С++ —

R>>>>>Я таковыми считаю свойства исходного кода.
R>>>>>Это касается и игры со стеком и всего прочего.
R>>

R>>void test(int a, ...) {
R>>        int* x = &a;
R>>        x++;
R>>        cout << *x;
R>>}

R>>int main() {
R>>        test(5, 6);
R>>        return 0;
R>>}

R>что напечатает эта программа и почему?

GN>В некоторых случаях напечатает 2й параметр, переданный в test. Потому что в ISO/IEC 14882 ничего не говориться про стек.

Вот именно.
Это то, что я называю непредсказуемостью.
И это то, что создает проблемы для компилятора и еще какие.

GN>>>И какие проблемы это даёт для компилятора?
R>>Очень смешно.
GN>Это не смешно — постоянно уходить от ответа.

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


А я не пойму, как невалидная программа может служить примером помехи оптимизатору.

GN>>>>представление целых чисел в OCaml мешает компилятору.

R>>>Представление чисел может представлять интерес для того, кто будет потом с этими числами работать.
GN>>Обратите внимание на выделенное.

R>Да чем мешает-то. Как будто он обязан всегда оставлять это представление.

R>Это представление — оно для GC и для внешнего кода, а не для компилятора.

Это не важно. Арифметика будет проигрывать аналогу в С++ всегда за счёт оверхеда на сдвиги (деление/умножение на 2).

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

R>по этой причине и с GC у С++ проблемы.

У С++ нет проблем с GC кроме его отсутствия в языке. Там так же нет и функций ввода-вывода и много ещё чего, что делается #include

R>Думаете, его скорость нуждается в защите?


Да, нуждается — от необоснованных нападок. И другие вещи так же заслуживают, что бы их не называли порнографией. Этот язык можно как минимум уважать — его влияние на индустрию в целом не может видеть только слепой.

R>Лучше бы послали патч к кодогенератору окамла разработчикам.

R>Благо у окамла ничего не стоит заменить там что-нибудь.

Дык нет у OCaml кодогенератора как такового — генерит asm листинг. Может, сложно написать на нём самом кодер для x86 инструкций? Это наверняка сложнее, чем для RISC. Биты там всякие и прочая мелкая дребедень требующая всякой поинтерной арифметики.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[22]: ocamlopt и MSVC - кто быстрее?
От: Cyberax Марс  
Дата: 04.12.05 17:28
Оценка: 19 (2)
gear nuke wrote:

> Поэтому провёл сравнение сам.

> Использованы исходники отсюда
> <http://www.ffconsultancy.com/free/ray_tracer/comparison.html&gt;

А теперь слегка подправим программу на С++. Вместо порнографии с
самопальным вектором используем Blitz++ (попутно исправив пару ошибок).
Еще добавил версию функции unitise, не создающей лишних временных
переменных. Текст лежит здесь: http://scb.udsu.ru/~cyberax/ray.cpp

Результаты:

cyberax@scblinux:~/tests$ time ./ray >img.pgm

real 0m52.500s
user 0m52.023s
sys 0m0.072s

cyberax@scblinux:~/tests$ time ./ray2 > img2.pgm

real 0m39.509s
user 0m39.326s
sys 0m0.024s

Имеем улучшение в 25%, компилировалось: "gcc -O3 -ffast-math
-fomit-frame-pointer ray.cpp"

Для сравнения, на этой же машине:

cyberax@scblinux:~/tests$ ocamlopt -inline 100 -ffast-math ray.ml -o ray
cyberax@scblinux:~/tests$ time ./ray > img.pgm

real 0m48.036s
user 0m47.551s
sys 0m0.140s


--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[2]: C++ vs ???
От: zip_ Россия  
Дата: 30.11.05 11:35
Оценка: 15 (2)
E>А они вообще есть для QNX/ARM?

ocaml: если использовать VM, то никаких проблем. ядро написано на С, компилируется без проблем, проверено. выполняется (байт-)код, полученный в т.ч. под виндой (очень удобно). есть также и native компилятор для ARM, говорят работает под QNX6, но сам не пробовал.

D: я так понял можно использовать gcc-frontend-компилятор везде, где есть gcc. под QNX6 компилятор именно gcc
Re[28]: C++ vs ???
От: reductor  
Дата: 13.12.05 01:38
Оценка: 14 (1) :)
Здравствуйте, VladD2, Вы писали:


VD>Алгоритм денег стоит. А результат можно увидить откомплировав это дело одним из С++-ных компиляторов. Не помню уже кто, но кто-то эту оптимизацию делал.


R>>Алгоритм — вперед. Лирику — после.


VD>Ты еще не привел ни одного аргумента которы после проверки не оказался бы мягко говоря натянуты, так что не стоит уж так сильно требовать их от других. Когда они есть их тебе предявляют.


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

Поясню почему я столь настойчив — у меня есть все основания считать, что такого алгоритма не существует и не может существовать.
Нет способа определить общерекурсивность той или иной функции.

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


VD>А где я говорил о любой?


А разговор о только хвостовой смысла не имеет. Любая хвостовая рекурсия заменяется циклом и наоборот и ни о каком выигрыше здесь ни с одной ни с другой стороны речи идти не может.
Re[22]: C++ vs ???
От: reductor  
Дата: 11.12.05 22:56
Оценка: 12 (2)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, reductor, Вы писали:


R>>Переписать хвостовою рекурсию в цикл — это вообще за оптимизацию не считается.


VD>Да? А мужики то и не знали. А как же тогда назвать изменение кода повышающее его быстродействие?


Какое быстродействие. для этого а) не нужно никакого анализа. б) это прописано в _стандартах_ некоторых языков.
как можно _оптимизацией_ называть то, что входит в стандарт?

в случае со scheme и haskell, например, это "уменьшение быстродействия" приведет к неработоспособному коду
вот и все.

R>>ну и в случае со стеком и регистрами в случае с окамлом — это не оптимизация вообще. мы заранее знаем, что это ничего не сломает.


VD>Если заранее извесно, что оптимизация что-то сломает, то это уже не оптимизация, а какое-то вредительство. Любая оптимизация делается в рассчете на то, что она не изменит результат вычисления.


если мы делаем dead code elimination, loop unrolling и прочее — мы должны уметь _доказать_, что это не изменит результат вычислений.
то есть мы должны сделать анализ и сопоставив его и спецификацию язяка доказать, что это ни на что не повляиет.
а то так можно назвать оптимизацией сам факт компиляции вместо интерпретации кода на месте — тоже ведь повышаем быстродействие.

R>>сложная оптимизация — это обширный статанализ, которым компилятор имени ксавье лероя явно не страдает.


VD>Анализ — это анализ. К оптимизации он имеет отдаленное отношение. Что же до оптимизаций, то самой эффективной оптимизацией по сегодняшний день остается банальная подстановка тела метода вместо его вызова. Учитывая же Так что для ФЯ рекурсия заменяет циклы, ее устранение это не просто оптимизация, а одна из самых полезных оптимизаций. И сравнивать ее результаты с реальным рекурсивным вызовом не очень то разумно.


инлайнинг — тоже требует анализа того, что это сделать можно. потому что не каждая функция может быть заинлайнена.
потому у окамла и плохо с этим, кстати.
Re[31]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.05 18:53
Оценка: 8 (2)
Здравствуйте, reductor, Вы писали:

R>Описание чего, простите _я_ должен дать?


Своим утверждениям.

VD>>Что до алгоритма инлайнинга, то это нехилый алгоритм и так вот тебе его никто не покажет. Ну, а как это делать в принципе ты и сам должен поянть. Вызовы заменяются на циклы и goto. Тело копируется некоторое количество раз, чтобы переход влиял по меньше и т.п.


R>Давайте не будем сейчас про секретные ЦРУшные алгоритмы. Это из области ЦРУшного числа пи, которое равно ровно трем.


А кто говорит о сикретности? Это обемистые коммерческие алгоритмы. Только и всего. "Куча кода", понимаешь?

Вобщем, вот тебе код который будучи скомпилированным на VC8 производит инлайнинг рекурсивной функции:
#include "stdafx.h"

#pragma inline_recursion(on)
#pragma inline_depth(2)

__forceinline int __fastcall factorial (int f)
{
  return f <= 1 ? 1 : f*factorial(f-1);
}

void Print(int i)
{
    printf("%d\n", i);
}

__declspec(noinline) void Test()
{
    Print(factorial(7));
}

void main()
{
    __asm int 3;
    Test();
}

Резульата получаетс следующим:
__forceinline int __fastcall factorial (int f)
{
00401000  push        ecx  
  return f <= 1 ? 1 : f*factorial(f-1);
00401001  cmp         ecx,1 
00401004  mov         dword ptr [esp],ecx 
00401007  jg          factorial+10h (401010h) 
00401009  mov         eax,1 
}
0040100E  pop         ecx  
0040100F  ret              
00401010  push        ebp  
  return f <= 1 ? 1 : f*factorial(f-1);
00401011  lea         ebp,[ecx-1] 
00401014  cmp         ebp,1 
00401017  jg          factorial+24h (401024h) 
00401019  mov         eax,1 
0040101E  imul        eax,ecx 
00401021  pop         ebp  
}
00401022  pop         ecx  
00401023  ret              
  return f <= 1 ? 1 : f*factorial(f-1);
00401024  push        ebx  
00401025  lea         ebx,[ebp-1] 
00401028  cmp         ebx,1 
0040102B  jg          factorial+3Ch (40103Ch) 
0040102D  mov         eax,1 
00401032  imul        eax,ebp 
00401035  pop         ebx  
00401036  imul        eax,ecx 
00401039  pop         ebp  
}
0040103A  pop         ecx  
0040103B  ret              
  return f <= 1 ? 1 : f*factorial(f-1);
0040103C  push        edi  
0040103D  lea         edi,[ebx-1] 
00401040  cmp         edi,1 
00401043  jg          factorial+58h (401058h) 
00401045  mov         eax,1 
0040104A  imul        eax,ebx 
0040104D  imul        eax,ebp 
00401050  pop         edi  
00401051  imul        eax,ecx 
00401054  pop         ebx  
00401055  pop         ebp  
}
00401056  pop         ecx  
00401057  ret              
  return f <= 1 ? 1 : f*factorial(f-1);
00401058  push        esi  
00401059  lea         esi,[edi-1] 
0040105C  cmp         esi,1 
0040105F  jg          factorial+78h (401078h) 
00401061  mov         eax,1 
00401066  imul        eax,edi 
00401069  imul        eax,ebx 
0040106C  imul        eax,ebp 
0040106F  pop         esi  
00401070  imul        eax,ecx 
00401073  pop         edi  
00401074  pop         ebx  
00401075  pop         ebp  
}
00401076  pop         ecx  
00401077  ret              
  return f <= 1 ? 1 : f*factorial(f-1);
00401078  lea         ecx,[esi-1] 
0040107B  call        factorial (401000h) 
00401080  imul        eax,esi 
00401083  imul        eax,edi 
00401086  mov         ecx,dword ptr [esp+10h] 
0040108A  imul        eax,ebx 
0040108D  imul        eax,ebp 
00401090  pop         esi  
00401091  imul        eax,ecx 
00401094  pop         edi  
00401095  pop         ebx  
00401096  pop         ebp  
}
00401097  pop         ecx  
00401098  ret

Причем, если задать inline_depth() в 5 и более, то компилятор вообще вычисляет значение функции во время компиляции и подставляет в код результат.

R>>>Поясню почему я столь настойчив — у меня есть все основания считать, что такого алгоритма не существует и не может существовать.


VD>>И есть "математически строгое описание" этого основания?


R>Да. Теория автоматов на этом настаивает.


Теория автоматов "настаивается" на том, что ты во что-то там поверить не можешь? Ну-ну.

R>>>Нет способа определить общерекурсивность той или иной функции.

VD>>Что значит "общерекурсивность"?

R>Ого.

R>первая ссылка в яндексе на поиск этого слова: http://ric.uni-altai.ru/Fundamental/teor-alg/upr15/upr15-2.htm

Там термин "общерекурсивность" отсуствует как класс.

R>Кстати я прекращаю обсуждение с вами этой темы.


Да, это понятно. Это такой стиль общения.

R>И что? Им это не нужно и приносит больше проблем, чем пользы (со stacktrace например)


Проблем это принести не может. А что до ненужно, согласен. Вот только ты лично стал использовать эту особенность для доказательства превосходства в скорости компилятора Окамла.

R>я привел сравнение?!

R>Я все понимаю, но вы меня с кем-то путаете.

А, ну, да. Общее помешательство.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: C++ vs ???
От: z00n  
Дата: 05.12.05 23:38
Оценка: 4 (1) +1
Здравствуйте, zip_, Вы писали:

_>emacs у меня не пошел, как и vim. ИМХО пользоваться ими под win — моветон (почему я сижу под win, но пишу под *nix — это отдельный вопрос, не хочу это обсуждать в этой теме). emacs продукт для фанатов, к тому же знающих lisp, у остальных просто не будет стольно времени для его настройки под себя.


emacs или vim — это такая вещь, что потратил несколько дней — и забыл о проблемах на всю жизнь. Тем более, после того, как в MSVS 2005 добавили emacs-раскладку, навыки еще и не пропадут
Если надумаешь еще раз попробовать, то emacs под win нужно брать не на gnu, а CVSшный у Боргмана: http://ourcomments.org/Emacs/DL/EmacsW32/, там есть несколько полезных прибамбасов (типа цветной печати в html), поддержка графики и пр. C кодировками проблем точно нет.
Lisp для настройки не нужен, нужно немного здравого смысла + подсмотреть у тех, кто много и продуктивно на нем работает, типа Абрахамса из boost: http://boost-consulting.com/public/.emacs .
Re[26]: Жульничество?
От: Gaperton http://gaperton.livejournal.com
Дата: 15.12.05 09:26
Оценка: 3 (1) +1
Здравствуйте, gear nuke, Вы писали:

GN>Тесты делались заинтересоваными людьми.


С чего вы взяли? Люди взяли самый популярный компилятор под Linux, и им было совершненно неинтересно, кто победит в этих тестах. А победил OCaml. Какая реклама получилась!

GN>Мне было совершенно неинтересно, кто победит в моих тестах. Я не фанат С++, но выбрал этот язык исходя из практических его качеств, в которых скорость для меня не последнее место занимает. Победил бы OCaml — кинулся бы его изучать. Какая реклама была! Жалко, что с основами маркетинга не знаком рекламирующий, такое только отталкивает


Действительно — если для вас разница в производительности в 30% на взятой с потолка задаче и компиляторах является поводом бросаться или не бросаться изучать сам язык, то это уж точно победа интеллекта над разумом. Основой маркетинга в данном случае является то, что ни мне, ни reductorу совершенно не интересно заставлять вас учить OCaml. Нам совершенно все равно, броситесь вы его учить, или нет. Воспринимаете вы наши слова как рекламу, или они вас отталкивают. Поймите, все равно, уличных продавцов и торговых агентов здесь нет.

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


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

Суть состоит в том, что в теории ассемблер будет быстрее вашего С++. На практике, однако, получается почему-то наоборот — а фокус в том, что пока программист на ассемблере будет расставлять оптимальным образом регистры, программист на С++ успеет попробовать несколько алгоритмических оптимизаций, которые всегда дают гораздо больший эффект. Т.е. программа, написанная за то же время, будет быстрее.

OCaml на довольно широком классе задач, связанных с обработкой сложных структур данных, дает выигрышь по сравнению с С++ по срокам разработки. При этом, кодогенератор держит паритет с gcc. Та же ситуация — в реальной жизни на длинной и сложной программе у программиста на OCaml останется больше времени на алгоритмические оптимизации, и вас не спасет даже IC++. Так что в реальном проекте при ограниченных сроках OCaml может окажется быстрее. Об этом вам и пытался сказать reductor — тезис известный, на самом деле.

Это объяснение я не для вас пишу — для тех, кому интересно разобраться, что имел в виду reductor. Потому что вам окамл противопоказан — пишите на С++, это лучший и самый быстрый в мире язык. Ваша мысль, что кто-то вам что-то рекламирует — ошибка.
Re[3]: C++ vs ???
От: c-smile Канада http://terrainformatica.com
Дата: 02.12.05 19:31
Оценка: 1 (1) +1
Здравствуйте, alexeiz, Вы писали:

A>Здравствуйте, c-smile, Вы писали:


CS>>D как язык для UI лучше чем C++ скажем в разы. Это я со всей отвественностью

CS>>могу сказать.

A>А причины не трудно описать? По пунктам и конкретно. А то не очень-то верится.


(this caffe has no russian keyboard installed yet, so msg is in english)

First of all all these is based on my projects:
D — Harmonia framework
Java — J-SMILE and others.
C++ — HTMLayout and other projects.

1) GC. GC helps a lot managing DOM/windows/elements structure. This is huge in fact. Simplifies significantly code. Makes it clean and compact thus more robust.
2) Closures/Delegates. This in fact is not so critical as I am using sinking/bubbling. Let's say it is nice to have feature — allows to simplify code and make it more understandable an regular.
3) Properties (getters/setters). Ideally reduces twice methods you need to remember. Again, it is about simplification.
4) There are more features in D helping UI development e.g. mixins and templates parametrized by character strings, etc., I'll skip them here.

Use of Java for massive UI development has one and big benefit — isolation between logic and system low level and critical functions. This is sort of critical for development in teams.
And again Java has good set of design tools. Intellisense is a real tool increasing productivity.

(I am not speaking here about .NET because of intitial requirement to use C and platforms)
Re[28]: C++ vs ???
От: gear nuke  
Дата: 07.12.05 01:18
Оценка: 1 (1) +1
Здравствуйте, reductor, Вы писали:

R>>>Речь шла о свойствах окамла. Вы почему-то таковыми считаете результирующий код, который генерирует его компилятор под win/ia32


GN>>Причина "почему-то" очень проста:

GN>>

Просто <b>откомпилируйте</b> что-нибудь простое на окамле и си++ — увидите в чем разница


R>Видимо, мне пора прекращать использовать общие фразы, а в каждом сообщении прикладывать объяснение на три листа что я имел в виду.

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

Да, наверное.
Я так и не понял, что же Вы хотите сказать этой фразой выше.

То, что я ранее неверно понял выделенное слово?
Дык это можно сказать без трёх листов, прямо — буквально двумя словами.

R>>>Я таковыми считаю свойства исходного кода.

R>>>Это касается и игры со стеком и всего прочего.

GN>>А разве в исходном коде на том же С++ как-то фигурирует стек? Это же не Forth .


R>В исходном коде С++ фигурирует адресная арифметика.


(Замечание про стек Вы уже никак обосновывать не хотите )

И какие проблемы это даёт для компилятора?

Например:
Способ представления целых чисел в OCaml (x * 2 + 1) делает невозможным производить арифметику одной машинной командой. В случае со сложением, они выкручиваются за счёт LEA (хотя это потребует 2й команды, для проверки результата на 0, с переполнением ещё хуже). В остальных случаях всё очень плохо. Как будем вычислять X / Y ?

R>В явном виде или нет, но в случае с С++ нельзхя быть уверенным ни в чем.


Я уверен. Почему я заблуждаюсь?


P.S. У Вас хорошо получается писать про монады. И плохо — что С++ тормоз. Я для себя давно решил, лучше делать то, что получается хорошо.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[34]: C++ vs ???
От: vdimas Россия  
Дата: 08.12.05 09:16
Оценка: 1 (1) :)
Здравствуйте, reductor, Вы писали:

[...]

Не обязательно ИМХО пространно отвечать на подобные замечания. От себя добавлю — с удовольствием читаю посты reductora, особенно с удовольствием читал первые посты. К сожалению, налицо низкая "помехоусточивость". Стоит кому-нибудь пытаться увести беседу в сторону, как reductor бросается акцентами на эти факты вместо того, чтобы просто скипнуть эти абзацы в ответах. В последних постах за помехами трудно уловить единицы полезной информации.

Мне откровенно жаль вашего времени, коллеги

------------
с анонимностью все понятно, лично я для себя выбрал правило, отвечая кому-либо позволять себе только то, что позволил бы себе в очной беседе (за кружечкой-другой пива )
Re[25]: Жульничество?
От: Павел Кузнецов  
Дата: 15.12.05 05:27
Оценка: 1 (1) :)
Gaperton,

> Ваша подтасовка в том, что вы подменили в утверждении reductor-а "C++" на MSVC. <...> Таки в чем подтасовка в статье?


Ну, в соответствии с продемонстрированным ходом рассуждений, вероятно, в подмене "C++" на "GCC".
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[31]: Жульничество?
От: Cyberax Марс  
Дата: 15.12.05 13:10
Оценка: 1 (1) +1
z00n wrote:
> C>А вот тут полностью не согласен. Производительность ОЧЕНЬ важна для
> C>многих настольных приложений, игр. Ну и для самой ОС.
> Для игр по большому счету — нет. ~80% кода современных игр написаны на
> Lua (и еще ~10% на всяких Python, Javascript etc.) — а как у Луа со
> скоростью, можете там же взглянуть
Ну да. Яркий пример — Civilization IV. Большая часть написана на Питоне
и жрет 2Гб памяти.

В современных играх на Lua пишут триггеры, запускающие какие-то
действия. Их получается по объему много, так как приходится много писать
для каждого уровня игры. Но вот по времени они занимают очень небольшую
часть.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[36]: C++ vs ???
От: Дарней Россия  
Дата: 16.12.05 08:20
Оценка: 1 (1) :)
Здравствуйте, vdimas, Вы писали:

V>С++ — это универсальный язык, помимо прочего. Мне даже трудно определиться, что лучше: владение универсальным инструментом, или владение множеством узконаправленных, но идеально подходящих для конкретных случаев инструментов.


V>Достаточно много бенефитов у обоих подходов. Но у первого подхода все бенефиты скорее организационно-административного плана, как с технической т.з., так и с т.з. управления ресурсами (людскими)


у первого подхода также имеется такой бенефит — программиста проще заставить разработать свой велосипед, чем изучить уже разработанный
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[7]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.12.05 11:48
Оценка: +1 :)
Здравствуйте, reductor, Вы писали:

A>>А чем C++ не язык высокого уровня?


R>Ничем.

R>Это ассемблер.
R>Который к тому же медленный и многословный.

Медленный ассемблер.

Нда. Это сильно сказано. Нужно будет записать, чтобы не забыть.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[27]: ocamlopt и MSVC - кто быстрее?
От: reductor  
Дата: 04.12.05 21:39
Оценка: :))
Здравствуйте, reductor, Вы писали:


R>На что же я вам должен отвечать?

R>И если можно поименно этих многих.

Думаю, трех человек достаточно.
Кто-нибудь может сказать как здесь удалить аккаунт вместе со всеми своими сообщениями?

А то я явно здесь засиделся.
Re[28]: ocamlopt и MSVC - кто быстрее?
От: reductor  
Дата: 05.12.05 12:59
Оценка: :))
Здравствуйте, Cyberax, Вы писали:

C>reductor wrote:


>> C>А мне ничего менять не надо — Blitz++ поддерживает векторные

>> процессоры.
>> C>Для этого надо просто поставить соответствующую реализацию.
>> Вы к окамлу тоже прикручивали векторную библиотеку?
>> Не забыли, перед тем как тестировать?

C>Что это с вами?


C>Вы мне начали угрожать тестами на G4 (где, вероятно, OCaml будет

C>использовать векторный сопроцессор AltiVec). Я указал на то, что в
C>Blitz++ тоже есть поддержка MMX/SSE/AltiVec и еще нескольких типов
C>векторных процессоров.

Угрожать? вы в своем уме? тестами на ppc? Как будто вы — это microsoft windows и для вас это равнозначно физической расправе.
Я намекнул, что тестировать не язык, я библиотеку и другой язык — это идиотская затея, не более того.
Почему вы считаете нормальным заменить в одном из вариантов реализацию, оставив в другом как было и выдавать это за преимущество, для меня остается загадкой.
Видимо, такой стиль мышления.

C>Кстати, для С++ есть реализация векторных классов, которая использует GPU.


Сколько угодно, я уже предложил выписать грамоту с печатью, что С++ — это верх человеческой мысли и достижений народного хозяйства.
Re[29]: ocamlopt и MSVC - кто быстрее?
От: Cyberax Марс  
Дата: 05.12.05 13:12
Оценка: +2
reductor wrote:

> Я намекнул, что тестировать не язык, я библиотеку и другой язык — это

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

Я мог бы просто взять исходники Blitz'а и сделать cut&paste нужных
кусков кода в ray.cpp, ничего магического в них нет (просто достаточно
громоздко будет). Что бы это изменило? А так я заодно показал один из
плюсов языка С++ — большое количество готовых библиотек.

Я абсолютно не против использования любых OCaml'овых библиотек в этом
тесте.

Тот код на С++, который есть для этого теста — написан безграмотно. Так
что еще удивительно, что он почти равен в скорости OCaml'овому.

Кстати, я еще до 28 секунд время уменьшил с помощью PGO и изничтожения
виртуальности. Еще можно оптимизировать возврат объекта Hit по значению,
но это уже будут только секунды времени.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[23]: C++ vs ???
От: reductor  
Дата: 06.12.05 22:27
Оценка: :))
Здравствуйте, gear nuke, Вы писали:

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


Все понятно, спасибо за ваше мнение и артистизм.
Что в функциональных языках нельзя распараллеливать выполнение — это очень ценное замечание и архиценное в силу своей редкости мнение.
Re[29]: C++ vs ???
От: reductor  
Дата: 07.12.05 02:14
Оценка: :))
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, reductor, Вы писали:


R>>>>Речь шла о свойствах окамла. Вы почему-то таковыми считаете результирующий код, который генерирует его компилятор под win/ia32


GN>>>Причина "почему-то" очень проста:

GN>>>

Просто <b>откомпилируйте</b> что-нибудь простое на окамле и си++ — увидите в чем разница


R>>Видимо, мне пора прекращать использовать общие фразы, а в каждом сообщении прикладывать объяснение на три листа что я имел в виду.

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

GN>Да, наверное.

GN>Я так и не понял, что же Вы хотите сказать этой фразой выше. :???:

GN>То, что я ранее неверно понял выделенное слово?

GN>Дык это можно сказать без трёх листов, прямо — буквально двумя словами.

Вы поняли то, что хотели
я же не писал, что откомпилируйте рейтрейсер или откомпилируйте какой-то еще код
не говорил, что сравните производительностью любого кода с любым кодом любого компилятора
не говорил про платформы и ос
не так ли?
имелась в виду некоторая абстракция — окамл можно откомпилировать красивее и быстрее, чем с/с++ код.
и в некоторых случаях это уже происходит, в других — нет. устраивать цирк с флотами, да еще на х86 — это неадекват. уж извините.

прежде чем вы начнете здесь возражать, давайте определимся точнее — в разряд чего вы отнесете фразу
"фортран быстрее, чем С++"
вы согласны с этим утверждением, не согласны или что-то третье?

R>>>>Я таковыми считаю свойства исходного кода.

R>>>>Это касается и игры со стеком и всего прочего.

GN>>>А разве в исходном коде на том же С++ как-то фигурирует стек? Это же не Forth :).


R>>В исходном коде С++ фигурирует адресная арифметика.


GN>(Замечание про стек Вы уже никак обосновывать не хотите :-\)


void test(int a, ...) {
        int* x = &a;
        x++;
        cout << *x;
}

int main() {
        test(5, 6);
        return 0;
}


что напечатает эта программа и почему?

GN>И какие проблемы это даёт для компилятора?


Очень смешно.


GN>Например:

GN>Способ представления целых чисел в OCaml (x * 2 + 1) делает невозможным производить арифметику одной машинной командой. В случае со сложением, они выкручиваются за счёт LEA (хотя это потребует 2й команды, для проверки результата на 0, с переполнением ещё хуже). В остальных случаях всё очень плохо. Как будем вычислять X / Y ?

Вы узнать хотите или что? :)


R>>В явном виде или нет, но в случае с С++ нельзхя быть уверенным ни в чем.


GN>Я уверен. Почему я заблуждаюсь?


Откуда я знаю почему.

GN>P.S. У Вас хорошо получается писать про монады. :up: И плохо — что С++ тормоз. Я для себя давно решил, лучше делать то, что получается хорошо. :beer:


Вы думаете, у меня есть такая цель, кого-то убедить в том, что С++ тормоз?
Те, для кого это критично и сами давно во всем разобрались.
В моем случае я лишь просто объясняю почему для числодробильных задач я возьму скорее фортран, чем С++.
Убеждает вас это или нет — мне все равно. Еще не хватало шатать чью-то веру.
Re[31]: C++ vs ???
От: reductor  
Дата: 07.12.05 04:28
Оценка: :))
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, reductor, Вы писали:


R>>Вы думаете, у меня есть такая цель, кого-то убедить в том, что С++ тормоз?

R>>Те, для кого это критично и сами давно во всем разобрались.
R>>В моем случае я лишь просто объясняю почему для числодробильных задач я возьму скорее фортран, чем С++.
S>Пока что никакими объяснениями здесь и не пахнет. Только так — пара намеков здесь, пара ссылок там. Зачем тратить время на написание очевидных фраз типа "программы на функциональных языках меньше связывают руки компилятору, что теоретически позволяет написать более эффективный оптимизатор", когда можно вместо этого добавить пару абзацев про отсутствие абстрактного мышления у собеседника?
S>Когда оппонент следует вашей же рекомендации и выполняет сравнение результатов кодогенерации, вы обвиняете его в том, что он "ничтоже сумняшеся готов все буквализировать".

Такое ощущение, что здесь зал судебного заседания. Судя по вашему напору, вы очень хотите меня в чем-то обвинить. Объясните, пожалуйста, в чем и кому я что должен. А то непонятно.
По-моему здесь обсуждались _свойства_ языков программирования, а не компиляторы и их конкретные результаты. А по-вашему?

S>Я понимаю, что не мне учить такого великого гуру излагать свои мысли. К тому же лично мне безразлично, сможете ли вы снискать себе популярность на этих форумах. Но все же позволю сделать себе один комментарий: такая манера защиты функциональных языков оттолкнет людей не только от вас лично, но и от самих этих языков. У нас уже есть достоверный опыт — большая часть посетителей плюется при слове "оберон", и не потому, что имеет значительный негативный опыт его использования, а от того, что его апологет вел себя похожим на вас образом.


Какая еще популярность? Какая защита? Что за абсурд вообще. Вы думаете, меня волнует какая-то популярность псевдонима "reductor" на каком-то форуме? Или судьба оберона?
Про апологетов же понятно еще меньше. Я что, пропаганду здесь веду? Апологетом какого языка я по-вашему являюсь?
И дополнительно про популярность — я, кажется, вообще просил удалить отсюда все, что написал. Между прочим, эта просьба все еще в силе. Если кто не знает как это сделать не задевая тексты остальных пользователей, так я могу показать.
update messages set text='deleted' where user_id=48135


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


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

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

С наилучшими пожеланиями, ваша репка.
Re[32]: C++ vs ???
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.12.05 05:20
Оценка: +1 :)
Здравствуйте, reductor, Вы писали:

R>Такое ощущение, что здесь зал судебного заседания. Судя по вашему напору, вы очень хотите меня в чем-то обвинить. Объясните, пожалуйста, в чем и кому я что должен. А то непонятно.

Если бы я хотел вас обвинить, я бы так и сделал. Я просто пытаюсь дать некоторые рекомендации.
R>По-моему здесь обсуждались _свойства_ языков программирования, а не компиляторы и их конкретные результаты. А по-вашему?
По-моему кое-кто здесь пытается выставить себя очень умным по сравнению с остальными участниками дискуссии. Никакого обсуждения свойств языков программирования здесь не происходит. Но это только мое личное впечатление, которое запросто может оказаться вызванным вовсе не тоном и содержанием ваших постингов, а плохим качеством потребляемых мною бутербродов.

R>И дополнительно про популярность — я, кажется, вообще просил удалить отсюда все, что написал. Между прочим, эта просьба все еще в силе. Если кто не знает как это сделать не задевая тексты остальных пользователей, так я могу показать.

R>update messages set text='deleted' where user_id=48135
Большое спасибо за совет. К сожалению, выполнение такой команды не приведет к нужному результату. У меня нет острого желания объяснять все технические детали — к тому же, судя по всему, ваших способностей хватает на понимание всех деталей функционирования проекта и без моих стараний.

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

Ну так делитесь! Кто вам не дает? Пока что вы щедрее всего делитесь не опытом, а мненями о способностях собеседников. Я понимаю, что не стоит требовать от неизвестного псевдонима неизвестного программиста знаний по основам человеческой психологии. Поэтому в меру своих способностей объясняю: такая манера делиться опытом не приведет к передаче этого опыта кому-либо. Скорее она приведет к в точности обратному эффекту.
R>Удалите, пожалуйста, все мои тексты с сайта. А пока этого не случилось, я считаю возможным писать сюда все, что мне подскажет мой задолбанный некоторыми личностями мозг.
Ок, засим откланиваюсь. Я свое мнение высказал, прислушаться к нему или проигнорировать — ваш выбор.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[31]: ocamlopt и MSVC - кто быстрее?
От: reductor  
Дата: 12.12.05 23:20
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:


R>>Увы, я не 100 долларов, чтобы всем нравиться.


VD>Незнаю как у кого, но вид американской сотни давно меня не приводит в восторг. Я бы еще понял если бы ты заговорил о пачке европейских пятисоток. :)


Я уже давно не нахожу между ними разницы.

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



Ничем не могу помочь :(

Я многих раздражаю по-жизни, многих здесь. Что ж теперь делать.
Или привыкайте или удаляйте все мои сообщения вместе с моим аккаунтом.

А читать нотации — это неэффективный способ. Мне не 15 лет.
Re[47]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.05 18:53
Оценка: +1 -1
Здравствуйте, reductor, Вы писали:

R>То, что окамл нацелен на работу со списками — чистой воды фантазии, да девичьи мечты.


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

R>Вот, минут за 20 на коленке mergesort (устойчивая O(n log n) сортировка) in-place на окамле. Почти не использует никаких библиотечных функций:

R>
R>open Array;;
R>let msort xs = 
R>    let rec sort bgn fin =
R>        let rec merge bgn mid fin =
R>            let shift () = blit xs bgn xs (bgn + 1) (mid - bgn) in
R>            if mid >= fin || bgn >= mid then ()
R>            else let x, y = xs.(bgn), xs.(mid) in
R>                 let change () = (shift (); xs.(bgn) <- y) in
R>                 let bgn, mid = if x <= y then (bgn + 1, mid)
R>                                else (change (); (bgn, mid + 1))
R>                 in merge bgn mid fin in
R>        if fin - bgn <= 1 then ()
R>        else let mid = (fin + bgn) / 2 in
R>             let () = sort bgn mid; sort mid fin
R>             in merge bgn mid fin
R>    in sort 0 (length xs);;
R>

R>Не используя даже матчинг и циклы.
R>Тут можно еще раза в полтора сократить, причем, избавившись от всего библиотечного, но мне лень.

Да, надо бы. А то ведь императивный вариант на С++/C# оказывается куда более кратким.
static void SmartQSort<T>(T[] arr, int lo, int hi, IsLess<T> isLess)
{
    int i = lo;
    int j = hi;
    T sep = arr[(lo + hi) >> 1];
    while (i <= j)
    {
        while (isLess(arr[i], sep))
            i++;
        while (isLess(sep, arr[j]))
            j--;

        if (i <= j)
        {
            T tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    }

    if (lo < j)
        SmartQSort(arr, lo, j, isLess);
    if (i < hi)
        SmartQSort(arr, i, hi, isLess);
}

Если кажется что много строк, то можно записать это по изуверски :
static void SmartQSort<T>(T[] arr, int lo, int hi, IsLess<T> isLess)
{
    int i = lo, j = hi;    T sep = arr[(lo + hi) >> 1];
    while (i <= j) {
        while (isLess(arr[i], sep)) i++; while (isLess(sep, arr[j])) j--;
        if (i <= j) { T tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; }
    }

    if (lo < j) SmartQSort(arr, lo, j, isLess);
    if (i < hi) SmartQSort(arr, i, hi, isLess);
}

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

R>Слишком усердно не тестировал, но вроде сортирует.


Это не важно. Важно, что от поражающей краткости и простоты не осталось и следа.
А стало быть подобные примеры не больее чем красивый рекламный ход.

VD>>Ну, тебе виднее. Я в Окамле делетант.

R>Я правильно вас понимаю, что вы считаете нормальным — являсь дилетантом в языке выдавать агрессивные суждения о нем и еще потом отстаивать свои фантазии?

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

R>Если так, дальнейшая дискуссия не имеет смысла.


Я это уже слышал много раз. Слабенький аргумент.

VD>>Но вот в совершенно не функциональном Руби код получается не более длинный чем в Окамле, а ведь "матчить" то он вроде не умеет.


R>Я правильно вас понимаю, что вы предлагаете всем отказаться от окамла и С++ в пользу руби?


Нет не правльно. Это все твои фантазии.
Я просто привел преимер императивного языка со встроенными средствами работы со списками.

R>Если я не ошибаюсь, то дилетанство было подтверждено от первого лица.


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

R>А что касается лично меня — я пока не начинал переходить на личности.


А как назвать постоянные выпады и эпитеты?

R> И не нужно мне говорить лучший я или не лучший и какие тут перцы — все это меня не волнует ни единой секунды.


А я думаю, нужно. Может это все же остановит тебя и переведет в область конструктивного разговора, а не доказательства от "совсем противного оппонента".

VD>>В общем, общаться на уровне "делетантсва" и "первокурсников" я не намерен. Отвечая таким образом на технический вопрос ты рассписывашся в своей неправоте. Мне этого ответа достаточно. Но если вдруг захочется дейсвительно аргументировано ответить, то я буду очень рад.


R>Интересно бы еще услышать в какой неправоте я здесь рассписываюсь.


Ты сыплешь натянутыми утверждениями которые рассыпаются как только кто-то копнет на штык в глубь. Все твои примеры и ссылки оказались мягко говоря не состоятельными. В конце концов в ход поперли откровенные оскорбления. О какой правоте тут вообще можно вести речь?
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Жульничество?
От: Gaperton http://gaperton.livejournal.com
Дата: 15.12.05 12:36
Оценка: +2
Здравствуйте, Cyberax, Вы писали:

C>Gaperton wrote:

>> Дело в том, что во первых, мы отметаем это утверждение как голословное и
>> лишенное смысла из-за общности и неконкретностии, а во вторых —
>> напоминаем, что класс задач, требующий бешеной производительности — сам
>> по себе узок как танковая смотровая щель.
C>А вот тут полностью не согласен. Производительность ОЧЕНЬ важна для
C>многих настольных приложений, игр. Ну и для самой ОС.
Хорошо, отвечаю по пунктам.
1) Для подавляющего БОЛЬШИНСТВА настольных приложений жертва в скорости выполнения в два раза будет совершенно незаметна пользователю. У меня дома стоит 1.5ГГц, на работе 3. Разницы я не замечаю.
2) Windows XP работает совершенно одинаково как на моем втором домашнем 750 Duron, так и на моем рабочем 3ГГц пентиум. Так что не надо делать голословные и некорректные суждения — их слишком легко проверить. Производительность ОС, кстати, определяется в основном размером оперативной памяти и дисковой подсистемы.
3) Игры — единственный класс настольных приложений, где это более или менее критично. Тем не менее, при разработке реальной игры сроки разработки сжаты, и времени на алгоритмические оптимизации в случае С++ у вас будет меньше, чем в случае яхыков высокого уровня, таких как OCaml. Так что в реальности, когда у вас есть сроки и бюджет, вы просто не сможете достичь хваленой высокой производительности, видной на микротестах, так как не успеете разработать "умные" алгоритмы. Хотя никто и не предлагает писать на OCaml игры .
4) В реальных приложениях узкие места по производительности локализованы в небольшом проценты кода. Именно по этому разработчики игр активно используют LUA, который чудовищно тормозной. Именно поэтому основной объем кода управляющей программы самого быстрого ATM-свитча AXD301 написан на тормозном Erlang, с небольшой частью на С++. И ничего.
4) Индустрия уже сделала свой выбор и неоднократно давала ответы на тезис "производительность ОЧЕНЬ важна". Это:
— языки высокого уровня против ассемблеров. Те же самые дискуссии велись в конце 70-х, результат известен.
— виртуальная память вместо оверлеев.
— Управляемые среды .NET и Java с жертвой производительности вдвое. На Java и .NET уже пишут игры, для которых, как вы говорите ОЧЕНЬ нужна производительность.

Дальнейшую глупую дискуссию по очевидным вопросам с переливанием из пустого в порожнее со своей стороны закрываю. Мне в этом вопросе — все ясно. И это для меня главное.
Re[32]: Жульничество?
От: z00n  
Дата: 15.12.05 14:23
Оценка: +2
Здравствуйте, Cyberax, Вы писали:

C>В современных играх на Lua пишут триггеры, запускающие какие-то

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

По времени исполнения — небольшую часть, а по времени разработки — бОльшую.
Игра это и есть в основном "триггеры" и "картинки", а не то, что называют engine, который да, скорее всего написан на С/С++.

Пример для масштаба (из сметы MMORPG c бюджетом ~30M$):

Программирование:
AI — 3 человека (триггеры)
UI — 3 человека (???)
Server Architechure — 2 человека (специалисты по DB)
Distributed Computing — 2 человека (сервер — это Java на кластере)
Client Team — 3 человека (Lead + 2 Graphics Engine Specialist)
World Building — 19 человек (скрипты)

Картинки: — в совокупности 16 "художников"
Звук: — 1 человек

Eще 20-30 человек Q&A, CS, клерки, пара гейм-дизайнеров.

Т.е из 32-х программистов, С++ используют от силы 6 человек (я оптимистично включил в их число UI ).

C>Ну да. Яркий пример — Civilization IV. Большая часть написана на Питоне

и жрет 2Гб памяти.

На PS2 есть Jax & Daxter, AAA тайтл, написанный на Лиспе (другими словами: GC), который не тормозит на 32Mb. От людей все зависит, а не от языков
Re[30]: Жульничество
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.12.05 21:12
Оценка: -1 :)
Gaperton wrote:
>
> НО ПОЧЕМУ INTEL COMPILER сделал более быстрый код. Давай-ка, IronPeter
> asm+source code, который сгенерировал Intel C.
> *Либо я ничего не понимаю, либо я вообще ничего не понимаю, либо и то и
> другое*, но короче моего asm-кода придумать просто нельзя.
>
> Касательно моей или вашей наивности, уважаемый Pzz — обратите внимание
> на выделение. Это полезно.

Что конкретно это доказывает?
Posted via RSDN NNTP Server 2.0
Re[30]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 16.12.05 10:19
Оценка: :))
Здравствуйте, Pzz, Вы писали:

Pzz>Gaperton wrote:

>>
>> 1) Если у вас есть знакомые из компании Мирантис, советую связаться с
>> ними и узнать, каким образом применение IC++ позволило им увеличить
>> производительность симуляции процесса литографии на 20% (насколько я помню).
>> 2) Потрудитесь сами взглянуть на тесты IC++. Их несложно найти в
>> интернете — времени уйдет меньше, чем на выяснение степени моей
>> наивности. Для вас, я вижу, последняя проблема имеет больший приоритет .

Pzz>Я скажу отверждение, которое, вероятно, не смогу доказать: не стоит

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

Правильно, к черту тесты SPEC, надо доверять непопулярным тестам, например тому странному тесту, на котором MSVC порвал OCaml.

Pzz>Я лишь позволю себе напомнить, что

Pzz> 1) разговор начинался с MSVC, а теперь каким-то образом переехал на
Pzz>Интеловский компилятор.
Батенька, так в приведенных мной материалах сравнивается все, о чем мы говорили. Там отчетливо видно, что gcc в целом хуже, чем MSVC 7.1, а он, в свою очередь, хуже IC++.

Pzz> 2) Мне очень не понравилась фраза, произнесенная Gaperton'ом, "А не

Pzz>MSVC последней версии, у которого кодогенератор заметно качественнее".
Pzz>Именно ее я и оспаривал, по причине ее спорности и бессодержательности
Pzz>(что такое, "заметно качественнее"?).
Загляните в материалы. Поймете, что такое заметно качественнее. У меня все четко, не проскочишь. По тем пунктам где я не прав, я признаю сам, что не прав. Например, я ошибся по поводу того, что ocamlopt использует gcc, и признал это сразу в первом ответе вам. Почему? Потому что прочитав ваш ответ, я не поленился проверить, так ли это на самом деле, и выяснил, что так. Так вот, учитывая такую мою привычку, и тот факт, что вы не смотре

Pzz>Так что я не очень понимаю, какое

Pzz>к этому имеет отношение вопрос о том, кто круче выглядит на каких-то там
Pzz>тестах, I++ или gcc.
Очень жаль, что вы не читаете мои ответы. Тесты не какие-то там, а SPEC. Почитайте, что такое SPEC. В тестах есть и MSVC и gcc, что относится к теме разговора. Почитайте материалы. Вообще странный подход — вы требуете от меня материалов, а сами их не даже не окрываете. Мсье не читатель, а писатель?

>> Флаг в руки. У вас или комбинация феноменальной памяти и великолепное

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

Pzz>Я не сказал, что это просто. Я сказал, что это возможно.

А я сказал, что это практически невозможно. Т.е. возможно только на словах, в теории.

Pzz>Вы утверждаете, что _я_ лично этого сделать не смогу. Я не понимаю, как

Pzz>Вы можете что-то утверждать про то, что я смогу, а что нет, если Вы меня
Pzz>в глаза-то не видели, и тем более никогда со мной не работали.

Элементарно, Ватсон. Есть задачи, с которыми компьютеры справляются лучше людей. Например, сколько целых чисел длиной в 100 цифр вы сможете сложить в уме за одну секунду? Так вот, несколько лет назад список таких задач пополнился — кодогенерация под современные процессоры, плюс игра в шахматы. Если это ущемляет ваше достоинство — извините, но жизнь есть жизнь. Например, я, совершенно не зная вас, могу утверждать, что вы проиграете в шахматы компьютеру BlueGene. Вас это тоже расстроит? Детский сад, короче.

>> G> Хотите — проверьте сами .

>> Pzz> Не хочу.
>>
>> И это правильно. Мешки ворочать — тяжелая физическая работа, недостойная
>> благородного дона. Давайте посмотрим, как с ний справляются другие

Pzz>Тяжелая физическая работа должна быть хорошо оплачена. Я уже вышел из

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

Ай-ай-ай. В таком случае, не надо, гхм, бросать слова на ветер. Раз уж вы вишли из детского возраста.

Pzz>Если Вы готовы заплатить мне денег за то, что я что-то перекодирую на

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

Неужели вы считате, что мне настолько интересно убедить вас в том, что IC++ c легкостью обойдет вас при кодогенерации, чтобы я вам за это приплатил? Детский сад.
Re[34]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 16.12.05 18:42
Оценка: :))
Здравствуйте, Pzz, Вы писали:

Pzz>Gaperton wrote:

>>
>> Видимо, вы плохо представляете себе, во что оптимизирующий компилятор
>> превращает хорошо структурированную программу, написанную человеком
>> разумным. Возьмите хотя бы MSVC 7.1, найдите алгоритм Штрассена,
>> скомпилируйте его так, чтобы компилятор агрессивно инлайнил функции с
>> максимальной оптимизацией, и посмотрите на результат. Вместо Штрассена
>> подойдет другой нетривиальный численный метод из библиотек.

Pzz>Хорошо быть теоретиком...

Ну что вы. Где мне, "теоретику", до глубоких практиков, в активе которых не написанный самим, а найденный в интернете ассемблерный листинг микротеста, который работал "очень заметно" лучше, чем какая-то MSVC-шная реализация, а все потому, что на эту задачу в x86 по любому не хватает регистров, а значит кодогенератор MSVC никак не может быть лучше gcc, а тесты SPEC, составленные из реальных прикладных задач — поверхностны. На такое у меня контраргументов нет, признаю свое поражение.

Хорошо, короче, быть практиком, хорошо. Желаю вам и дальше оставаться практиком, но к сожалению вынужден отказать в выделении денег на ручное ассемблерное кодирование. Видите-ли, у меня нет уверенности, что вы напишите ассемблерную программу сами — я боюсь, что вы опять скачаете ее из интернета.
Re[26]: C++ vs ???
От: reductor  
Дата: 12.12.05 23:10
Оценка: 7 (1)
Здравствуйте, VladD2, Вы писали:

[..фантазии поскипаны..]

Можно увидеть алгоритм, который выделяет общерекурсивные функции и раскручивает их в общем виде? (Не считая оптимистичного исполнения)
Который раскрутит и заинлайнит например функцию аккермана или тот же quicksort?


И без размышлений и фантазий на тему того, что компиляторы функциональных языков раскручивают любую рекурсию, а не только хвостовую.

Алгоритм — вперед. Лирику — после.
Re[27]: C++ vs ???
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.12.05 06:31
Оценка: 7 (1)
Здравствуйте, reductor, Вы писали:

R>Можно увидеть алгоритм, который выделяет общерекурсивные функции и раскручивает их в общем виде? (Не считая оптимистичного исполнения)

R>Который раскрутит и заинлайнит например функцию аккермана или тот же quicksort?
Гм. Насчет квиксорта я не уверен. Но попытка пощитать рекурсивно факториал константы:
cout << factorial(7);
...

int factorial (int f)
{
  return f <= 1 ? 1 : f*factorial(f-1);
}

Как минимум MS VS 7.1 вообще не будет делать вызова factorial в релизе. Вместо него в operator << будет сразу передан результат вычисления 7!.
Можно поэкспериментировать насчет передачи в нее переменной.
Но Влад говорит о том, что в общем случае инлайнится не функция, а вызов. Никакой фантастики для этого не нужно. Да, не для всех случаев удается вообще избавиться от вызова. Насчет замены хвостовой рекурсии я не в курсе.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[43]: C++ vs ???
От: z00n  
Дата: 13.12.05 10:57
Оценка: 7 (1)
Здравствуйте, vdimas, Вы писали:

V>Я не совсем понимаю принцип действия этого предполагаемого restrict. Это мы как бы "обещаем" компилятору что-то? А кто контоллирует выполнение обещания?


Хороший вопрос!

There are three reasons that "restrict" isn't part of C++ already:

— The committee felt that enough was being added to C++ already so that new features should be minimized. An isolated feature such as "restrict" could and should be tried out in the communities in which it is most needed before it is added it to Standard C++.
The "restrict" feature cannot in general be verified to be safe by a compiler. The committee felt that more work was needed to see if a better-behaved alternative could be found.
— The C++ Standard Library provides valarray as a mechanism to support high-performance Fortran-like vector computation.

The reasons for reconsidering "restrict" are:

— "restrict" appears to be becoming increasingly useful as more processors acquire architectural features such as long pipelines and parallel execution. When "restrict" was first discussed by the C++ committee, maybe 5 percent of all processors used by the -- C++ community had the high-performance features that made "restrict" valuable. Today, I suspect that percentage is closer to 95 percent.
— We have not (to the best of my knowledge) found an alternative that lends itself to static type checking in a general C++ environment.
— The valarray part of the C++ Standard Library has not yet taken hold on a significant scale. If it does, valarray will have no problem coexisting with "restrict." Thus, the bigger issue is the coordination between the C and C++ national and ISO committees. However, every vendor of C and C++ implementations face a dilemma between conformance to a divergent standard and making the full set of facilities available in all contexts.

Interview With Bjarne Stroustrup http://www.research.att.com/~bs/devXinterview.html


А вот о событиях 20-летней давности, цитата из D&E:

To contrast, the committee has rejected many proposals. For example:

Several proposals for direct support for concurrency
Renaming of inherited names (sec12.8)
Keyword arguments (sec6.5.1)
Several proposals for slight modifications of the data hiding rules
Restricted pointers (``son of noalias'') (sec6.5.2)
Exponentiation operator (sec11.5.2)
Automatically generated composite operators
User­defined operator.() (sec11.5.2)
Nested functions
Binary literals
General initialization of members within a class declaration.

Bjarne Stroustrup:
The Design and Evolution of C++

Re[23]: ocamlopt и MSVC - кто быстрее?
От: Cyberax Марс  
Дата: 15.12.05 09:04
Оценка: 7 (1)
Gaperton wrote:
> ocamlopt -inline 100 *-unsafe -ffast-math -ccopt -O3*

cyberax@scblinux:~/tests$ time ./a.out >aa

real 0m46.653s
user 0m45.991s
sys 0m0.224s


Для сравнения, последняя моя оптимизированая версия дает 30 секунд. Без
оптимизации ray.ml работал 48 секунд.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[11]: C++ vs ???
От: reductor  
Дата: 03.12.05 00:33
Оценка: 6 (1)
Здравствуйте, EvilChild, Вы писали:


EC>А что скажешь о Nemerle?



Я его раньше не видел
Сейчас глянул — по-моему очень даже неплохо
Не без маразмов, но неплохо
Правда вот не знаю даже насколько он вообще будет полезен человеку, никогда не програмировавшему на ML и Lisp
Там весь этот "синтаксический оверхед" вместе с какими-то "угодить всем" конструкциями могут заслонять собой то, что по-настоящему там мощно, но что необходимо просто прочувствовать в языках, которые более стройны в этом смысле.


С С++, кстати, та же фигня — до сих пор очень мало народу понимает как по-настоящему можно использовать нормально те же шаблоны и иксепшены.
Или с Javascript — тут вообще жуть. разрыв между тем что он может и что на нем делают (и КАК) — огромен.
Причем в последнем случае еще и разработчики(!!) не просекают что делают и только плодят маразмы , это удивительно.

В общем не знаю, у меня всегда мнение такое, что ML, C.Lisp/Scheme, Smalltalk, Prolog и Forth — это тот минимум который лучше знать.
Re[16]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.12.05 07:24
Оценка: 6 (1)
Здравствуйте, jedi, Вы писали:

J>Вот только конкретики в ваших опусах маловато, все больше какие-то общие фразы. Вам есть что сказать по делу? В конце концов здесь

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

Очень похоже на то.
Похоже, reductor под медленностью C++ понимает сравнение с OCaml (за которым закрепилась репутация одного из самых быстрых языков вообще).
Но реальных данных не приводит. Придется сделать это за него:

OCaml vs Intel C++
OCaml vs GNU C++
А это вариант OCaml byte code:
OCaml vs GNU C++

Другие языки:
Clean vs GNU C++
Clean vs Intel C++

Erlang vs Intel C++
Haskell GHC vs Intel C++
Lisp CMUCL vs Intel C++
Lisp SBCL vs Intel C++
Oberon-2 OO2C vs Intel C++
Scheme Chicken vs Intel C++
Smalltalk GST vs Intel C++
SML MLton vs Intel C++
SML SML/NJ vs Intel C++

В общем, есть языки, которые на этих тестах выигрывают у GNU C++ и Intel C++ (OCaml и Clean в первую очередь). Но обзывать C++ медленным языком я бы поостерегся.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: offtop: C--
От: reductor  
Дата: 04.12.05 08:07
Оценка: 6 (1)
Здравствуйте, gear nuke, Вы писали:

R>>Еще они сейчас бэкенд переносят на С-- (Один из разработчиков С-- одновременно является разработчиком GHC)


GN>Не подскажете ссылочку на такой С-- ? Все компиляторы, которые мне попадались или умерли в прошлом веке, или :-(

GN>google что-то совсем не понимает C%2d%2d

sure
http://www.cminusminus.org/
Re[18]: C++ vs ???
От: reductor  
Дата: 04.12.05 08:03
Оценка: 4 (1)
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, reductor, Вы писали:


R>>Самый простейший пример из возможных: http://www.ffconsultancy.com/free/ray_tracer/languages.html

R>>Пожалуйста, не стоит здесь и сейчас начинать флейм по этому поводу и рассказывать, что вы сможете оптимизировать код на С++ или на чем угодно, чтобы он обгонял MLTon или O'Caml
R>>Я сам это могу сделать. Правда за время в несколько раз превышающее то, которое ушло бы на то же самое в случае окамла.

GN>Надеюсь, вопрос не будет воспринят как флейм

GN>Возможно ли (в принципе) заоптимизировать код на MLTon или O'Caml до такой степени, что бы _практически_ было раелизовано что-то вроде этого:
GN>
GN>(это довольно старый движёк. думаю, не лучший)

По ссылке видно, что O'Caml и особенно MLTon и так быстрее С++ в таких задачах
Так что в чем проблема, непонятно.
Или я как-то не так понял вопрос?

P.S.
Quake3-подобный движок на haskell, написанный одним(!!) человеком: http://www.haskell.org/hawiki/Frag
Сделан был с вот этим документом в качестве руководства: http://www.cse.unsw.edu.au/~pls/thesis/munc-thesis.pdf

еще несколько вещей на окамле:
http://www.cs.ubc.ca/~rbridson/personal/spiff/
http://francois.pessaux.neuf.fr/creations.html
http://freetennis.sourceforge.net/


P.P.S
Я никогда не занимался программированием 3D, как не занимаюсь им и сейчас. Так что конкретные вопросы по имплементации задавать лучше не мне.
Re[24]: C++ vs ???
От: z00n  
Дата: 06.12.05 13:15
Оценка: 2 (1)
Здравствуйте, little_alex, Вы писали:

_>Здравствуйте, z00n, Вы писали:



Z>>emacs или vim — это такая вещь, что потратил несколько дней — и забыл о проблемах на всю жизнь. Тем более, после того, как в MSVS 2005 добавили emacs-раскладку, навыки еще и не пропадут


_>Серьезно? А можно ссылку?


http://msdn2.microsoft.com/en-us/library/ms165509.aspx
Re[9]: C++ vs ???
От: gear nuke  
Дата: 03.12.05 10:11
Оценка: 1 (1)
Здравствуйте, reductor, Вы писали:

R>Ха.

R>Он медленный не по сравнению с ассемблером. Он медленный по сравнению с более высокоуровневыми языками, но у которых лучше дизайн и нет всего этого легаси от Си.

Где-то можно посмотреть результаты тестов или что-то, на чём основываются эти тезисы?
Я было подумал посмотреть на эффективность кода произведённого Glasgow Haskell Compiler, скачал, а там оказывается GCC. Так вот, сам по себе GCC вполне не плох, но уступает ряду других компиляторов. Мне приходится заниматься CRE, и я вдоволь насмотрелся на _мусор_ который производят многие компиляторы. Что там у них творится "на верху" — это даже не важно. Компилятор, который генерирует 5-8 инструкций там, где _хороший_ компилятор сделает 2 — не может производить эффективный код.

Логика, кстати, мне не совсем ясна:
С++ практически не проигрывает ассемблеру.
Он заметно проигрывает более высокоуровневыми языками.
Получается, что ассемблер проиграет более высокоуровневыми языками в плане эффективности кода?


R>На любом языке можно написать ОС с нуля.


В самом деле? Давайте возьмём распространённую архитектуру — PC. Как там на Lisp будет выглядеть общение с железом?

R>А насчет использования других языков — это исключительно в голове. Поскольку на любом языке можно написать компилятор Scheme, то и операционную систему с нуля тоже можно.


Да, у меня действительно "в голове". Я не знаю, как можно увязать компилятор Scheme с возможностью реализации ОС.

R>Но вообще странное рассуждение и достоинство.


Я не говорил, что это достоинство. С++ — универсальный язык, это одновременно и достоинство, и недостаток. Достоинство С++ — он быстрый.

R>На конкретном ассемблере тоже можно все написать и что?

R>зачем это делать?

А ассемблер вообще при чём?
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[17]: C++ vs ???
От: Pzz Россия https://github.com/alexpevzner
Дата: 04.12.05 00:56
Оценка: 1 (1)
reductor wrote:
>
> J>"Все очень просто. Что на С++ или на ассемблере _можно_ обогнать
> O'Caml, я не спорю. Вопрос чего это будет стоить."
> J>Хочу услышать: конкретный пример где это будет стоить дорого.
>
> Во всех случаях, когда количество строк на высокоуровневом языке в
> системе переваливает за сотню.

Вообще говоря, в некоторых случаях тот же Ocaml может обогнать,
например, GCC даже на совершенно простеньких програмках.

Я как-то померил, любопытства ради, скорострельность вычисления ряда
Фиббоначи рекурсивным способом на нескольких разных компиляторах.

К моему изумлению, Ocaml обгонял GCC процентов на 20-30. Чего я совсем
не ожидал от высокоуровнего языка.

Выяснилось, что у Ocaml'а вызов функции более эффективно устроен на
ассемблерном уровне.
Posted via RSDN NNTP Server 2.0
Re[19]: C++ vs ???
От: gear nuke  
Дата: 04.12.05 08:36
Оценка: 1 (1)
Здравствуйте, reductor,

GN>>Возможно ли (в принципе) заоптимизировать код на MLTon или O'Caml до такой степени, что бы _практически_ было раелизовано что-то вроде этого:

GN>>
GN>>(это довольно старый движёк. думаю, не лучший)

R>По ссылке видно, что O'Caml и особенно MLTon и так быстрее С++ в таких задачах


Что-то я не увидел этого.
Отсюда:

On a 1.2GHz Athlon Thunderbird Linux box, the two programs can be compiled with (g++ 4.0.1 and ocamlopt 3.08.3)
OCaml is 7% faster than C++.


On a 1.6GHz Athlon 64 (running pure64 Debian Linux), the two programs can be compiled with (g++ 4.0.1 and ocamlopt 3.08.3)
OCaml is 5% slower than C++.


С++ — синий. OCaml — красный.
Прошу обратить внимание на первый график — он заканчивается как раз в том месте, где С++ начинает выигрывать

R>Так что в чем проблема, непонятно.

R>Или я как-то не так понял вопрос?

Видимо. Автор движка virtualray утверждает, что там применяется тщательная низкоуровневая оптимизация — именно по этой причине, в игрушку вообще можно играть, а не смотреть слайд-шоу.
Вопрос такой — можно ли произвести оптимизацию подобного уровня на языках, которые "и так быстрее С++ в таких задачах"

R>P.S.

R>Quake3-подобный движок на haskell, написанный одним(!!) человеком: http://www.haskell.org/hawiki/Frag

Это совершенно не то. В "Разработка игр" неоднократно обсуждалось использование NET и другого (вместо С++) для написания подобных проектов. Это вполне оправданно, так как программирование в данном случае сводится к вызовам некоторого API, которое всё рисует в конечном счёте аппаратно.

Ray tracing подразумевает, что рендеринг выполняется программно.

Кстати, по поводу 2х восклицательных знаков. Знакомый сейчас пишет on-line RPG на С++ (ИМХО сложность выше). Один (не считая художников и т.п.). Почему был выбран этот язык? Стоимость разработки — скоро состоится запуск сервера, и когда он увидит узкие места (а в этом списке 100% появятся менеджер кучи и STL строчки), будет очень просто найти людей, которые смогут эти узкие места подрихтовать.

R>P.P.S

R>Я никогда не занимался программированием 3D, как не занимаюсь им и сейчас. Так что конкретные вопросы по имплементации задавать лучше не мне.

Мой вопрос не касается вопросов имплементации. Он касается возможности использовать низкоуровневые оптимизации в HLL.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[39]: C++ vs ???
От: Cyberax Марс  
Дата: 12.12.05 08:54
Оценка: 1 (1)
gear nuke wrote:

>

Ты не можешь предвычислять участки кода (или оптимизировать
> алгоритм), если обращаешься к данным через указатели, значение которых
> устанавливается где-то вне контекста. Это же очевидно и reductor
> просто не находит слов (или желания) для объяснения очевидных вещей.


Это неверно, кстати. В C/C++ есть ключевое слово restrict, которое
говорит оптимизатору, что указатель не будет иметь alias'инга.

То есть типа:
void copy(restrict int *a, restrict int *b)
{
    while(a!=b) *b=*(a++);
}


--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
C++ vs ???
От: zip_ Россия  
Дата: 30.11.05 10:50
Оценка: :)
устал от С++.
чувствую, что можно писать более эффективно (в плане затраты времени/функциональность) на других языках и получать большее эстетическое удовлетворение. пора что-то менять.

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

что посоветует общественность?

беглый анализ ситуации показал, что претендентов не так уж и много, а именно:
1. ocaml
2. D

по певому:
— так ли он хорош и универсален? несколько напрягает сложность перехода на него, т.к. времени свободного нет, а проекты делать надо, и делать в срок.

по второму:
— а дорос ли он уже до реального применения в промышленных системах?

опыт программирования приближается к 15 годам, в основном это С и C++.

сейчас задачи связаны с разработкой под встраиваемые системы (QNX/ARM): протоколы обменов, сетевые интерфейсы, встраиваемые базы данных, GUI (touchscreen) и т.п.
Re[3]: C++ vs ???
От: Cyberax Марс  
Дата: 01.12.05 10:34
Оценка: +1
Anton Batenev wrote:

> R>http://www.ocaml-tutorial.org/ — туториал специально для С/С++

> программистов.
> Зашел по ссылке "на автомате". Остановился на фразе "Take a careful
> look at the bracketing and the lack of commas" раздела "Calling
> functions". Дальше читать не стал. Стало не интересно думать о
> количестве скобок и их последовательности.

Это скорее просьба обратить внимание на "нестандартный" синтаксис
OCaml'а. Таких проблем со скобочками как в Lisp'e в OCaml'е нет

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[7]: C++ vs ???
От: reductor  
Дата: 02.12.05 09:52
Оценка: +1
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, Pzz, Вы писали:


Pzz>>Рассуждая с практической точки зрения, для SML'я, по-моему, проще найти

Pzz>>компилятор под какой-нибудь не совсем обычный процессор, чем для
Pzz>>Ocaml'а. Если не ошибаюсь, Ocaml поддерживает только x86, ARM, и, может
Pzz>>быть, MIPS.

Д>и еще есть SML.NET

Д>хотя это конечно на любителя

и F# — который на самом деле окамл
впрочем, у самого окамла бэкенд под .NET тоже есть
Re[12]: C++ vs ???
От: GlebZ Россия  
Дата: 03.12.05 13:16
Оценка: +1
Здравствуйте, reductor, Вы писали:

R>В общем не знаю, у меня всегда мнение такое, что ML, C.Lisp/Scheme, Smalltalk, Prolog и Forth — это тот минимум который лучше знать.

Да уж. С таким набором тебя ни на одну работу не возьмут.
И кстати, почему в мин. набор попали сразу ML и CLISP?

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: C++ vs ???
От: jedi Мухосранск  
Дата: 03.12.05 22:35
Оценка: +1
Здравствуйте, reductor, Вы писали:

R>И С++ не такой быстрый.


Блин, не выдержал ...

Приведи хотя бы один пример где С++ вносит какую-то заведомую неэффективность по сравнению с тем же ассемблером (ограничимся х86).
Restriction: неэффективность должна следовать именно из природы языка, а не из неэффективность кода генерируемого каким-то конкретным
компилятором (т.е. всякие примеры с плавающей точкой и неиспользованием инструкций SSE не канают).

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

P.S. Я много пишу на С++, но к фанатам себя не причисляю. Мой любимый язык Smalltalk .
Re[18]: C++ vs ???
От: reductor  
Дата: 04.12.05 01:01
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>К моему изумлению, Ocaml обгонял GCC процентов на 20-30. Чего я совсем

Pzz>не ожидал от высокоуровнего языка.

Pzz>Выяснилось, что у Ocaml'а вызов функции более эффективно устроен на

Pzz>ассемблерном уровне.

И не только вызов функции.
Что особо примечательно, компилятор у окамла почти не оптимизирует ничего, он простой как три рубля.
Если бы еще и оптимизировал...
Re[20]: C++ vs ???
От: reductor  
Дата: 04.12.05 01:16
Оценка: :)
Здравствуйте, Pzz, Вы писали:

Pzz>reductor wrote:

>>
>> Pzz>Выяснилось, что у Ocaml'а вызов функции более эффективно устроен на
>> Pzz>ассемблерном уровне.
>>
>> И не только вызов функции.
>> Что особо примечательно, компилятор у окамла почти не оптимизирует
>> ничего, он простой как три рубля.
>> Если бы еще и оптимизировал...

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


Pzz>Кодогенератор не замысловатый, но аккуратно написан. В том смысле, что

Pzz>не делает плохо то, что несложно сделать хорошо.

Да. Вообще, если эта тема интересна, могу порекомендовать почитать историю создания камла в "The Zinc Experiment".
А так же ужасающее описание того как GHC компилирует через Си и GCC и что такое Evil Mangler.
Лично у меня в свое время это все чакры открыло.
Re[19]: C++ vs ???
От: reductor  
Дата: 04.12.05 08:31
Оценка: -1
Здравствуйте, gear nuke, Вы писали:


Pzz>>Выяснилось, что у Ocaml'а вызов функции более эффективно устроен на

Pzz>>ассемблерном уровне.

GN>А не было ли это причиной того, что копмилятор OCaml приводил рекурсивный вызов к простому циклу?


GN>Даже если в случае с OCaml это было не так, то это всё равно может быть примером почему С++ способен проиграть. Существующие компиляторы плохо умеют оптимизировать такое. Можно, конечно, руками всё делать и выигрывать — ценой читабельности. Вполне разумно, что в языках, где рекурсия одна из основных фич компилятор должен уметь делать такое хорошо.


Да даже gcc умеет разворачивать хвостовую рекурсию — это простейшая совершенно оптимизация. Дело не в этом.
Просто откомпилируйте что-нибудь простое на окамле и си++ — увидите в чем разница
Re[20]: C++ vs ???
От: reductor  
Дата: 04.12.05 10:51
Оценка: -1
Здравствуйте, eao197, Вы писали:

R>>У меня такое ощущение, вы отвечаете не мне, а вашей фрустрации наукой. Ни одно мое сообщение не остается почему-то без вашего внимания. Вы начинаете быть назойливым.


E>Не преувеличивай, есть масса твоих сообщений, которые я даже не считаю возможным комментировать.


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


E>Но вот ты привел ссылку на сравнительный анализ скорости реализаций одной задачи на разных языках. Привел в качестве доказательства того, что C++ -- это не быстрый язык. Я привожу цитату из приведенной тобой ссылки, в которой явно указывается, что самыми быстрыми реализациями были реализации на Scheme и C++.


Не нужно вырывать цитаты из контекста — это раз, и не нужно передергивать.
Вопрос был в том, где С++ является медленнее, чем другие языки — я показал. Отметив непосредственно MLTon и O'Caml.
При чем здесь вообще Scheme.
И самое главное — Проблемы с производительностью С++ — это фундаментальные проблемы с его семантикой. Вы, если так гордитесь своим знанием С++, должны их знать и не поднимать вопль каждый раз, когда на них кто-то указывает.
Очень прошу эту тему считать закрытой.


R>>Никто тут про схему не говорил. Кому вообще придет в голову Scheme здесь рассматривать — это динамический язык, а сталин — это игрушка одного человека и некий proof-of-concept. По какому поводу и кому вы здесь возражаете?


E>Возражаю по поводу:

E>

E>Он медленный не по сравнению с ассемблером. Он медленный по сравнению с более высокоуровневыми языками, но у которых лучше дизайн и нет всего этого легаси от Си.

E>Re[8]: C++ vs ???
Автор: reductor
Дата: 02.12.05


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

E>Из приведенной тобой ссылки про ray_tracer вообще не видно, чтобы C++ был медленным.

Ну посмотрите получше. Желательно не на AMD64 (для которого у окамла и милтона просто нет кодогенератора)

R>>Если вы не заметили, вся эта ветка была о другом.

R>>И никаких проблем со средствами разработки у Окамла нет.

E>Ok. Я сам не сторонник IDE, но если уж говорить про средства разработки, то покажи, пожалуйста, аналоги для OCaml таких вещей, как Visual Studio, Visual Assist, ReSharper, IDEA?


Еще раз. Здесь речь _не_о_том_
У него есть. Но я не буду даже называть их. Ищите сами в гугле. Там все в порядке.

E>Есть ли для OCaml средства для работы с РСУБД, с XML, с HTTP, с SOAP, поддержка криптографии? Есть ли, к примеру, аналоги yacc/bison (coco/r, antlr), которые бы генерировали парсеры на OCaml?


Да, есть. Все, что вы назвали в окамле есть. Более чем.

E>Может ли стандартная библиотека OCaml сравниться с .Net Framework или JDK. Или хотя бы с Boost-ом? Или ACE-ом?


Вот это уже просто бешенство. Сходите и посмотрите.


R>>Кому это нужно принять во внимание?

R>>Я рад за них. И за вас. Но здесь обсуждалось не то, сохраняет ли окамл обратную совместимость.

E>Началось все с того, имеет ли смысл выбрать OCaml вместо C++ (см. C++ vs ???
Автор: zip_
Дата: 30.11.05
). А если какой-то язык выбирается для промышленного использования, то обеспечение совместимости с написанным ранее кодом, имеет очень серьезное значение.


Давайте не будем, ладно?
Идеальную совместимость не обеспечивает никто. Это нормальная и стандартная ситуация. И это хорошо, потому что 100% совместимость в ущерб качеству, это гораздо более губительно для больших и проектов и компаний и всего прочего.

R>>И кстати в случае с С++ и в случае с его компиляторами далеко не все так гладко. Одна изменение манглинга в gcc 3.0 чего стоило.


E>Не видел никаких проблем с переносом исходного кода на C++ из gcc 2.95.* в gcc 3 или gcc 4. Так же, как в Visual C++ или с89. Проблемы были только с системно-зависимыми, не стандартными расширениями, вроде __declspec.


Вы смеетесь видимо.
в gcc 3.0 произошла смена манглинга, это был большой скандал. Слинковать скомпилированный 3.0 модуль с более старым было нельзя.
А я, сейчас, на своем маке постоянно вынужден переключать Gcc 3.3 и 4.0, потому что разные вещи собираются одним и не собираются другим.
А что произошло с Visual Basic при переходе с 6.0 к .NET рассказывать нужно?

Все, для себя я эту тему тоже закрываю, что у вас нет проблем с совместимостью, рассказывайте в детском саду на утреннике.
Re[21]: C++ vs ???
От: Cyberax Марс  
Дата: 04.12.05 12:27
Оценка: +1
reductor wrote:

> И самое главное — Проблемы с производительностью С++ — это

> фундаментальные проблемы с его семантикой.

Перечислите их поименно. Я не знаю ни одной фундаментальной проблемы с
производительностью в С++.

> Или по вашему то, как работает с кучей и стеком окамл и его

> представление данных по сравнению с С++ не наводят на такую мысль?

Вам уже раз 20 сказали, что в С++ есть не только объекты в куче. Есть
еще автоматические объекты с семантикой value-типов, есть свои
аллокаторы и т.п.

> в gcc 3.0 произошла смена манглинга, это был большой скандал.

> Слинковать скомпилированный 3.0 модуль с более старым было нельзя.

И что? Можно было взять исходники и перекомпилировать под новым GCC. В
случае с новым OCaml'ом даже перекомпиляция не поможет.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[24]: ocamlopt и MSVC - кто быстрее?
От: reductor  
Дата: 04.12.05 18:29
Оценка: :)
Здравствуйте, gear nuke, Вы писали:

GN>А может ли быть такое, что в изначальных теста С++ вариант делался для получения "ожидаемых" результатов? Меня всегда смущала разница в измерениях в 5%



Мда, господа
с удовольствием бы с вами поиграл в этой песочнице и показал что произойдет на PowerPC и после того, как окамлу заменить вектор на CamlG4 например или что-нибудбь еще такое, но как-то не увлекает, знаете ли...

Давайте лучше сразу прямо здесь запишем, что С++ это самый быстрый, разумный, добрый и вечный язык.
А то спам в ящике надоел.
Re[30]: ocamlopt и MSVC - кто быстрее?
От: jedi Мухосранск  
Дата: 04.12.05 21:55
Оценка: +1
Здравствуйте, reductor, Вы писали:

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

R>У вас есть на него ответ?

Поиск по форуму рулит, вопрос неоднократно обсуждался

R>Спасибо, нет.


Жаль
Re[4]: C++ vs ???
От: zip_ Россия  
Дата: 05.12.05 19:38
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, zip_, Вы писали:


_>>Но не покидает ощущение, что ФЯ даст качественно больше.

_>>D — это улучшение С++, ФЯ — это другое измерение.

E>Это больше напоминает поиск серебрянной пули.


Думаю стоит попробовать, хотя бы для того, чтобы объективно сравнивать.
Re[22]: C++ vs ???
От: reductor  
Дата: 05.12.05 21:49
Оценка: +1
Здравствуйте, zip_, Вы писали:


_>emacs у меня не пошел, как и vim. ИМХО пользоваться ими под win — моветон (почему я сижу под win, но пишу под *nix — это отдельный вопрос, не хочу это обсуждать в этой теме). emacs продукт для фанатов, к тому же знающих lisp, у остальных просто не будет стольно времени для его настройки под себя.


Ладно, про emacs спорить не буду, хотя это не настолько неюзабельная вещь, как кажется с первого взгляда.
А вот gvim у меня под виндовс стоит в качестве замены notepad. очень быстрый и очень функциональный для своей скорости.
и умеет работать со всеми языками какие только можно придумать.
Ну и что-то быстро поправить я именно им пользуюсь всегда — это проще.

_>fpeclipse ставил, не понравилось, есть ощущение сырости и недоделанности продукта, к тому же не развивается совсем (похоже автор больше в haskell ударился).

Ну у меня такое же ощущение. Впрочем, такое же у меня вызывает весь eclipse в целом и вообще все "большие" IDE, ничего не могу с собой поделать из командной строки того же вима или имакса у меня все получается делать гораздо быстрее.

_>jedit стоит посмотреть, с первого взгляда неплохо, возможно будет функциональнее PN2.


jedit да, у него еще большое преимущество, что он идет и под win и под линуксом и под маком и везде одинаковый.
ну и вообще представляет из себя что-то среднее между редактором и IDE и по расширяемости почти приближается к имаксу.
там нужно только не забыть сразу поставить нужные расширения (Console, Project Viewer, Code Browser).
Re[24]: C++ vs ???
От: z00n  
Дата: 06.12.05 13:28
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>z00n wrote:


>> emacs или vim — это такая вещь, что потратил несколько дней — и забыл

>> о проблемах на всю жизнь. Тем более, после того, как в MSVS 2005
>> добавили emacs-раскладку, навыки еще и не пропадут

C>В качестве противовеса: http://rsdn.ru/Forum/Message.aspx?mid=1313142
Автор: Cyberax
Дата: 08.08.05


Я, собственно, после этой темы и решился попробовать Если не обращать внимания на флейм,
там много полезной информации.
Re[31]: C++ vs ???
От: gear nuke  
Дата: 07.12.05 06:47
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>программы на функциональных языках меньше связывают руки компилятору, что теоретически позволяет написать более эффективный оптимизатор


Вот оказывается как всё просто, а я было начал думать, что в Ocaml действительно каким-то сверхитрым образом функции вызываются.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[33]: C++ vs ???
От: reductor  
Дата: 07.12.05 08:42
Оценка: +1
Здравствуйте, gear nuke, Вы писали:

GN>

Просто откомпилируйте что-нибудь простое на окамле и си++ — увидите в чем разница

GN>>>просто откомпилировал и посмотрел. рейтрейсер — первое, что попалось.

R>>А не надо первое что попалось.


GN>Так что же надо было? :xz:


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

R>>И я не предлагал тут устраивать глупые микробенчмарки.

GN>Напишите это авторам тех притянутых за уши бенчмарков. Я лишь проверил степень притянутости.

Зачем, авторы по-моему сразу же объясняют что к чему:

This comparison is as much about simplicity as it is about performance. All of these programs are largely unoptimised. Slight changes to the compile-line arguments or source code can substantially alter run-time performance. Consequently, our performance measurements are only a rough guide to the performance of the languages.


Какие у вас еще к ним претензии?

R>>Смысл всего сводился к тому, что в случае окамла, "даром" мы получаем больше, чем в случае С++. ВСЕ.

R>>Теоретически, окамл, как более формальный язык откомпилировать "лучше" — проще.
R>>В любом случае, полный статический анализ невозможен в случае с окамлом так же, как и в случае с С++.
GN>В общем, понятно — полный статический анализ не возможен, поэтому явные преимущества не очевидны.

В случае с окамлом для анализа доступно больше. В нем мы можем определить имеет ли функция побочный эффект или нет, например. У него гораздо более мощная и консистентная система типов, которая дает нам гораздо больше информации о данных, с которыми работает программа. Нет никакого RTTI и адресной арифметики, никакого кастинга и нельзя тем более закастить int в указатель. И так далее.
Если вы когда-нибудь писали свой компилятор, вы не будете спорить, что это все важные вещи.


R>>Но как бы то ни было, представьте, что у вас система из 2 000 000 (двух миллионов) строк на С++, которая моделирует погоду или рулит данными на какой-нибудь бирже и как вы каждый день в течение нескольких лет приходите на работу, чтобы переписать calling conventions у очередных 10 функций и вычистить оттуда всю адресную арифметику и прочую гадость.


GN>Да зачем же calling conventions переписывать? Это всё делает либо один ключик, либо компилятор автоматически при whole program optimization. Про это никто никогда не думает, пока не потребуется оптимизировать десяток каких-то жалких строк. Да и зря Вы к стеку цепляетесь — на том же Itanium всё в регистрах передаётся.


Ну как зачем. А что делать с 2000 функций, которые произвольно шуруют в памяти и просто так их как fastcall не откомпилишь?
а что про Itanium — это тоже замечательная тема о языке, который ведет себя по-разному на разных архитектурах.
Или думаете перенос кода внутри одной компании с альфы на спарк — это такая уж редкость?


R>>Это все по сравнению с такой же системой на, например, O'Caml, которая и занимать будет не два миллиона, а 500 000 строк и у которой заранее нет ничего, что бы мешало получить приемлимый результат.


GN>Мы сравнивали не количество строчек, а скорость результирующего кода.


ООО. Так вот при таком количестве кода и наступает самое интересное. Тут и GC начинает вдруг становиться незаменимым и модульность языка становится ой как заметной и то что все вызовы без разбора через регистры идут тоже приятности не убавляет.
С кодом где много сложных структур и сложная с ними работа у меня и Haskell С++ делает со своим copy-on-write, ленивостью и следующей из нее бесплатной мемоизацией. Ну, может, если я потрачу пару миллионов долларов, я С++ версию смогу оптимизировать достаточно, чтобы она была на 30% быстрее и в 25 раз больше по размеру кода, чем в случае с Хаскелем.
А потом еще и настоящий хардкор с поддержкой начнется.

R>>Потому мы и не можем любой функции на C++ сделать fastcall и потому С++ _заранее_ — тормоз.


GN>Можем. Нужно почитать доку к компилятору. И я уже видел, какой он тормоз. Выполняется в 0.6 раз медленнее :))


Ну это все бессмысленно. производительность скомпилированного кода — это не только кто быстрее 2+2 сложит.


R>>Ну и разумеется, разрыв увеличивается на RISC-архитектурах с большим количеством регистров и большим кешем.


GN>Я про кеш с удовольствием бы послушал. На С++, с его ручным управлением памяти, можно этот кеш даже использовать как нужно (пример. после начальной теории на asm приводится код на С, который это делает). На OCaml такое возможно?


Возможно что — писать код, оптимизированный для AMD? Слава богу, нет.
Вам, кстати, не кажется, что это, на секунду, задача анализатора, оптимизатора и векторизатора?
Последний раз, когда я пытался подобные фокусы на c/ppc вытворять (очень давно. даже не вспомню что делал), я лишь получил по мордам _уменьшением_ производительности.
Оптимизатору gcc лишь крышло снесло от моих фокусов.
А когда все-таки добился, чего хотел на G4 — опять получил по морде на G5.

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

Это должны быть как максимум — хинты компилятору в виде прагм и ключей при компиляции.
Особенно учитывая портабельность.

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

GN>Большее количество регистров — поможет С++. Пока что компилятор OCaml использует очень ограниченное их количество (избитый пример с рейтресером использует регистр EBP всего 4 раза).


Ну так сделайте окамлу более продвинутый кодогенератор, в чем проблема-то?

R>>Тем не менее, все численные задачи у физиков-теоретиков до сих пор пишутся на фортране.

GN>Никто не хочет выкидывать в карзину наработки?

Им задачи нужно решать, а не наработки сохранять.
Потом, наработки можно и из кода на другом языке вызывать.

R>>И вот, например, некоторые бенчмарки: http://www.oonumerics.org/blitz/benchmarks/


GN>

The below table shows median performance of Blitz++ on 21 loop kernels, relative to the best native Fortran compiler with typical optimization switches (-O3, -Ofast)


GN>Вполне на уровне результаты для 90го года — в среднем 90% от лучшего компилятора. :)


А ведь здесь С++ оптимизировали, да по полной. Что же мешает обогнать древний фортран?
С++ же к железу ближе.

GN>>>В некоторых случаях напечатает 2й параметр, переданный в test. Потому что в ISO/IEC 14882 ничего не говориться про стек.


R>>Вот именно.

R>>Это то, что я называю непредсказуемостью.
GN>Что ещё ожидать от кода с ошибками? :)

Этот код с ошибками откомпилировался без единого warning'a в gcc и вывел именно второй параметр.
Так что не нужно...

R>>И это то, что создает проблемы для компилятора и еще какие.


GN>Уже устал читать это. Объяснений, как я понял, не будет :-\


А что мне вам объяснять? Миллион причин и вариантов.
И куча сайтов и книг по компиляции.

R>>Я не пониаю почему я вообще должен отвечать на такие вопросы.


GN>Вы ничего не должны.

GN>Нет аргументов — вполне возможно, утверждение ложно.

Аргументов в пользу чего? Я вам чтоли что-то доказать хочу? Если вы так думаете, вы ошибаетесь.
В случае, если вы что-то хотите узнать для себя и сомневаетесь в том, что я вам говорю — весь гугл в ваших руках.
Если хотите со мной поспорить — я пас.
Если хотите сказать мне, что я где-то ошибся — буду рад услышать, тно только не в виде бенчмарков по сравнению ежа с ужом.

GN>>>представление целых чисел в OCaml мешает компилятору.

R>>Представление чисел может представлять интерес для того, кто будет потом с этими числами работать.
GN>Обратите внимание на выделенное.

Да чем мешает-то. Как будто он обязан всегда оставлять это представление.
Это представление — оно для GC и для внешнего кода, а не для компилятора.
И компилятор всегда знает будет с этим куском работать GC или что-то извне или нет.
Окамл достаточно жесткий язык, чтобы это гарантировать.

R>>Если же это число не пойдет никуда дальше того места, в котором с ним идет работа и мы можем быть в этом уверенны в случае с O'Caml, то каким оно будет не должно волновать никого.

R>>В случае же с С++ такой гарантии у нас нет и проблемы со стеком некоторым образом относятся к этому.

GN>Про стек замнём — это досужие домыслы.


Да, злые языки.

R>>гарантий, что какая-то функция не получит доступа к любому значению у нас нет.


GN>
GN>void foo() { static const i = 0; } 
GN>

GN>Как получить доступ к i из функции bar? Или что имелось ввиду?

имелось в виду, что к значениям возможен неявный доступ через порнографию с указателями.
по этой причине и с GC у С++ проблемы.

GN>>>Почему "нельзя быть уверенным ни в чем" ?


R>>Потому что мы не можем написать статический анализатор который даст нам ответ "используется ли это значение где-нибудь еще".


GN>

полный статический анализ невозможен в случае с окамлом так же, как и в случае с С++


в случае с окамлом он более возможен. и в случае с окамлом у нас правила игры гораздо жестче.
окамл вам не даст написать int* i = k + 15;
вообще ничего не даст, чего не сможет проверить, включая касты.
у него конечно есть недокументированные функции и библиотеки. но кто ими пользуется — сам дурак и скоро нарвется.


R>>>>Те, для кого это критично и сами давно во всем разобрались.


GN>>>Для меня критично. Я разобрался :)


R>>Я рад. Чего же вы от меня тогда хотите, если во всем разобрались?


GN>Уже ничего.

GN>Хотел понять, каков процент ваших слов верен.

Это не ко мне — это к моему лечащему врачу или к гуглу.

R>>Я не знаю что у вас за пристрастие к С++, что вы его так ожесточенно защищаете.


GN>Я, возможно, только рад бы был, если бы С++ совсем не было. Ужасный язык с описанием на тыщу страниц.

GN>И защищаю не язык, но его скорость.

Думаете, его скорость нуждается в защите? :)
Лучше бы послали патч к кодогенератору окамла разработчикам.
Благо у окамла ничего не стоит заменить там что-нибудь.

R>>Все, давайте прекращать это дело.


GN>Нет проблем.

GN>Вижу, что это пустое занятие.

Именно. И что-то уровень дискусси упал ниже любых отметок.


R>>Мы тратим время на обсуждение того, что давно было обсуждено еще в 80ые.


GN>До рождения С++? :))


И до и в момент и после.
Re[34]: C++ vs ???
От: peterbes Россия  
Дата: 07.12.05 08:43
Оценка: +1
Здравствуйте, reductor, Вы писали:

Вас было интересно читать, было также очень интересно читать аргументы ваших оппонентов. Почему предложение написать статью у вас вызывает неприязнь, при том, что вам есть, что сказать по существу. Ваши телодвижения с аккаунтом выглядят глупо, по большому счету ни у кого нет особого желания отслеживать специально ваши реплики с целью поиска несуразностей и дискредитации вашей основной идеи.
Re[37]: C++ vs ???
От: vdimas Россия  
Дата: 08.12.05 09:05
Оценка: +1
Здравствуйте, gear nuke, Вы писали:

V>>Там невалидность видна невооруженным взглядом и специально демонстрировалась. Получить подобную невалидность на 3-м или 5-м уровне коссвенности — легко и наблюдалось мною не раз (она возникает из-за отсутствия четких спецификаций и ограничений на параметры методов, а компилятор пропускает все подряд, есс-но).


GN>Речь не о том вёл, качество входного кода зависит целиком от человека, задача компилятора лишь компилировать это в соответствии стандарту.


Я бы внес в стандарт С++ невозможность взятия адреса локальной переменной или адреса значения по ссылке. Это нонсенсы и унаследованные совершенно ненужные св-ва С. Я наблюдал в проектах не доконца продуманные на всех уровнях стыковочные АПИ, где указатели менялись на ссылки по мере погружения или наоборот. Yahooo!!!, как говориться, такого простора для UB еще поискать.

ПОЧЕМУ до сих пор С++ не приведен в состояние, более верифицируемое компилятором? От того всякие редукторы и приводят в пример гораздо более слабые языки (с т.з. выразительности), но которые обладают одним неоспоримым преимуществом — безопасностью (верифицируемостью, которая тянет за собой возможность настоящей whole program optimmization ). Причем, эта безопасность достигается без managed и всяких VM. (как в Fortran в свое время, чего не скажешь, кстати, о том же Паскаль)

GN>Глаза боятся, а руки делают:

[...]
GN>Это конечно далеко от совершенства и есть ляпы, но иной раз, компилятор оптимизирует даже неочевидные на первый взгляд для человека места.

Ты даже не представляешь как это далеко от совершенства на виртуальных, экспортируемых или библиотечных ф-иях. Приемлимо работает только с небольшими ф-иями. И практически не оптимизирует "игры" с указателями, на что был сделан акцент, а ты не обратил внимания.

GN>.NET вот тоже не даёт начудить с указателями, потому и проигрывает в скорости на одном и том же компиляторе. Хотя там и копейки, для многих задач. Кстати, интересно что на платформе windows управляемый С++ работают со скоростью OCaml Ну и С# соответственно тоже, если не быстрее в некоторых местах.


Не надо сравнивать MC++ и C++. Там фомируются кадры стека в процедуре перехода managed/unmanaged, которую приходится выполнять сплошь и рядом в смешанной программе. В общем, там ненужные затраты на голом месте. Действительно, полностью managed код может работать эффективнее, чем подобная солянка.

OCalm еще явно сырой. Но представь хоть на минуту, если в него вложить столько же усилий, сколько в С++ от MS. Мне не нравится этот язык, просто я отдаю себе отчет в потенциале верифицируемого и заведомо оптимизируемого кода.

R>>>>Да чем мешает-то. Как будто он обязан всегда оставлять это представление.

R>>>>Это представление — оно для GC и для внешнего кода, а не для компилятора.

GN>>>Это не важно. Арифметика будет проигрывать аналогу в С++ всегда за счёт оверхеда на сдвиги (деление/умножение на 2).


V>>Тебе сказали о том, что подобное представление не специфицировано. Т.е. на других компиляторах возможно другое представление. Вообще, я бы скорее выделил лишнее слово памяти, чем 1 бит


GN>В данном случае не важно, для чего оно. Оно даёт оверхед, это снижает скорость. Вот о чём речь.


Это без оптимизатора, очевидно. В тех подпрограммах из примера rays совершенно не требовалось кодировать целые числа в подпрограммах. Я пока видел явно собранный совершенно "в лоб" ассемблерный листинг. Моли бы купить хотя бы оптимизатор от Borland Pascal 90-го года, думаю, недорого взяли бы

V>>С++ — это универсальный язык, помимо прочего. Мне даже трудно определиться, что лучше: владение универсальным инструментом, или владение множеством узконаправленных, но идеально подходящих для конкретных случаев инструментов.


V>>Но у первого подхода все бенефиты скорее организационно-административного плана, как с технической т.з., так и с т.з. управления ресурсами (людскими)


GN>Да, это к сожалению или к счастью действительно так.


MS со своей .Net VM как раз пытается создать платформу для БИНАРНОЙ совместимости языков. И поверь, эта инициатива окажет существенное влияние на внутреннее представление программ и данных, порождаемые компиляторами/интерпретаторами с других языков. По крайней мере, все это снизит организационные расходы технического плана в гетерогенной среде разработки.
Re[38]: C++ vs ???
От: reductor  
Дата: 08.12.05 10:54
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>ПОЧЕМУ до сих пор С++ не приведен в состояние, более верифицируемое компилятором? От того всякие редукторы и приводят в пример гораздо более слабые языки (с т.з. выразительности), но которые обладают одним неоспоримым преимуществом — безопасностью (верифицируемостью, которая тянет за собой возможность настоящей whole program optimmization ;) ). Причем, эта безопасность достигается без managed и всяких VM. (как в Fortran в свое время, чего не скажешь, кстати, о том же Паскаль)


Пардон, я тут на ключевое слово отреагировал.
Но не могу не заметить, что окамл ни на секунду не менее выразителен, чем С++.
Больше — можно, меньше — ни-ни (с). Это без расчета на поспорить, просто личное мнение.
Одна из причин:
http://caml.inria.fr/pub/docs/tutorial-camlp4/index.html
Другая:
let rec qsort array = match array with 
     []              -> []
     | pivot::rest   -> let left,right = List.partition (function x -> x < pivot) rest
                        in (qsort left) @ pivot::(qsort right);;



V>OCalm еще явно сырой. Но представь хоть на минуту, если в него вложить столько же усилий, сколько в С++ от MS. Мне не нравится этот язык, просто я отдаю себе отчет в потенциале верифицируемого и заведомо оптимизируемого кода.


Как язык окамл не сырой. Да и вообще он не то, чтобы сырой — просто разработчики родного компилятора считают, что чем проще компилятор, тем лучше. Где-то они правы.
А так у у него некоторые вещи — просто произведения искусства. Тот же GC, например.
Окамлу 15 лет уже и он уже много где очень хорошо поработал.
Re[39]: C++ vs ???
От: vdimas Россия  
Дата: 10.12.05 16:09
Оценка: :)
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>Здравствуйте, vdimas, Вы писали:


V>>гораздо более слабые языки (с т.з. выразительности)

ГА>Разрешите поинтересоваться, о какой выразительности идет речь? Я вот выбрал ОКамл именно из-за выразительности, верифицируемость пока на втором плане, может быть зря?

Под выразительностью С++ я подразумеваю возможность переопределения практически любых операторов (в т.ч. операторов приведения типов) и шаблонные возможности.

В итоге, на программе на С++ можно разработать такую систему прикладных типов и множество операций над этой системой в "привычном" виде (т.е "+" это "+", а не AddItem) в терминах которых данная прикладная задача описывается наиболее:
— эффективно
— читаемо/понятно
— надежно
— приближенно к прикладной области
Re[20]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.05 23:14
Оценка: +1
Здравствуйте, reductor, Вы писали:

R>Да даже gcc умеет разворачивать хвостовую рекурсию — это простейшая совершенно оптимизация. Дело не в этом.

R>Просто откомпилируйте что-нибудь простое на окамле и си++ — увидите в чем разница

Такая оптимизация большая редкость в мире С++. Она просто на фиг не нужна, так как язык императивный. А вот в ФЯ она жизненно не обходима. Ну, а сравнивать по данному критерию скорости компиляторов просто мошейничество.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: C++ vs ???
От: reductor  
Дата: 11.12.05 16:06
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, reductor, Вы писали:


R>>И не только вызов функции.

R>>Что особо примечательно, компилятор у окамла почти не оптимизирует ничего, он простой как три рубля.
R>>Если бы еще и оптимизировал...

VD>Офигительно простой. Видимо из-за простоты умудряется переписывать рекурсию в итерацию. И за одно размещать объекты в стеке, а не в ЖЦ. Ява и дотнет до такой простоты еще не доросли.


VD>ЗЫ


VD>Тебе не программированием, тебе пиаром нужно было заниматься. :)


Переписать хвостовою рекурсию в цикл — это вообще за оптимизацию не считается.
ну и в случае со стеком и регистрами в случае с окамлом — это не оптимизация вообще. мы заранее знаем, что это ничего не сломает.

сложная оптимизация — это обширный статанализ, которым компилятор имени ксавье лероя явно не страдает.
Re[40]: C++ vs ???
От: z00n  
Дата: 12.12.05 10:02
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>Это неверно, кстати. В C/C++ есть ключевое слово restrict, которое

C>говорит оптимизатору, что указатель не будет иметь alias'инга.

Есть в С99, а в С++ всего 3 ключевых слова на "R": return, register и reinterpret_cast
Re[41]: C++ vs ???
От: Cyberax Марс  
Дата: 12.12.05 10:29
Оценка: +1
z00n wrote:

> C>Это неверно, кстати. В C/C++ есть ключевое слово restrict, которое

> C>говорит оптимизатору, что указатель не будет иметь alias'инга.
> Есть в С99, а в С++ всего 3 ключевых слова на "R": return, register и
> reinterpret_cast

Оно будет в C++09, а пока есть в GCC и MSVC в виде __restrict.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[43]: C++ vs ???
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.12.05 10:55
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>Сможет ли компилятор проконтроллировать?

Гм. А ничего, что компилятор не может проконтролировать reinterpret_cast? restrict — это еще один способ для программиста дать компилятору некоторое обещание. В обмен на порождение более оптимального кода.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[44]: C++ vs ???
От: vdimas Россия  
Дата: 13.12.05 10:58
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

>> А кто контоллирует выполнение обещания?


C>Совесть программиста


Да я как бы на это и намекал
Т.е. ты должен понимать, что в реальной жизни это — грабли. Т.е. не покатит. Пускай это останется для C, у него и так все на машинном уровне, но я был бы против такого в C++.
Re[46]: C++ vs ???
От: reductor  
Дата: 13.12.05 13:06
Оценка: +1
Здравствуйте, VladD2, Вы писали:

R>>Эти фантазии относятся к окамлу не больше, чем к С++.


VD>Ай как не хорошо. Опять вместо аргументации нечестные приемы. Назваем чужие слова "фантазией" без малейших на то оснований.


То, что окамл нацелен на работу со списками — чистой воды фантазии, да девичьи мечты.

VD>И что мне на него смотреть? Ты напиши эффективную реализацю быстрой сортировки не массивах да с выборкой разделителя из середины, а потом сравним этот код с тем самым С++ и исходным вариантом на Окамле. Если он будет таким же кратким как исходный, я сниму шляпу. А если он окажется медленее или длинее, то извини, но ты докажешь свою не правоту.


Вот, минут за 20 на коленке mergesort (устойчивая O(n log n) сортировка) in-place на окамле. Почти не использует никаких библиотечных функций:
open Array;;
let msort xs = 
    let rec sort bgn fin =
        let rec merge bgn mid fin =
            let shift () = blit xs bgn xs (bgn + 1) (mid - bgn) in
            if mid >= fin || bgn >= mid then ()
            else let x, y = xs.(bgn), xs.(mid) in
                 let change () = (shift (); xs.(bgn) <- y) in
                 let bgn, mid = if x <= y then (bgn + 1, mid)
                                else (change (); (bgn, mid + 1))
                 in merge bgn mid fin in
        if fin - bgn <= 1 then ()
        else let mid = (fin + bgn) / 2 in
             let () = sort bgn mid; sort mid fin
             in merge bgn mid fin
    in sort 0 (length xs);;

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


VD>Ну, тебе виднее. Я в Окамле делетант.

Я правильно вас понимаю, что вы считаете нормальным — являсь дилетантом в языке выдавать агрессивные суждения о нем и еще потом отстаивать свои фантазии?
Если так, дальнейшая дискуссия не имеет смысла.

VD>Но вот в совершенно не функциональном Руби код получается не более длинный чем в Окамле, а ведь "матчить" то он вроде не умеет.


Я правильно вас понимаю, что вы предлагаете всем отказаться от окамла и С++ в пользу руби?

R>>Я все сказал на эту тему, повторяться не буду.

R>>Еще не хватало участвовать в спорах на уровне первокурсников.

VD>Ты пока что споришь на уровне палитиков из ящика. Громко, зажигательно, оскорбительно... но бестолково и не честно. Все аргументы "делетантство", "первокурсник" и т.п. Называется это одним емким и красочным словом — демогогия. И тут ты не лучший. Тут есть перцы которые ей родимой кого хочешь куда хочешь заткнут если их вовремя не остановить. :)


Если я не ошибаюсь, то дилетанство было подтверждено от первого лица.
А что касается лично меня — я пока не начинал переходить на личности. И не нужно мне говорить лучший я или не лучший и какие тут перцы — все это меня не волнует ни единой секунды.

VD>В общем, общаться на уровне "делетантсва" и "первокурсников" я не намерен. Отвечая таким образом на технический вопрос ты рассписывашся в своей неправоте. Мне этого ответа достаточно. Но если вдруг захочется дейсвительно аргументировано ответить, то я буду очень рад.


Интересно бы еще услышать в какой неправоте я здесь рассписываюсь.
Re[33]: ocamlopt и MSVC - кто быстрее?
От: reductor  
Дата: 13.12.05 13:47
Оценка: :)
Здравствуйте, VladD2, Вы писали:


VD>Видел как тут народ на Оберон реагирует? Это потому, что Губанов палку перегнул. Вот тоже будет с Окамлом если его так "поддерживать". Пойми, тут на форуме почти все сочувствующие функциональному подходу вообще и Окамлу в частности. А гиперпропаганда просто отталкивает.


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


VD>Мы с удовольствием послушаем интересные мысли. Даже с удоволствием поспорим в честном споре. Но когда начинается пиар и фанатизм, то хочется только противодействовать.


Да мне в общем-то даже спорить неинтересно. Мне интересно узнавать что-то новое для себя. Затем я здесь.

VD>На этом форуме давно извесно кто за что ратует. Я вот дотнет пропагандирую, ПК плюсы, Губанов Оберон, Гапертон и т.п. ФЯ. Каждый по своему прав. И каждый дает остальным некоторые новые знания. Потому мы тут сидим, а не разбежались по углам или не перенабили друг-другу морду. Так что присоеденяйся. :)


Да ну, ратовать еще за что-то. Не хочу.
Я программировать люблю. Учиться люблю.
Если кто-то спрашивает о чем-то, в чем я разбираюсь — могу ответить.
Ратовать и пропагандировать — не люблю.
Re[22]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 14.12.05 20:55
Оценка: :)
Здравствуйте, gear nuke, Вы писали:

GN>Лучше один раз увидеть, чем сто раз услышать


GN>Поэтому провёл сравнение сам.

в продолжении
http://www.rsdn.ru/Forum/Message.aspx?mid=1539715&amp;only=1
Автор: Gaperton
Дата: 14.12.05


Ксатити, по приведенной тобой ссылке используется как раз gcc. А не MSVC последней версии, у которого кодогенератор заметно качественнее.

Короче, твои аргументы в этом грандиозном флейме высосаны из пальца, на самом деле. ocamlopt использует gcc для кодогенерации. Вот и все. Так что для правильного сравнения надо или заставить OCaml использовать MSVC, или использовать gcc (для чего можно и по ссылке сходить — посмотреть, как плюсовая прога немного проиграет окамловой — такие случаи иногда бывают). Если ты, конечно, хочешь сравнить языки.
Re[24]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 14.12.05 22:02
Оценка: -1
Здравствуйте, Pzz, Вы писали:

Pzz>Gaperton wrote:

>>
>> Ксатити, по приведенной тобой ссылке используется как раз gcc. А не MSVC
>> последней версии, у которого кодогенератор заметно качественнее.

Pzz>Это очень спорное утверждение. Например, если скомпилировать

Pzz>криптографический алгоритм rc4, наивно написанный на C без всяких там
Pzz>выкрутасов, то gcc 2.95 с чем-то обогнал MSVC 7.1 в два раза по
Pzz>производительности получившегося кода.
Ой, правда штоли? Что же тогда gear nuke так отмахивается от идеи использовать такой хороший gcc при сравнениях с окамлом? А, понял — тогда у нас окамл самый быстрый в мире язык получится. .

А вообще — из того, что один компилятор на одной маленькой проге кого-то там обогнал — не следует ничего ровным счетом. Подумаешь, gcc на маленькой программе за счет unrolling-а короткого цикла (единственный фокус, который может ему помочь) смог чутка выбится вперед. Глупости.

>> Короче, твои аргументы в этом грандиозном флейме высосаны из пальца, на

>> самом деле. ocamlopt использует gcc для кодогенерации. Вот и все. Так

Pzz>Уй, правда что ли? Вообще-то, он всегда умел сам кодогенерить...

Неправда. С-шные опции ему тока для сборки с С-шными сорцами нужны Перепутал чутка . Впрочем, -unsafe это не отменяет. И использования кросплатформенного кодогенератора для сравнения — например, того же gcc.
Re[25]: Жульничество
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.12.05 00:30
Оценка: +1
Gaperton wrote:
>
> Pzz>Это очень спорное утверждение. Например, если скомпилировать
> Pzz>криптографический алгоритм rc4, наивно написанный на C без всяких там
> Pzz>выкрутасов, то gcc 2.95 с чем-то обогнал MSVC 7.1 в два раза по
> Pzz>производительности получившегося кода.
> Ой, правда штоли? Что же тогда gear nuke так отмахивается от идеи
> использовать такой хороший gcc при сравнениях с окамлом? А, понял —
> тогда у нас окамл самый быстрый в мире язык получится. .
>
> А вообще — из того, что один компилятор на одной маленькой проге кого-то
> там обогнал — не следует ничего ровным счетом. Подумаешь, gcc на
> маленькой программе за счет unrolling-а короткого цикла (единственный
> фокус, который может ему помочь) смог чутка выбится вперед. Глупости.

Скорее, в том случае gcc больше повезло с аллокацией регистров. Для
нормальной реализации rc4 на x86 регистров чуть-чуть не хватает.

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

А вот чем MSVC точно плох по сравнению со многими другими компиляторами,
так это отсутствием нормальной поддержки современных стандартов C/C++.
Про C99 в мелкософте, похоже, вообще пока не слышали...
Posted via RSDN NNTP Server 2.0
Re[28]: Жульничество?
От: Gaperton http://gaperton.livejournal.com
Дата: 15.12.05 09:47
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Gaperton wrote:

>> OCaml на довольно широком классе задач, связанных с обработкой сложных
>> структур данных, дает выигрышь по сравнению с С++ по срокам разработки.
C>Дело в том, что класс задач по обработке сложных структур данных сам по
C>себе недостаточно широк.

Дело в том, что во первых, мы отметаем это утверждение как голословное и лишенное смысла из-за общности и неконкретностии, а во вторых — напоминаем, что класс задач, требующий бешеной производительности — сам по себе узок как танковая смотровая щель. И для таких задач, как это ни прискорбно, чаще всего применяется Fortran.
Re[29]: Жульничество?
От: Cyberax Марс  
Дата: 15.12.05 09:56
Оценка: +1
Gaperton wrote:
> Дело в том, что во первых, мы отметаем это утверждение как голословное и
> лишенное смысла из-за общности и неконкретностии, а во вторых —
> напоминаем, что класс задач, требующий бешеной производительности — сам
> по себе узок как танковая смотровая щель.
А вот тут полностью не согласен. Производительность ОЧЕНЬ важна для
многих настольных приложений, игр. Ну и для самой ОС.

> И для таких задач, как это ни прискорбно, чаще всего применяется Fortran.

Не путайте. Fortran применяется для числодробилок, которые далеко не
исчерпывают класс критичных к скорости задач.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[30]: Жульничество?
От: z00n  
Дата: 15.12.05 13:02
Оценка: -1
Здравствуйте, Cyberax, Вы писали:

C>А вот тут полностью не согласен. Производительность ОЧЕНЬ важна для

C>многих настольных приложений, игр. Ну и для самой ОС.

Для игр по большому счету — нет. ~80% кода современных игр написаны на Lua (и еще ~10% на всяких Python, Javascript etc.) — а как у Луа со скоростью, можете там же взглянуть ( http://shootout.alioth.debian.org/benchmark.php?test=all&amp;lang=gpp&amp;lang2=lua ). Игры давно перешагнули тот порог сложности, когда их имело смысл целиком писать на С++. (Точнее, такого периода в истории игростроения практически не было — сначала писали на чистом ассемблере, а потом, одновременно с переходом на С, начали прикручивать самопальные скрипты)

Кстати, все обходят вниманием то, что ладно скорость приличная, но ведь и памяти Ocaml ест не больше C++, что для языка с GC совершенно нетипично.
Re[27]: Жульничество
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.12.05 16:09
Оценка: -1
Gaperton wrote:
>
> Pzz>Вообще, все современные компиляторы в чем-то будут лучше других, в
> Pzz>чем-то будут хуже. Утверждать, что один из них кардинально лучше другого
> Pzz>в плане кодогенерации было бы наивно.
>
> Что вы, наивности я за собой не припомню. Я вот, например, сейчас
> утверждаю: Intel C++ *кардинально *лучше текущей версии gcc в плане
> кодогенерации на платформе x86. В силу существенно более сложного
> кодогенератора — у него там полная модель интеловых процов внутри,
> которая почти все факторы учитывает, с легкостью обходя в этом

Вы можете подкрепить свои общие утверждения какими-то конкретными
фактическими материалами? Если нет, то это как раз демонстрирует
наивность Вашего подхода.

Не забывайте, кстати, что x86'я архитектура, это не только Intel, но и
AMD. И вот на генерацию кода под AMD Интеловским ребятам было, мягко
говоря, наплевать.

> программиста на ассемблере. Да, я берусь утверждать, что вы не сможете

> обогнать IC++ при ручном кодировании на ассемблере на более-менее
> нетривиальном алгоритме — это за пределами человеческих возможностей.

А что, IC++ боги, что ли, писали? Если они смогли написать хороший
кодогенератор, то и я смогу руками сгенерировать хороший код. Не за 5
минут, конечно Вопрос только, зачем?

> Хотите — проверьте сами .


Не хочу.
Posted via RSDN NNTP Server 2.0
Re[28]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 15.12.05 16:44
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>Gaperton wrote:

>>
>> Pzz>Вообще, все современные компиляторы в чем-то будут лучше других, в
>> Pzz>чем-то будут хуже. Утверждать, что один из них кардинально лучше другого
>> Pzz>в плане кодогенерации было бы наивно.
>>
>> Что вы, наивности я за собой не припомню. Я вот, например, сейчас
>> утверждаю: Intel C++ *кардинально *лучше текущей версии gcc в плане
>> кодогенерации на платформе x86. В силу существенно более сложного
>> кодогенератора — у него там полная модель интеловых процов внутри,
>> которая почти все факторы учитывает, с легкостью обходя в этом

Pzz>Вы можете подкрепить свои общие утверждения какими-то конкретными

Pzz>фактическими материалами? Если нет, то это как раз демонстрирует
Pzz>наивность Вашего подхода.

1) Если у вас есть знакомые из компании Мирантис, советую связаться с ними и узнать, каким образом применение IC++ позволило им увеличить производительность симуляции процесса литографии на 20% (насколько я помню).
2) Потрудитесь сами взглянуть на тесты IC++. Их несложно найти в интернете — времени уйдет меньше, чем на выяснение степени моей наивности. Для вас, я вижу, последняя проблема имеет больший приоритет .
3) Зайдите в наш форум С++ или на какой-нибудь форум разработчиков игр, и повторите ваши рассуждения. Вам объяснят подробно и на примерах, кто наивен.
4) Так как ваш не наивный подход не предполагает самостоятельный поиск ссылок, даю первое, что нашел — для общего развития:
IC++ рвет MSVC: http://www.ixbt.com/cpu/insidespeccpu2000-compilers.shtml
gcc против IC++ на тесте SPEC2000: http://www.ixbt.com/cpu/insidespeccpu2000-part-h.shtml
IC++, MSVC 6 и 7: http://www.ixbt.com/cpu/insidespeccpu2000-compilers-add1.shtml
Для тех, кто в танке — еще раз: IC++ рвет gcc на кровавые ошметки: http://www.ixbt.com/cpu/insidespeccpu2000-compilers-add2.shtml

Pzz>Не забывайте, кстати, что x86'я архитектура, это не только Intel, но и

Pzz>AMD. И вот на генерацию кода под AMD Интеловским ребятам было, мягко
Pzz>говоря, наплевать.

>> программиста на ассемблере. Да, я берусь утверждать, что вы не сможете

>> обогнать IC++ при ручном кодировании на ассемблере на более-менее
>> нетривиальном алгоритме — это за пределами человеческих возможностей.

Pzz>А что, IC++ боги, что ли, писали? Если они смогли написать хороший

Pzz>кодогенератор, то и я смогу руками сгенерировать хороший код.

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

G> Хотите — проверьте сами .

Pzz> Не хочу.

И это правильно. Мешки ворочать — тяжелая физическая работа, недостойная благородного дона. Давайте посмотрим, как с ний справляются другие умудренные жизнью оптимисты, думавшие, что могут обойти кодогенератор IC++. Незнаю как вам — мне было очень весело.

http://www.gamedev.ru/forum/?group=2&amp;topic=537&amp;page=6
Re[28]: Жульничество
От: z00n  
Дата: 15.12.05 18:19
Оценка: :)
Здравствуйте, Pzz, Вы писали:

Pzz>А что, IC++ боги, что ли, писали? Если они смогли написать хороший

Pzz>кодогенератор, то и я смогу руками сгенерировать хороший код. Не за 5
Pzz>минут, конечно Вопрос только, зачем?

Писали не боги, но у них есть сведения об архитектуре процессоров, которые вообще говоря NDA и симуляторы процессоров, которые за пределами Intel недоступны.
Если интересуетесь ассемблером, почитайте статью Майкла Абраша в Dr.Dobb's, про то как он писал Pixomatic. Ее нет в свободном доступе, но я процитирую кусочек:

That reminds me of an important lesson we learned while doing Pixomatic: It's almost impossible to know exactly what's going on with the performance of your code nowadays. The out-of-order processing of the Pentium 4 is so complex and the tools available for analyzing performance are so inadequate (alas, VTune has regressed in this respect), that to a large extent all you can do is try a lot of approaches and keep the one that runs fastest.

I mention this in the context of the bilinear filter because that was where that lesson was driven home. You see, I came up with a way to remove a multiply from the filter code—and the filter got slower. Given that multiplication is slower than other MMX instructions, especially in a long dependency chain such as the bilinear filter, and that I had flat-out reduced the instruction count by one multiply, I was completely baffled. In desperation, I contacted Dean Macri at Intel, and he ran processor-level traces on Intel's simulator and sent them to me.

I can't show you those traces, which contain NDA information, but I wish I could because their complexity beautifully illustrates exactly how difficult it is to fully understand the performance of Pentium 4 code under the best of circumstances. Basically, the answer turned out to be that the sequence in which instructions got processed in the reduced multiply case caused a longer critical dependency path—but there's no way you could have known that without having a processor-level simulator, which you can't get unless you work at Intel. Regardless, the simulator wouldn't usually help you anyway because this level of performance is very sensitive to the exact sequence in which instructions are assigned to execution units and executed, and that's highly dependent on the initial state (including caching and memory access) in which the code is entered, which can easily be altered by preceding code and usually varies over time.

Michael Abrash
Dr. Dobb's Journal September, 2004

Re[33]: Жульничество?
От: gear nuke  
Дата: 15.12.05 20:23
Оценка: -1
Здравствуйте, z00n, Вы писали:

Z>По времени исполнения — небольшую часть, а по времени разработки — бОльшую.

Z>Игра это и есть в основном "триггеры" и "картинки", а не то, что называют engine, который да, скорее всего написан на С/С++.

Как-то интересно выкинули основную мысль —

Яркий пример — Civilization IV. Большая часть написана на Питоне и жрет 2Гб памяти.


А вот что пишут люди, столкнувшиеся с проблемой bloatware Civ IV &mdash; ну <b>как заставить работать?</b>
Автор: Mamut
Дата: 13.12.05
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[31]: Жульничество
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.12.05 17:51
Оценка: -1
Gaperton wrote:
>
> GN>Понятно. Чисто теоретический предел возможностей мозга.
>
> Напротив, исключительно практический предел. Один из этих объективных
> пределов — объем т.н. оперативной памяти мозга. Никакая тренировка не
> позволит вам запоминать более 9 предметов, показанных одновременно не
> более чем на несколько секунд (исключаем жульничество вроде метода
> ассоциаций — он поззволит вам перечислить предметы но сведет на 0
> полезную функцию оперативной памяти). Примерно таким же образом, и
> примерно по этой самой причине вы на практике не сможете провести
> глобальную оптимизацию лучше компьютера с учетом всех эффектов сложного
> запутанного (сильно связного) куска кода сравнительно небольшого размера
> — по моим примерным оценкам это будет в районе до тысячи команд. Вы
> будете постоянно ошибаться.

Вообще говоря, человек разумный умеет таким образом организовывать свою
работу с материалом, что ему не приходится одновременно держать в поле
внимания (кстати, это важное различие — не в памяти, а во внимании)
больше предметов, чем он может. Иначе трудно было бы понять, каким
образом людям удается писать программы, состоящие более, чем из
нескольких строк...
Posted via RSDN NNTP Server 2.0
Re[34]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 21.12.05 17:42
Оценка: :)
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Gaperton, Вы писали:


G>>Называйте как хотите. Практика — это когда человек учавствовал в разработке комплексов размером от миллиона строк и выше, причем это было не приложение баз данных. И в поддержке подобных комплексов. Представляет себе на практике, короче, где именно лежит эта пресловутая граница возможностей мозга, и потому не болтает попусту. А форумную болтовню и умствования я называю одним нецензурным словом — на п начинается на ж кончается.


GN>То есть, Вы участвовали в подобных проектах, написанных полностью на ассемблере? Мы же о нём говорим.


Ну что вы . Это был С++. И знаете — все равно граница возможностей мозга ощущается очень отчетливо, не как нечто абстрактно-теоретическое, а как нечто вполне конкретное и осязаемое. Для ассемблера хватит сотни тысяч строк, я думаю, чтобы человек ощутил явно эту границу, и не смог за разумные сроки выполнять глобальные оптимизации лучше компьютера. Или даже десятка тыщ — в зависимости от степени связности кода. Речь, естественно, не идет об алгоритмических оптимизациях — их компилятор делать не умеет и не имеет права делать, кстати.

GN>>>А вот я могу привести элементарный пример, когда компилятор идёт лесом.

GN>>>Проверить n&gt;30 float-ов на принадлежность интервалу
Автор: sch
Дата: 01.09.05

GN>>>решение
Автор: gear nuke
Дата: 01.09.05

GN>>>Здесь нет никакого ассемблера.
G>>Пример не в эту ветку. Во-первых, потому, что здесь нет никакого ассемблера.

GN>А Вы в понятие ассемблер что вкладываете? mov eax, ebx? — дык это просто мнемоники, этимим мнемониками можно и С программу переписать, только в последнем случае компилятор С скорее всего победит.


Да, ассемблером я называю именно ассемблер в обычном понимании этого слова, а не что-нибудь другое. Программирование на уровне мнемоник, регистров, и адресов.

GN>Ассемблер предполагает использование машинно-зависимых представлений данных и операций над ними. Что и было проделано в моём случае. Ну что ж, внешне всё это закомуфлировано под С, но за такой код могут и руки оторвать!


Ассемблер полагает предельную близость к машине и полное отсутсвие оптимизаций при кодогенерации. Т.е. программируя на ассемблере вы определяете непосредственно команды, их последовательность, регистровые раскладки, и т.д. Компилятор IC++ умеет готовить смесь команд в такой пропорции, чтобы суперскаларные устройства и конвейры были нагружены оптимальным образом. Ваш код на С не содержит соответствующую информацию, и потому далек от ассемблера.

GN>И, кстати, возвращаясь к OCaml — как там у него с подобными трюками?

Никак, по очевидной причине. С ближе к аппаратуре. А ОCaml выше уровнем, чем С. Что дает вам меньше контроля над машиной, но одновременно дает компилятору больше возможностей для агрессивных оптимизаций. Например компилятор хорошо оптимизирует pattern matching — очень приятную конструкцию, отсутствующую в С как явление.

И я это расцениваю скорее как плюс — в конце концов, в редком крайнем случае можно короткой вставкой на С обойтись — линкуется вместе без проблем.
Re[35]: Жульничество
От: gear nuke  
Дата: 22.12.05 19:12
Оценка: :)
Здравствуйте, Gaperton, Вы писали:

G>Да, ассемблером я называю именно ассемблер в обычном понимании этого слова, а не что-нибудь другое. Программирование на уровне мнемоник, регистров, и адресов.


Никто не мешает вместо мнемоники mov использовать знак = по крайней мере, в мире x86.
А вот операции с флагами, добавил бы.
Программируя только на уровне "мнемоник, регистров, и адресов" человек находится на уровне С.

G>Ассемблер полагает предельную близость к машине и полное отсутсвие оптимизаций при кодогенерации.


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

G>Т.е. программируя на ассемблере вы определяете непосредственно команды, их последовательность, регистровые раскладки, и т.д.


Нет, не угадали. Я могу оставить выбор регистров транслятору. С последовательностью команд тоже можно так делать, но после написания некторого количесва макросов возникнет вопрос целесообразности.

G>Компилятор IC++ умеет готовить смесь команд в такой пропорции, чтобы суперскаларные устройства и конвейры были нагружены оптимальным образом.


Оптимальный — не значит лучший, я правильно понял?
А вот человек используя соответствующие средства анализа может после некоторого количества модификаций исходного кода получить лучший по производительности код. Естественно, лучший — по его субъективной оценке.
Только про время ничего не говорите — мы же его не принимаем в расчёт в нашем теоретическом соревновании.

Кстати, что бы не было иллюзий о компиляторе — смотрим "IA-32 Intel® Architecture Optimization Reference Manual", раздел "Assembly/Compiler Coding Rules" — там все эти правила построения смеси команд расписаны. Конечно же тяжело всё это руками выполнять. И да — ICC некоторые из них иногда нарушает

G>Ваш код на С не содержит соответствующую информацию, и потому далек от ассемблера.


Не понял, какую.

G>ОCaml выше уровнем, чем С. Что дает вам меньше контроля над машиной, но одновременно дает компилятору больше возможностей для агрессивных оптимизаций. Например компилятор хорошо оптимизирует pattern matching — очень приятную конструкцию, отсутствующую в С как явление.


G>И я это расцениваю скорее как плюс — в конце концов, в редком крайнем случае можно короткой вставкой на С обойтись — линкуется вместе без проблем.


Линкуется-то без проблем, но нарушает:

Assembly/Compiler Coding Rule 5. (MH impact, MH generality)
Selectively inline a function where doing so decreases code size or if the function is small and the call site is frequently executed.


и, косвенно:

Assembly/Compiler Coding Rule 7. (ML impact, ML generality)
If there are more than 16 nested calls and returns in rapid succession; consider transforming the program with inline to reduce the call depth.

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 30.11.05 11:01
Оценка:
Здравствуйте, zip_, Вы писали:

_>беглый анализ ситуации показал, что претендентов не так уж и много, а именно:

_>1. ocaml
_>2. D

_>сейчас задачи связаны с разработкой под встраиваемые системы (QNX/ARM): протоколы обменов, сетевые интерфейсы, встраиваемые базы данных, GUI (touchscreen) и т.п.


А они вообще есть для QNX/ARM?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: C++ vs ???
От: Anton Batenev Россия https://github.com/abbat
Дата: 01.12.05 10:24
Оценка:
Здравствуйте, reductor, Вы писали:

R>http://www.ocaml-tutorial.org/ — туториал специально для С/С++ программистов.


Зашел по ссылке "на автомате". Остановился на фразе "Take a careful look at the bracketing and the lack of commas" раздела "Calling functions". Дальше читать не стал. Стало не интересно думать о количестве скобок и их последовательности.

Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на первых разделах
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: C++ vs ???
От: Глеб Алексеев  
Дата: 01.12.05 12:23
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Здравствуйте, reductor, Вы писали:


R>>http://www.ocaml-tutorial.org/ — туториал специально для С/С++ программистов.


AB>Зашел по ссылке "на автомате". Остановился на фразе "Take a careful look at the bracketing and the lack of commas" раздела "Calling functions". Дальше читать не стал. Стало не интересно думать о количестве скобок и их последовательности.

Там всего-то говорится о том, что обычно вызов функции выглядит не как foo(arg1,arg2,arg3), а как foo arg1 arg2 arg3, только и всего, и комментарий был специально для привыкших к традиционному синтаксису.

AB>Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на первых разделах

ИМХО, ты слишком рано сдался
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[2]: C++ vs ???
От: zip_ Россия  
Дата: 01.12.05 12:45
Оценка:
Здравствуйте, reductor, Вы писали:

R>Здравствуйте, zip_, Вы писали:


_>>беглый анализ ситуации показал, что претендентов не так уж и много, а именно:

_>>1. ocaml
_>>2. D

R>Их на самом деле больше, но приводить их здесь и сейчас смысла нет — только растерянности прибавит.


Мои требования:
— статическая типизация (неплохо также вывод типа иметь)
— претензия на практичность
— переносимость
— качество скомпилированного кода
— совместимость с С

Если есть другие языки, приведи, pls, примеры.

_>>по певому:

_>>- так ли он хорош и универсален? несколько напрягает сложность перехода на него, т.к. времени свободного нет, а проекты делать надо, и делать в срок.

R>Да. Универсален и очень хорош. Без шуток. Особенно как замена С++


Пожалуй стоит попробовать в реальном проекте.

_>>по второму:

_>>- а дорос ли он уже до реального применения в промышленных системах?

R>А вот здесь встает вопрос об осмысленности выбора. Ничего _качественно_ нового D в себе не несет, причем разные features, которыми он гордится мало связаны между собой в единую систему (формально).


Несет удобство в работе, исправляет недостатки С++, как мне показалось (возможно не все). Однако верю, что функциональный подход может дать значительно больше того самого удобства, если к нему привыкнуть. В D как раз подкупает простота перехода с C++, фактически в первый же день можно начать писать сложные программы.
Но настораживает то, что слабо развивается и до сих пор нет релиза хотя бы версии 1.x

R>Кроме всего прочего, тот же синтаксис, что и в С/С++, нагло влияющий на семантику языка. Что может и не является такой уж проблемой, но в общем зачете очков не прибавляет.


Как ни странно, его синтаксис мне нравится куда больше, чем ocaml-овский (и вообще паскаль-подобный). Вероятно это субъективно, играет по-видимому сила привычки.

_>>опыт программирования приближается к 15 годам, в основном это С и C++.


R>Плохо. Меньший опыт был бы лучше. Честное слово. Будут проблемы с освоением Окамла. Если все-таки соберетесь учить, рекомендую постараться забыть как можно больше о своем опыте, иначе кроме раздражения ничего не получите. Потом уже можно будет вспомнить и сравнить

R>http://www.ocaml-tutorial.org/ — туториал специально для С/С++ программистов.

Это я понимаю.. Придется ломать себя..

_>>сейчас задачи связаны с разработкой под встраиваемые системы (QNX/ARM): протоколы обменов, сетевые интерфейсы, встраиваемые базы данных, GUI (touchscreen) и т.п.

R>По идее проблем быть не должно, в самом крайней случае FFI у окамла на случай общения с железом приличный.

Что есть FFI?
Re[3]: C++ vs ???
От: ie Россия http://ziez.blogspot.com/
Дата: 01.12.05 13:29
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Здравствуйте, reductor, Вы писали:


R>>http://www.ocaml-tutorial.org/ — туториал специально для С/С++ программистов.


AB>Зашел по ссылке "на автомате". Остановился на фразе "Take a careful look at the bracketing and the lack of commas" раздела "Calling functions". Дальше читать не стал. Стало не интересно думать о количестве скобок и их последовательности.


AB>Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на первых разделах


Да нет, мне наоборот понравилось, с юмором парень:

OCaml never does implicit casts like this. In OCaml, 1 + 2.5 is a type error. The + operator in OCaml requires two ints as arguments, and here we're giving it an int and a float, so it reports this error:

# 1 + 2.5;;
This expression has type float but is here used with type int

(In the "translated from the French" language of OCaml error messages this means "you put a float here, but I was expecting an int").

... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Re[3]: C++ vs ???
От: Глеб Алексеев  
Дата: 01.12.05 14:11
Оценка:
Здравствуйте, zip_, Вы писали:

R>>По идее проблем быть не должно, в самом крайней случае FFI у окамла на случай общения с железом приличный.


_>Что есть FFI?

Foreign Function Interface.

O'Caml может общаться с C, а для упрощения генерации stub'ов есть инструмент — CamlIDL.
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[4]: C++ vs ???
От: Anton Batenev Россия https://github.com/abbat
Дата: 01.12.05 14:57
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

AB>>Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на первых разделах

ГА>ИМХО, ты слишком рано сдался

Возможно. Однако, прежде чем откланятся, разрешите сделать лирическое отсупление?

Ради приличия, дочитал внимательнейшим образом главу до конца. Я не имею ни малейшего понятия об этом языке. В оглавлении стоит ремарка о том, что предполагается, что я уже скачал дистриб языка, установил его и жажду деятельности. Однако, за всю главу Basics мы не написали "Hello Word". Вам интересно было бы читать дальше при такой вводной как у меня?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: C++ vs ???
От: reductor  
Дата: 01.12.05 19:36
Оценка:
Здравствуйте, zip_, Вы писали:

_>Мои требования:

_>- статическая типизация (неплохо также вывод типа иметь)
_>- претензия на практичность
_>- переносимость
_>- качество скомпилированного кода
_>- совместимость с С

_>Если есть другие языки, приведи, pls, примеры.



Ну критерии кроме статической типизации и переносимости однозначно не определимы, а с Си совместимы так или иначе все.
Кстати по поводу типизации — просто статическая типизация и та система типов, что в o'caml — это две большие разницы
И кстати-кстати. по поводу Си и низкого уровня — рекомендую обратить внимание: http://www.research.att.com/projects/cyclone/
И система типов там похожа на окамловскую. Да и много что (кроме синтаксиса и управления памятью). Правда QNX там официально вроде пока не поддерживается, но попробовать можно. В любом случае, всяко лучше чем просто си.

А что до высокого уровня, то есть еще SML, Haskell, вот тут еще есть любители Оберона я слышал
Но Окамл — нормально. по крайней мере голову он заставит ломать меньше всех.


_>>>по певому:

_>>>- так ли он хорош и универсален? несколько напрягает сложность перехода на него, т.к. времени свободного нет, а проекты делать надо, и делать в срок.

R>>Да. Универсален и очень хорош. Без шуток. Особенно как замена С++


_>Пожалуй стоит попробовать в реальном проекте.


Ну лучше сначала просто взять, накачать документов с исходниками разных штук и глядя в них написать что-нибудь маленькое для души.
Какую-нибудь утилитку, на которую нужна пара дней. Например, компилятор Scheme.
шутка.
но с долей не только шутки.


_>>>по второму:

_>>>- а дорос ли он уже до реального применения в промышленных системах?

R>>А вот здесь встает вопрос об осмысленности выбора. Ничего _качественно_ нового D в себе не несет, причем разные features, которыми он гордится мало связаны между собой в единую систему (формально).


_>Несет удобство в работе, исправляет недостатки С++, как мне показалось (возможно не все). Однако верю, что функциональный подход может дать значительно больше того самого удобства, если к нему привыкнуть. В D как раз подкупает простота перехода с C++, фактически в первый же день можно начать писать сложные программы.


Ну на самом деле не нужно думать, что окамл — это только функциональный язык. Он все умеет и все очень красиво.
На самом деле если не думать слишком на тему "как это сложно выучить окамл", а просто сесть и представить, что учишь язык очень высокого уровня типа питона, то очень быстро все случится.


R>>Кроме всего прочего, тот же синтаксис, что и в С/С++, нагло влияющий на семантику языка. Что может и не является такой уж проблемой, но в общем зачете очков не прибавляет.


_>Как ни странно, его синтаксис мне нравится куда больше, чем ocaml-овский (и вообще паскаль-подобный). Вероятно это субъективно, играет по-видимому сила привычки.


У Окамла кстати не паскаль-подобный синтаксис совсем. Это так после Си кажется
Вернее будет сказать, у него, как и у всех последователей подхода Lanvin'a синтаксис почти отсуствует. Просто есть конструкции, которые конвертят некоторые keywords в "сырой" код. А вот в раздражающей С++ программистов специфике вызовы функции без скобок и запятых скрыта очень большая мощь.
И кстати. У окамла очень мощный препроцессор. Можно и Си синтаксис сделать. Но лучше не нужно. Многое можно потерять если ограничить себя сишным.

_>>>опыт программирования приближается к 15 годам, в основном это С и C++.



_>Что есть FFI?


Foreign Function Interface.
Re[4]: C++ vs ???
От: zip_ Россия  
Дата: 01.12.05 21:20
Оценка:
Здравствуйте, reductor, Вы писали:

R>И кстати-кстати. по поводу Си и низкого уровня — рекомендую обратить внимание: http://www.research.att.com/projects/cyclone/

R>И система типов там похожа на окамловскую. Да и много что (кроме синтаксиса и управления памятью). Правда QNX там официально вроде пока не поддерживается, но попробовать можно. В любом случае, всяко лучше чем просто си.

Интересно. Но сейчас реально нужен язык для высокого уровня. Два языка изучать параллельно — это слишком

R>А что до высокого уровня, то есть еще SML, Haskell, вот тут еще есть любители Оберона я слышал

R>Но Окамл — нормально. по крайней мере голову он заставит ломать меньше всех.

Я — точно не любитель (Оберона)
Haskell мне не кажется практичным и готовым к применению в промышленных проектах. Считаю, что это до сих пор академический язык.
SML — принципиально ничем от OCaml не отличается (или я ошибаюсь?), но у второго более серьезный компилятор и ОО-расширение (впрочем пока не уверен, что оно вообще нужно).

_>>Пожалуй стоит попробовать в реальном проекте.


R>Ну лучше сначала просто взять, накачать документов с исходниками разных штук и глядя в них написать что-нибудь маленькое для души.

R>Какую-нибудь утилитку, на которую нужна пара дней. Например, компилятор Scheme.
R>шутка.
R>но с долей не только шутки.

Уже накачал, многое уже прочитал, и даже создал окружение для комфортной работы с проектом на OCaml. Осталось придумать задачку и попробовать реализовать.
Шутку оценил
ФЯ сильны в такого рода задачах, интересует как раз, живуч ли этот подход и в других применениях.

Кстати, а бумажные книжки по ML/SML (про Caml и не спрашиваю) существуют в природе? А на русском?

R>У Окамла кстати не паскаль-подобный синтаксис совсем. Это так после Си кажется

R>Вернее будет сказать, у него, как и у всех последователей подхода Lanvin'a синтаксис почти отсуствует. Просто есть конструкции, которые конвертят некоторые keywords в "сырой" код. А вот в раздражающей С++ программистов специфике вызовы функции без скобок и запятых скрыта очень большая мощь.
R>И кстати. У окамла очень мощный препроцессор. Можно и Си синтаксис сделать. Но лучше не нужно. Многое можно потерять если ограничить себя сишным.

Скобки и запятые не раздражают, это как раз то, что нравится. Как нужно правильно интерпретировать вызов функции с несколькими аргументами (..очень большая мощь..) знаю, про частичное применение знаю, зацепило.
Про препроцессор тоже уже знаю, первая (глупая) мысль, которая возникла после чтения документации — а не сделать ли replace begin -> {, end -> }, заменить ;; и т.п. Понял, что не стоит, надеюсь привыкну, это в общем-то мелочи.

_>>Что есть FFI?


R>Foreign Function Interface.


Да, Глеб Алексеев уже разъяснил постом ниже
Re[5]: C++ vs ???
От: reductor  
Дата: 01.12.05 23:30
Оценка:
Здравствуйте, zip_, Вы писали:

R>>А что до высокого уровня, то есть еще SML, Haskell, вот тут еще есть любители Оберона я слышал

R>>Но Окамл — нормально. по крайней мере голову он заставит ломать меньше всех.

_>Я — точно не любитель (Оберона)

_>Haskell мне не кажется практичным и готовым к применению в промышленных проектах. Считаю, что это до сих пор академический язык.

Интересно по каким критериям На самом деле уже довольно давно нет. То есть язык сам вообще очень давно, а тот же GHC какое-то время.
Его сейчас двигают как раз в массы. Но правда стоит отметить, что по вылизанности GHC от окамла пока отстает.

_>SML — принципиально ничем от OCaml не отличается (или я ошибаюсь?), но у второго более серьезный компилятор и ОО-расширение (впрочем пока не уверен, что оно вообще нужно).


Ну это один так сказать core-язык. Различаются цели и детали реализации. SML — формальный язык имеющий открытый стандарт. У него несколько компиляторов с разными подходами — самый родной — SML/NJ, в MLKit — вместо сборки мусора — region inference используется, MLTon — супероптимизирующий (очень быстрый код генерит). С какой-то стороны можно и академической игрушкой назвать, а для других — полезный очень инструмент получается.
O'Caml — это произведение одной команды из франции, один компилятор, но очень легкий и отлаженный.
Может и не оптимизирует как MLTon, но очень многое дает тюнить руками.
Еще у них немного синтаксис отличается: http://www.ps.uni-sb.de/~rossberg/SMLvsOcaml.html
И в O'Caml есть поддержка ООП

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

_>Уже накачал, многое уже прочитал, и даже создал окружение для комфортной работы с проектом на OCaml. Осталось придумать задачку и попробовать реализовать.

_>Шутку оценил
_>ФЯ сильны в такого рода задачах, интересует как раз, живуч ли этот подход и в других применениях.

Живуч конечно. Вообще чем выше уровень (ну в смысле представления данных), тем более живуч. Чем немыслимие всякие структурыи и их трансформации или чем сложнее какие-нибудь вычисления, тем сильнее заметна разница.

_>Кстати, а бумажные книжки по ML/SML (про Caml и не спрашиваю) существуют в природе? А на русском?

Существуют конечно.
http://www.amazon.com/gp/product/0137903871/qid=1133478669/sr=8-1/ref=pd_bbs_1/102-6365212-3711324?n=507846&amp;s=books&amp;v=glance
http://www.amazon.com/gp/product/052156543X/qid=1133478669/sr=8-2/ref=pd_bbs_2/102-6365212-3711324?n=507846&amp;s=books&amp;v=glance
Тут и caml есть:
http://www.amazon.com/gp/product/0521576814/qid=1133478669/sr=8-3/ref=pd_bbs_3/102-6365212-3711324?n=507846&amp;s=books&amp;v=glance

А еще, если сделать поиск в яндексе по стандартному mlю, то найдется pdf с книжкой по-русски по SML

И вот: http://forum.caml.ru/
http://camlru.narod.ru/
http://shamil.free.fr/comp/ocaml/
Re[5]: C++ vs ???
От: Pzz Россия https://github.com/alexpevzner
Дата: 02.12.05 00:04
Оценка:
zip_ wrote:
>
> SML — принципиально ничем от OCaml не отличается (или я ошибаюсь?), но у
> второго более серьезный компилятор и ОО-расширение (впрочем пока не
> уверен, что оно вообще нужно).

Рассуждая с практической точки зрения, для SML'я, по-моему, проще найти
компилятор под какой-нибудь не совсем обычный процессор, чем для
Ocaml'а. Если не ошибаюсь, Ocaml поддерживает только x86, ARM, и, может
быть, MIPS.
Posted via RSDN NNTP Server 2.0
Re: C++ vs ???
От: c-smile Канада http://terrainformatica.com
Дата: 02.12.05 04:58
Оценка:
Здравствуйте, zip_, Вы писали:

_>устал от С++.

_>чувствую, что можно писать более эффективно (в плане затраты времени/функциональность) на других языках и получать большее эстетическое удовлетворение. пора что-то менять.

_>уже решил, что языком для низкого уровня оставлю С, но нужен язык для (сравнительно-)высокоуровневых задач.


_>что посоветует общественность?


_>беглый анализ ситуации показал, что претендентов не так уж и много, а именно:

_>1. ocaml
_>2. D

D как язык для UI лучше чем C++ скажем в разы. Это я со всей отвественностью
могу сказать. Пара D+C вообще круто. хотя в общем-то D сам по себе имеет
все возможности C но legacy code и все такое.
Templates в D человечнее и мощнее чем в C++.

Из недостатков D:
1) концепт const автором игнорируется напрочь и это печалит.
В C99 например const есть.
2) Нативно поддерживаются только Win и Linux. Все остальное через
GDC (GCC codegen) что сыровато в общем-то. И не так эффективно как
родной Вальтеровский codegen.

Что бы я порекомендовал в качестве пункта #3 — как ни странно но Java.
Либо стандартный Java SDK от Sun либо
сделать под себя Java VM из тех что есть в сети проблемы не представляет.
Использование богатого набора IDE — неоспоримый плюс.
Java как "клеевой" язык с C подобной нотацией и вычислительной моделью — самое оно.
Java VM как часть своего приложения это примерно 200-250k кода. Ничего по нынешним меркам.
И очень просто вяжется с C (JNI или вообще свой протокол).

А в качестве варианта "для сэбэ" я использую tiscript (javascript типа).
Удобно иметь под рукой в приложении интерпертатор. Да и вообще
Re[6]: C++ vs ???
От: Дарней Россия  
Дата: 02.12.05 05:52
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Рассуждая с практической точки зрения, для SML'я, по-моему, проще найти

Pzz>компилятор под какой-нибудь не совсем обычный процессор, чем для
Pzz>Ocaml'а. Если не ошибаюсь, Ocaml поддерживает только x86, ARM, и, может
Pzz>быть, MIPS.

и еще есть SML.NET
хотя это конечно на любителя
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: C++ vs ???
От: alexeiz  
Дата: 02.12.05 08:29
Оценка:
Здравствуйте, zip_, Вы писали:

_>Здравствуйте, reductor, Вы писали:


R>>И кстати-кстати. по поводу Си и низкого уровня — рекомендую обратить внимание: http://www.research.att.com/projects/cyclone/

R>>И система типов там похожа на окамловскую. Да и много что (кроме синтаксиса и управления памятью). Правда QNX там официально вроде пока не поддерживается, но попробовать можно. В любом случае, всяко лучше чем просто си.

_>Интересно. Но сейчас реально нужен язык для высокого уровня. Два языка изучать параллельно — это слишком


А чем C++ не язык высокого уровня?
Re[2]: C++ vs ???
От: alexeiz  
Дата: 02.12.05 08:34
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>D как язык для UI лучше чем C++ скажем в разы. Это я со всей отвественностью

CS>могу сказать.

А причины не трудно описать? По пунктам и конкретно. А то не очень-то верится.
Re[7]: C++ vs ???
От: Mamut Швеция http://dmitriid.com
Дата: 02.12.05 10:33
Оценка:
A>>А чем C++ не язык высокого уровня?

R>Ничем.

R>Это ассемблер.
R>Который к тому же медленный и многословный.

Хм. Я обратил внимание, что многие функциональные языки называют языками очень высокого уровня. Видимо, в противовес "просто" языкам высокого уровня, таким как С++ и прочие
... << RSDN@Home 1.2.0 alpha rev. 619>>


dmitriid.comGitHubLinkedIn
Re[8]: C++ vs ???
От: GlebZ Россия  
Дата: 02.12.05 10:57
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Хм. Я обратил внимание, что многие функциональные языки называют языками очень высокого уровня. Видимо, в противовес "просто" языкам высокого уровня, таким как С++ и прочие

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

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: C++ vs ???
От: ie Россия http://ziez.blogspot.com/
Дата: 02.12.05 11:49
Оценка:
Здравствуйте, reductor, Вы писали:

R>А еще, если сделать поиск в яндексе по стандартному mlю, то найдется pdf с книжкой по-русски по SML


Вот по этой ссылке русская версия лекций Харпера, о которых уже кто-то упоминал в этой ветке: http://iu9.mstu.ru/5sem/fil/harper.pdf
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Re[7]: C++ vs ???
От: gear nuke  
Дата: 02.12.05 14:13
Оценка:
Здравствуйте, reductor,

A>>А чем C++ не язык высокого уровня?


R>Ничем.


Почему? В dragonbook сказано, что это HLL.

R>Это ассемблер.


Совершенно верно, и даже в некоторых аспектах более низкоуровневый, чем С.

R>Который к тому же медленный


Это распространённое (?) заблуждение. Грамотно написанный код будет в большенстве случаев очень мало отличаться по эффективности от написанного вручную на ассемблере. Особенно, на макроассемблере. Это я могу сказать, поскольку приходится видеть исходники на последнем, для которых хороший С++ компилятор мог бы сгенерировать лучший вариант. А хороший С++ компилятор найти гораздо проще, чем для того же Pascal & Co. Сколько компиляторов других HLL используют С++ как back-end?

R>и многословный.


Да, для ряда задач на нём придётся написать порядком больше, чем на других языках. Это цена универсальности. На C++ можно написать ОС с нуля не используя _других_ языков (как там в Oberon делали bootloader?), можно и компилятор Scheme. И конечно же, будут существовать и языки, более эффективные для специализированных задач.

И даже, компилятор не способен понять некоторые слова:
switch( "string" )
{
case "foo":
case "boo":
}
Почему бы не добавить в него несколько строчек кода
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[7]: C++ vs ???
От: Глеб Алексеев  
Дата: 02.12.05 14:29
Оценка:
Здравствуйте, ie, Вы писали:

R>>А еще, если сделать поиск в яндексе по стандартному mlю, то найдется pdf с книжкой по-русски по SML


ie>Вот по этой ссылке русская версия лекций Харпера, о которых уже кто-то упоминал в этой ветке: http://iu9.mstu.ru/5sem/fil/harper.pdf


Да, только стоит предупредить, что там описана устаревшая версия языка (SML'90). Но книжка для начинающих — отличная, особенно если выпонять все упражнения. А на сайте Харпера лежит черновик новой версии (понятно, по-английски), там описан SML'97 (скачивать можно абсолютно легально http://www.cs.cmu.edu/~rwh/smlbook/online.pdf).
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[8]: C++ vs ???
От: Глеб Алексеев  
Дата: 02.12.05 14:30
Оценка:
Здравствуйте, reductor, Вы писали:

R>и F# — который на самом деле окамл

Скорее, Caml Light.
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[8]: C++ vs ???
От: Дарней Россия  
Дата: 02.12.05 15:24
Оценка:
Здравствуйте, reductor, Вы писали:

R>и F# — который на самом деле окамл

R>впрочем, у самого окамла бэкенд под .NET тоже есть

кстати, а какой из них ты бы посоветовал для новичка?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[8]: C++ vs ???
От: Дарней Россия  
Дата: 02.12.05 15:31
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Хм. Я обратил внимание, что многие функциональные языки называют языками очень высокого уровня. Видимо, в противовес "просто" языкам высокого уровня, таким как С++ и прочие


может быть, по аналогии с higher order function?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[8]: C++ vs ???
От: reductor  
Дата: 02.12.05 17:38
Оценка:
Здравствуйте, gear nuke, Вы писали:


R>>Это ассемблер.


GN>Совершенно верно, и даже в некоторых аспектах более низкоуровневый, чем С.


R>>Который к тому же медленный


GN>Это распространённое (?) заблуждение. Грамотно написанный код будет в большенстве случаев очень мало отличаться по эффективности от написанного вручную на ассемблере. Особенно, на макроассемблере. Это я могу сказать, поскольку приходится видеть исходники на последнем, для которых хороший С++ компилятор мог бы сгенерировать лучший вариант. А хороший С++ компилятор найти гораздо проще, чем для того же Pascal & Co. Сколько компиляторов других HLL используют С++ как back-end?


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


R>>и многословный.


GN>Да, для ряда задач на нём придётся написать порядком больше, чем на других языках. Это цена универсальности. На C++ можно написать ОС с нуля не используя _других_ языков (как там в Oberon делали bootloader?), можно и компилятор Scheme. И конечно же, будут существовать и языки, более эффективные для специализированных задач.


На любом языке можно написать ОС с нуля.
А насчет использования других языков — это исключительно в голове. Поскольку на любом языке можно написать компилятор Scheme, то и операционную систему с нуля тоже можно.
Но вообще странное рассуждение и достоинство. На конкретном ассемблере тоже можно все написать и что?
зачем это делать?
Re[9]: C++ vs ???
От: reductor  
Дата: 02.12.05 17:41
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, reductor, Вы писали:


R>>и F# — который на самом деле окамл

R>>впрочем, у самого окамла бэкенд под .NET тоже есть

Д>кстати, а какой из них ты бы посоветовал для новичка?


обычный окамл с caml.inria.fr
даже без бекенда под .NET
чтобы не создавать путаницу лишную. потом уже конечно что душа пожелает
Re[10]: C++ vs ???
От: EvilChild Ниоткуда  
Дата: 02.12.05 18:46
Оценка:
Здравствуйте, reductor, Вы писали:

Д>>кстати, а какой из них ты бы посоветовал для новичка?


R>обычный окамл с caml.inria.fr

R>даже без бекенда под .NET
R>чтобы не создавать путаницу лишную. потом уже конечно что душа пожелает

А что скажешь о Nemerle?
Re[6]: C++ vs ???
От: zip_ Россия  
Дата: 02.12.05 20:19
Оценка:
_>>Haskell мне не кажется практичным и готовым к применению в промышленных проектах. Считаю, что это до сих пор академический язык.

R>Интересно по каким критериям На самом деле уже довольно давно нет. То есть язык сам вообще очень давно, а тот же GHC какое-то время.

R>Его сейчас двигают как раз в массы. Но правда стоит отметить, что по вылизанности GHC от окамла пока отстает.

Нет компилятора для ARM, существующие компиляторы генерируют недостаточно качественный код (нет доверия инструменту). Плюс еще ленивость сильно затрудняет отладку и делает поведение программы недетерминированным.
Re[8]: C++ vs ???
От: zip_ Россия  
Дата: 02.12.05 20:21
Оценка:
За ссылки всем спасибо, буду погружаться
Re[6]: C++ vs ???
От: zip_ Россия  
Дата: 02.12.05 20:25
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>zip_ wrote:

>>
>> SML — принципиально ничем от OCaml не отличается (или я ошибаюсь?), но у
>> второго более серьезный компилятор и ОО-расширение (впрочем пока не
>> уверен, что оно вообще нужно).

Pzz>Рассуждая с практической точки зрения, для SML'я, по-моему, проще найти

Pzz>компилятор под какой-нибудь не совсем обычный процессор, чем для
Pzz>Ocaml'а. Если не ошибаюсь, Ocaml поддерживает только x86, ARM, и, может
Pzz>быть, MIPS.

Лично мне кроме как под x86 и ARM ничего больше и не надо. Поэтому OCaml проходит.
Также не забываем про байт-код и VM (которая написана на C и скомпилируется где угодно).
Re[8]: C++ vs ???
От: zip_ Россия  
Дата: 02.12.05 20:53
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>reductor wrote:

>>
>> A>А чем C++ не язык высокого уровня?
>>
>> Ничем.
>> Это ассемблер.
>> Который к тому же медленный и многословный.

Pzz>Не согласен.


Pzz>C (не C++) это язык, который выражает абстрактным образом архитектуру

Pzz>современного компутерного железа (современного в смысле повседневного).
Pzz>В этом плане он исключительно хорош. Прошло уже 20 лет, а на C
Pzz>по-прежнему можно писать железноориентированные программы, не опускаясь
Pzz>при этом до уровня особенностей работы ALU на данном конкретном процессоре.

Pzz>Конечно, C не идеален. Например, для полноценной работы хотелось бы

Pzz>уметь описывать раскладку данных на биты, не прибегая при этом к
Pzz>трюкачеству. Хотелось бы так же, чтобы идея endian'а была как-то
Pzz>отражена в языке. И хоть какие-то примитивы синхронизации, типа
Pzz>read_and_set, или atomic_increment. В общем, как раз тех вещей, которые
Pzz>иначе приходится писать на ассемблере безо всякой осмысленной причины.

Pzz>Мда. Так вот, будучи языком, предназначенным для абстрактного

Pzz>представления современного компутера, C, безусловно является языком
Pzz>высокого уровня. Просто он не универсален, а domain-specific, но domain
Pzz>у него при этом весьма специфический

Pzz>C++ же, это не язык, а какой-то кошмар. Что он отражает, не очень

Pzz>понятно. Скорее всего, "все на свете" с весьма переменным успехом...

Ну а с чем не согласен-то? Речь шла о С++, а написано тут все про С. И в общем-то верно написано.
Re[2]: C++ vs ???
От: zip_ Россия  
Дата: 02.12.05 21:18
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>D как язык для UI лучше чем C++ скажем в разы. Это я со всей отвественностью

CS>могу сказать. Пара D+C вообще круто. хотя в общем-то D сам по себе имеет
CS>все возможности C но legacy code и все такое.
CS>Templates в D человечнее и мощнее чем в C++.

Моих знаний по D уже достаточно, чтобы согласиться.
Но не покидает ощущение, что ФЯ даст качественно больше.
D — это улучшение С++, ФЯ — это другое измерение.

CS>Из недостатков D:

CS>1) концепт const автором игнорируется напрочь и это печалит.
CS>В C99 например const есть.
CS>2) Нативно поддерживаются только Win и Linux. Все остальное через
CS>GDC (GCC codegen) что сыровато в общем-то. И не так эффективно как
CS>родной Вальтеровский codegen.

Это серьезные недостатки. Фактически это крест на использовании в моем случае.

CS>Что бы я порекомендовал в качестве пункта #3 — как ни странно но Java.

CS>Либо стандартный Java SDK от Sun либо
CS>сделать под себя Java VM из тех что есть в сети проблемы не представляет.
CS>Использование богатого набора IDE — неоспоримый плюс.
CS>Java как "клеевой" язык с C подобной нотацией и вычислительной моделью — самое оно.
CS>Java VM как часть своего приложения это примерно 200-250k кода. Ничего по нынешним меркам.
CS>И очень просто вяжется с C (JNI или вообще свой протокол).

Слишком "упрощенный" язык. И медленный. Никаких преимуществ перед С++ (разве что GC). В java-стиле я и на C++ мог бы писать.

CS>А в качестве варианта "для сэбэ" я использую tiscript (javascript типа).

CS>Удобно иметь под рукой в приложении интерпертатор. Да и вообще

Тоже хотел в помощь C++ прикрутить интерпретатор (lua). И всю логику приложений реализовывать в скриптах, оставив за C++ только минимальное ядро.
Но пришел к выводу, что один нормальный язык высокого уровня запросто может заменить два языка.
Re[9]: C++ vs ???
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.12.05 00:20
Оценка:
zip_ wrote:
>
> Pzz>C++ же, это не язык, а какой-то кошмар. Что он отражает, не очень
> Pzz>понятно. Скорее всего, "все на свете" с весьма переменным успехом...
>
> Ну а с чем не согласен-то? Речь шла о С++, а написано тут все про С. И в
> общем-то верно написано.

Я не согласен с тем, что C++ это ассемблер. Раз C это язык высокого
уровня (мне, кажется, удалось это аргументировать), и при этом C
является подмножеством C++, то и C++ вроде как не ассемблер.
Posted via RSDN NNTP Server 2.0
Re[8]: C++ vs ???
От: reductor  
Дата: 03.12.05 00:46
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Не согласен.


Pzz>C (не C++) это язык, который выражает абстрактным образом архитектуру

Pzz>современного компутерного железа (современного в смысле повседневного).
Pzz>В этом плане он исключительно хорош. Прошло уже 20 лет, а на C
Pzz>по-прежнему можно писать железноориентированные программы, не опускаясь
Pzz>при этом до уровня особенностей работы ALU на данном конкретном процессоре.

Pzz>Конечно, C не идеален. Например, для полноценной работы хотелось бы

Pzz>уметь описывать раскладку данных на биты, не прибегая при этом к
Pzz>трюкачеству. Хотелось бы так же, чтобы идея endian'а была как-то
Pzz>отражена в языке. И хоть какие-то примитивы синхронизации, типа
Pzz>read_and_set, или atomic_increment. В общем, как раз тех вещей, которые
Pzz>иначе приходится писать на ассемблере безо всякой осмысленной причины.

Pzz>Мда. Так вот, будучи языком, предназначенным для абстрактного

Pzz>представления современного компутера, C, безусловно является языком
Pzz>высокого уровня. Просто он не универсален, а domain-specific, но domain
Pzz>у него при этом весьма специфический

Pzz>C++ же, это не язык, а какой-то кошмар. Что он отражает, не очень

Pzz>понятно. Скорее всего, "все на свете" с весьма переменным успехом...


Я честно говоря не понял этой иерархической логики и чем отличается язык низкого уровня от "domain specific general purpose языка высокого уровня для низкоуровнего программирования" кроме того, что первый вариант короче и не оставляет вариантов для прочтения.
Кстати против Си я в общем-то и не имею ничего, пока на нем не начинают писать что-то прикладное.

Pzz>C++ же, это не язык, а какой-то кошмар. Что он отражает, не очень

Pzz>понятно. Скорее всего, "все на свете" с весьма переменным успехом...

Отражает, как и любое зеркало то, что будет неполиткорректным сказать прямым текстом.
Re[3]: C++ vs ???
От: c-smile Канада http://terrainformatica.com
Дата: 03.12.05 01:35
Оценка:
Здравствуйте, zip_, Вы писали:

_>Здравствуйте, c-smile, Вы писали:


CS>>Что бы я порекомендовал в качестве пункта #3 — как ни странно но Java.

CS>>Либо стандартный Java SDK от Sun либо
CS>>сделать под себя Java VM из тех что есть в сети проблемы не представляет.
CS>>Использование богатого набора IDE — неоспоримый плюс.
CS>>Java как "клеевой" язык с C подобной нотацией и вычислительной моделью — самое оно.
CS>>Java VM как часть своего приложения это примерно 200-250k кода. Ничего по нынешним меркам.
CS>>И очень просто вяжется с C (JNI или вообще свой протокол).

_>Слишком "упрощенный" язык.


В простоте Java есть свои плюсы.

_>И медленный.


Смотря для чего опять же. Все на Java писать не надо.
Это очень популярное (сама Sun этим страдает) мммм заблуждение что-ли
Java это "клеевой" или интегрирующий язык с черезвычайно простым
и эффективным интерфейсом Java/C.

_> Никаких преимуществ перед С++ (разве что GC). В java-стиле я и на C++ мог бы писать.


Есть преимущества. GC одно из них. C++у этого не дано и дано не будет.
Принципиально иная архитектура VM

Про другое преимущесво я уже сказал. Изоляция.
Реально было так: команда из трех человек писала mission critical runtime и framework(C/C++/Java)
и банда тех самых чудиков которые переползли "низкий порог вхождения"
готовила другое блюдо под названием бизнес логика.


CS>>А в качестве варианта "для сэбэ" я использую tiscript (javascript типа).

CS>>Удобно иметь под рукой в приложении интерпертатор. Да и вообще

_>Тоже хотел в помощь C++ прикрутить интерпретатор (lua). И всю логику приложений реализовывать в скриптах, оставив за C++ только минимальное ядро.

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

Разные задачи требуют разных инструментов. Проблема C++ в его суперуниверсальности как бы
есть все, но скажем так отточенности и завершенности не хватат (мое эстэтствующее имхо).
Re[10]: C++ vs ???
От: zip_ Россия  
Дата: 03.12.05 06:27
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>zip_ wrote:

>>
>> Pzz>C++ же, это не язык, а какой-то кошмар. Что он отражает, не очень
>> Pzz>понятно. Скорее всего, "все на свете" с весьма переменным успехом...
>>
>> Ну а с чем не согласен-то? Речь шла о С++, а написано тут все про С. И в
>> общем-то верно написано.

Pzz>Я не согласен с тем, что C++ это ассемблер. Раз C это язык высокого

Pzz>уровня (мне, кажется, удалось это аргументировать), и при этом C
Pzz>является подмножеством C++, то и C++ вроде как не ассемблер.

Всё, что там написано, показывает, что С — это низкий уровень
Не знаю, может у всех разное разделение на уровни, но я работу с железом считаю таковым.
Ниже — только ассемблер, но не думаю, что сегодня еще встречаются задачи, решение которых требует его применения.
Re[3]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 03.12.05 08:53
Оценка:
Здравствуйте, zip_, Вы писали:

_>Но не покидает ощущение, что ФЯ даст качественно больше.

_>D — это улучшение С++, ФЯ — это другое измерение.

Это больше напоминает поиск серебрянной пули.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: C++ vs ???
От: EvilChild Ниоткуда  
Дата: 03.12.05 17:05
Оценка:
Здравствуйте, reductor, Вы писали:

EC>>А что скажешь о Nemerle?



R>Я его раньше не видел

R>Сейчас глянул — по-моему очень даже неплохо
R>Не без маразмов, но неплохо
R>Правда вот не знаю даже насколько он вообще будет полезен человеку, никогда не програмировавшему на ML и Lisp
R>Там весь этот "синтаксический оверхед" вместе с какими-то "угодить всем" конструкциями могут заслонять собой то, что по-настоящему там мощно, но что необходимо просто прочувствовать в языках, которые более стройны в этом смысле.
Т.е. как первый функциональный язык не рекомендуешь?

R>С С++, кстати, та же фигня — до сих пор очень мало народу понимает как по-настоящему можно использовать нормально те же шаблоны и иксепшены.

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

R>В общем не знаю, у меня всегда мнение такое, что ML, C.Lisp/Scheme, Smalltalk, Prolog и Forth — это тот минимум который лучше знать.
Re[13]: C++ vs ???
От: reductor  
Дата: 03.12.05 21:51
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, reductor, Вы писали:


R>>В общем не знаю, у меня всегда мнение такое, что ML, C.Lisp/Scheme, Smalltalk, Prolog и Forth — это тот минимум который лучше знать.

GZ>Да уж. С таким набором тебя ни на одну работу не возьмут.

Ну что ж делать. Буду умирать с голоду, когда не возьмут.

GZ>И кстати, почему в мин. набор попали сразу ML и CLISP?


Я Comon Lisp имел в виду вообще, не только Clisp
Попали за свою фундаментальность. Родили кучу идиом, которые не только в Nemerle а и много где еще используются.
Re[10]: C++ vs ???
От: reductor  
Дата: 03.12.05 22:04
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, reductor, Вы писали:


R>>Ха.

R>>Он медленный не по сравнению с ассемблером. Он медленный по сравнению с более высокоуровневыми языками, но у которых лучше дизайн и нет всего этого легаси от Си.

GN>Где-то можно посмотреть результаты тестов или что-то, на чём основываются эти тезисы?

GN>Я было подумал посмотреть на эффективность кода произведённого Glasgow Haskell Compiler, скачал, а там оказывается GCC. Так вот, сам по себе GCC вполне не плох, но уступает ряду других компиляторов. Мне приходится заниматься CRE, и я вдоволь насмотрелся на _мусор_ который производят многие компиляторы. Что там у них творится "на верху" — это даже не важно. Компилятор, который генерирует 5-8 инструкций там, где _хороший_ компилятор сделает 2 — не может производить эффективный код.

Давайте так, Haskell — это не совсем тот язык, который стоит здесь рассматривать на тему эффективности. В его случае это не тема, а просто пропасть какая-то.
и еще не хватало устраивать битву GCC vs. ***


GN>Логика, кстати, мне не совсем ясна:

GN>С++ практически не проигрывает ассемблеру.
GN>Он заметно проигрывает более высокоуровневыми языками.
GN>Получается, что ассемблер проиграет более высокоуровневыми языками в плане эффективности кода?
GN>

Конечно. Просто чтобы догнать тот код, Который генерят некоторые компиляторы на ассемблере, придется потратить во много раз (даже, наверное, десятков раз) больше времени, чем на том языке который они компилируют.
Все очень просто. Что на С++ или на ассемблере _можно_ обогнать O'Caml, я не спорю. Вопрос чего это будет стоить.
И просьба не устраивать флейм на эту тему.

R>>На любом языке можно написать ОС с нуля.


GN>В самом деле? Давайте возьмём распространённую архитектуру — PC. Как там на Lisp будет выглядеть общение с железом?


Как сделать, так и будет.

R>>А насчет использования других языков — это исключительно в голове. Поскольку на любом языке можно написать компилятор Scheme, то и операционную систему с нуля тоже можно.


GN>Да, у меня действительно "в голове". Я не знаю, как можно увязать компилятор Scheme с возможностью реализации ОС.


Поскольку написать компилятор Scheme означает — написать компилятор чего угодно, то это в свою очередь означает, что не проблема генерировать низкоуровневый код для общения с железом и т.п.


R>>Но вообще странное рассуждение и достоинство.


GN>Я не говорил, что это достоинство. С++ — универсальный язык, это одновременно и достоинство, и недостаток. Достоинство С++ — он быстрый.


Не бывает универсальных языков. И С++ не такой быстрый.

R>>На конкретном ассемблере тоже можно все написать и что?

R>>зачем это делать?

GN>А ассемблер вообще при чём?


При том, что ассемблер тоже "универсальный". И на нем тоже можно как proof-of-concept написать OS и все приложения с нуля.
Почему С++ можно, а ассемблеру нет.
Уверен, у него тоже найдется достаточное количество фанатов, чтобы такое делать — даже видел пару проектов.
Re[12]: C++ vs ???
От: reductor  
Дата: 03.12.05 22:58
Оценка:
Здравствуйте, jedi, Вы писали:

J>Блин, не выдержал ...


Иногда лучше читать, чем говорить

J>Приведи хотя бы один пример где С++ вносит какую-то заведомую неэффективность по сравнению с тем же ассемблером (ограничимся х86).

J>Restriction: неэффективность должна следовать именно из природы языка, а не из неэффективность кода генерируемого каким-то конкретным
J>компилятором (т.е. всякие примеры с плавающей точкой и неиспользованием инструкций SSE не канают).

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

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


Спасибо за разрешение.

J>P.S. Я много пишу на С++, но к фанатам себя не причисляю. Мой любимый язык Smalltalk .


ST хороший
Re[13]: C++ vs ???
От: jedi Мухосранск  
Дата: 03.12.05 23:03
Оценка:
Здравствуйте, reductor, Вы писали:

R>Иногда лучше читать, чем говорить


Безусловно, предлагаю помедитировать над этой фразой перед тем как писать следующий опус.

J>>Приведи хотя бы один пример где С++ вносит какую-то заведомую неэффективность по сравнению с тем же ассемблером (ограничимся х86).

J>>Restriction: неэффективность должна следовать именно из природы языка, а не из неэффективность кода генерируемого каким-то конкретным
J>>компилятором (т.е. всякие примеры с плавающей точкой и неиспользованием инструкций SSE не канают).

R>А я не пропагандировал здесь ассемблер. Я совершенно о другом писал.

R>В некотором смысле совершенно обратное.

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


R>Спасибо за разрешение.


J>>P.S. Я много пишу на С++, но к фанатам себя не причисляю. Мой любимый язык Smalltalk .


R>ST хороший


Т.е. по существу вопроса ответить нечего? См. совет вверху.
Re[14]: C++ vs ???
От: reductor  
Дата: 03.12.05 23:07
Оценка:
Здравствуйте, jedi, Вы писали:


J>Т.е. по существу вопроса ответить нечего? См. совет вверху.


По какому существу? Что вы хотели услышать и против какого моего утверждения возражаете?
Если можно, конкретнее.
Re[16]: C++ vs ???
От: reductor  
Дата: 04.12.05 00:41
Оценка:
Здравствуйте, jedi, Вы писали:

R>>По какому существу? Что вы хотели услышать и против какого моего утверждения возражаете?

R>>Если можно, конкретнее.

J>"Он медленный не по сравнению с ассемблером. Он медленный по сравнению с более высокоуровневыми языками, но у которых лучше дизайн и нет всего этого легаси от Си."

J>Хочу услышать: примеры, пожалуйста.

Я уже приводил. Вся эта ветка этому посвящена.
Но, если вы еще раз хотите, то пожалуйста:
Standard ML, O'Caml, Cyclone

J>"Все очень просто. Что на С++ или на ассемблере _можно_ обогнать O'Caml, я не спорю. Вопрос чего это будет стоить."

J>Хочу услышать: конкретный пример где это будет стоить дорого.

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

J>"Не бывает универсальных языков. И С++ не такой быстрый."

J>Хочу услышать: где язык С++ не такой быстрый, как мог бы (не знаю в сравнении с чем вы утверждали).

Везде, где возникает потребность для запуска профайлера.
Самый простейший пример из возможных: http://www.ffconsultancy.com/free/ray_tracer/languages.html
Пожалуйста, не стоит здесь и сейчас начинать флейм по этому поводу и рассказывать, что вы сможете оптимизировать код на С++ или на чем угодно, чтобы он обгонял MLTon или O'Caml
Я сам это могу сделать. Правда за время в несколько раз превышающее то, которое ушло бы на то же самое в случае окамла.
Причем, это очень простой и очень маленький случай. В случае с системами в 100 000 строк разница становится необсуждаемой.


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


Это намек на то, что мне пора прекратить сюда писать?
В общем-то, я и сам начал об этом задумываться. Именно потому, что мне приходится слишком много отвечать на идиотские комментарии, вместо того, чтобы обсуждать конкретные и интересные _мне_ моменты в программировании.
Причем, ваше сообщение — одно из тех, что лишь увеличивает энтропию и в сотый раз заставляет меня повторять одно и то же, вместо занятия полезным делом.


J>Вот только конкретики в ваших опусах маловато, все больше какие-то общие фразы. Вам есть что сказать по делу? В конце концов здесь

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

Если не считать того, что сейчас вы меня просите обосновать утверждение обратное тому, что попросили в первом комментарии, то надеюсь, я это сделал.
Еще же, перед тем как говорить, что это не религиозный форум, убедитесь, что в вашем сообщении не содержится ничего личного и религиозного. Иначе, все, что вы говорите, может быть расценено исключительно как кликушество.

Более я надеюсь к теме С++ надеюсь не возвращаться вообще. Если вы с моим решением не согласны, я готов вам посочувствовать.

Всего хорошего.
Re[19]: C++ vs ???
От: Pzz Россия https://github.com/alexpevzner
Дата: 04.12.05 01:06
Оценка:
reductor wrote:
>
> Pzz>Выяснилось, что у Ocaml'а вызов функции более эффективно устроен на
> Pzz>ассемблерном уровне.
>
> И не только вызов функции.
> Что особо примечательно, компилятор у окамла почти не оптимизирует
> ничего, он простой как три рубля.
> Если бы еще и оптимизировал...

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

Кодогенератор не замысловатый, но аккуратно написан. В том смысле, что
не делает плохо то, что несложно сделать хорошо.
Posted via RSDN NNTP Server 2.0
Re[7]: C++ vs ???
От: reductor  
Дата: 04.12.05 07:04
Оценка:
Здравствуйте, zip_, Вы писали:

_>>>Haskell мне не кажется практичным и готовым к применению в промышленных проектах. Считаю, что это до сих пор академический язык.


R>>Интересно по каким критериям На самом деле уже довольно давно нет. То есть язык сам вообще очень давно, а тот же GHC какое-то время.

R>>Его сейчас двигают как раз в массы. Но правда стоит отметить, что по вылизанности GHC от окамла пока отстает.

_>Нет компилятора для ARM,

Ну, тут 3 момента.
1. Не особая проблема получить тот же GHC под ARM, т.к он умеет компилить через GCC (правда потом сам манглит ассемблер на выходе, так что тут есть место для геморроя). Еще они сейчас бэкенд переносят на С-- (Один из разработчиков С-- одновременно является разработчиком GHC)
2. есть два компилятора, которые, видимо, это могут без проблем, но пока не для широкого потребления. yhc: http://www-users.cs.york.ac.uk/~ndm/yhc/ — это байткод-компилятор + рантайм на Си. jhc: http://repetae.net/john/computer/jhc/ — компилит все в Си. Обещает быть еще и суперпроизводительным. Там вообще очень много интересных решений (например, region inference вместо GC).
3. Есть hugs который работает на ARM: http://www.haskell.org/hugs/

_>существующие компиляторы генерируют недостаточно качественный код (нет доверия инструменту).

Не уверен, что понял что имеется в виду. Если тяжелый рантайм у GHC, то, наверное да. Или то, что сложно стабилизировать Си-бекенд, потому что gcc вечно меняет свой подход. Но вообще там бэкенд скоро переделают, да — я там выше написал.

_>Плюс еще ленивость сильно затрудняет отладку и делает поведение программы недетерминированным.

Под хаскель не нужна такая отладка как под С++ %) Просто потому, что там не получится натворить столько дел, большинство ошибок отловится еще при компиляции. Ну и поставить вывод логов в ключевых местах проблемы не составляет.
Про то, что поведение программы недетерминировано — это, конечно, совсем не так Кому бы тогда нужен был язык, который неизвестно что делает. Нет, конечно предсказуемость программы на хаскеле гораздо выше, чем у какого-либо еще языка. Просто недетерминирован порядок вычислений, но это, согласно теореме Черча-Россера и неважно
Re[17]: C++ vs ???
От: gear nuke  
Дата: 04.12.05 07:11
Оценка:
Здравствуйте, reductor, Вы писали:

R>Самый простейший пример из возможных: http://www.ffconsultancy.com/free/ray_tracer/languages.html

R>Пожалуйста, не стоит здесь и сейчас начинать флейм по этому поводу и рассказывать, что вы сможете оптимизировать код на С++ или на чем угодно, чтобы он обгонял MLTon или O'Caml
R>Я сам это могу сделать. Правда за время в несколько раз превышающее то, которое ушло бы на то же самое в случае окамла.

Надеюсь, вопрос не будет воспринят как флейм
Возможно ли (в принципе) заоптимизировать код на MLTon или O'Caml до такой степени, что бы _практически_ было раелизовано что-то вроде этого:

(это довольно старый движёк. думаю, не лучший)
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[11]: C++ vs ???
От: gear nuke  
Дата: 04.12.05 07:11
Оценка:
Здравствуйте, reductor, Вы писали:

R>Давайте так, Haskell — это не совсем тот язык, который стоит здесь рассматривать на тему эффективности. В его случае это не тема, а просто пропасть какая-то.


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

R>Просто чтобы догнать тот код, Который генерят некоторые компиляторы на ассемблере, придется потратить во много раз (даже, наверное, десятков раз) больше времени, чем на том языке который они компилируют.

R>Все очень просто. Что на С++ или на ассемблере _можно_ обогнать O'Caml, я не спорю. Вопрос чего это будет стоить.

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

GN>>В самом деле? Давайте возьмём распространённую архитектуру — PC. Как там на Lisp будет выглядеть общение с железом?


R>Как сделать, так и будет.


Вот именно, вопрос в том, _как_сделать_...
на Lisp обработку асинхронных прерываний?

R>Не бывает универсальных языков.


Это в Священные Войны...

R>И С++ не такой быстрый.


2й раз вижу эту фразу без обоснования. Если это относитсяя к возможности написания кода, эффективность которого будет мало отличаться от вручную написанного на ассемблере, то это неверно. На С++ можно такой код писать. Для этого достаточно знание асма и несколько часов/дней на изучение основ языка. Вот что бы на нём писать эффективный высокоуровневый код — нужно потратить уже насколько месяцев/лет. Понятное дело, что будут языки у которых порог вхождения значительно ниже.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[18]: C++ vs ???
От: gear nuke  
Дата: 04.12.05 07:11
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Я как-то померил, любопытства ради, скорострельность вычисления ряда

Pzz>Фиббоначи рекурсивным способом на нескольких разных компиляторах.

Pzz>К моему изумлению, Ocaml обгонял GCC процентов на 20-30. Чего я совсем

Pzz>не ожидал от высокоуровнего языка.

Pzz>Выяснилось, что у Ocaml'а вызов функции более эффективно устроен на

Pzz>ассемблерном уровне.

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

Даже если в случае с OCaml это было не так, то это всё равно может быть примером почему С++ способен проиграть. Существующие компиляторы плохо умеют оптимизировать такое. Можно, конечно, руками всё делать и выигрывать — ценой читабельности. Вполне разумно, что в языках, где рекурсия одна из основных фич компилятор должен уметь делать такое хорошо.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[17]: C++ vs ???
От: gear nuke  
Дата: 04.12.05 07:11
Оценка:
Здравствуйте, reductor,

J>>"Он медленный не по сравнению с ассемблером. Он медленный по сравнению с более высокоуровневыми языками, но у которых лучше дизайн и нет всего этого легаси от Си."

J>>Хочу услышать: примеры, пожалуйста.

R>Я уже приводил. Вся эта ветка этому посвящена.

R>Но, если вы еще раз хотите, то пожалуйста:
R>Standard ML, O'Caml, Cyclone

ИМХО jedi имел ввиду примеры каких-то задач, решая которые на С++ мы получим более медленный исполняемый файл, чем на перечисленных языках (время на разработку примем как не важный критерий, поскольку мы оцениваем именно возможность написания быстрого кода)
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[18]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.12.05 07:24
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Вообще говоря, в некоторых случаях тот же Ocaml может обогнать,

Pzz>например, GCC даже на совершенно простеньких програмках.

На простеньких программках, да еще в специфических областях, C++ даже Java обгоняет. Например, на строковых операциях (за счет того, что C++ код вызывает деструкторы std::string-ов, а Java нет и очищает всю память при завершении теста).

Pzz>Я как-то померил, любопытства ради, скорострельность вычисления ряда

Pzz>Фиббоначи рекурсивным способом на нескольких разных компиляторах.

Pzz>К моему изумлению, Ocaml обгонял GCC процентов на 20-30. Чего я совсем

Pzz>не ожидал от высокоуровнего языка.

А какие еще компиляторы участвовали в тестах?
На какой платформе?
Какие результаты?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[8]: offtop: C--
От: gear nuke  
Дата: 04.12.05 07:26
Оценка:
Здравствуйте, reductor, Вы писали:

R>Еще они сейчас бэкенд переносят на С-- (Один из разработчиков С-- одновременно является разработчиком GHC)


Не подскажете ссылочку на такой С-- ? Все компиляторы, которые мне попадались или умерли в прошлом веке, или :-(
google что-то совсем не понимает C%2d%2d
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[12]: C++ vs ???
От: reductor  
Дата: 04.12.05 08:28
Оценка:
Здравствуйте, gear nuke, Вы писали:


GN>Вот именно, вопрос в том, _как_сделать_...

GN>на Lisp обработку асинхронных прерываний?

Я чего-то не понимаю, видимо. А в чем по-вашему проблема?
Особенно, если сделать специальный DSL внутри лиспа (для чего лисп в общем и предназначен — создание domain-specific языков) специально для работы с железом.
И маленький транслятор, который все это приведет в нужную форму.


R>>И С++ не такой быстрый.


GN>2й раз вижу эту фразу без обоснования. Если это относитсяя к возможности написания кода, эффективность которого будет мало отличаться от вручную написанного на ассемблере, то это неверно. На С++ можно такой код писать. Для этого достаточно знание асма и несколько часов/дней на изучение основ языка. Вот что бы на нём писать эффективный высокоуровневый код — нужно потратить уже насколько месяцев/лет. Понятное дело, что будут языки у которых порог вхождения значительно ниже.


Ну а что вы хотите услышать. Что его семантика создает проблемы для как для оптимизирующих компиляторов, так и для рантайма в виде что работы стека, что с кучей?
Сложно С++ нормально компилировать. Вот и все.

Почему вы думаете иначе всякие теоретики все до сих пор на фортране делают.
Re[17]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.12.05 08:48
Оценка:
Здравствуйте, reductor, Вы писали:

R>Везде, где возникает потребность для запуска профайлера.


Замечательная фраза сама по себе

R>Самый простейший пример из возможных: http://www.ffconsultancy.com/free/ray_tracer/languages.html


А вот здесь вообще интересно.
Читаем:

The fastest languages are Stalin-compiled Scheme and C++. OCaml and MLton-compiled SML are slightly slower.

Да, конечно, сразу можно делать вывод о том, что C++ медленный язык. При том, что время компиляции C++ программы составило 0.75s, а время компиляции Stalin Scheme -- 680s (!), т.е. больше 11-ти минут.

Еще интересный момент:

two of the best optimising compilers, Stalin and MLton, are both whole-program optimising compilers, meaning they can only compile whole (self-contained) programs

если Stalin Scheme компилировал конкретно эту программу 11-ть минут, то что делать с ним в реальных проектах объемом больше 200 тысяч строк? При условии, что компилировать нужно сразу всю программу.

Напротив, про C++ и OCaml сказано:

The C++ and OCaml compilers allow partial recompilation, compile this whole program much more quickly and still achieve very competitive performance.


Что называется, почувствуйте разницу.




В общем, возвращаясь к первоначальному вопросу о выборе языка вместо C++, OCaml выглядит совсем не плохо.
На практике, однако, кроме его скоросных характеристик важную роль еще будут иметь средства разработки, библиотеки, документация и пр. И не факт, что здесь OCaml сможет выигрывать у C++, не говоря уже про Java или .Net/Mono.
А еще нужно принять во внимание:

Unlike SML, the OCaml language is not standardised and continues to evolve. The evolution of OCaml has allowed it to adopt many new programming constructs not found in SML, including polymorphic variants and objects. However, the evolution of the OCaml language sometimes renders old code uncompilable or, worse, different in terms of performance or even correctness.

для языка для промышленного применения такое пренебрежение совместимостью с ранее написанным кодом может стать фатальным, имхо. Ни C++, ни Java, ни C# себе такого не позволяли.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: C++ vs ???
От: reductor  
Дата: 04.12.05 08:52
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, reductor,


GN>>>Возможно ли (в принципе) заоптимизировать код на MLTon или O'Caml до такой степени, что бы _практически_ было раелизовано что-то вроде этого:

GN>>>(это довольно старый движёк. думаю, не лучший)

R>>По ссылке видно, что O'Caml и особенно MLTon и так быстрее С++ в таких задачах


GN>С++ — синий. OCaml — красный.

GN>Прошу обратить внимание на первый график — он заканчивается как раз в том месте, где С++ начинает выигрывать

Да что у окамла, что у милтона проблемы с AMD64 кодом. Надеюсь, скоро будут решены.

R>>Так что в чем проблема, непонятно.

R>>Или я как-то не так понял вопрос?

GN>Видимо. Автор движка virtualray утверждает, что там применяется тщательная низкоуровневая оптимизация — именно по этой причине, в игрушку вообще можно играть, а не смотреть слайд-шоу.

GN>Вопрос такой — можно ли произвести оптимизацию подобного уровня на языках, которые "и так быстрее С++ в таких задачах"

Знаете, вне зависимости от чего-то еще, никто не мешает переписать тот критический 1% кода, который тормозит хоть на ассемблере, хоть на бейсике. И слинковать вместе с остальным.


R>>P.S.

R>>Quake3-подобный движок на haskell, написанный одним(!!) человеком: http://www.haskell.org/hawiki/Frag

GN>Это совершенно не то. В "Разработка игр" неоднократно обсуждалось использование NET и другого (вместо С++) для написания подобных проектов. Это вполне оправданно, так как программирование в данном случае сводится к вызовам некоторого API, которое всё рисует в конечном счёте аппаратно.


GN>Ray tracing подразумевает, что рендеринг выполняется программно.


Да я уже понял. Но программно мы имеем то, что имеем. Окамл и SML очень быстрые на большинстве архитектур.
Не знаю правда что там с теми же векторными операциями — не скажу. Но думаю, не проблема, опять же, подвязать их. Все времени уйдет меньше, чем.

GN>Кстати, по поводу 2х восклицательных знаков. Знакомый сейчас пишет on-line RPG на С++ (ИМХО сложность выше). Один (не считая художников и т.п.). Почему был выбран этот язык? Стоимость разработки — скоро состоится запуск сервера, и когда он увидит узкие места (а в этом списке 100% появятся менеджер кучи и STL строчки), будет очень просто найти людей, которые смогут эти узкие места подрихтовать.


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



GN>Мой вопрос не касается вопросов имплементации. Он касается возможности использовать низкоуровневые оптимизации в HLL.


Я там выше написал.
Re[18]: C++ vs ???
От: reductor  
Дата: 04.12.05 09:08
Оценка:
Здравствуйте, eao197, Вы писали:

R>>Самый простейший пример из возможных: http://www.ffconsultancy.com/free/ray_tracer/languages.html


E>А вот здесь вообще интересно.

E>Читаем:
E>

E>The fastest languages are Stalin-compiled Scheme and C++. OCaml and MLton-compiled SML are slightly slower.

E>Да, конечно, сразу можно делать вывод о том, что C++ медленный язык. При том, что время компиляции C++ программы составило 0.75s, а время компиляции Stalin Scheme -- 680s (!), т.е. больше 11-ти минут.

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

Никто тут про схему не говорил. Кому вообще придет в голову Scheme здесь рассматривать — это динамический язык, а сталин — это игрушка одного человека и некий proof-of-concept. По какому поводу и кому вы здесь возражаете?

E>Напротив, про C++ и OCaml сказано:

E>

E>The C++ and OCaml compilers allow partial recompilation, compile this whole program much more quickly and still achieve very competitive performance.


E>Что называется, почувствуйте разницу.


Вы здесь боретесь с ветряными мельницами.
Хотите рассказать мне какой окамл хороший, а я — теоретик, оторванный от жизни?


E>В общем, возвращаясь к первоначальному вопросу о выборе языка вместо C++, OCaml выглядит совсем не плохо.

E>На практике, однако, кроме его скоросных характеристик важную роль еще будут иметь средства разработки, библиотеки, документация и пр. И не факт, что здесь OCaml сможет выигрывать у C++, не говоря уже про Java или .Net/Mono.

Если вы не заметили, вся эта ветка была о другом.
И никаких проблем со средствами разработки у Окамла нет.


E>А еще нужно принять во внимание:

E>

E>Unlike SML, the OCaml language is not standardised and continues to evolve. The evolution of OCaml has allowed it to adopt many new programming constructs not found in SML, including polymorphic variants and objects. However, the evolution of the OCaml language sometimes renders old code uncompilable or, worse, different in terms of performance or even correctness.

E>для языка для промышленного применения такое пренебрежение совместимостью с ранее написанным кодом может стать фатальным, имхо. Ни C++, ни Java, ни C# себе такого не позволяли.

Кому это нужно принять во внимание?
Я рад за них. И за вас. Но здесь обсуждалось не то, сохраняет ли окамл обратную совместимость.
И кстати в случае с С++ и в случае с его компиляторами далеко не все так гладко. Одна изменение манглинга в gcc 3.0 чего стоило.

Бессодержательность ваших ответов меня начинает пугать.
Re[19]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.12.05 09:56
Оценка:
Здравствуйте, reductor, Вы писали:

R>>>Самый простейший пример из возможных: http://www.ffconsultancy.com/free/ray_tracer/languages.html


E>>А вот здесь вообще интересно.

E>>Читаем:
E>>

E>>The fastest languages are Stalin-compiled Scheme and C++. OCaml and MLton-compiled SML are slightly slower.

E>>Да, конечно, сразу можно делать вывод о том, что C++ медленный язык. При том, что время компиляции C++ программы составило 0.75s, а время компиляции Stalin Scheme -- 680s (!), т.е. больше 11-ти минут.

R>У меня такое ощущение, вы отвечаете не мне, а вашей фрустрации наукой. Ни одно мое сообщение не остается почему-то без вашего внимания. Вы начинаете быть назойливым.


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

Но вот ты привел ссылку на сравнительный анализ скорости реализаций одной задачи на разных языках. Привел в качестве доказательства того, что C++ -- это не быстрый язык. Я привожу цитату из приведенной тобой ссылки, в которой явно указывается, что самыми быстрыми реализациями были реализации на Scheme и C++.

R>Никто тут про схему не говорил. Кому вообще придет в голову Scheme здесь рассматривать — это динамический язык, а сталин — это игрушка одного человека и некий proof-of-concept. По какому поводу и кому вы здесь возражаете?


Возражаю по поводу:

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

Re[8]: C++ vs ???
Автор: reductor
Дата: 02.12.05


Из приведенной тобой ссылки про ray_tracer вообще не видно, чтобы C++ был медленным.

R>Если вы не заметили, вся эта ветка была о другом.

R>И никаких проблем со средствами разработки у Окамла нет.

Ok. Я сам не сторонник IDE, но если уж говорить про средства разработки, то покажи, пожалуйста, аналоги для OCaml таких вещей, как Visual Studio, Visual Assist, ReSharper, IDEA?

Есть ли для OCaml средства для работы с РСУБД, с XML, с HTTP, с SOAP, поддержка криптографии? Есть ли, к примеру, аналоги yacc/bison (coco/r, antlr), которые бы генерировали парсеры на OCaml?

Может ли стандартная библиотека OCaml сравниться с .Net Framework или JDK. Или хотя бы с Boost-ом? Или ACE-ом?

E>>А еще нужно принять во внимание:

E>>

E>>Unlike SML, the OCaml language is not standardised and continues to evolve. The evolution of OCaml has allowed it to adopt many new programming constructs not found in SML, including polymorphic variants and objects. However, the evolution of the OCaml language sometimes renders old code uncompilable or, worse, different in terms of performance or even correctness.

E>>для языка для промышленного применения такое пренебрежение совместимостью с ранее написанным кодом может стать фатальным, имхо. Ни C++, ни Java, ни C# себе такого не позволяли.

R>Кому это нужно принять во внимание?

R>Я рад за них. И за вас. Но здесь обсуждалось не то, сохраняет ли окамл обратную совместимость.

Началось все с того, имеет ли смысл выбрать OCaml вместо C++ (см. C++ vs ???
Автор: zip_
Дата: 30.11.05
). А если какой-то язык выбирается для промышленного использования, то обеспечение совместимости с написанным ранее кодом, имеет очень серьезное значение.

R>И кстати в случае с С++ и в случае с его компиляторами далеко не все так гладко. Одна изменение манглинга в gcc 3.0 чего стоило.


Не видел никаких проблем с переносом исходного кода на C++ из gcc 2.95.* в gcc 3 или gcc 4. Так же, как в Visual C++ или с89. Проблемы были только с системно-зависимыми, не стандартными расширениями, вроде __declspec.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[19]: C++ vs ???
От: Pzz Россия https://github.com/alexpevzner
Дата: 04.12.05 10:58
Оценка:
gear nuke wrote:
>
> Pzz>Выяснилось, что у Ocaml'а вызов функции более эффективно устроен на
> Pzz>ассемблерном уровне.
>
> А не было ли это причиной того, что копмилятор OCaml приводил
> рекурсивный вызов к простому циклу?

1. Нет, не сводил
2. GCC тоже умеет превращать хвостовую рекурсию в цикл
Posted via RSDN NNTP Server 2.0
Re[13]: C++ vs ???
От: gear nuke  
Дата: 04.12.05 11:02
Оценка:
Здравствуйте, reductor, Вы писали:

GN>>Вот именно, вопрос в том, _как_сделать_...

GN>>на Lisp обработку асинхронных прерываний?

R>Я чего-то не понимаю, видимо. А в чем по-вашему проблема?


Ну, для начала нужно подготовить Interrupt Descriptor Table, запрограммировать APIC, перейти из реального режима в защищённый... Пока даже не затрагиваются вопросы поддержки виртуальной памяти.

R>семантика создает проблемы для как для оптимизирующих компиляторов


Можно небольшой пример?

R>так и для рантайма в виде что работы стека


Не вижу никаких проблем со стеком. Он аппаратно поддерживается процессором.

R>что с кучей


А что с кучей? Её можно совсем не использовать . Можно реализовать _свой_ менеджер. Можно — garbage collector. Ещё, наверное, что-то можно, когда придумают что-то новое.

R>Сложно С++ нормально компилировать.


ИМХО это относится исключительно к коду, написанному левой пяткой. Cкорее всего, это верно для всех языков.

R>Вот и все.


R>Почему вы думаете иначе всякие теоретики все до сих пор на фортране делают.


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


P.S.
Я сам далеко не фанат С++. Просто как-то понял, что есть люди, которые способны реализовать на нём эффективные низкоуровневые операции. Есть те, кто напишет гору шаблонов, что бы симулировать фичи языка XYZ. Кто-то напишет библиотеки на любой вкус. А кто-то способен написать хороший компилятор. Если собрать всё это вместе, получится вполне достойный результат. Причём, собирать можно только то, что нужно для конкретной задачи. Видимо, это и называется "плюсы"

Теперь вижу, есть такой язык OCaml, почти такой же быстрый, как С++, только писать на нём нужно в 2 раза меньше. Надо его посмотреть, может там плюсов будет больше
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[21]: C++ vs ???
От: gear nuke  
Дата: 04.12.05 11:02
Оценка:
Здравствуйте, reductor, Вы писали:

R>Знаете, вне зависимости от чего-то еще, никто не мешает переписать тот критический 1% кода, который тормозит хоть на ассемблере, хоть на бейсике. И слинковать вместе с остальным.


С выделенным полностью согласен

Мешает "что":
линковка подразумевает вызов некоторого машинного кода в runtime.
Это довольно дорогая (по времени) операция: нужно передавать параметры через стек/регистры, call и ret далеко не самые быстрые инструкции. Это на поверхности, глубже — нюансы работы кеша, предсказателя переходов и прочая ерунда, о которой программист на ЯВУ не задумывается.
Сами по себе эти задержки не очень полезны в критичных местах и могут быть больше, чем время выполнения полезного кода.
Более того, это сильно мешает whole program optimization.

С++ (а так же, поздний С) не имеет вышеназванных проблем by design.
Другое дело, что проблемы эти иногда не важны.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[19]: C++ vs ???
От: Cyberax Марс  
Дата: 04.12.05 11:14
Оценка:
reductor wrote:

> По ссылке видно, что O'Caml и особенно MLTon и так быстрее С++ в таких

> задачах

Простите, это следует писать: "Быстрее данной реализации на С++".

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[17]: C++ vs ???
От: Cyberax Марс  
Дата: 04.12.05 11:23
Оценка:
eao197 wrote:

> Но реальных данных не приводит. Придется сделать это за него:

> OCaml vs Intel C++
> <http://shootout.alioth.debian.org/benchmark.php?test=all&amp;lang=ocaml&amp;lang2=icpp&gt;
> OCaml vs GNU C++
> <http://shootout.alioth.debian.org/benchmark.php?test=all&amp;lang=ocaml&amp;lang2=gpp&gt;

Похоже тесты не очень правильные. Я взял программу ackerman, убрал
оттуда использование стандартной библиотеки С++, использовал PGO для
лучшей оптимизации, и оно стало работать на 20% быстрее в тестах с
небольшим N.

Вероятно в некоторых тестах тут измерялась скорость инициализации
стандартной библиотеки

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[19]: C++ vs ???
От: Cyberax Марс  
Дата: 04.12.05 11:25
Оценка:
eao197 wrote:

> Pzz>Вообще говоря, в некоторых случаях тот же Ocaml может обогнать,

> Pzz>например, GCC даже на совершенно *простеньких* програмках.
> На простеньких программках, да еще в специфических областях, C++ даже
> Java обгоняет. Например, на строковых операциях (за счет того, что C++
> код вызывает деструкторы std::string-ов, а Java нет и очищает всю
> память при завершении теста).

И даже тут С++ может выиграть, если использовать строки с
custom-аллокатором, который будет чистить память "одним махом".

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[19]: C++ vs ???
От: Pzz Россия https://github.com/alexpevzner
Дата: 04.12.05 11:27
Оценка:
eao197 wrote:
>
> Pzz>Вообще говоря, в некоторых случаях тот же Ocaml может обогнать,
> Pzz>например, GCC даже на совершенно *простеньких* програмках.
>
> На простеньких программках, да еще в специфических областях, C++ даже
> Java обгоняет. Например, на строковых операциях (за счет того, что C++
> код вызывает деструкторы std::string-ов, а Java нет и очищает всю память
> при завершении теста).

Ну кто же этими std::string'ами будет пользоваться там, где скорость
важна?...

> Pzz>Я как-то померил, любопытства ради, скорострельность вычисления ряда

> Pzz>Фиббоначи рекурсивным способом на нескольких разных компиляторах.
>
> Pzz>К моему изумлению, Ocaml обгонял GCC процентов на 20-30. Чего я совсем
> Pzz>не ожидал от высокоуровнего языка.
>
> А какие еще компиляторы участвовали в тестах?
> На какой платформе?
> Какие результаты?

Я уж всего не помню. Это было так, не тесты, а баловство. Ну, примерно,
Ocaml, C (GCC), Lua, Perl. Кажется, Haskell.

Результаты, в общем-то, вполне предсказуемые. C быстрый, остальные языки
— медленные. Вот Ocaml оказался странным исключением
Posted via RSDN NNTP Server 2.0
Re[18]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.12.05 12:24
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Похоже тесты не очень правильные. Я взял программу ackerman, убрал

C>оттуда использование стандартной библиотеки С++, использовал PGO для
C>лучшей оптимизации, и оно стало работать на 20% быстрее в тестах с
C>небольшим N.

К любым шустрикам можно выкатить массу претензий. Просто этот показателен тем, что:
— в нем участвует большое количество языков и компиляторов;
— он использует актуальные и современные компиляторы.

Т.е. позволяет хоть как-то оценивать производительность современных языков и их современных реализаций.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[22]: ocamlopt и MSVC - кто быстрее?
От: gear nuke  
Дата: 04.12.05 17:12
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Вне конкурса проходит тот же MSVC с ключиком /clr

GN>Замеры выполнялись "на глаз" — запускался экзешник и секунды смотрелись по часам Windows, пока не закроется окно консоли.
GN>В этом случае неизвестно что измерялось, и точность сомнительна, но результаты интересны.
GN>Время выполнения ~ 28-29 сек.

Да, забыл написать — исполняемый файл 61440 байт (не считая NET FW 2.0)
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[23]: ocamlopt и MSVC - кто быстрее?
От: gear nuke  
Дата: 04.12.05 18:10
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>А теперь слегка подправим программу на С++. Вместо порнографии с

C>самопальным вектором используем Blitz++ (попутно исправив пару ошибок).
C>Еще добавил версию функции unitise, не создающей лишних временных
C>переменных. Текст лежит здесь: http://scb.udsu.ru/~cyberax/ray.cpp

C>Результаты:

C>

C>cyberax@scblinux:~/tests$ time ./ray >img.pgm

C>real 0m52.500s
C>user 0m52.023s
C>sys 0m0.072s

C>cyberax@scblinux:~/tests$ time ./ray2 > img2.pgm

C>real 0m39.509s
C>user 0m39.326s
C>sys 0m0.024s

C>Имеем улучшение в 25%, компилировалось: "gcc -O3 -ffast-math
C>-fomit-frame-pointer ray.cpp"

А может ли быть такое, что в изначальных теста С++ вариант делался для получения "ожидаемых" результатов? Меня всегда смущала разница в измерениях в 5%
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[26]: ocamlopt и MSVC - кто быстрее?
От: reductor  
Дата: 04.12.05 19:36
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> с удовольствием бы с вами поиграл в этой песочнице и показал что

>> произойдет на PowerPC и после того, как окамлу заменить вектор на
>> CamlG4 например или что-нибудбь еще такое, но как-то не увлекает,
>> знаете ли...

C>А мне ничего менять не надо — Blitz++ поддерживает векторные процессоры.

C>Для этого надо просто поставить соответствующую реализацию.

Вы к окамлу тоже прикручивали векторную библиотеку?
Не забыли, перед тем как тестировать?

Ах да, я забыл. вы не знаете окамл. Вам сложно.

>> Давайте лучше сразу прямо здесь запишем, что С++ это самый быстрый,

>> разумный, добрый и вечный язык.
>> А то спам в ящике надоел.

C>Ну так отвечайте по существу. А то тут спамом многие считают ваши сообщения.


На что же я вам должен отвечать?
И если можно поименно этих многих.
Re[27]: ocamlopt и MSVC - кто быстрее?
От: jedi Мухосранск  
Дата: 04.12.05 21:28
Оценка:
Здравствуйте, reductor, Вы писали:

R>И если можно поименно этих многих.


моя :)
Re[29]: ocamlopt и MSVC - кто быстрее?
От: reductor  
Дата: 04.12.05 21:53
Оценка:
Здравствуйте, jedi, Вы писали:

J>Здравствуйте, reductor, Вы писали:


R>>Думаю, трех человек достаточно.

R>>Кто-нибудь может сказать как здесь удалить аккаунт вместе со всеми своими сообщениями?

R>>А то я явно здесь засиделся.


J>При этих словах все вероятно должны начать посыпать голову пеплом ... :))


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

J>А если серьезно, то никто не сомневается в вашей компетентности, вот только

J>безаппеляционно-менторский стиль суждений здесь никому неинтересен. Гораздо конструктивнее

Я уже понял

J>было бы написать пару статей из той области которой вы похоже владеете — функциональное

J>программирование, верификация программ итп. Думаю они были бы действительно интересны
J>многим участникам форума, мне уж точно :shuffle:

Спасибо, нет.
Re[27]: ocamlopt и MSVC - кто быстрее?
От: Cyberax Марс  
Дата: 05.12.05 12:10
Оценка:
reductor wrote:

> C>А мне ничего менять не надо — Blitz++ поддерживает векторные

> процессоры.
> C>Для этого надо просто поставить соответствующую реализацию.
> Вы к окамлу тоже прикручивали векторную библиотеку?
> Не забыли, перед тем как тестировать?

Что это с вами?

Вы мне начали угрожать тестами на G4 (где, вероятно, OCaml будет
использовать векторный сопроцессор AltiVec). Я указал на то, что в
Blitz++ тоже есть поддержка MMX/SSE/AltiVec и еще нескольких типов
векторных процессоров.

Кстати, для С++ есть реализация векторных классов, которая использует GPU.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[19]: C++ vs ???
От: zip_ Россия  
Дата: 05.12.05 19:27
Оценка:
Здравствуйте, reductor, Вы писали:

R>И никаких проблем со средствами разработки у Окамла нет.


Да есть проблема. Нормальной удобной среды — нет. Есть только поделки.
Другое дело, что для меня, например, это не такой важный вопрос, я настроил Programmers Notepad + ocamake. Все что надо для комфортной работы есть. Подсветку синтаксиса и некоторые удобные вещи пришлось настроить самостоятельно.
Re[20]: C++ vs ???
От: reductor  
Дата: 05.12.05 19:43
Оценка:
Здравствуйте, zip_, Вы писали:

_>Здравствуйте, reductor, Вы писали:


R>>И никаких проблем со средствами разработки у Окамла нет.


_>Да есть проблема. Нормальной удобной среды — нет. Есть только поделки.

_>Другое дело, что для меня, например, это не такой важный вопрос, я настроил Programmers Notepad + ocamake. Все что надо для комфортной работы есть. Подсветку синтаксиса и некоторые удобные вещи пришлось настроить самостоятельно.

ide: tuareg mode в emacs и еще там же несколько, fpeclipse, просто синтаксис подсвечивают все редакторы, в которых я пробовал редактировать ml'ные тексты — kate, jedit, vim + по крайне мере vim и jedit позволяют внутри себя запустить отладку и показывать прямо в коде ошибки и все такое

кроме всего прочего есть F# и SML.NET environment для visual studio.

наверняка я что-то еще упустил. просто сам пользуюсь в основном emacs или jedit или vim
Re[21]: C++ vs ???
От: zip_ Россия  
Дата: 05.12.05 21:16
Оценка:
Здравствуйте, reductor, Вы писали:

_>>Да есть проблема. Нормальной удобной среды — нет. Есть только поделки.

_>>Другое дело, что для меня, например, это не такой важный вопрос, я настроил Programmers Notepad + ocamake. Все что надо для комфортной работы есть. Подсветку синтаксиса и некоторые удобные вещи пришлось настроить самостоятельно.

R>ide: tuareg mode в emacs и еще там же несколько, fpeclipse, просто синтаксис подсвечивают все редакторы, в которых я пробовал редактировать ml'ные тексты — kate, jedit, vim + по крайне мере vim и jedit позволяют внутри себя запустить отладку и показывать прямо в коде ошибки и все такое


emacs у меня не пошел, как и vim. ИМХО пользоваться ими под win — моветон (почему я сижу под win, но пишу под *nix — это отдельный вопрос, не хочу это обсуждать в этой теме). emacs продукт для фанатов, к тому же знающих lisp, у остальных просто не будет стольно времени для его настройки под себя.

fpeclipse ставил, не понравилось, есть ощущение сырости и недоделанности продукта, к тому же не развивается совсем (похоже автор больше в haskell ударился).

jedit стоит посмотреть, с первого взгляда неплохо, возможно будет функциональнее PN2.
Re[22]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 05.12.05 21:25
Оценка:
Здравствуйте, zip_, Вы писали:

_>jedit стоит посмотреть, с первого взгляда неплохо, возможно будет функциональнее PN2.


Посмотри тему 10 Reasons to Dump Your [Java] IDE
Автор: Павел Кузнецов
Дата: 11.10.05
, там jedit так же обсуждался.

А по поводу vim-а, зря ты так суров, я сам сижу, в основном под Windows, но пользуюсь vim-ом. Очень удобно.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[23]: C++ vs ???
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.12.05 22:44
Оценка:
reductor wrote:
>
> Ладно, про emacs спорить не буду, хотя это не настолько неюзабельная
> вещь, как кажется с первого взгляда.
> А вот gvim у меня под виндовс стоит в качестве замены notepad. очень
> быстрый и очень функциональный для своей скорости.
> и умеет работать со всеми языками какие только можно придумать.
> Ну и что-то быстро поправить я именно им пользуюсь всегда — это проще.

А не знаешь, можно ли gvim виндузячий заставить понимать UNICODE'овые
текстовые файлы так, как это делает, например, notepad?
Posted via RSDN NNTP Server 2.0
Re[24]: C++ vs ???
От: reductor  
Дата: 05.12.05 23:40
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>reductor wrote:

>>
>> Ладно, про emacs спорить не буду, хотя это не настолько неюзабельная
>> вещь, как кажется с первого взгляда.
>> А вот gvim у меня под виндовс стоит в качестве замены notepad. очень
>> быстрый и очень функциональный для своей скорости.
>> и умеет работать со всеми языками какие только можно придумать.
>> Ну и что-то быстро поправить я именно им пользуюсь всегда — это проще.

Pzz>А не знаешь, можно ли gvim виндузячий заставить понимать UNICODE'овые

Pzz>текстовые файлы так, как это делает, например, notepad?

мммм.. сейчас проверил — работает (utf-8).
может версия старая?
или там :set encoding/fileencoding
Re[20]: C++ vs ???
От: gear nuke  
Дата: 06.12.05 01:10
Оценка:
Здравствуйте, Pzz, Вы писали:

>> Pzz>Выяснилось, что у Ocaml'а вызов функции более эффективно устроен на

>> Pzz>ассемблерном уровне.
>>
>> А не было ли это причиной того, что копмилятор OCaml приводил
>> рекурсивный вызов к простому циклу?

Pzz>1. Нет, не сводил

Pzz>2. GCC тоже умеет превращать хвостовую рекурсию в цикл

Тогда не знаю, что и как там может быть более эффективно. Смотрел код, но никаких гениальных решений не увидел.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[21]: C++ vs ???
От: reductor  
Дата: 06.12.05 02:27
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Pzz, Вы писали:


>>> Pzz>Выяснилось, что у Ocaml'а вызов функции более эффективно устроен на

>>> Pzz>ассемблерном уровне.
>>>
>>> А не было ли это причиной того, что копмилятор OCaml приводил
>>> рекурсивный вызов к простому циклу?

Pzz>>1. Нет, не сводил

Pzz>>2. GCC тоже умеет превращать хвостовую рекурсию в цикл

GN>Тогда не знаю, что и как там может быть более эффективно. Смотрел код, но никаких гениальных решений не увидел.


Вы же сами видели, что из окамла можно генерить эффективный код даже _без оптимизирующего_ компилятора.
причем, случай с float'ами далеко не лучшая сторона окамла
лучшая — это вызов функций и свобода делать с переменными и значениями то, что ему заблагорассудится не оглядываясь.

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

http://shootout.alioth.debian.org/benchmark.php?test=all&amp;lang=ocaml&amp;lang2=icpp
вот, скачайте акермана посмотрите
или там бинарные деревья

Только очень прошу, без цирка на этот раз. Здесь все же речь о языках шла, а не о том какая компания выпускает самый навороченный компилятор и какая библиотека лучше всех считает. Можно иногда и профессионализм проявить.
дело не в конкретном компиляторе.
Re[23]: C++ vs ???
От: zip_ Россия  
Дата: 06.12.05 11:50
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, zip_, Вы писали:


_>>jedit стоит посмотреть, с первого взгляда неплохо, возможно будет функциональнее PN2.


E>Посмотри тему 10 Reasons to Dump Your [Java] IDE
Автор: Павел Кузнецов
Дата: 11.10.05
, там jedit так же обсуждался.


Почитал, смешанные чувства. Надо ставить и пробовать, чем сейчас и займусь.

E>А по поводу vim-а, зря ты так суров, я сам сижу, в основном под Windows, но пользуюсь vim-ом. Очень удобно.


Возможно, но я привыкнуть так и не смог, ни к vim, ни к emacs (XEmacs, если это что-то меняет).
Re[23]: C++ vs ???
От: Cyberax Марс  
Дата: 06.12.05 11:56
Оценка:
z00n wrote:

> emacs или vim — это такая вещь, что потратил несколько дней — и забыл

> о проблемах на всю жизнь. Тем более, после того, как в MSVS 2005
> добавили emacs-раскладку, навыки еще и не пропадут

В качестве противовеса: http://rsdn.ru/Forum/Message.aspx?mid=1313142
Автор: Cyberax
Дата: 08.08.05


Эхх... Опять минусов наставят....

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[23]: C++ vs ???
От: little_alex  
Дата: 06.12.05 12:01
Оценка:
Здравствуйте, z00n, Вы писали:


Z>emacs или vim — это такая вещь, что потратил несколько дней — и забыл о проблемах на всю жизнь. Тем более, после того, как в MSVS 2005 добавили emacs-раскладку, навыки еще и не пропадут


Серьезно? А можно ссылку?
Re[25]: C++ vs ???
От: reductor  
Дата: 06.12.05 22:38
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, reductor,


GN>>>Результирующий код построен таким образом, что затруднено распараллеливание инструкций — многие команды зависят от результатов предыдущих.


R>>Что в функциональных языках нельзя распараллеливать выполнение — это очень ценное замечание и архиценное в силу своей редкости мнение.


GN>Вы каким-то интересным способом вырываете смысл (цитаты) из контекста. Инструкция — это команда процессора. К ФЯ не имеет никакого отношения.


Речь шла о свойствах окамла. Вы почему-то таковыми считаете результирующий код, который генерирует его компилятор под win/ia32
Я таковыми считаю свойства исходного кода.
Это касается и игры со стеком и всего прочего.
Но, тем не менее, не могу еще раз не выразить вам благодарность за очень ценное мнение.
Re[26]: C++ vs ???
От: gear nuke  
Дата: 06.12.05 22:45
Оценка:
Здравствуйте, reductor, Вы писали:

R>Речь шла о свойствах окамла. Вы почему-то таковыми считаете результирующий код, который генерирует его компилятор под win/ia32


Причина "почему-то" очень проста:

Просто откомпилируйте что-нибудь простое на окамле и си++ — увидите в чем разница


R>Я таковыми считаю свойства исходного кода.

R>Это касается и игры со стеком и всего прочего.

А разве в исходном коде на том же С++ как-то фигурирует стек? Это же не Forth .

R>Но, тем не менее, не могу еще раз не выразить вам благодарность за очень ценное мнение.


Спасибо
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[23]: C++ vs ???
От: z00n  
Дата: 06.12.05 23:05
Оценка:
Здравствуйте, gear nuke, Вы писали:
<...>
http://pauillac.inria.fr/~xleroy/publi/ZINC.ps.gz
http://www.ocaml-tutorial.org/performance_and_profiling
Re[27]: C++ vs ???
От: reductor  
Дата: 06.12.05 23:56
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, reductor, Вы писали:


R>>Речь шла о свойствах окамла. Вы почему-то таковыми считаете результирующий код, который генерирует его компилятор под win/ia32


GN>Причина "почему-то" очень проста:

GN>

Просто откомпилируйте что-нибудь простое на окамле и си++ — увидите в чем разница


Видимо, мне пора прекращать использовать общие фразы, а в каждом сообщении прикладывать объяснение на три листа что я имел в виду.
Вдруг, у собеседника проблемы с абстрактным мышлением и с пониманием метафор, аллегорий, гипербол и он ничтоже сумняшеся готов все буквализировать.

R>>Я таковыми считаю свойства исходного кода.

R>>Это касается и игры со стеком и всего прочего.

GN>А разве в исходном коде на том же С++ как-то фигурирует стек? Это же не Forth :).


В исходном коде С++ фигурирует адресная арифметика.
В явном виде или нет, но в случае с С++ нельзхя быть уверенным ни в чем.
Re[24]: C++ vs ???
От: gear nuke  
Дата: 07.12.05 00:49
Оценка:
Здравствуйте, z00n, Вы писали:

Z>http://pauillac.inria.fr/~xleroy/publi/ZINC.ps.gz


Вот это почитать возможности нет.

Z>http://www.ocaml-tutorial.org/performance_and_profiling


О! Да там оказывается большенство функции полиморфные, вот так преимущество по скорости даст проверка типов аргументов в runtime. А они ещё при этом VTbl в С++ называют тормозом.

Библиотека вся почему-то написана на С, но это мелочи — главное, прилюдно не забывать называть С++ тормознам языком.

Сильно "порадовало", как OCaml хранит целые числа — в форме 2*x+1.
В общем, целочисленная арифметика тоже идёт в лес.


Что же такое позволяет компилировать OCaml в эффективный машинный код так и не понял. Видимо, это действительно фантазии.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[25]: C++ vs ???
От: reductor  
Дата: 07.12.05 01:32
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>О! Да там оказывается большенство функции полиморфные, вот так преимущество по скорости даст проверка типов аргументов в runtime. :)) А они ещё при этом VTbl в С++ называют тормозом. :-/

GN>Сильно "порадовало", как OCaml хранит целые числа — в форме 2*x+1.
GN>В общем, целочисленная арифметика тоже идёт в лес. :down:-/

GN>Что же такое позволяет компилировать OCaml в эффективный машинный код так и не понял. Видимо, это действительно фантазии. :(


Такое впечатление, у вас личная заинтересованность в том, чтобы "опустить" здесь o'caml, а не "найти истину"

http://caml.inria.fr/pub/ml-archives/caml-list/2004/07/889d06f5cffb61881f47d04a0e625617.en.html

let test2 n : int = n + (n * 2)

получается (ocamlopt):
        .globl  camlTest__test2_57
        .type   camlTest__test2_57,@function
camlTest__test2_57:
.L100:
        lea     -2(%eax, %eax, 2), %eax
        ret


int test2(int n) {
   return (n + (n * 2));
}

получается (gсс -O3 -fomit-frame-pointer):
        .globl test2
        .type   test2, @function
test2:
        movl    4(%esp), %eax
        leal    (%eax,%eax,2), %eax
        ret
Re[26]: C++ vs ???
От: gear nuke  
Дата: 07.12.05 02:32
Оценка:
Здравствуйте, reductor, Вы писали:

R>Такое впечатление, у вас личная заинтересованность в том, чтобы "опустить" здесь o'caml, а не "найти истину"


Совершенно не верно. Всё что я хотел — показать абсурдность высказавания "С++ — медленный". Кстати, зачем оно делалось?

R>http://caml.inria.fr/pub/ml-archives/caml-list/2004/07/889d06f5cffb61881f47d04a0e625617.en.html


> Does the Caml integer/pointer bit trick make arithmetics slower (with
> respect to 'pure' 32 bit arithmetics) because of some mask/shift
> intermediate operations or is it just the same ?

In principle yes, because int values are represented as tagged
(31bits) ints (with the LSB set to 1). So conversion is a shift
followed by an addition (or viceversa).


R>
R>let test2 n : int = n + (n * 2)
R>

R>получается (ocamlopt):
R>
R>        .globl  camlTest__test2_57
R>        .type   camlTest__test2_57,@function
R>camlTest__test2_57:
R>.L100:
R>        lea     -2(%eax, %eax, 2), %eax
R>        ret

R>
R>int test2(int n) {
R>   return (n + (n * 2));
R>}

R>получается (gсс -O3 -fomit-frame-pointer):
R>
R>        .globl test2
R>        .type   test2, @function
R>test2:
R>        movl    4(%esp), %eax
R>        leal    (%eax,%eax,2), %eax
R>        ret

И где здесь преимущество OCaml? То, что GCC добавил выделенную строку — это конвенция вызова ccall. Бывают и другие конвенции. При inline подстановке такого не будет в обоих языках.

А теперь посмотрим другой пример:
let test2 n : int = n - (n / 5)

_camlTest__test2_57:
L100:
    mov ebx, eax
    mov ecx, 5
    mov eax, ebx
    sar eax, 1
    cdq
    idiv    ecx
    sal eax, 1
    sub ebx, eax
    mov eax, ebx
    ret
Выделенные команды — следствие формата целых чисел.

int __fastcall test(int n) { return n - (n / 5); }

; Оптимизация по размеру
; Function compile flags: /Ogspy
?test@@YIHH@Z PROC                  ; test, COMDAT
; _n$ = ecx
    push    esi
    mov eax, ecx ;; * 
    push    5
    cdq
    pop esi
    idiv    esi
    pop esi
    sub ecx, eax
    mov eax, ecx ;; * 
    ret 0
Выделенные команды — следствие, что функция не заинлайнена (по конвенции вызовов, ESI нельзя портить). При inline подстановке так же не будет команд (*). Число 5 загружается в esi 2мя командами — это медленнее, но меньше по размеру.

; оптимизация по скорости - деление на константу заменено умножением
; Function compile flags: /Ogtpy
?test@@YIHH@Z PROC                  ; test
; _n$ = ecx
    mov eax, 1717986919             ; 66666667H
    imul    ecx
    sar edx, 1
    mov eax, edx
    shr eax, 31                 ; 0000001fH
    add edx, eax
    mov eax, ecx
    sub eax, edx
    ret 0

И, кстати, код делает разные вещи. А именно, работает для чисел разного диапазона.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[25]: C++ vs ???
От: z00n  
Дата: 07.12.05 04:06
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, z00n, Вы писали:


Z>>http://pauillac.inria.fr/~xleroy/publi/ZINC.ps.gz


GN>Вот это почитать возможности нет.


А так? http://pauillac.inria.fr/~xleroy/publi/ZINC.pdf
Re[24]: C++ vs ???
От: reductor  
Дата: 07.12.05 04:44
Оценка:
Здравствуйте, zip_, Вы писали:

_>Здравствуйте, eao197, Вы писали:


E>>Здравствуйте, zip_, Вы писали:


_>>>jedit стоит посмотреть, с первого взгляда неплохо, возможно будет функциональнее PN2.


E>>Посмотри тему 10 Reasons to Dump Your [Java] IDE
Автор: Павел Кузнецов
Дата: 11.10.05
, там jedit так же обсуждался.


_>Почитал, смешанные чувства. Надо ставить и пробовать, чем сейчас и займусь.


E>>А по поводу vim-а, зря ты так суров, я сам сижу, в основном под Windows, но пользуюсь vim-ом. Очень удобно.


_>Возможно, но я привыкнуть так и не смог, ни к vim, ни к emacs (XEmacs, если это что-то меняет).


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

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

ну и опять же — это результат десятилетий эволюции средств разработки и хакерских экспериментов. Что-нибудь, да значит :)
Re[33]: C++ vs ???
От: reductor  
Дата: 07.12.05 06:13
Оценка:
Здравствуйте, Sinclair, Вы писали:


S>Если бы я хотел вас обвинить, я бы так и сделал. Я просто пытаюсь дать некоторые рекомендации.


Спасибо!

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

S>По-моему кое-кто здесь пытается выставить себя очень умным по сравнению с остальными участниками дискуссии.

Выставить? Здесь что-то типа аукциона или конкурс на звание очень умного с призами?
Или, не знаю там, отбор по приему на работу.
А даже если, то что из того. Захотелось мне, например, выставить себя очень умным на витрину, что ж теперь. Ну переставьте меня очень глупым. Не знаю, что еще предложить.

Чуть серьезнее — я вообще на этот форум пришел чтобы найти умных людей и самому кое-чему научиться, а не выставить себя таковым. Кстати даже нашел и с большим удовольствием их читаю. А проявлять здесь любые амбиции нахожу дико комичным.

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


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

R>>И дополнительно про популярность — я, кажется, вообще просил удалить отсюда все, что написал. Между прочим, эта просьба все еще в силе. Если кто не знает как это сделать не задевая тексты остальных пользователей, так я могу показать.

R>>update messages set text='deleted' where user_id=48135
S>Большое спасибо за совет. К сожалению, выполнение такой команды не приведет к нужному результату. У меня нет острого желания объяснять все технические детали — к тому же, судя по всему, ваших способностей хватает на понимание всех деталей функционирования проекта и без моих стараний.

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

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

S>Ну так делитесь! Кто вам не дает? Пока что вы щедрее всего делитесь не опытом, а мненями о способностях собеседников. Я понимаю, что не стоит требовать от неизвестного псевдонима неизвестного программиста знаний по основам человеческой психологии. Поэтому в меру своих способностей объясняю: такая манера делиться опытом не приведет к передаче этого опыта кому-либо. Скорее она приведет к в точности обратному эффекту.

Не дают какие-то люди, не помню, извините, их имен, которые в ответ на объяснения начинают спрашивать: "самый умный, чтоль?"
А вообще я думаю так, что если я, например, действительно умный, то те, кому интересно, сами все поймут. А тем, кому не интересно и объяснять что-то бессмысленно.
Это если я конечно умный. Так-то могу и сверхтупым быть запросто. И тогда непонятно зачем мне идиоту что-то втолковывать. Проще не обращать внимания.
Но решение как оно там на самом деле, я, пожалуй, оставлю за кем-нибудь еще. Вот за вами например.
А так я в силу своих способностей, стараюсь говорить вещи не самые в моем понимании тривиальные и стоящие обсуждения. И тратить время на расшифровку каждого своего комментария я не буду. Жизнь коротка, знаете ли.


bottom line:
никаких амбиций у анонима "reductor" нет и быть, в силу известных причин, не может.
самым умным он себя не считает и рад сам учиться в меру своих способностей.
он не будет против назначением себя самым глупым из собравшихся.
просит не считать себя и свои тексты большой ценностью и не уделять его личности слишком много внимания.
Re[32]: C++ vs ???
От: gear nuke  
Дата: 07.12.05 06:30
Оценка:
Здравствуйте, reductor, Вы писали:

Просто откомпилируйте что-нибудь простое на окамле и си++ — увидите в чем разница

GN>>просто откомпилировал и посмотрел. рейтрейсер — первое, что попалось.

R>А не надо первое что попалось.


Так что же надо было?

R>И я не предлагал тут устраивать глупые микробенчмарки.


Напишите это авторам тех притянутых за уши бенчмарков. Я лишь проверил степень притянутости.

R>Смысл всего сводился к тому, что в случае окамла, "даром" мы получаем больше, чем в случае С++. ВСЕ.

R>Теоретически, окамл, как более формальный язык откомпилировать "лучше" — проще.
R>В любом случае, полный статический анализ невозможен в случае с окамлом так же, как и в случае с С++.

В общем, понятно — полный статический анализ не возможен, поэтому явные преимущества не очевидны.

R>Но как бы то ни было, представьте, что у вас система из 2 000 000 (двух миллионов) строк на С++, которая моделирует погоду или рулит данными на какой-нибудь бирже и как вы каждый день в течение нескольких лет приходите на работу, чтобы переписать calling conventions у очередных 10 функций и вычистить оттуда всю адресную арифметику и прочую гадость.


Да зачем же calling conventions переписывать? Это всё делает либо один ключик, либо компилятор автоматически при whole program optimization. Про это никто никогда не думает, пока не потребуется оптимизировать десяток каких-то жалких строк. Да и зря Вы к стеку цепляетесь — на том же Itanium всё в регистрах передаётся.

R>Это все по сравнению с такой же системой на, например, O'Caml, которая и занимать будет не два миллиона, а 500 000 строк и у которой заранее нет ничего, что бы мешало получить приемлимый результат.


Мы сравнивали не количество строчек, а скорость результирующего кода.

R>Потому мы и не можем любой функции на C++ сделать fastcall и потому С++ _заранее_ — тормоз.


Можем. Нужно почитать доку к компилятору. И я уже видел, какой он тормоз. Выполняется в 0.6 раз медленнее

R>Ну и разумеется, разрыв увеличивается на RISC-архитектурах с большим количеством регистров и большим кешем.


Я про кеш с удовольствием бы послушал. На С++, с его ручным управлением памяти, можно этот кеш даже использовать как нужно (пример. после начальной теории на asm приводится код на С, который это делает). На OCaml такое возможно?

Большее количество регистров — поможет С++. Пока что компилятор OCaml использует очень ограниченное их количество (избитый пример с рейтресером использует регистр EBP всего 4 раза).

R>Тем не менее, все численные задачи у физиков-теоретиков до сих пор пишутся на фортране.


Никто не хочет выкидывать в карзину наработки?

R>И вот, например, некоторые бенчмарки: http://www.oonumerics.org/blitz/benchmarks/


The below table shows median performance of Blitz++ on 21 loop kernels, relative to the best native Fortran compiler with typical optimization switches (-O3, -Ofast)


Вполне на уровне результаты для 90го года — в среднем 90% от лучшего компилятора.

GN>>В некоторых случаях напечатает 2й параметр, переданный в test. Потому что в ISO/IEC 14882 ничего не говориться про стек.


R>Вот именно.

R>Это то, что я называю непредсказуемостью.

Что ещё ожидать от кода с ошибками?

R>И это то, что создает проблемы для компилятора и еще какие.


Уже устал читать это. Объяснений, как я понял, не будет

GN>>>>И какие проблемы это даёт для компилятора?

R>>>Очень смешно.
GN>>Это не смешно — постоянно уходить от ответа.

R>Я не пониаю почему я вообще должен отвечать на такие вопросы.


Вы ничего не должны.
Нет аргументов — вполне возможно, утверждение ложно.

GN>>представление целых чисел в OCaml мешает компилятору.


R>Представление чисел может представлять интерес для того, кто будет потом с этими числами работать.


Обратите внимание на выделенное.

R>Если же это число не пойдет никуда дальше того места, в котором с ним идет работа и мы можем быть в этом уверенны в случае с O'Caml, то каким оно будет не должно волновать никого.

R>В случае же с С++ такой гарантии у нас нет и проблемы со стеком некоторым образом относятся к этому.

Про стек замнём — это досужие домыслы.

R>гарантий, что какая-то функция не получит доступа к любому значению у нас нет.


void foo() { static const i = 0; }

Как получить доступ к i из функции bar? Или что имелось ввиду?

GN>>Почему "нельзя быть уверенным ни в чем" ?


R>Потому что мы не можем написать статический анализатор который даст нам ответ "используется ли это значение где-нибудь еще".


полный статический анализ невозможен в случае с окамлом так же, как и в случае с С++


GN>>Высказывания о тормознутости С++ принадлежат имеено Вам, не знаю, какую смысловую нагрузку они несут.


R>Такую, что автоматически получить быстрый С++ код сложнее, чем на языках без его проблем.

R>А какую еще они могли нести нагрузку?

Никакой ;)

R>>>Те, для кого это критично и сами давно во всем разобрались.


GN>>Для меня критично. Я разобрался


R>Я рад. Чего же вы от меня тогда хотите, если во всем разобрались?


Уже ничего.
Хотел понять, каков процент ваших слов верен.

R>Я не знаю что у вас за пристрастие к С++, что вы его так ожесточенно защищаете.


Я, возможно, только рад бы был, если бы С++ совсем не было. Ужасный язык с описанием на тыщу страниц.
И защищаю не язык, но его скорость.

R>Все, давайте прекращать это дело.


Нет проблем.
Вижу, что это пустое занятие.

R>Мы тратим время на обсуждение того, что давно было обсуждено еще в 80ые.


До рождения С++?
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[32]: C++ vs ???
От: gear nuke  
Дата: 07.12.05 06:39
Оценка:
Здравствуйте, z00n, Вы писали:

Z>Про Fortran vs C++ почитать можно у Veldhuizen'а (Blitz++).

Z>http://osl.iu.edu/~tveldhui/papers/iscope97/index.html ( http://osl.iu.edu/~tveldhui/papers/iscope97.ps )
Z>http://osl.iu.edu/~tveldhui/papers/DrDobbs2/drdobbs2.html

Z>или тут с его участием:

Z>http://www.oonumerics.org/oon/oon-list/archive/index.html#314

В общем, всё примерно как я и предпологал
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[35]: C++ vs ???
От: jedi Мухосранск  
Дата: 07.12.05 16:52
Оценка:
Здравствуйте, gear nuke, Вы писали:

> поскипанно с сожалением


Подписываюсь абсолютно под всем! Обладай я таким же красноречием, сказал бы тоже самое

В общем, респект
Re[36]: C++ vs ???
От: gear nuke  
Дата: 08.12.05 04:33
Оценка:
Здравствуйте, vdimas,

GN>>А я не пойму, как невалидная программа может служить примером помехи оптимизатору.


V>Там невалидность видна невооруженным взглядом и специально демонстрировалась. Получить подобную невалидность на 3-м или 5-м уровне коссвенности — легко и наблюдалось мною не раз (она возникает из-за отсутствия четких спецификаций и ограничений на параметры методов, а компилятор пропускает все подряд, есс-но).


Речь не о том вёл, качество входного кода зависит целиком от человека, задача компилятора лишь компилировать это в соответствии стандарту.

V>Насчет оптимизаций, ты зря споришь. Наличие хороших компиляторов от Intel или MC++7.0 не говорит о легкости стат-анализа кода программы на С++. Ты не можешь предвычислять участки кода (или оптимизировать алгоритм), если обращаешься к данным через указатели, значение которых устанавливается где-то вне контекста. Это же очевидно и reductor просто не находит слов (или желания) для объяснения очевидных вещей. Очевидные вещи порой сложно объяснить


Глаза боятся, а руки делают:

Whole program optimization allows the compiler to perform optimizations with information on all modules in the program. Without whole program optimization, optimizations are performed on a per module (compiland) basis.

Whole program optimization is off by default and must be explicitly enabled. However, it is also possible to explicitly disable it with /GL-.

With information on all modules, the compiler can:

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

.NET вот тоже не даёт начудить с указателями, потому и проигрывает в скорости на одном и том же компиляторе. Хотя там и копейки, для многих задач. Кстати, интересно что на платформе windows управляемый С++ работают со скоростью OCaml Ну и С# соответственно тоже, если не быстрее в некоторых местах.

R>>>Да чем мешает-то. Как будто он обязан всегда оставлять это представление.

R>>>Это представление — оно для GC и для внешнего кода, а не для компилятора.

GN>>Это не важно. Арифметика будет проигрывать аналогу в С++ всегда за счёт оверхеда на сдвиги (деление/умножение на 2).


V>Тебе сказали о том, что подобное представление не специфицировано. Т.е. на других компиляторах возможно другое представление. Вообще, я бы скорее выделил лишнее слово памяти, чем 1 бит


В данном случае не важно, для чего оно. Оно даёт оверхед, это снижает скорость. Вот о чём речь.

V>С++ — это универсальный язык, помимо прочего. Мне даже трудно определиться, что лучше: владение универсальным инструментом, или владение множеством узконаправленных, но идеально подходящих для конкретных случаев инструментов.


V>Достаточно много бенефитов у обоих подходов.


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

V>Но у первого подхода все бенефиты скорее организационно-административного плана, как с технической т.з., так и с т.з. управления ресурсами (людскими)


Да, это к сожалению или к счастью действительно так.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[38]: C++ vs ???
От: Глеб Алексеев  
Дата: 08.12.05 09:10
Оценка:
Здравствуйте, vdimas, Вы писали:

V>гораздо более слабые языки (с т.з. выразительности)

Разрешите поинтересоваться, о какой выразительности идет речь? Я вот выбрал ОКамл именно из-за выразительности, верифицируемость пока на втором плане, может быть зря?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: C++ vs ???
От: alexeiz  
Дата: 09.12.05 00:54
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, alexeiz, Вы писали:


A>>Здравствуйте, c-smile, Вы писали:


CS>>>D как язык для UI лучше чем C++ скажем в разы. Это я со всей отвественностью

CS>>>могу сказать.

A>>А причины не трудно описать? По пунктам и конкретно. А то не очень-то верится.


CS>(this caffe has no russian keyboard installed yet, so msg is in english)


CS>First of all all these is based on my projects:

CS>D — Harmonia framework
CS>Java — J-SMILE and others.
CS>C++ — HTMLayout and other projects.

CS>1) GC. GC helps a lot managing DOM/windows/elements structure. This is huge in fact. Simplifies significantly code. Makes it clean and compact thus more robust.


Мне кажется, что это просто аргумент в пользу GC, а не конкретно GC для программирования UI. В UI обычно у каждого элемента есть свой owner, который его и освобождает. Так устроено в MFC, QT, да и даже в старом Motif'е. Может быть внутри фреймвока и легче отслеживать время жизни элементов с помощью GC, но для пользователя это никогда не было проблемой.

Кстати, о проблемах с GC в UI. Бывает и так: пользователь открывает новое окно/диалог, который отъедает кучу ресурсов. Пользователь закончил свою работу с окном, закрыл его. А ресурсы всё ещё в памяти. GC ни сном ни духом не ведает, что при закрытии окна нужно что-то освободить. А пользователь жалуется. Мол окно уже закрыто, почему программа до сих пор столько памяти держит? И вот GC ждёт пока другое такое ресурсопрожорливое окно откроется, тогда он сразу спохватится, начнёт освобождать. А окно в это время тормозит.

Да и на C++ это дело можно сделать, так как GC имеются, а в большинстве случаев smart pointer'ов дольжно быть достаточно.

Поэтому тут по возможностям D не перекрывает C++.

CS>2) Closures/Delegates. This in fact is not so critical as I am using sinking/bubbling. Let's say it is nice to have feature — allows to simplify code and make it more understandable an regular.


boost::function, boost::signal? win32 gui generics использует этот же механизм. C++ не нужно иметь delegates в языке, т.к. они есть в библиотеке.

CS>3) Properties (getters/setters). Ideally reduces twice methods you need to remember. Again, it is about simplification.


Если бы ты упомянул свойства для создания компонент с их последующем использовании в дизайнере, то это бы имело смысл. А иначе свойства представляют спорный вопрос, опять же не имеющий отношение к UI per se.

CS>4) There are more features in D helping UI development e.g. mixins and templates parametrized by character strings, etc., I'll skip them here.


Миксины есть в C++. Curiously recurring template pattern, policies — это всё имеет отношение к миксинам.

Может быть параметризация шаблонов строками и помогает. Об этом судить не берусь.

CS>Use of Java for massive UI development has one and big benefit — isolation between logic and system low level and critical functions. This is sort of critical for development in teams.


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

CS>And again Java has good set of design tools. Intellisense is a real tool increasing productivity.


You mean UI design tools? К языку это имеет опоследовательное отношение. Для C++ тоже есть UI design tools.
Re[38]: C++ vs ???
От: gear nuke  
Дата: 10.12.05 03:16
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Я бы внес в стандарт С++ невозможность взятия адреса локальной переменной или адреса значения по ссылке. Это нонсенсы и унаследованные совершенно ненужные св-ва С.


Скорее, от ассемблера. Без этой возможности сложно что-то вообще написать, на языке такого уровня. Компилятор так или иначе будет это делать, хотя бы неявно, как для var в Pascal.

V>Ты даже не представляешь как это далеко от совершенства на виртуальных


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

V>экспортируемых или библиотечных ф-иях.


Для экспортируемых понятно, что нереально это делать. А библиотечные ф-ции OCaml написаны на С. Он их вызывает через обёртку.

V>Приемлимо работает только с небольшими ф-иями. И практически не оптимизирует "игры" с указателями, на что был сделан акцент, а ты не обратил внимания.


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

V>OCalm еще явно сырой. Но представь хоть на минуту, если в него вложить столько же усилий, сколько в С++ от MS.


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

V>Мне не нравится этот язык, просто я отдаю себе отчет в потенциале верифицируемого и заведомо оптимизируемого кода.


V>Это без оптимизатора, очевидно.


Оптимизатор не поможет. Любое число хранится в виде 2*n+1. Хотим мы или нет, но избежать дополнительных операций нельзя. Только для того, что бы вычесть 2 числа нужно делать 2 операции вместо одной
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[39]: C++ vs ???
От: vdimas Россия  
Дата: 10.12.05 16:23
Оценка:
Здравствуйте, gear nuke, Вы писали:


GN>Оптимизатор не поможет. Любое число хранится в виде 2*n+1. Хотим мы или нет, но избежать дополнительных операций нельзя. Только для того, что бы вычесть 2 числа нужно делать 2 операции вместо одной


Стоп, именно про эти "битовые" моменты я и говорил. Представь, что у нас есть некая библиотечная (или в коде) небольшая ф-ия, которая принимает несколько целых чисел, что-то вычисляет из них и возвращает результат.

Затем мы начинаем эту ф-ю использовать. Грузим в пару локальных переменных числовые константы, вызываем эту маленькую ф-ию, а результат помещаем в следующую маленькую ф-ию.

Как я себе представляю whole program optimization в этом случае:

— если содержимое этих локальных переменных не уходит дальше контекста, то нет смысла их кодировать по схеме Calm, можно хранить в регистрах в native виде

— целевую "маленькую" ф-ию инлайним (как в С++, который это делает за нас даже без ключевого слова inline перед такой ф-ией), вызывем эту ф-ию, весь проинлайненный код так же работает с native представлением чисел

— если мы и дальше передаем получившееся значение в следующую аналогичную "маленькую" ф-ию, то нет смысла перекодировать и результат работы ф-ии

— тоже самое относится к случаям, когда мы возвращаем не просто единственное значение, а структуры или списки/массивы таковых

— даже если с т.з. оптимизатора не имеет смысла делать подобную ф-ию inline ввиду ее размеров, но удается локализовать и "обозрить" все места ее использования, то все равно можно обойтись native-представлением чисел с соответствующей корректировкой мест, использующих ее

— и т.д. рекурсивно (вверх/вниз/вбок), собственно, пока не натыкаемся на некие "границы" (библиотечные или экспортируемые ф-ии или вызов таковых)

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

Считаю, что подбная оптимизация — это вообще оптимизация 0-го уровня.
Re[40]: C++ vs ???
От: z00n  
Дата: 10.12.05 17:15
Оценка:
http://en.wikipedia.org/wiki/Ignorance_is_bliss

Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, Глеб Алексеев, Вы писали:


ГА>>Здравствуйте, vdimas, Вы писали:


V>>>гораздо более слабые языки (с т.з. выразительности)

ГА>>Разрешите поинтересоваться, о какой выразительности идет речь? Я вот выбрал ОКамл именно из-за выразительности, верифицируемость пока на втором плане, может быть зря?

V>Под выразительностью С++ я подразумеваю возможность переопределения практически любых операторов (в т.ч. операторов приведения типов) и шаблонные возможности.


V>В итоге, на программе на С++ можно разработать такую систему прикладных типов и множество операций над этой системой в "привычном" виде (т.е "+" это "+", а не AddItem) в терминах которых данная прикладная задача описывается наиболее:

V>- эффективно
V>- читаемо/понятно
V>- надежно
V>- приближенно к прикладной области
Re[40]: C++ vs ???
От: gear nuke  
Дата: 10.12.05 18:59
Оценка:
Здравствуйте, vdimas, Вы писали:

V>именно про эти "битовые" моменты я и говорил. Представь, что у нас есть некая библиотечная (или в коде) небольшая ф-ия, которая принимает несколько целых чисел, что-то вычисляет из них и возвращает результат.


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

V>Затем мы начинаем эту ф-ю использовать. Грузим в пару локальных переменных числовые константы, вызываем эту маленькую ф-ию, а результат помещаем в следующую маленькую ф-ию.


V>Как я себе представляю whole program optimization в этом случае:


[теоретически всё хорошо]

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


Только одно но — там плавающая точка используется

V>Считаю, что подбная оптимизация — это вообще оптимизация 0-го уровня.


В общем-то, да. Мне, например, совершенно непонятно, почему sqrt(2) должен обязательно вычисляться в runtime

Но всё же — касательно интов, как бы там внутири не было всё хорошо, программа существует именно ради наблюдаемого (побочного) эффекта. Вот в этом месте WPO уже не смождет работать как следует — поскольку есть вызовы I/O функций. И оверхед никуда не денется, какой бы малый он не был.

(источник)

Write this to int.ml:

print_int 3;;

and compile with ocamlopt -S int.ml -o int to generate assembly language in int.s. Recall from the discussion above that we are expecting OCaml to inline the print_int function as output_string (string_of_int 3), and examining the assembly language output we can see that this is exactly what OCaml does:

        .text
        .globl  Int__entry
Int__entry:

        ; Call Pervasives.string_of_int (3)

        movl    $7, %eax
        call    Pervasives__string_of_int_152

        ; Call Pervasives.output_string (stdout, result_of_previous)

        movl    %eax, %ebx
        movl    Pervasives + 92, %eax
        call    Pervasives__output_string_212

The important code is shown in red. It shows two things: Firstly the integer is unboxed (not allocated on the heap), but is instead passed directly to the function in the register %eax. This is fast. But secondly we see that the number being passed is 7, not 3.

This is a consequence of the representation of integers in OCaml. The bottom bit of the integer is used as a tag — we'll see what for next. The top 31 bits are the actual integer. The binary representation of 7 is 111, so the bottom tag bit is 1 and the top 31 bits form the number 11 in binary = 3. To get from the OCaml representation to the integer, divide by two and round down.

Why the tag bit at all? This bit is used to distinguish between integers and pointers to structures on the heap, and the distinction is only necessary if we are calling a polymorphic function. In the case above, where we are calling string_of_int, the argument can only ever be an int and so the tag bit would never be consulted. Nevertheless, to avoid having two internal representations for integers, all integers in OCaml carry around the tag bit.


Как-то это всё странно — ничего не мешало компилятору вызвать даже сразу Pervasives__output_string_212 со строкой, но тем не менее, вызывается ф-ция конверсии, причём в неё передаётся именно число во внутреннем представлении, хотя это и не нужно

ИМХО это связано с полиморфизмом (который, кстати, "на дне" реализуется вызовом С библиотеки). Pervasives__string_of_int_152 ожидает (?) на вход либо int, либо указатель на int. Хотя, никто же не мешает использовать 2 варианта для разных входных данных, когда компилятор может типы определить статически (и 3й — для полиморфизма в runtime).
Не знаю, насколько моё предположение верно, но вот что меня смущает — сложностей с WPO особых нет, теоретически OCaml можно оптимизировать проще, чем С++... но почему за 15 лет никто этого не сделал? Чувствую, где-то всё равно меня кидают


Хотя сама по себе идея с этим тегом довольно интересна — где-то можно и выиграть, вероятно. И ещё более вероятно, что можно эти тэги применить в каком-нибудь классе С++. А вот сделать обратное — увы
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[8]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.05 23:14
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Хм. Я обратил внимание, что многие функциональные языки называют языками очень высокого уровня. Видимо, в противовес "просто" языкам высокого уровня, таким как С++ и прочие


Давно пора водить понятия: язык низчайшего уровня, никзого уровня, среднего уровня и высокого уровня. Тогда можно было бы точно сказать, что на две последних ступени плюсы явно не тянут.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.05 23:14
Оценка:
Здравствуйте, eao197, Вы писали:

E>Медленный ассемблер.


E>Нда. Это сильно сказано. Нужно будет записать, чтобы не забыть.


Думаю "медленный" — это было не про скорость порождаемого кода, а по скорость компиляции и возможно разработки.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.05 23:14
Оценка:
Здравствуйте, reductor, Вы писали:

R>И не только вызов функции.

R>Что особо примечательно, компилятор у окамла почти не оптимизирует ничего, он простой как три рубля.
R>Если бы еще и оптимизировал...

Офигительно простой. Видимо из-за простоты умудряется переписывать рекурсию в итерацию. И за одно размещать объекты в стеке, а не в ЖЦ. Ява и дотнет до такой простоты еще не доросли.

ЗЫ

Тебе не программированием, тебе пиаром нужно было заниматься.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: ocamlopt и MSVC - кто быстрее?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.05 23:14
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Измерения проводились при помощи отладчика (режима ядра, поэтому влияние на системную кучу отсутствует) Soft ICE. Каждая программа запускалась 3 раза так:

GN>
GN>ray > out.txt
GN>


А зачем же так через задницу измерять то? Не проще было воспользоваться тем же перформанскаунтером? Ну, или тиками на худой конец...
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: ocamlopt и MSVC - кто быстрее?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.05 23:14
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Тестовая машина:

GN>Athlon XP2000+ (1666MHz) 512Mb DDR (266MHz) XP SP2.

GN>Результаты:

GN>
GN>ocalmopt                                        MSVC 8 
GN>(Microsoft-based native Win32 port  3.09.0)     (14.00.50727.42 for 80x86)

GN>30,60 сек                                       18,54 сек
GN>30,69 сек                                       18,54 сек
GN>30,59 сек                                       18,55 сек
GN>


И все же результаты сравнимые. Я бы сказал, что даже этот тест показал, что типобезопасные языки способны работать на равных с низкоуровневыми вроде С++.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: ocamlopt и MSVC - кто быстрее?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.05 23:14
Оценка:
Здравствуйте, reductor, Вы писали:

R>Думаю, трех человек достаточно.

R>Кто-нибудь может сказать как здесь удалить аккаунт вместе со всеми своими сообщениями?

Вообще-то слушать тебя интересно. Если бы ты вместо того чтобы обижаться просто снизил бы объем рекламщины и пиара в своих словах, то и те немногие трое тоже изменили бы свое мнение.


ЗЫ

Экаунты вечны и возврату не подлежат.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.05 23:14
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>(Замечание про стек Вы уже никак обосновывать не хотите )


GN>И какие проблемы это даёт для компилятора?


Потенциально огромные. В курпе с тотальным ручным контролем ресуросов (главным образом памяти) — это снижает количество доступных оптимизаций и повышает возможность получения некорректного кода в результате оптимизаций.

У Окамла есть одно небольшое приемущество — он полностью типобезопасный и не содержит срудств ручного управления ресурсами. Это потенциально позволяет создать умный оптимизатор который порадит машинный код более быстрый нежели смогут написать большинство крутых С++-ников. Вот только у этого языка не те родители. И врдя ли в ближайшее время случится чудо.

Однако чисто теоритически reductor во многом прав.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.05 23:14
Оценка:
Вы явно говорите о рзном. Ты о том что С++ позволяет вызать из компьютера умелыми руками, а reductor о том, что типобезопасный язык с тяготеющим к декларативности синтаксисом лучше поддается автоматической оптимизации.

Забавно, что вы оба правы. Да, на С++ намного проще оптимизировать программу в ручную, но черт побери, С++-над точно так же намного сложнее оптимизировать автоматически.

Что до предстакзаемости, то тут я скорее соглашусь с reductor. Надежда на свою непогрешимость и на то что в программе уже нет ошибок — это плохая надежда.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: ocamlopt и MSVC - кто быстрее?
От: gear nuke  
Дата: 11.12.05 06:06
Оценка:
Здравствуйте, VladD2,

GN>>Измерения проводились при помощи отладчика (режима ядра, поэтому влияние на системную кучу отсутствует) Soft ICE.


VD>А зачем же так через задницу измерять то? Не проще было воспользоваться тем же перформанскаунтером? Ну, или тиками на худой конец...


Ну это был наиболее простой способ — поставить точку останова, и отладчик сам напишет время потраченное до её достижения. Меряется там всё через timestamp counter, поэтому точность очень хорошая.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[23]: ocamlopt и MSVC - кто быстрее?
От: gear nuke  
Дата: 11.12.05 06:38
Оценка:
Здравствуйте, VladD2,

GN>>Результаты:

GN>>
GN>>ocalmopt                                        MSVC 8 
GN>>(Microsoft-based native Win32 port  3.09.0)     (14.00.50727.42 for 80x86)

GN>>30,60 сек                                       18,54 сек
GN>>30,69 сек                                       18,54 сек
GN>>30,59 сек                                       18,55 сек

VD>И все же результаты сравнимые. Я бы сказал, что даже этот тест показал, что типобезопасные языки способны работать на равных с низкоуровневыми вроде С++.

Я бы добавил ещё и скипнутое:

Вне конкурса проходит тот же MSVC с ключиком /clr
Время выполнения ~ 28-29 сек.

что бы было проще выбирать. Всё-таки JIT не очень просто использовать в С++, не знаю как там с этим в OCaml...
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[21]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.05 22:44
Оценка:
Здравствуйте, reductor, Вы писали:

R>Переписать хвостовою рекурсию в цикл — это вообще за оптимизацию не считается.


Да? А мужики то и не знали. А как же тогда назвать изменение кода повышающее его быстродействие?

R>ну и в случае со стеком и регистрами в случае с окамлом — это не оптимизация вообще. мы заранее знаем, что это ничего не сломает.


Если заранее извесно, что оптимизация что-то сломает, то это уже не оптимизация, а какое-то вредительство. Любая оптимизация делается в рассчете на то, что она не изменит результат вычисления.

R>сложная оптимизация — это обширный статанализ, которым компилятор имени ксавье лероя явно не страдает.


Анализ — это анализ. К оптимизации он имеет отдаленное отношение. Что же до оптимизаций, то самой эффективной оптимизацией по сегодняшний день остается банальная подстановка тела метода вместо его вызова. Учитывая же Так что для ФЯ рекурсия заменяет циклы, ее устранение это не просто оптимизация, а одна из самых полезных оптимизаций. И сравнивать ее результаты с реальным рекурсивным вызовом не очень то разумно.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[37]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.05 22:44
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>.NET вот тоже не даёт начудить с указателями, потому и проигрывает в скорости на одном и том же компиляторе.


Вообще-то дает. Есть ансэйф-режим. Ты как раз в него компилировал.

GN> Хотя там и копейки, для многих задач. Кстати, интересно что на платформе windows управляемый С++ работают со скоростью OCaml Ну и С# соответственно тоже, если не быстрее в некоторых местах.


Это проблемы качества оптимизатора. Рано или поздно они уйдут и разница исчезнет.

GN>Действительно, даже если посчитать языки, которые дали нам возможность общаться на этом форуме, будут обе категории. Кстати, можно даже попробовать список составить


На этом форуме языки закончатся на C#. Ну, разве что еще можно сюда клиентские скрипты на JScript приплести. Но он то уж точно используются по минимуму и является просто данью стандартам. Хотя коенечно есть еще SQL. Но это скорее специализированный DSL нежели ЯП.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[38]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.05 22:44
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Я бы внес в стандарт С++ невозможность взятия адреса локальной переменной или адреса значения по ссылке. Это нонсенсы и унаследованные совершенно ненужные св-ва С.


Да, да. Согласен. Ссылки дрались именно с С.

V>OCalm еще явно сырой.


Еще?

V> Но представь хоть на минуту, если в него вложить столько же усилий, сколько в С++ от MS. Мне не нравится этот язык, просто я отдаю себе отчет в потенциале верифицируемого и заведомо оптимизируемого кода.


Думаю, что в Окамл вложили куда больше усилий.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[39]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.05 22:44
Оценка:
Здравствуйте, reductor, Вы писали:

R>Другая:

R>
R>let rec qsort array = match array with 
R>     []              -> []
R>     | pivot::rest   -> let left,right = List.partition (function x -> x < pivot) rest
R>                        in (qsort left) @ pivot::(qsort right);;
R>


Кстати, о быстрой сортировке. На Питоне и Руби она не хуже выглядит... пока в качестве pivot используется первый эелемнт. А как насчет того чтобы взять pivot из центра списка? А то ведь такая версия очень не эффективна на отсортированных списках.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.05 23:08
Оценка:
Здравствуйте, reductor, Вы писали:

S>>По-моему кое-кто здесь пытается выставить себя очень умным по сравнению с остальными участниками дискуссии.


R>Выставить? Здесь что-то типа аукциона или конкурс на звание очень умного с призами?


Мужики. Замните, плиз этот не лицеприятный разговор. Или прийдется принимать меры. Давайте лучше обсуждать не друг-друга, а тему.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.05 23:08
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Что же такое позволяет компилировать OCaml в эффективный машинный код так и не понял. Видимо, это действительно фантазии.


Типобезопасность. Этого достаточно... ну, не считая, что еще нужно найти хорошие руки с головой которые напишут этот самый оптимизатор.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.05 23:08
Оценка:
Здравствуйте, z00n, Вы писали:

Z>>>http://pauillac.inria.fr/~xleroy/publi/ZINC.ps.gz


GN>>Вот это почитать возможности нет.


Z>А так? http://pauillac.inria.fr/~xleroy/publi/ZINC.pdf


И так нет. Спать надо.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.05 23:18
Оценка:
Здравствуйте, reductor, Вы писали:

R>Какое быстродействие.


Обычное.

R> для этого а) не нужно никакого анализа. б) это прописано в _стандартах_ некоторых языков.

R>как можно _оптимизацией_ называть то, что входит в стандарт?

Пофигу куда что входит. Для ФЯ эта оптимизация жизненно-важна, вот и додумался народ упомянуть о ней в стандарте. Попробуй найти ИЯ в котором такое же упоминание найдется.

R>в случае со scheme и haskell, например, это "уменьшение быстродействия" приведет к неработоспособному коду

R>вот и все.

С чего бы это? Если ты о линивости, то это несколько другая песня.

R>если мы делаем dead code elimination, loop unrolling и прочее — мы должны уметь _доказать_, что это не изменит результат вычислений.


+1

R>то есть мы должны сделать анализ и сопоставив его и спецификацию язяка доказать, что это ни на что не повляиет.


Этот анализ делается на бумаге прежде чем делать оптимизацию в компиляторе.

R>а то так можно назвать оптимизацией сам факт компиляции вместо интерпретации кода на месте — тоже ведь повышаем быстродействие.


Ненадо излишней философии. Мы говорим об оптимизациях в компиляторах. Ни один интерпретатор на вычислительных задачах и рядом не встанет с компилятором.

R>инлайнинг — тоже требует анализа того, что это сделать можно. потому что не каждая функция может быть заинлайнена.


Заинлайнина может быть любая функция. Другое дело, что иногда кроме этого нужно оставлять тело метода. Но это детали. Какое это отношение имеет к делу?

Ты утверждашь, что замена рекурсии итерацией не оптимизация. Почему же тогда это не делается почти во всех компиляторах ИЯ?

R>потому у окамла и плохо с этим, кстати.


У Окамла плохо не с этим. У него плохо с тем кто пишет бэкэнд компилятора. Хотя я бы назвал это даже не плохо, а так... "не супер". Все же он генерирует довольно приличный код. У Окамла есть куда больше идеологических проблем вроде ориентации на списки. Тут уже потрбеются алгоритмические оптимизации которые куда как сложнее в реализации.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.05 23:21
Оценка:
Здравствуйте, reductor, Вы писали:

R>>>Другая:

R>>>
R>>>let rec qsort array = match array with 
R>>>     []              -> []
R>>>     | pivot::rest   -> let left,right = List.partition (function x -> x < pivot) rest
R>>>                        in (qsort left) @ pivot::(qsort right);;
R>>>


VD>>Кстати, о быстрой сортировке. На Питоне и Руби она не хуже выглядит... пока в качестве pivot используется первый эелемнт. А как насчет того чтобы взять pivot из центра списка? А то ведь такая версия очень не эффективна на отсортированных списках.


R>да, говно язык окамл, согласен.


Забавно. Снова уход от ответа. Ты уже, наверно, десятый пропогандист ФЯ который ушел от ответа на этот вопрос.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: C++ vs ???
От: reductor  
Дата: 11.12.05 23:30
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, reductor, Вы писали:


R>>>>Другая:

R>>>>
R>>>>let rec qsort array = match array with 
R>>>>     []              -> []
R>>>>     | pivot::rest   -> let left,right = List.partition (function x -> x < pivot) rest
R>>>>                        in (qsort left) @ pivot::(qsort right);;
R>>>>


VD>>>Кстати, о быстрой сортировке. На Питоне и Руби она не хуже выглядит... пока в качестве pivot используется первый эелемнт. А как насчет того чтобы взять pivot из центра списка? А то ведь такая версия очень не эффективна на отсортированных списках.


R>>да, говно язык окамл, согласен.


VD>Забавно. Снова уход от ответа. Ты уже, наверно, десятый пропогандист ФЯ который ушел от ответа на этот вопрос.


А мне неинтересно отвечать на такие вопросы.
Так же как и складывать 2+2 по заказу.
Ничего личного.
Re[38]: C++ vs ???
От: gear nuke  
Дата: 11.12.05 23:36
Оценка:
Здравствуйте, VladD2, Вы писали:

GN>>.NET вот тоже не даёт начудить с указателями, потому и проигрывает в скорости на одном и том же компиляторе.


VD>Вообще-то дает. Есть ансэйф-режим. Ты как раз в него компилировал.


Это я не про конкретный мой пример говорил, а отвечал на:

Ты не можешь предвычислять участки кода (или оптимизировать алгоритм), если обращаешься к данным через указатели, значение которых устанавливается где-то вне контекста. Это же очевидно и reductor просто не находит слов (или желания) для объяснения очевидных вещей.

Тогда должно выходить, что safe режим обязан работать намного быстрее уже сейчас. (клинические случаи, как я когда-то поставил внутрь цикла __asm nop не рассматриваются)

VD>Это проблемы качества оптимизатора. Рано или поздно они уйдут и разница исчезнет.


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

GN>>Действительно, даже если посчитать языки, которые дали нам возможность общаться на этом форуме, будут обе категории. Кстати, можно даже попробовать список составить


VD>На этом форуме языки закончатся на C#.


Я имею ввиду ещё и языки, которые позволили запустить браузеры и Janus на голом железе
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[24]: C++ vs ???
От: reductor  
Дата: 11.12.05 23:38
Оценка:
Здравствуйте, VladD2, Вы писали:

R>>Какое быстродействие.

VD>Обычное.

С какой стати быстродействие-то? где в Си или Яве используется хвостовая рекурсия для итераций.
и где им увеличит быстродействие раскрутка хвостовой рекурсии.

VD>Пофигу куда что входит. Для ФЯ эта оптимизация жизненно-важна, вот и додумался народ упомянуть о ней в стандарте. Попробуй найти ИЯ в котором такое же упоминание найдется.


Это не оптимизация. Это требование существования. Продолжать здесь спорить я не буду. Вопрос закрыт.

R>>в случае со scheme и haskell, например, это "уменьшение быстродействия" приведет к неработоспособному коду

R>>вот и все.

VD>С чего бы это? Если ты о линивости, то это несколько другая песня.


Потому что у хаскеля нет циклов. При любой рекурсии он тогда начнет вылетать со stack overflow.

R>>а то так можно назвать оптимизацией сам факт компиляции вместо интерпретации кода на месте — тоже ведь повышаем быстродействие.


VD>Ненадо излишней философии. Мы говорим об оптимизациях в компиляторах. Ни один интерпретатор на вычислительных задачах и рядом не встанет с компилятором.


Я не понял только при чем тут раскрутка хвостовой рекурсии. Почему в java ее нет до сих пор?

R>>инлайнинг — тоже требует анализа того, что это сделать можно. потому что не каждая функция может быть заинлайнена.

VD>Заинлайнина может быть любая функция. Другое дело, что иногда кроме этого нужно оставлять тело метода. Но это детали. Какое это отношение имеет к делу?

прошу показать инлайнинг рекурсивной функции задаром.

VD>Ты утверждашь, что замена рекурсии итерацией не оптимизация. Почему же тогда это не делается почти во всех компиляторах ИЯ?


потому что там есть циклы.

R>>потому у окамла и плохо с этим, кстати.

VD>У Окамла плохо не с этим. У него плохо с тем кто пишет бэкэнд компилятора. Хотя я бы назвал это даже не плохо, а так... "не супер". Все же он генерирует довольно приличный код. У Окамла есть куда больше идеологических проблем вроде ориентации на списки. Тут уже потрбеются алгоритмические оптимизации которые куда как сложнее в реализации.

Ориентация на что у окамла? на списки?
На какие еще списки? где у него такая ориентация?
Re[29]: ocamlopt и MSVC - кто быстрее?
От: reductor  
Дата: 11.12.05 23:56
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вообще-то слушать тебя интересно. Если бы ты вместо того чтобы обижаться просто снизил бы объем рекламщины и пиара в своих словах, то и те немногие трое тоже изменили бы свое мнение.


Увы, я не 100 долларов, чтобы всем нравиться.

VD>ЗЫ


VD>Экаунты вечны и возврату не подлежат.


Интересно что про это думает РАО...
Re[24]: C++ vs ???
От: Глеб Алексеев  
Дата: 12.12.05 08:51
Оценка:
Здравствуйте, VladD2, Вы писали:



VD>Пофигу куда что входит. Для ФЯ эта оптимизация жизненно-важна, вот и додумался народ упомянуть о ней в стандарте. Попробуй найти ИЯ в котором такое же упоминание найдется.

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.1

31 Tail recursion has long been known as a compiler optimization trick. A coherent semantic basis for tail recursion was provided by Carl Hewitt (1977), who explained it in terms of the ``message-passing'' model of computation that we shall discuss in chapter 3. Inspired by this, Gerald Jay Sussman and Guy Lewis Steele Jr. (see Steele 1975) constructed a tail-recursive interpreter for Scheme. Steele later showed how tail recursion is a consequence of the natural way to compile procedure calls (Steele 1977). The IEEE standard for Scheme requires that Scheme implementations be tail-recursive.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[39]: C++ vs ???
От: vdimas Россия  
Дата: 12.12.05 22:42
Оценка:
Здравствуйте, VladD2, Вы писали:

V>>Я бы внес в стандарт С++ невозможность взятия адреса локальной переменной или адреса значения по ссылке. Это нонсенсы и унаследованные совершенно ненужные св-ва С.


VD>Да, да. Согласен. Ссылки дрались именно с С.


В некоторых первых С++ компиляторах нельзя было взять адрес элемента по ссылке. И замечание про ссылки очень остроумное, оценил. Особенно после 6-ти летнего опыта на голом С.


V>> Но представь хоть на минуту, если в него вложить столько же усилий, сколько в С++ от MS. Мне не нравится этот язык, просто я отдаю себе отчет в потенциале верифицируемого и заведомо оптимизируемого кода.


VD>Думаю, что в Окамл вложили куда больше усилий.


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

Для языка программирования важдно не только то, что он получает на входе, но и то, что он дает на выходе. Я уверен, что для OCalm можно получить гораздо более оптимизированный код в "числодробильных" вещах из-за сильной "статичности" (высокой определенности на этапе компиляции), как в FORTRAN.
Re[39]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.12.05 22:47
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>А мне кажется, что разница будет. JIT теоретически позволяет компилировать под конкретную модель процессора, оптимизируя под экзотические сейчас вещи вроде структуры кеша, организацию банков памяти, количество ядер CPU...


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

GN>Я имею ввиду ещё и языки, которые позволили запустить браузеры и Janus на голом железе


Янус на голом железе? Это у кого такой язык длинный?
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[43]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.12.05 22:47
Оценка:
Здравствуйте, reductor, Вы писали:

R>А мне неинтересно отвечать на такие вопросы.

R>Так же как и складывать 2+2 по заказу.
R>Ничего личного.

Ясно. И ты не ответишь на казалось бы простой вопрос.

Ну, тогда отвечу я. Вся эта красота и краткость связана не с чудодесными возможностями языка, а с банально встроенными средствами работы с о списками. И у этих средств есть серьезные ограничения. Они не рассчитаны на прямой доступ. Они заточены под связанные списки.

Имея библиоткеу работы со списками почти на любом языке можно написать быструю сортировку в 2-4 строчки. Вот только сокрость ее работы будет никуда не годная и реальная функция в библиотеке будет по прежнему реализовываться в С-стиле ради эффективности. А эти примеры по прежнему можно будет использовать только в демонстрационных целях.

Ну, а сказки про 2 + 2 оставь тем кто неспособен думать самостоятельно.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: ocamlopt и MSVC - кто быстрее?
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.12.05 22:47
Оценка:
Здравствуйте, reductor, Вы писали:

R>Здравствуйте, VladD2, Вы писали:


VD>>Вообще-то слушать тебя интересно. Если бы ты вместо того чтобы обижаться просто снизил бы объем рекламщины и пиара в своих словах, то и те немногие трое тоже изменили бы свое мнение.


R>Увы, я не 100 долларов, чтобы всем нравиться.


Незнаю как у кого, но вид американской сотни давно меня не приводит в восторг. Я бы еще понял если бы ты заговорил о пачке европейских пятисоток.

Если серьезно, то от тебя никто не просит нравиться всем. Просто тот пиар который ты иногда разварачивашь и твоя аргументная база иногда раздражает. Тут народ ведь собирается чтобы на рекламу в ящике не смотреть, а ты им еще одну на общественных началах скормить пыташся.

VD>>Экаунты вечны и возврату не подлежат.


R>Интересно что про это думает РАО...


Спроси. За одно можешь пожаловаться в ООН. Тоже забавное времяпрепровождение.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.12.05 22:47
Оценка:
Здравствуйте, reductor, Вы писали:

R>С какой стати быстродействие-то? где в Си или Яве используется хвостовая рекурсия для итераций.


Забавный ты мужик. Сравнивашь именно рекурсию, но как только тебе гворят, что это нечесно сразу начинашь включать дурака.

R>и где им увеличит быстродействие раскрутка хвостовой рекурсии.


В любом алгоритме использующем хвостовую рекурсию.

R>Это не оптимизация. Это требование существования. Продолжать здесь спорить я не буду. Вопрос закрыт.


Для ФЯ жизнинно необходимая оптимизация. Для ИЯ просто оптимизация. В любом случае это изменение алгоритма с целью повышения быстродействия, т.е. оптимизация.

VD>>С чего бы это? Если ты о линивости, то это несколько другая песня.


R>Потому что у хаскеля нет циклов. При любой рекурсии он тогда начнет вылетать со stack overflow.


А у кучи ФЯ есть циклы и что? Почему же в них такие тоже устраняют рекурсию?
В общем, не пудри мозги. Ты лучше других понимашь, что сравнение быстродействия ФЯ и ИЯ на базе рекурсивного алгоритма — это пошлейшее машейничество. Вот об этом и речь.

R>Я не понял только при чем тут раскрутка хвостовой рекурсии. Почему в java ее нет до сих пор?


В Ява? Ты язык с компилятором не путашь? Где-то может и есть.

R>прошу показать инлайнинг рекурсивной функции задаром.


Что значит "за даром"? Ну, а инлайнинг рекурсивных функций — это в порядке вещей. Причем с раскруткой рекусрсии. Например, 3-10 циклов рекурсии разворачивается, а далее вместо рекурсии делается goto в некоторую точку. На некоторых алгоритмах дает неплохой выигрыш.

VD>>Ты утверждашь, что замена рекурсии итерацией не оптимизация. Почему же тогда это не делается почти во всех компиляторах ИЯ?


R>потому что там есть циклы.


Хм. А в Лиспе их нет? А в куче других ФЯ?

R>Ориентация на что у окамла? на списки?

R>На какие еще списки? где у него такая ориентация?

Нда. Это уже просто кокое-то полное не желание мериться с окружающий реальностью. Ты меня извени, но убеждать тебя в очевидных вещах желания нет. Все равно тщетно.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.12.05 22:47
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

VD>>Пофигу куда что входит. Для ФЯ эта оптимизация жизненно-важна, вот и додумался народ упомянуть о ней в стандарте. Попробуй найти ИЯ в котором такое же упоминание найдется.

ГА>http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.1
ГА>

ГА>31 Tail recursion has long been known as a compiler optimization trick. A coherent semantic basis for tail recursion was provided by Carl Hewitt (1977), who explained it in terms of the ``message-passing'' model of computation that we shall discuss in chapter 3. Inspired by this, Gerald Jay Sussman and Guy Lewis Steele Jr. (see Steele 1975) constructed a tail-recursive interpreter for Scheme. Steele later showed how tail recursion is a consequence of the natural way to compile procedure calls (Steele 1977). The IEEE standard for Scheme requires that Scheme implementations be tail-recursive.


http://en.wikipedia.org/wiki/Tail_recursion
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[44]: C++ vs ???
От: reductor  
Дата: 12.12.05 22:58
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Ну, тогда отвечу я. Вся эта красота и краткость связана не с чудодесными возможностями языка, а с банально встроенными средствами работы с о списками. И у этих средств есть серьезные ограничения. Они не рассчитаны на прямой доступ. Они заточены под связанные списки.


Эти фантазии относятся к окамлу не больше, чем к С++.
А работа с массивами встроена в окамл не меньше, чем работа со списками.
См в документации на конструктор: [||]

VD>Имея библиоткеу работы со списками почти на любом языке можно написать быструю сортировку в 2-4 строчки. Вот только сокрость ее работы будет никуда не годная и реальная функция в библиотеке будет по прежнему реализовываться в С-стиле ради эффективности. А эти примеры по прежнему можно будет использовать только в демонстрационных целях.


А то, что окамл умеет матчить конструкторы типа (::) называть встроенным средством работы со списками — дилентантство.
Я все сказал на эту тему, повторяться не буду.

VD>Ну, а сказки про 2 + 2 оставь тем кто неспособен думать самостоятельно.


Именно это я и сделал.
Еще не хватало участвовать в спорах на уровне первокурсников.
Re[40]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.05 00:27
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Там выше по ветке показали ассемблерный листинг. У меня такое ощущения, что системные программисты за компилятор OCalm еще не брались, а сам компилятор писали студенты или профессора.


В Окамл вкладывали силы не системные программисны, а обычные ученые. У них явно скилы в других областях были. Однако даже то что показывают компиляторы этого языка уже неплохое достижение. Как не крути, а типобезопасный язык с куда более мощьными возможностями метапрограммирования пораждает код класса С++-ных компиляторов средней руки. И это при совершенно бездарной (судя по этой ветке) кодогенерации. Не так плохо! А?!

V>Для языка программирования важдно не только то, что он получает на входе, но и то, что он дает на выходе. Я уверен, что для OCalm можно получить гораздо более оптимизированный код в "числодробильных" вещах из-за сильной "статичности" (высокой определенности на этапе компиляции), как в FORTRAN.


Я тоже уверен. И дело тут не в статичсности. Дело в статической типизации и типобезопасности. Отстование Окамла и ему подобных дело времени. Было бы желание на нем писать. А компиляторы будут.

Самое смешное, что сделают их те кто делает VC и GCC. Ведь по сути нет проблем прогнать код созданный Окамлом через тот же Феникс. На выходе получим оптимизированный машинный код в котором будут устранены все ляпы Окамлщиков. Как другой вариант можно генерировать промежуточный код для GCC и скармилвать его бэк-энду GCC. В общем, вариантов массы. Была бы потребность.

Боюсь, Окамл не пойдет в массы отнюдь не из-за того, что к нему нет крутых компиляторов. Все же далек он от интуитивности. Да и некоторые решения выглядят весьма странно и не привычно. Например, отсуствие перегрузки функций меня как-то угнетает. Как результат совсем странная арифметика и т.п.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: C++ vs ???
От: reductor  
Дата: 13.12.05 01:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD> Например, отсуствие перегрузки функций меня как-то угнетает. Как результат совсем странная арифметика и т.п.


Это шутка? :))

В окамле, в котором, весь синтаксис меняется полностью и любая функция (включая инфиксные) переопределяется как угодно, нельзя перегрузить функции? :)

Странная арифметика в нем по той причине, что авторы языка желают иметь формальный язык, где компилятор не хакнут по глупой причине, чтобы сделать "красивую" арифметику, где (+) одинаков для разных типов данных.
Но если очень хочется это получить и сделать "как в с++" — ради бога

let (+) left right = left#operator_plus right


Это не привлекая camlp4 и прочей тяжелой артиллерии.

А так вообще — советую почитать про модули и функторы в ML.
Re[27]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.05 01:24
Оценка:
Здравствуйте, reductor, Вы писали:

R>[..фантазии поскипаны..]


Свой что ли? Смешно все же от тебя о фанатизме слышать.

R>Можно увидеть алгоритм, который выделяет общерекурсивные функции и раскручивает их в общем виде? (Не считая оптимистичного исполнения)

R>Который раскрутит и заинлайнит например функцию аккермана или тот же quicksort?

Алгоритм денег стоит. А результат можно увидить откомплировав это дело одним из С++-ных компиляторов. Не помню уже кто, но кто-то эту оптимизацию делал.

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


А где я говорил о любой?

R>Алгоритм — вперед. Лирику — после.


Ты еще не привел ни одного аргумента которы после проверки не оказался бы мягко говоря натянуты, так что не стоит уж так сильно требовать их от других. Когда они есть их тебе предявляют.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[45]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.05 01:24
Оценка:
Здравствуйте, reductor, Вы писали:

VD>>Ну, тогда отвечу я. Вся эта красота и краткость связана не с чудодесными возможностями языка, а с банально встроенными средствами работы с о списками. И у этих средств есть серьезные ограничения. Они не рассчитаны на прямой доступ. Они заточены под связанные списки.


R>Эти фантазии относятся к окамлу не больше, чем к С++.


Ай как не хорошо. Опять вместо аргументации нечестные приемы. Назваем чужие слова "фантазией" без малейших на то оснований.

R>А работа с массивами встроена в окамл не меньше, чем работа со списками.

R>См в документации на конструктор: [||]

И что мне на него смотреть? Ты напиши эффективную реализацю быстрой сортировки не массивах да с выборкой разделителя из середины, а потом сравним этот код с тем самым С++ и исходным вариантом на Окамле. Если он будет таким же кратким как исходный, я сниму шляпу. А если он окажется медленее или длинее, то извини, но ты докажешь свою не правоту.

R>А то, что окамл умеет матчить конструкторы типа (::) называть встроенным средством работы со списками — дилентантство.


Ну, тебе виднее. Я в Окамле делетант. Но вот в совершенно не функциональном Руби код получается не более длинный чем в Окамле, а ведь "матчить" то он вроде не умеет.

R>Я все сказал на эту тему, повторяться не буду.

R>Еще не хватало участвовать в спорах на уровне первокурсников.

Ты пока что споришь на уровне палитиков из ящика. Громко, зажигательно, оскорбительно... но бестолково и не честно. Все аргументы "делетантство", "первокурсник" и т.п. Называется это одним емким и красочным словом — демогогия. И тут ты не лучший. Тут есть перцы которые ей родимой кого хочешь куда хочешь заткнут если их вовремя не остановить.

В общем, общаться на уровне "делетантсва" и "первокурсников" я не намерен. Отвечая таким образом на технический вопрос ты рассписывашся в своей неправоте. Мне этого ответа достаточно. Но если вдруг захочется дейсвительно аргументировано ответить, то я буду очень рад.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.05 01:31
Оценка:
Здравствуйте, reductor, Вы писали:

R>Странная арифметика в нем по той причине, что авторы языка желают иметь формальный язык, где компилятор не хакнут по глупой причине, чтобы сделать "красивую" арифметику, где (+) одинаков для разных типов данных.

R>Но если очень хочется это получить и сделать "как в с++" — ради бога

R>
R>let (+) left right = left#operator_plus right
R>


И, что, после этого я таки получу полиморфный "+" как в "обычных" языках? И при этом ничего не посыпется? И приоритеты останутся?...
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.05 01:45
Оценка:
Здравствуйте, reductor, Вы писали:

R>Нет, так дело не пойдет. Ничего компилировать я не буду. Я никого здесь в мошенничестве не обвинял.

R>Или показываем алгоритм (даем математически строгое описание) или тема закрыта раз и навсегда — про "стоит денег" и "скомпилируй увидишь".

А, ну, тогда тема закрыта, так как ни одно "математически строгое описание" ты не дал.
Что до алгоритма инлайнинга, то это нехилый алгоритм и так вот тебе его никто не покажет. Ну, а как это делать в принципе ты и сам должен поянть. Вызовы заменяются на циклы и goto. Тело копируется некоторое количество раз, чтобы переход влиял по меньше и т.п.

R>Даже если существует компилятор, который решает эту задачу, просто откомпилировав что-то мы ответа не получим — может он 30 лет только и ждал что этот код ему подсунут.


Ну, хоть компилятор порадуем.

R>Поясню почему я столь настойчив — у меня есть все основания считать, что такого алгоритма не существует и не может существовать.


И есть "математически строгое описание" этого основания?

R>Нет способа определить общерекурсивность той или иной функции.


Что значит "общерекурсивность"?

R>А разговор о только хвостовой смысла не имеет. Любая хвостовая рекурсия заменяется циклом и наоборот и ни о каком выигрыше здесь ни с одной ни с другой стороны речи идти не может.


Хм. Теоритически — да. На практике 99% комиляторов ИЯ этого не делают и разница на рекурсивных вызовах вроде тех что идут в примерах к ФЯ огромна.

Ты что доказать то хочешь? Ведь если с тобой согласиться и не считать устранине рекусрии оптимизацией, то зачем же ты тогда привел сравнение где у ФЯ рекурсия устраняется, а у ИЯ нет?
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: C++ vs ???
От: vdimas Россия  
Дата: 13.12.05 01:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Забавно. Снова уход от ответа. Ты уже, наверно, десятый пропогандист ФЯ который ушел от ответа на этот вопрос.


А вопрос был неправильно поставлен. Речь о "быстрая сортировка на cвязанных списках" vs "быстрая сортировка на массивах без переаллокации".

Некоторые ФЯ подерживают и обычные packed array, но над эти массивом быстрая сортировка будет выглядеть по-другому. В то же самое время сортировка связанного списка и на С++ была бы практически такой же, как приведенная.

Т.е. К классу языка ЯП этот вопрос не лежит никаким боком.
Приведенный код был содран из первой страницы туториала по OCalm, и его авторы, приводя такие вещи, явно лукавят, умалчивая особенности такой реализации.

А вот и мой "перевод" на С++:
list qsort() {
    if(!first || !first->next) return *this;
    pair<list, list> tmp = rest().split(less<int>(), first->value);
    return tmp.first.qsort() + first + tmp.second.qsort(); 
};

Красота... Не хуже OCalm-a.
Осталось узнать, насколько быстро будет происходить конкатенация списков (и насколько хорош такой алгоритм сам по себе с таким выбором pivot).

Чтобы конкатенация занимала константное время я представил список в виде пары — указателя на первый и последний элемент. В исходном примере использовалась List.partition я сделал аналогичный метод split(predicate, value), вот код целиком вместе с декларациями примитивов:
#include <iostream>
#include <functional>

using namespace std;

struct cell { 
    int value; 
    cell* next; 
    cell(int v, cell* n=NULL) :value(v), next(n) {}
};

struct list : std::pair<cell*, cell*>  {

    list() : pair<cell*,cell*>(NULL, NULL) {}

    list(cell* first, cell* last) 
        : pair<cell*, cell*>(first, last) {}

    list qsort() {
        if(!first || !first->next) return *this;
        pair<list, list> tmp = rest().split(less<int>(), first->value);
        return tmp.first.qsort() + first + tmp.second.qsort(); 
    };

    list rest() {
        if(first==second) return list();
        return list(first->next, second);
    }

    list operator+(const list& over) { 
        if(first==NULL) return over;
        if(over.first==NULL) return *this;
        second->next = over.first; return list(first, over.second);
    }

    list operator+(cell* c) {
        c->next = NULL;
        return operator+(list(c, c));
    }

    list operator+(int i) {
        return operator+(new cell(i));
    }

    list& operator +=(const list& over) {
        *this = *this + over;
    }

    list& operator +=(cell* c) {
        return *this = *this + c;
    }

    template<typename func>
    pair<list, list> split(func f, int value) {
        pair<list, list> res;
        while(first) {
            cell* next = first->next;
            if(f(first->value, value)) 
                res.first += first;
            else 
                res.second += first;
            first = next;
        }
        return res;
    };
};

template<typename Char>
std::basic_ostream<Char>& operator <<(std::basic_ostream<Char>& s, cell* c) { 
    if(c) s << c->value << ' ' << c->next; 
    return s;
}

template<typename Char>
std::basic_ostream<Char>& operator <<(std::basic_ostream<Char>& s, const list& l) { 
    s << l.first;
    return s;
}

int _tmain(int argc, _TCHAR* argv[])
{
    list l = list() + 10 + 1 + 5 + 2 + 7 + 11 + 4; 
    cout << l << endl;
    cout << l.qsort();
    return 0;
}
Re[43]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.05 02:49
Оценка:
Здравствуйте, vdimas, Вы писали:

V>А вот и мой "перевод" на С++:

V>
V>list qsort() {
V>    if(!first || !first->next) return *this;
V>    pair<list, list> tmp = rest().split(less<int>(), first->value);
V>    return tmp.first.qsort() + first + tmp.second.qsort(); 
V>};
V>

V>Красота... Не хуже OCalm-a.

Здорово. Но дело тут не в том как организован список. Вот почти тоже самое на List<T> в дотнете:
    static List<T> QSort<T>(List<T> list) where T: IComparable<T>
    {
        if (list.Count <= 0)
            return list;
        List<T> gr = QSort(list.FindAll(delegate(T el) { return list[0].CompareTo(el) > 0; }));
        List<T> eq = list.FindAll(delegate(T el) { return list[0].CompareTo(el) == 0; });
        List<T> lt = QSort(list.FindAll(delegate(T el) { return list[0].CompareTo(el) < 0; }));
        gr.AddRange(eq); gr.AddRange(lt); return gr;
    }

Причем это без единого расширения. А если сделать расширения, то он будет не больше чем на Окамле.
Но вот его эффективность...
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: C++ vs ???
От: vdimas Россия  
Дата: 13.12.05 06:20
Оценка:
Здравствуйте, Cyberax, Вы писали:


>> C>Это неверно, кстати. В C/C++ есть ключевое слово restrict, которое

>> C>говорит оптимизатору, что указатель не будет иметь alias'инга.
>> Есть в С99, а в С++ всего 3 ключевых слова на "R": return, register и
>> reinterpret_cast

C>Оно будет в C++09, а пока есть в GCC и MSVC в виде __restrict.


Я не совсем понимаю принцип действия этого предполагаемого restrict. Это мы как бы "обещаем" компилятору что-то? А кто контоллирует выполнение обещания?

Сможет ли компилятор проконтроллировать?
Re[26]: C++ vs ???
От: Глеб Алексеев  
Дата: 13.12.05 08:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>http://en.wikipedia.org/wiki/Tail_recursion

From Wikipedia, the free encyclopedia that anyone can edit

Вообще-то, MIT — это более авторитетный источник, чем википедия, ну да ладно.
В принципе, ничего особенного в статье из википедии нет. Ну да, есть там фраза:

Converting a call to a branch or jump in such a case is called a tail call optimization.

Но еще есть и это:

For normal, non-recursive function calls, this is usually a micro-optimization that saves little time and space, since there are not that many different functions available to call. When dealing with recursive or mutually recursive functions, however, the stack space and the number of returns saved can grow to huge numbers, since a function can call itself, directly or indirectly, a huge number of times. In fact, it often asymptotically reduces stack requirements from linear, or O(n) stack space, to constant, or O(1) stack space.

Это уже ближе к телу. Автор все время твердит о стеке и адресах возврата, как будто альтернативных реализаций ЯП не существует. И о чем автор не говорит, так это о том, что наличие хвостовой рекурсии изменяет семантику программ, не имеющих ограничения на глубину рекурсии. При отсутствии хвостовой рекурсии получаем аварийное завершение, при ее наличии — сколь угодно долгий цикл. Хотите такое преобразование называть оптимизацией — пожалуйста.

з.ы. В ближайшее время, скорее всего, не смогу отвечать, так что оставьте это сообщение без внимания.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[43]: C++ vs ???
От: Cyberax Марс  
Дата: 13.12.05 09:14
Оценка:
vdimas wrote:

> C>Оно будет в C++09, а пока есть в GCC и MSVC в виде __restrict.

> Я не совсем понимаю принцип действия этого предполагаемого restrict.
> Это мы как бы "обещаем" компилятору что-то?

Да, мы обещаем, что у указателей не будет aliasing'а. То есть указатель
является "владеющим" для данного блока, и никакие другие указатели (в
этой функции) не ссылаются на данные внутри этого блока.

> А кто контоллирует выполнение обещания?


Совесть программиста

> Сможет ли компилятор проконтроллировать?


В некоторых простых случаях (и во время отладки) — сможет.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[45]: C++ vs ???
От: Cyberax Марс  
Дата: 13.12.05 12:14
Оценка:
vdimas wrote:

> C>Совесть программиста

> Да я как бы на это и намекал
> Т.е. ты должен понимать, что в реальной жизни это — грабли. Т.е. не
> покатит. Пускай это останется для C, у него и так все на машинном
> уровне, но я был бы против такого в C++.

Нет, почему же. Тот же Blitz++ вполне успешно использует restrict (в
своих воплощениях в виде __restrict и __atribute__ restrict).

Да и нужен он обычно в небольших функциях типа memmove.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[30]: C++ vs ???
От: reductor  
Дата: 13.12.05 13:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, reductor, Вы писали:


R>>Или показываем алгоритм (даем математически строгое описание) или тема закрыта раз и навсегда — про "стоит денег" и "скомпилируй увидишь".


VD>А, ну, тогда тема закрыта, так как ни одно "математически строгое описание" ты не дал.


Описание чего, простите _я_ должен дать?

VD>Что до алгоритма инлайнинга, то это нехилый алгоритм и так вот тебе его никто не покажет. Ну, а как это делать в принципе ты и сам должен поянть. Вызовы заменяются на циклы и goto. Тело копируется некоторое количество раз, чтобы переход влиял по меньше и т.п.


Давайте не будем сейчас про секретные ЦРУшные алгоритмы. Это из области ЦРУшного числа пи, которое равно ровно трем.


R>>Поясню почему я столь настойчив — у меня есть все основания считать, что такого алгоритма не существует и не может существовать.


VD>И есть "математически строгое описание" этого основания?


Да. Теория автоматов на этом настаивает.

R>>Нет способа определить общерекурсивность той или иной функции.

VD>Что значит "общерекурсивность"?

Ого.
первая ссылка в яндексе на поиск этого слова: http://ric.uni-altai.ru/Fundamental/teor-alg/upr15/upr15-2.htm

Кстати я прекращаю обсуждение с вами этой темы.

R>>А разговор о только хвостовой смысла не имеет. Любая хвостовая рекурсия заменяется циклом и наоборот и ни о каком выигрыше здесь ни с одной ни с другой стороны речи идти не может.


VD>Хм. Теоритически — да. На практике 99% комиляторов ИЯ этого не делают и разница на рекурсивных вызовах вроде тех что идут в примерах к ФЯ огромна.


И что? Им это не нужно и приносит больше проблем, чем пользы (со stacktrace например)

VD>Ты что доказать то хочешь? Ведь если с тобой согласиться и не считать устранине рекусрии оптимизацией, то зачем же ты тогда привел сравнение где у ФЯ рекурсия устраняется, а у ИЯ нет?


я привел сравнение?!
Я все понимаю, но вы меня с кем-то путаете.
Re[43]: C++ vs ???
От: reductor  
Дата: 13.12.05 13:37
Оценка:
Здравствуйте, vdimas, Вы писали:


V>Некоторые ФЯ подерживают и обычные packed array, но над эти массивом быстрая сортировка будет выглядеть по-другому. В то же самое время сортировка связанного списка и на С++ была бы практически такой же, как приведенная.


Все ФЯ поддерживают mutable arrays. что касается по-другому — то можно и так же, но это неэффективно — матчить массив как cons cells — это и неэффективно и бессмысленно.

V>Т.е. К классу языка ЯП этот вопрос не лежит никаким боком.

V>Приведенный код был содран из первой страницы туториала по OCalm, и его авторы, приводя такие вещи, явно лукавят, умалчивая особенности такой реализации.

Естественно. было лень руками набирать — вставил то, что первое попалось в гугле. сам бы я написал скорее так:
open List;;
let rec qsort = function
     | [] -> []
     | (x::xs) -> let left,right = partition ((>) x) xs
                  in qsort left @ x::qsort right;;


V>А вот и мой "перевод" на С++:

V>Красота... Не хуже OCalm-a. :)))

Не так наглядно и главное — в окамле без всяких лишних библиотек, вспомогательных функций и шаблонов :)

V>Чтобы конкатенация занимала константное время я представил список в виде пары — указателя на первый и последний элемент. В исходном примере использовалась List.partition я сделал аналогичный метод split(predicate, value), вот код целиком вместе с декларациями примитивов:

V>
#include <iostream>
#include <functional
// ААААА. сколько кода поскипнуто :)
Re[44]: C++ vs ???
От: vdimas Россия  
Дата: 13.12.05 22:00
Оценка:
Здравствуйте, reductor, Вы писали:

V>>А вот и мой "перевод" на С++:

V>>Красота... Не хуже OCalm-a.

R>Не так наглядно и главное — в окамле без всяких лишних библиотек, вспомогательных функций и шаблонов


Ну как же, а partition, а базовые представления списков? Все лишнее у тебя уже есть. Сами агрегаты вставлены в язык. В С/С++ никакие агрегаты в язык не вставлены. Кому надо — вставляет оные из стандартной бибиотеки.

V>>Чтобы конкатенация занимала константное время я представил список в виде пары — указателя на первый и последний элемент. В исходном примере использовалась List.partition я сделал аналогичный метод split(predicate, value), вот код целиком вместе с декларациями примитивов:

V>>
R>#include <iostream>
R>#include <functional
R>// ААААА. сколько кода поскипнуто :)
R>


Блин, да я же специально STL не юзал, кроме примитива pair<T1, T2>, чтобы показать трудоемкость решения с 0-ля.
Т.е., очень эффективные, приближенные к "машинной" реализации список я нарисовал прямо при тебе, т.к. он не был встроен в язык (слава богу). Любые другие задачи могут "идти дальше", не описывая все это повторно, разумеется. Не верю, что ты этого не понимаешь.

СПонятное дело, что с использованием стандартной либы я бы просто написал qsort(array, array+len);
Re[5]: C++ vs ???
От: c-smile Канада http://terrainformatica.com
Дата: 13.12.05 22:43
Оценка:
Здравствуйте, alexeiz, Вы писали:

CS>>>>D как язык для UI лучше чем C++ скажем в разы. Это я со всей отвественностью

CS>>>>могу сказать.

A>>>А причины не трудно описать? По пунктам и конкретно. А то не очень-то верится.


CS>>1) GC. GC helps a lot managing DOM/windows/elements structure. This is huge in fact. Simplifies significantly code. Makes it clean and compact thus more robust.


A>Мне кажется, что это просто аргумент в пользу GC, а не конкретно GC для программирования UI. В UI обычно у каждого элемента есть свой owner, который его и освобождает. Так устроено в MFC, QT, да и даже в старом Motif'е. Может быть внутри фреймвока и легче отслеживать время жизни элементов с помощью GC, но для пользователя это никогда не было проблемой.


owner — да но так же есть и reference на parent. Т.е. имеем циклическую ссылку
которую естесственным образом в C++ не решить.


A>Кстати, о проблемах с GC в UI. Бывает и так: пользователь открывает новое окно/диалог, который отъедает кучу ресурсов. Пользователь закончил свою работу с окном, закрыл его. А ресурсы всё ещё в памяти. GC ни сном ни духом не ведает, что при закрытии окна нужно что-то освободить. А пользователь жалуется. Мол окно уже закрыто, почему программа до сих пор столько памяти держит? И вот GC ждёт пока другое такое ресурсопрожорливое окно откроется, тогда он сразу спохватится, начнёт освобождать. А окно в это время тормозит.


Какое отношение имеет "ресурсопрожорливое окно" к GC?


A>Да и на C++ это дело можно сделать, так как GC имеются, а в большинстве случаев smart pointer'ов дольжно быть достаточно.


В теории да. На практике нет.

A>Поэтому тут по возможностям D не перекрывает C++.


Перекрывает именно наличием встроенного GC.

CS>>2) Closures/Delegates. This in fact is not so critical as I am using sinking/bubbling. Let's say it is nice to have feature — allows to simplify code and make it more understandable an regular.


A>boost::function, boost::signal? win32 gui generics использует этот же механизм. C++ не нужно иметь delegates в языке, т.к. они есть в библиотеке.


к сожалению они не завязяны на GC.
Система UI объектов и их ссылок как правило имеет очень сложную струтуру с циклами.
Иногда в принципе нельзя отследить кто кого держит.
Для таких ситуаций GC это то что доктор прописал. Зело упрощает все эти танцы со смарт указателями.


CS>>3) Properties (getters/setters). Ideally reduces twice methods you need to remember. Again, it is about simplification.


A>Если бы ты упомянул свойства для создания компонент с их последующем использовании в дизайнере, то это бы имело смысл. А иначе свойства представляют спорный вопрос, опять же не имеющий отношение к UI per se.


Дело вкуса конечно.

CS>>4) There are more features in D helping UI development e.g. mixins and templates parametrized by character strings, etc., I'll skip them here.


A>Миксины есть в C++. Curiously recurring template pattern, policies — это всё имеет отношение к миксинам.


Это не те mixins. Вернее не только те.

A>Может быть параметризация шаблонов строками и помогает. Об этом судить не берусь.


CS>>Use of Java for massive UI development has one and big benefit — isolation between logic and system low level and critical functions. This is sort of critical for development in teams.


A>Здесь не совсем понятно, что ты имеешь ввиду, и каким образом это подкрепляет аргумент в пользу Java для программирования UI.


Я имею ввиду то что код взаимодействующий и знающий про handles & resources
живет в native C методах ничего не знающих про GC — они "GC statless".
Код же связывающий компоненты в единое целое это Java.

CS>>And again Java has good set of design tools. Intellisense is a real tool increasing productivity.


A>You mean UI design tools? К языку это имеет опоследовательное отношение. Для C++ тоже есть UI design tools.


К языку да — опосредованное. Но в компонентном UI design reflection является бенефитом.
Re[28]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.05 23:00
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Как минимум MS VS 7.1 вообще не будет делать вызова factorial в релизе. Вместо него в operator << будет сразу передан результат вычисления 7!.


Ну, незнаю. Может я что-то делаю не так, но вот что я получил под отладчиком (Release VS 2005):
__forceinline int __fastcall factorial (int f)
{
00401000  push        esi  
00401001  mov         esi,ecx
  return f <= 1 ? 1 : f*factorial(f-1);
00401003  cmp         esi,1 
00401006  jg          factorial+0Fh (40100Fh) 
00401008  mov         eax,1 
0040100D  pop         esi
}
0040100E  ret
  return f <= 1 ? 1 : f*factorial(f-1);
0040100F  lea         ecx,[esi-1] 
00401012  call        factorial (401000h) 
00401017  imul        eax,esi 
0040101A  pop         esi
}
0040101B  ret


Так что как раз VC похоже тут звезд с неба не хватает.

S>Но Влад говорит о том, что в общем случае инлайнится не функция, а вызов. Никакой фантастики для этого не нужно. Да, не для всех случаев удается вообще избавиться от вызова.


Именно. Да и в чем тут фантастика может быть?
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[47]: C++ vs ???
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 14.12.05 06:52
Оценка:
Здравствуйте, reductor, Вы писали:

VD>>Но вот в совершенно не функциональном Руби код получается не более длинный чем в Окамле, а ведь "матчить" то он вроде не умеет.


R>Я правильно вас понимаю, что вы предлагаете всем отказаться от окамла и С++ в пользу руби?


Не-а. Влад -- он за .NET и C#.
А переход на Ruby -- это я. И не вместо C++, а вместе с C++.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[45]: C++ vs ???
От: reductor  
Дата: 14.12.05 12:02
Оценка:
Здравствуйте, vdimas, Вы писали:

R>>Не так наглядно и главное — в окамле без всяких лишних библиотек, вспомогательных функций и шаблонов :)


V>Ну как же, а partition, а базовые представления списков? Все лишнее у тебя уже есть. Сами агрегаты вставлены в язык. В С/С++ никакие агрегаты в язык не вставлены. Кому надо — вставляет оные из стандартной бибиотеки.


Представление списков — это _только_ окамловские типы :)
Все очень просто:

(* список - это всего лишь  *)
type 'a list = Nil | Cons of 'a * 'a list

(* "агрегаты" ;) *)
let (::) fst snd = Cons (fst, snd);;

let rec (@) l1 l2 =
  match l1 with
    [] -> l2
  | hd :: tl -> hd :: (tl @ l2)

let partition p l =
  let rec part yes no = function
  | [] -> (rev yes, rev no)
  | x :: l -> if p x then part (x :: yes) no l else part yes (x :: no) l in
  part [] [] l

(* ну а точнее родной окамловский список - это (определение a-la haskell): *)
type 'a list = [] | 'a :: 'a list


Алгебраические типы — они огого.
Дело не в синтаксисе. Тут именно в системе типов (вспомним еще что они сами выводятся) мощь.

V>Блин, да я же специально STL не юзал, кроме примитива pair<T1, T2>, чтобы показать трудоемкость решения с 0-ля.

V>Т.е., очень эффективные, приближенные к "машинной" реализации список я нарисовал прямо при тебе, т.к. он не был встроен в язык (слава богу). Любые другие задачи могут "идти дальше", не описывая все это повторно, разумеется. Не верю, что ты этого не понимаешь.

Очень даже понимаю
Сам не люблю трудоемкость ;)
Re[30]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.05 18:53
Оценка:
Здравствуйте, Костя Ещенко, Вы писали:

КЕ>Ты, видимо, не установил #pragma inline_recursion(on). А вычислит ли vc константу, зависит от значения N в #pragma inline_depth(N). Т.к. по умолчанию N=8, то 7! вычисляется в константу.


Да и при 5 тоже константу дает. Спасибо!

А вот при 2 он таки делает раворот тела функции.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: ocamlopt и MSVC - кто быстрее?
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.05 18:53
Оценка:
Здравствуйте, reductor, Вы писали:

R>Я в общем уже говорил это — я никого и ничего тут не поддерживаю и не пропагандирую.

R>Я не являюсь фанатом или апологетом какого-либо языка, платформы или чего-то подобного. Я всего лишь отвечаю на вопросы.

О, это видно.

R>Да мне в общем-то даже спорить неинтересно. Мне интересно узнавать что-то новое для себя. Затем я здесь.


Аналогично.

R>Если кто-то спрашивает о чем-то, в чем я разбираюсь — могу ответить.

R>Ратовать и пропагандировать — не люблю.

Я плякаль. Видимо ответы по производительности Окамла были эдакой шуткой юмора.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[44]: C++ vs ???
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.05 18:53
Оценка:
Здравствуйте, reductor, Вы писали:

R>Нет, разверзгнутся хляви небесные, наступит армагеддон и мы все очутимся в геене огненной.


Смешно. Но ответа как всегда нет.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: ocamlopt и MSVC - кто быстрее?
От: Gaperton http://gaperton.livejournal.com
Дата: 14.12.05 20:44
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>OCaml компилировался так:

GN>
GN>ocamlopt -inline 100 ray.ml -o ray
GN>
получен исполняемый файл размером 278528 байт.


Ай-ай-ай-ай, как не стыдно! Флейма развели как малые дети — а сами жульничаем потихоньку, да?

Во первых

ocamlopt -inline 100 -unsafe -ffast-math -ccopt -O3

параметр последнего флага — это опция, которая передастся компилятору gcc. Не забудьте передать ему ваши любимые опции — пусть хоть оптимизнет код немного, штоли. А то пнимаешь, сравнивают здесь... Кодогенератор gcc при отключенной оптимизации c более качественным кодогенератором MSVC.

Короче, не надо передергивать. Сравнивайте gcc с OCamlopt — так будет честно.
Re[23]: ocamlopt и MSVC - кто быстрее?
От: gear nuke  
Дата: 14.12.05 21:16
Оценка:
Здравствуйте, Gaperton,

GN>>OCaml компилировался так:

GN>>
GN>>ocamlopt -inline 100 ray.ml -o ray
GN>>
получен исполняемый файл размером 278528 байт.


G>Ай-ай-ай-ай, как не стыдно! Флейма развели как малые дети — а сами жульничаем потихоньку, да?




G>Во первых


G>ocamlopt -inline 100 -unsafe -ffast-math -ccopt -O3


G>параметр последнего флага — это опция, которая передастся компилятору gcc.


Читаем внимательно мой предыдущий пост
Автор: gear nuke
Дата: 04.12.05

Microsoft-based native Win32 port


Я использовал опции компилятора приведённые в оригинальном тесте.

G>Не забудьте передать ему ваши любимые опции — пусть хоть оптимизнет код немного, штоли. А то пнимаешь, сравнивают здесь... Кодогенератор gcc при отключенной оптимизации c более качественным кодогенератором MSVC.


Где gcc?

 Содержимое папки C:\compilers\Objective Caml\bin

04.12.2005  22:12    <DIR>          .
04.12.2005  22:12    <DIR>          ..
27.10.2005  11:19           430 203 camlp4.exe
27.10.2005  11:19           535 021 camlp4o.exe
27.10.2005  11:19           999 424 camlp4o.opt.exe
27.10.2005  11:19           512 065 camlp4r.exe
27.10.2005  11:19           798 720 camlp4r.opt.exe
27.10.2005  11:19               942 mkcamlp4
27.10.2005  11:19         1 077 317 ocaml.exe
27.10.2005  11:19         1 319 007 ocamlbrowser.exe
27.10.2005  11:19         1 003 851 ocamlc.exe
27.10.2005  11:19         1 449 984 ocamlc.opt.exe
27.10.2005  11:19            83 932 ocamlcp.exe
27.10.2005  11:19           281 750 ocamldep.exe
27.10.2005  11:19         1 524 756 ocamldoc.exe
27.10.2005  11:19         2 023 424 ocamldoc.opt.exe
27.10.2005  11:19           159 571 ocamllex.exe
27.10.2005  11:19           372 736 ocamllex.opt.exe
27.10.2005  11:19            83 797 ocamlmktop.exe
27.10.2005  11:19         1 194 864 ocamlopt.exe
27.10.2005  11:19         1 687 552 ocamlopt.opt.exe
27.10.2005  11:19           274 020 ocamlprof.exe
27.10.2005  11:19           122 880 ocamlrun.dll
27.10.2005  11:19             3 584 ocamlrun.exe
27.10.2005  11:19            98 304 ocamlyacc.exe
27.10.2005  11:19           266 519 ocpp.exe
              24 файлов     16 304 223 байт
               2 папок     150 116 352 байт свободно

+ из пакета MSVC используются 2 вещи: ml.exe для ассемблирования полученного листинга и link.exe для линковки.

G>Короче, не надо передергивать. Сравнивайте gcc с OCamlopt — так будет честно.


Зачем я буду сравнивать с gcc? Вы мне ещё предложите для компиляции С++ его использовать. Есть куда более качественные бесплатные компиляторы. Я сравниваю со своим _обычным_ инструментом. Меня в первую очередь интересует как будет это работать на платформе, которая нужна _мне_.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[24]: C++ vs ???
От: vdimas Россия  
Дата: 14.12.05 21:32
Оценка:
Здравствуйте, VladD2, Вы писали:

R>> для этого а) не нужно никакого анализа. б) это прописано в _стандартах_ некоторых языков.

R>>как можно _оптимизацией_ называть то, что входит в стандарт?

VD>Пофигу куда что входит. Для ФЯ эта оптимизация жизненно-важна, вот и додумался народ упомянуть о ней в стандарте. Попробуй найти ИЯ в котором такое же упоминание найдется.


Влад, это — не оптимизация. Остановись на секунду и вернись к истокам:

— что такое циклы?
цикл — это повторение одних и тех же участков кода.

Для полноты языка в числе прочих требуется присутствие оператора условного перехода (например IF-GOTO), такой язык позволит реализовать ЛЮБОЙ алгоритм.

"Синтаксический сахар" структурного подхода отменил GOTO и предоставил конструкции циклов для аналогичных целей. Т.е., в стандарте языков выросших из структурного подхода так и сказано (например):

— для организации цикла необходимо применить оператор do-while (loop, for, whatever...)

А применительно к Haskell, в том же самом месте сказано примерно следующее:

для организации цикла необходимо применить хвостовую рекурсию!

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

Тебе же reductor сказал — "условие существования", а ты не обратил внимание.


Понятное дело, что не могли создатели языка ограничить длину обрабатываемых данных глубиной стека. Поэтому то, что внешне выглядит как хвостовая рекурсия, на самом деле является стандартной записью цикла (как do-until в Pascal, например)


R>>в случае со scheme и haskell, например, это "уменьшение быстродействия" приведет к неработоспособному коду

R>>вот и все.

VD>С чего бы это? Если ты о линивости, то это несколько другая песня.


Нет, о переполнении стека на обработке любого файла, длина которого больше, навскидку, 250 тыс элементов.


VD>Ненадо излишней философии. Мы говорим об оптимизациях в компиляторах.


Re[23]: Жульничество
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.12.05 21:41
Оценка:
Gaperton wrote:
>
> Ксатити, по приведенной тобой ссылке используется как раз gcc. А не MSVC
> последней версии, у которого кодогенератор заметно качественнее.

Это очень спорное утверждение. Например, если скомпилировать
криптографический алгоритм rc4, наивно написанный на C без всяких там
выкрутасов, то gcc 2.95 с чем-то обогнал MSVC 7.1 в два раза по
производительности получившегося кода.

> Короче, твои аргументы в этом грандиозном флейме высосаны из пальца, на

> самом деле. ocamlopt использует gcc для кодогенерации. Вот и все. Так

Уй, правда что ли? Вообще-то, он всегда умел сам кодогенерить...
Posted via RSDN NNTP Server 2.0
Re[24]: ocamlopt и MSVC - кто быстрее?
От: Gaperton http://gaperton.livejournal.com
Дата: 14.12.05 21:44
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Читаем внимательно мой предыдущий пост
Автор: gear nuke
Дата: 04.12.05

GN>

Microsoft-based native Win32 port


GN>Я использовал опции компилятора приведённые в оригинальном тесте.


В оригинальном тесте ocamlopt использует gcc для кодогенерации, и сравнивается с gcc. А у тебя — нет. Так что флажки все-таки проставь. Например, -unsafe. Не надо тут вешать мне лапшу, что твой плюсовый код проверяет границы массивов, так что давай поставим их в равные условия. Для начала.

G>>Не забудьте передать ему ваши любимые опции — пусть хоть оптимизнет код немного, штоли. А то пнимаешь, сравнивают здесь... Кодогенератор gcc при отключенной оптимизации c более качественным кодогенератором MSVC.


GN>Где gcc?

Опция -ccopt передает флаги компилятору С. Угадай, какому, и зачем ocamlopt-у нужен компилятор С. Я понятия не имею, какой компилятор С поднимается у тебя на машине. Это уж ты сам разберись, раз взялся reductor-а с дерьмом мешать.

GN>Зачем я буду сравнивать с gcc? Вы мне ещё предложите для компиляции С++ его использовать. Есть куда более качественные бесплатные компиляторы. Я сравниваю со своим _обычным_ инструментом. Меня в первую очередь интересует как будет это работать на платформе, которая нужна _мне_.


Затем, что ты опять в... пытаешься ввести общественность в заблуждение касательно своих намерений. Ты тут недалеко говорил, что ты не согласен с излишне категорично фразой, что ocaml может быть быстрее С++ (делая такой вид). Речь идет не о тебе, и о том что тебе надо (это ни мне ни общественности не интересно), а о самом языке, так что сравнение надо проводить на кодогенераторах одинакового качества. ocamlopt-у для кодогенерации нужен С-шный компилятор, который при сравнении должен быть одинаков, и запускаться с теми же самыми флагами. Короче, взялся флеймить — отвечай за базар.
Re[24]: Жульничество?
От: Gaperton http://gaperton.livejournal.com
Дата: 14.12.05 22:10
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>P.S.

GN>Я могу так же утверждать, что оригинальный тест — подтасовка. Выбрали компилятор, который проигрывает OCaml.

Почему же, многие люди пользуются gcc, и не считают его таким уж прям плохим. На ряде платформ это вообще единственный компилятор, и ничего. Так что какая такая подтасовка?

Ваша подтасовка в том, что вы подменили в утверждении reductor-а "C++" на MSVC. В то время как reductor не уточнял, о каком компиляторе идет речь. gcc — вполне себе нормальный компилятор С++. Таки в чем подтасовка в статье?
Re[25]: ocamlopt и MSVC - кто быстрее?
От: gear nuke  
Дата: 14.12.05 22:57
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>В оригинальном тесте ocamlopt использует gcc для кодогенерации, и сравнивается с gcc. А у тебя — нет.


Ну так я и проверяю правомерность оригинального теста.

G>Так что флажки все-таки проставь. Например, -unsafe. Не надо тут вешать мне лапшу, что твой плюсовый код проверяет границы массивов, так что давай поставим их в равные условия. Для начала.


Хорошо. Пробую поставить флажки как советовали:
ocamlopt -inline 100 -unsafe -ffast-math -ccopt -O3 ray.ml -o ray

Получаю отлуп:
cl : Command line warning D9002 : ignoring unknown option '-O3'

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

Тест проводился так же, как здесь
Автор: gear nuke
Дата: 04.12.05
.
Результаты действительно лучше!
ocalmopt 
(Microsoft-based native Win32 port  3.09.0)  Новые результаты

30,60 сек                                    29,48 сек
30,69 сек                                    29,48 сек
30,59 сек                                    29,48 сек
почти на 4 %

G>>>Не забудьте передать ему ваши любимые опции — пусть хоть оптимизнет код немного, штоли.

G>>> А то пнимаешь, сравнивают здесь... Кодогенератор gcc при отключенной оптимизации c более качественным кодогенератором MSVC.

GN>>Где gcc?

G>Опция -ccopt передает флаги компилятору С. Угадай, какому

Повторю — OCaml сам оптимизирует. cl.exe вызывается только для линковки. В этом можно убедиться переименовав cl.exe:

"cl" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Error during linking


G>и зачем ocamlopt-у нужен компилятор С.


Помоему — незачем.

G> Я понятия не имею, какой компилятор С поднимается у тебя на машине. Это уж ты сам разберись, раз взялся reductor-а с дерьмом мешать.


Ну так я разобрался — никакой.
Красиво обвинять, не разобравшись самому?

GN>>Зачем я буду сравнивать с gcc? Вы мне ещё предложите для компиляции С++ его использовать. Есть куда более качественные бесплатные компиляторы. Я сравниваю со своим _обычным_ инструментом. Меня в первую очередь интересует как будет это работать на платформе, которая нужна _мне_.


G>Затем, что ты опять в... пытаешься ввести общественность в заблуждение касательно своих намерений. Ты тут недалеко говорил, что ты не согласен с излишне категорично фразой, что ocaml может быть быстрее С++ (делая такой вид). Речь идет не о тебе, и о том что тебе надо (это ни мне ни общественности не интересно)


Думаю, той общественности, которая пишет под windows интересно сравнение инструментов именно под эту платформу, а не gcc, который не понятно под какую.

G>а о самом языке, так что сравнение надо проводить на кодогенераторах одинакового качества.


Ну где же взять OCaml'у кодогенератор хорошего качества? Вот будет, тогда и будем его тестировать. Пока что используется то, что есть. Если бы я ставил целью что-то там смешивать, взял бы не бесплатный mainstream компилятор, а что-нибудь за несколько сотен $.

G>ocamlopt-у для кодогенерации нужен С-шный компилятор, который при сравнении должен быть одинаков, и запускаться с теми же самыми флагами.


Не нужен ему компилятор С. У него свой кодогенератор, отдаёт asm файл ассемблеру.
Именно этот asm файл я и анализировал здесь
Автор: gear nuke
Дата: 04.12.05
.

G>Короче, взялся флеймить


Напомню источник флейма:
Re[6]: C++ vs ???
Автор: reductor
Дата: 02.12.05


G>- отвечай за базар.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[46]: C++ vs ???
От: vdimas Россия  
Дата: 14.12.05 23:07
Оценка:
Здравствуйте, reductor, Вы писали:

R>Здравствуйте, vdimas, Вы писали:


R>>>Не так наглядно и главное — в окамле без всяких лишних библиотек, вспомогательных функций и шаблонов


V>>Ну как же, а partition, а базовые представления списков? Все лишнее у тебя уже есть. Сами агрегаты вставлены в язык. В С/С++ никакие агрегаты в язык не вставлены. Кому надо — вставляет оные из стандартной бибиотеки.


R>Представление списков — это _только_ окамловские типы

R>Все очень просто:

R>[code]

R>(* список — это всего лишь *)
R>type 'a list = Nil | Cons of 'a * 'a list

Вот он!!! (выделенное)

Cons — это агрегат из 'a и a' list. Я его и имел ввиду. В моем примере это cell (почти )

В своем примере я мог объявить так:
struct Cell : pair<int, Cell*>;

Кста, еще один важный момент. В моем примере я использовал сложное предствление списков pair<Cell*, Cell*>, с тем, чтобы сделать время конкатенации константным, иначе описанный qsort будет работать медленнее пузырька

Т.е., OCalm-овский список — это просто ячейка Cons (указатель на оную)? Без хранения указателя на последний элемент???
Re[25]: Жульничество?
От: gear nuke  
Дата: 14.12.05 23:11
Оценка:
Здравствуйте, Gaperton,

GN>>Я могу так же утверждать, что оригинальный тест — подтасовка. Выбрали компилятор, который проигрывает OCaml.


G>Почему же, многие люди пользуются gcc, и не считают его таким уж прям плохим.


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

G>На ряде платформ это вообще единственный компилятор, и ничего. Так что какая такая подтасовка?


G>Ваша подтасовка в том, что вы подменили в утверждении reductor-а "C++" на MSVC. В то время как reductor не уточнял, о каком компиляторе идет речь.


Поэтому я взял привычный для меня.
reductor вообще ничего уточнять не любит, не нужно на меня эти проблемы перекладывать.

G>gcc — вполне себе нормальный компилятор С++. Таки в чем подтасовка в статье?


Тесты делались заинтересоваными людьми.

Мне было совершенно неинтересно, кто победит в моих тестах. Я не фанат С++, но выбрал этот язык исходя из практических его качеств, в которых скорость для меня не последнее место занимает. Победил бы OCaml — кинулся бы его изучать. Какая реклама была! Жалко, что с основами маркетинга не знаком рекламирующий, такое только отталкивает

Поймите, что если человек делает 5 утверждений, и одно из них на поверку оказывается неверным, под сомнение ставятся все остальные.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[47]: C++ vs ???
От: reductor  
Дата: 15.12.05 00:32
Оценка:
Здравствуйте, vdimas, Вы писали:

R>>Представление списков — это _только_ окамловские типы :)

R>>Все очень просто:

R>>
R>>(* список - это всего лишь  *)
R>>type 'a list = Nil | Cons of 'a * 'a list


V>Вот он!!! (выделенное)


V>Cons — это агрегат из 'a и a' list. Я его и имел ввиду. В моем примере это cell (почти :) )


V>В своем примере я мог объявить так:

V>struct Cell : pair<int, Cell*>;

Cons — это в данном случае _конструктор_ тупла 'a * 'a list
ничего магического в слове нет
можно написать:
type 'a mylist = Nil | Bush 'a * 'a mylist
(* и сразу: *)

# Bush (1, Bush (2, Nil));;
- : int mylist = Bush (1, Bush (2, Nil))

и _ничего_ не изменится.
Этот код можно запустить и уже работать с этой структурой и матчить ее например так:
let rec qsort = function
     | Nil -> Nil
     | Bush (x, xs) -> let left,right = partition ((>) x) xs
                       in concat (qsort left) (Bush (x, qsort right));;



V>Кста, еще один важный момент. В моем примере я использовал сложное предствление списков pair<Cell*, Cell*>, с тем, чтобы сделать время конкатенации константным, иначе описанный qsort будет работать медленнее пузырька :)

V>Т.е., OCalm-овский список — это просто ячейка Cons (указатель на оную)? Без хранения указателя на последний элемент???

Поскольку списки, как мы выяснили, специфичны для окамла не больше, чем для C++, то никто не мешает создать тип вида:
type 'a fastlist = FastList of 'a list * 'a list

и хранить там и голову и конец
Re[25]: Жульничество
От: Cyberax Марс  
Дата: 15.12.05 09:07
Оценка:
Gaperton wrote:
> Ой, правда штоли? Что же тогда gear nuke так отмахивается от идеи
> использовать такой хороший gcc при сравнениях с окамлом? А, понял —
> тогда у нас окамл самый быстрый в мире язык получится. .
Вообще-то, я сравнивал с gcc (лень было ocamlopt ставить на рабочую
машину). Вот результаты: http://rsdn.ru/Forum/?mid=1520744
Автор: Cyberax
Дата: 04.12.05


--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[27]: Жульничество?
От: Cyberax Марс  
Дата: 15.12.05 09:33
Оценка:
Gaperton wrote:
> OCaml на довольно широком классе задач, связанных с обработкой сложных
> структур данных, дает выигрышь по сравнению с С++ по срокам разработки.
Дело в том, что класс задач по обработке сложных структур данных сам по
себе недостаточно широк.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[29]: Жульничество?
От: Kluev  
Дата: 15.12.05 10:07
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, Cyberax, Вы писали:


C>>Gaperton wrote:

>>> OCaml на довольно широком классе задач, связанных с обработкой сложных
>>> структур данных, дает выигрышь по сравнению с С++ по срокам разработки.
C>>Дело в том, что класс задач по обработке сложных структур данных сам по
C>>себе недостаточно широк.

G>Дело в том, что во первых, мы отметаем это утверждение как голословное и лишенное смысла из-за общности и неконкретностии, а во вторых — напоминаем, что класс задач, требующий бешеной производительности — сам по себе узок как танковая смотровая щель. И для таких задач, как это ни прискорбно, чаще всего применяется Fortran.


Только оказывается что фортарновские библиотеки типа MKL внутри написаны на ассемблере и C.

И кстати вот такой каверзный вопрос. Я не совсем понял, что имеется ввиду под сложными структурами данных? У меня к примеру сейчас основная задача проанализировать несвязанную геометрию (набор поверхностей) и сделать из этого добра замкнутую связанную оболочку. Структуры данных весьма сложные, как ocaml может помочь?
Re[48]: C++ vs ???
От: vdimas Россия  
Дата: 15.12.05 10:37
Оценка:
Здравствуйте, reductor, Вы писали:

R>Cons — это в данном случае _конструктор_ тупла 'a * 'a list

R>ничего магического в слове нет
R>можно написать:

[скипнут код]

Ага, тупл... А говоришь — не агрегат

V>>Кста, еще один важный момент. В моем примере я использовал сложное предствление списков pair<Cell*, Cell*>, с тем, чтобы сделать время конкатенации константным, иначе описанный qsort будет работать медленнее пузырька

V>>Т.е., OCalm-овский список — это просто ячейка Cons (указатель на оную)? Без хранения указателя на последний элемент???

R>Поскольку списки, как мы выяснили, специфичны для окамла не больше, чем для C++, то никто не мешает создать тип вида:

R>
R>type 'a fastlist = FastList of 'a list * 'a list
R>

R>и хранить там и голову и конец

Понятно, прикольно... Вся фишка в туплах, и мы может строить произвольные по размерности туплы, так?

Просто я рассмтаривал код на OCalm с т.з. своих некоторых давних познаний Лиспа и Пролог. Т.е. записи "[]" и "pivot::rest ->" трактовал весьма однозначно. Хе, тогда все еще прикольнее, если туплы могут иметь произвольную размерность. Наворотить можно нехило
Re[26]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 15.12.05 12:51
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Вообще, все современные компиляторы в чем-то будут лучше других, в

Pzz>чем-то будут хуже. Утверждать, что один из них кардинально лучше другого
Pzz>в плане кодогенерации было бы наивно.

Что вы, наивности я за собой не припомню. Я вот, например, сейчас утверждаю: Intel C++ кардинально лучше текущей версии gcc в плане кодогенерации на платформе x86. В силу существенно более сложного кодогенератора — у него там полная модель интеловых процов внутри, которая почти все факторы учитывает, с легкостью обходя в этом программиста на ассемблере. Да, я берусь утверждать, что вы не сможете обогнать IC++ при ручном кодировании на ассемблере на более-менее нетривиальном алгоритме — это за пределами человеческих возможностей. Хотите — проверьте сами .
Re[29]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 15.12.05 17:06
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>> Хотите — проверьте сами .

Pzz>> Не хочу.

G>И это правильно. Мешки ворочать — тяжелая физическая работа, недостойная благородного дона. Давайте посмотрим, как с ний справляются другие умудренные жизнью оптимисты, думавшие, что могут обойти кодогенератор IC++. Незнаю как вам — мне было очень весело.


G>http://www.gamedev.ru/forum/?group=2&amp;topic=537&amp;page=6


Презабавнейшее чтиво. Вот, например, один такой оптимист пишет — через пяток попыток обогнать С++. Мы наблюдаем момент просветления, смотрите.

>>А вот поборол ли я Intel Compiler, это мы посмотрим?
>Нет конечно, IntelC победил. 0.160 sec vs. 0.200. К сожалению, очень плохо выравниваются данные в массивe height ( с шагом 257). Это создает пенальти... И я совершенно не представляю, зачем эмулировать двумерные массивы ж-(.

Я конечно понимаю, что производительность кода далеко не в первую очередь зависит от его объема.
Да и особенностей процов слишком много, чтобы одному человеку их все запомнить.
Кстати, от перестановки for(i.. и for(j... результат результат все-таки есть. Я "немного" ошибся. Перестановка (на P-III) дает 5% прироста скорости, если карта высот влазит в кэш, иначе 3-х кратное ускорение??!!!???

НО ПОЧЕМУ INTEL COMPILER сделал более быстрый код. Давай-ка, IronPeter asm+source code, который сгенерировал Intel C.
Либо я ничего не понимаю, либо я вообще ничего не понимаю, либо и то и другое, но короче моего asm-кода придумать просто нельзя.


Касательно моей или вашей наивности, уважаемый Pzz — обратите внимание на выделение. Это полезно.
Re[30]: Жульничество?
От: Gaperton http://gaperton.livejournal.com
Дата: 15.12.05 17:50
Оценка:
Здравствуйте, Kluev, Вы писали:

C>>>Дело в том, что класс задач по обработке сложных структур данных сам по

C>>>себе недостаточно широк.

G>>Дело в том, что во первых, мы отметаем это утверждение как голословное и лишенное смысла из-за общности и неконкретностии, а во вторых — напоминаем, что класс задач, требующий бешеной производительности — сам по себе узок как танковая смотровая щель. И для таких задач, как это ни прискорбно, чаще всего применяется Fortran.


K>Только оказывается что фортарновские библиотеки типа MKL внутри написаны на ассемблере и C.


Фортрановские программы и библиотеки написаны обычно на фортране. Их сохранилось огромное количество с давних времен, плюс — сам фортран как язык дает больше возможностей для агрессивных оптимизаций за счет большей ограниченности, чем С++. Далее — именно фортран являлся и является основным языком для суперкомпьютеров.

K>И кстати вот такой каверзный вопрос. Я не совсем понял, что имеется ввиду под сложными структурами данных? У меня к примеру сейчас основная задача проанализировать несвязанную геометрию (набор поверхностей) и сделать из этого добра замкнутую связанную оболочку. Структуры данных весьма сложные, как ocaml может помочь?


Все просто. Есть три варианта:
1) Берете в руки бубен, и начинаете камлать. При этом надо периодически кричать: О! О! Тут у меня случается просветление, и посредством возникшей между нами ментальной связи я считываю детальную постановку задачи прямо из вашего мозга, пишу программу на OCaml, и пересылаю ее вам.
2) Берете в руки мануал по OCaml или любому другому языку с системой типов Хиндли-Милнера, и разбираетесь, чем именно он может помочь в вашем случае и почему. Я рекомендую Gentle Introduction to Haskell.
3) Можете по крайней мере описать ваши сложные структуры данных и алгоритмы в форуме. Для начала.
Re[24]: ocamlopt и MSVC - кто быстрее?
От: gear nuke  
Дата: 15.12.05 20:07
Оценка:
Здравствуйте, Cyberax, Вы писали:

> ocamlopt -inline 100 *-unsafe -ffast-math -ccopt -O3*

C>

C>cyberax@scblinux:~/tests$ time ./a.out >aa

C>real 0m46.653s
C>user 0m45.991s
C>sys 0m0.224s


C>Для сравнения, последняя моя оптимизированая версия дает 30 секунд. Без

C>оптимизации ray.ml работал 48 секунд.

Т.е прирост у OCaml хорошо соответствует моим результатам
Автор: gear nuke
Дата: 15.12.05
для windows.

Очень интересные цифры:
48 / 30 = 1.6

У меня было:
30.6(Ocamlopt) / 18.6(MSVC8) = 1.65

Я плохо знаю GCC, но для MSVC могу припомнить довольно много особенностей компилятора, влияющих на производимый код. Грубо говоря, можено что-то записать 2мя способами, в одном из них результат получится гарантированно лучше или хуже. Например, желательно писать const где только возможно, и компилятор скажет спасибо. В своих тестах я ничего не менял, но может быть, кто-то просто при написании оригинального варианта использовал заведомо узкие места GCC? Не будем считать такие действия умышленными, такое возщможно, или же GCC любой код одинаково хорошо компилирует?
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[26]: Жульничество
От: gear nuke  
Дата: 15.12.05 20:32
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Скорее, в том случае gcc больше повезло с аллокацией регистров. Для

Pzz>нормальной реализации rc4 на x86 регистров чуть-чуть не хватает.

У MSVC7.1 действительно некоторые проблемы с крипто — там обычно нужно 8 регистров, а у x86 только 7 свободных. MSVC умудряется напихать лишних переменных в стеке Intel стабильно его обгоняет на таких задачах. В 8й версии ситуация заметно улучшилась.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[27]: Жульничество
От: gear nuke  
Дата: 15.12.05 20:39
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Я вот, например, сейчас утверждаю: Intel C++ кардинально лучше текущей версии gcc в плане кодогенерации на платформе x86. В силу существенно более сложного кодогенератора — у него там полная модель интеловых процов внутри, которая почти все факторы учитывает,


Intel на самом деле заточен под IA-64, и x86 там наследует некоторые ограничения его архитектуры. Например, все переходы зачем-то выровнены по границе 4 байта. Имеет смысл выравнивать лишь на 16. Но в остльном GCC далеко до него.

G>с легкостью обходя в этом программиста на ассемблере.


Ни разу такого не видел. Или речь о сравнении новичка в ассемблере с профессионалом С++?

G>Да, я берусь утверждать, что вы не сможете обогнать IC++ при ручном кодировании на ассемблере на более-менее нетривиальном алгоритме — это за пределами человеческих возможностей. Хотите — проверьте сами .


Под нетривиальным алгоритмом что понимать?
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[25]: ocamlopt и MSVC - кто быстрее?
От: Cyberax Марс  
Дата: 15.12.05 20:44
Оценка:
gear nuke wrote:
> Я плохо знаю GCC, но для MSVC могу припомнить довольно много
> особенностей компилятора, влияющих на производимый код. Грубо говоря,
> можено что-то записать 2мя способами, в одном из них результат получится
> гарантированно лучше или хуже. Например, желательно писать const где
> только возможно, и компилятор скажет спасибо. В своих тестах я ничего не
> менял, но может быть, кто-то просто при написании оригинального варианта
> использовал заведомо узкие места GCC? Не будем считать такие действия
> умышленными, такое возщможно, или же GCC любой код одинаково хорошо
> компилирует?
Не знаю, я пользуюсь MSVC как первичным компилятором (а на GCC проверяю
портируемость). Вроде бы правила оптимизации примерно одинаковые.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[29]: Жульничество
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.12.05 21:11
Оценка:
Gaperton wrote:
>
> 1) Если у вас есть знакомые из компании Мирантис, советую связаться с
> ними и узнать, каким образом применение IC++ позволило им увеличить
> производительность симуляции процесса литографии на 20% (насколько я помню).
> 2) Потрудитесь сами взглянуть на тесты IC++. Их несложно найти в
> интернете — времени уйдет меньше, чем на выяснение степени моей
> наивности. Для вас, я вижу, последняя проблема имеет больший приоритет .

Я скажу отверждение, которое, вероятно, не смогу доказать: не стоит
слишком уж доверять популярным тестам.

Обратите внимание, я не спорю с тем, что Интеловский компилятор лучше,
чем gcc, знает особенности (Интеловских) x86. Я даже не буду спорить,
что в каких-то (возможно, во многих) случаях он порождает луший код.

Я лишь позволю себе напомнить, что
1) разговор начинался с MSVC, а теперь каким-то образом переехал на
Интеловский компилятор.
2) Мне очень не понравилась фраза, произнесенная Gaperton'ом, "А не
MSVC последней версии, у которого кодогенератор заметно качественнее".
Именно ее я и оспаривал, по причине ее спорности и бессодержательности
(что такое, "заметно качественнее"?). Так что я не очень понимаю, какое
к этому имеет отношение вопрос о том, кто круче выглядит на каких-то там
тестах, I++ или gcc.

> Pzz>Не забывайте, кстати, что x86'я архитектура, это не только Intel, но и

> Pzz>AMD. И вот на генерацию кода под AMD Интеловским ребятам было, мягко
> Pzz>говоря, наплевать.
>
>>> программиста на ассемблере. Да, я берусь утверждать, что вы не сможете
>>> обогнать IC++ при ручном кодировании на ассемблере на более-менее
>>> нетривиальном алгоритме — это за пределами человеческих возможностей.
>
> Pzz>А что, IC++ боги, что ли, писали? Если они смогли написать хороший
> Pzz>кодогенератор, то и я смогу руками сгенерировать хороший код.
>
> Флаг в руки. У вас или комбинация феноменальной памяти и великолепное
> знание нюансов устройства современного процессора, или это наглядная
> демонстрация наивности Вашего подхода. Да, в феноменальную память и
> умение предсказывать конвейерные и суперскалярные эффекты в уме я не верю.

Я не сказал, что это просто. Я сказал, что это возможно.

Вы утверждаете, что _я_ лично этого сделать не смогу. Я не понимаю, как
Вы можете что-то утверждать про то, что я смогу, а что нет, если Вы меня
в глаза-то не видели, и тем более никогда со мной не работали.

> G> Хотите — проверьте сами .

> Pzz> Не хочу.
>
> И это правильно. Мешки ворочать — тяжелая физическая работа, недостойная
> благородного дона. Давайте посмотрим, как с ний справляются другие

Тяжелая физическая работа должна быть хорошо оплачена. Я уже вышел из
того детского возраста, когда я был готов потратить заметное время
только на то, чтобы что-то кому-то доказать.

Если Вы готовы заплатить мне денег за то, что я что-то перекодирую на
ассемблере, я готов рассмотреть Ваше предложение, хотя и без особого
удовольствия: я не любитель ассемблерного программирования.
Posted via RSDN NNTP Server 2.0
Re[49]: C++ vs ???
От: reductor  
Дата: 15.12.05 23:51
Оценка:
Здравствуйте, vdimas, Вы писали:


V>Понятно, прикольно... Вся фишка в туплах, и мы может строить произвольные по размерности туплы, так?


V>Просто я рассмтаривал код на OCalm с т.з. своих некоторых давних познаний Лиспа и Пролог. Т.е. записи "[]" и "pivot::rest ->" трактовал весьма однозначно. Хе, тогда все еще прикольнее, если туплы могут иметь произвольную размерность. Наворотить можно нехило


Естественно. Причем, не стоит забывать о том, что все может быть перечисляемым.
Например:
(* вариант из пустого значения или трехэлементного тупла *)
type 'a list = Nil | Cons of 'a * 'a list * 'a list

Кроме того, это могут быть не только туплы, а рекорда, массивы, опять же списки или даже функции:
# type 'a test = Test of ('a -> 'a);;
type 'a test = Test of ('a -> 'a)
# let x = Test (fun x -> x * x);;
val x : int test = Test <fun>
(* и тут же *)
# match x with Test x -> x 5;;
- : int = 25

А если еще вспомнить, что недавно в окамле появились полиморфные варианты (!!warning — вынос мозга — автоматические расширяемые типы без декларации):
# let y = `Test2 (fun y -> y * y * y);;
val y : [> `Test2 of int -> int ] = `Test2 <fun>
# match y with `Test2 y -> y 100;;
- : int = 1000000


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

Функция, которая в нем занимается трансформацией какой-нибудь шестимерной многосвязной структуры может занимать те же несколько строчек, что и quicksort.
Re[30]: Жульничество
От: Дарней Россия  
Дата: 16.12.05 03:14
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Либо я ничего не понимаю, либо я вообще ничего не понимаю, либо и то и другое, но короче моего asm-кода придумать просто нельзя.


похоже, автор сообщения страдает от обычного заблуждения неопытных программистов — о том, что более компактный код быстрее работает
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[32]: Жульничество?
От: pvgoran Россия  
Дата: 16.12.05 05:49
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> C>А вот тут полностью не согласен. Производительность ОЧЕНЬ важна для

>> C>многих настольных приложений, игр. Ну и для самой ОС.
>> Для игр по большому счету — нет. ~80% кода современных игр написаны на
>> Lua (и еще ~10% на всяких Python, Javascript etc.) — а как у Луа со
>> скоростью, можете там же взглянуть
C>Ну да. Яркий пример — Civilization IV. Большая часть написана на Питоне
C>и жрет 2Гб памяти.

И к тому же, говорят, тормозит довольно сильно.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[28]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 16.12.05 08:33
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Gaperton, Вы писали:


G>>Я вот, например, сейчас утверждаю: Intel C++ кардинально лучше текущей версии gcc в плане кодогенерации на платформе x86. В силу существенно более сложного кодогенератора — у него там полная модель интеловых процов внутри, которая почти все факторы учитывает,


GN>Intel на самом деле заточен под IA-64, и x86 там наследует некоторые ограничения его архитектуры. Например, все переходы зачем-то выровнены по границе 4 байта. Имеет смысл выравнивать лишь на 16. Но в остльном GCC далеко до него.


G>>с легкостью обходя в этом программиста на ассемблере.


GN>Ни разу такого не видел. Или речь о сравнении новичка в ассемблере с профессионалом С++?


А я видал. И один раз это случилось в моем присутствии. Каждый раз начинается одинаково — крутой системный программист смотрит ассемблер, удивляется глупости кодогенератора, который сгенерировал "какую-то очевидно неоптимальную фигню", и начинает править руками. После чего становится медленнее .

Хочешь посмотреть сам — почитай здесь — это весело и познавательно .
http://www.gamedev.ru/forum/?group=2&amp;topic=537&amp;page=6

G>>Да, я берусь утверждать, что вы не сможете обогнать IC++ при ручном кодировании на ассемблере на более-менее нетривиальном алгоритме — это за пределами человеческих возможностей. Хотите — проверьте сами .


GN>Под нетривиальным алгоритмом что понимать?


Что-нибудь достаточно сложное, длинное, и неделимое, чтобы перестало помещаться в кратковременной памяти. Начиная с некоторого порога сложности выполнить оптимизацию лучше специально заточенной модели человек не сможет технически — возможности мозга ограничены. Второй фактор — IC++ гораздо больше "знает" о нюансах устройства проца, чем программист. Например, он может учесть длины конвейров для каждой операции, и подготовить смесь операций так, чтобы оптимально нагрузить суперскалярные устройства. Естественно, он учитывает размер окна, в рамках которого производится параллельная выборка и выполнение инструкций, и много чего еще. В такой работе компьютер сильнее — факторов слишком много стало.

Пример алгоритма привести? Например — алгоритм Штрассена для умножения матриц, этого должно быть достаточно. Если этого будет мало — то возьмем обращение матриц, сделанное по принципу Штрассена. Ну, или решение систем линейных уравнений.
Re[29]: Жульничество
От: gear nuke  
Дата: 16.12.05 11:52
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>>>с легкостью обходя в этом программиста на ассемблере.


GN>>Ни разу такого не видел. Или речь о сравнении новичка в ассемблере с профессионалом С++?


G>А я видал. И один раз это случилось в моем присутствии. Каждый раз начинается одинаково — крутой системный программист смотрит ассемблер, удивляется глупости кодогенератора, который сгенерировал "какую-то очевидно неоптимальную фигню", и начинает править руками. После чего становится медленнее .


Это как раз случай, о котором говорю я. Сравниение машинной и ручной трансляции С++ в asm. Однако, можно и просто на asm написать.

G>Хочешь посмотреть сам — почитай здесь — это весело и познавательно .

G>http://www.gamedev.ru/forum/?group=2&amp;topic=537&amp;page=6

попрошу IronPeter'а прописать в свойствах проекта " /FAs " (ну или что там в IntelCompiler), чтоб в asm вставлялся исходный код, а то я голый ассемблер не перевариваю.


с учетом моих узких знаний ассемблера...


Да, действительно — о чём я и говорил.

Мораль. Никакой ассемблер/IntelC не поможет, если нет знания архитектуры.


GN>>Под нетривиальным алгоритмом что понимать?


G>Что-нибудь достаточно сложное, длинное, и неделимое, чтобы перестало помещаться в кратковременной памяти. Начиная с некоторого порога сложности выполнить оптимизацию лучше специально заточенной модели человек не сможет технически — возможности мозга ограничены.


Понятно. Чисто теоретический предел возможностей мозга.

G>Второй фактор — IC++ гораздо больше "знает" о нюансах устройства проца, чем программист.


Ну да. Программист ведь сам не изучает это.

G>Например, он может учесть длины конвейров для каждой операции, и подготовить смесь операций так, чтобы оптимально нагрузить суперскалярные устройства. Естественно, он учитывает размер окна, в рамках которого производится параллельная выборка и выполнение инструкций, и много чего еще. В такой работе компьютер сильнее — факторов слишком много стало.


Все эти факторы визуально показывают соответствующие средства анализа. Которыми никто не запрещает пользоваться.

G>Пример алгоритма привести? Например — алгоритм Штрассена для умножения матриц, этого должно быть достаточно. Если этого будет мало — то возьмем обращение матриц, сделанное по принципу Штрассена.


Никогда не сталкивался с этим. Погуглил — пока не вижу каких-то подводных камней. Вот Вы, как программист на ассемблере, скажите — а какие там могут быть сложности? Я пока чижу лишь одну — времени может больше уйти на написание.

G>Ну, или решение систем линейных уравнений.


Довольно размытое направление...
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[30]: Жульничество
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.12.05 13:00
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Все эти факторы визуально показывают соответствующие средства анализа. Которыми никто не запрещает пользоваться.

Как тут уже было показано, соответствующие средства анализа показывают далеко не все.
G>>Пример алгоритма привести? Например — алгоритм Штрассена для умножения матриц, этого должно быть достаточно. Если этого будет мало — то возьмем обращение матриц, сделанное по принципу Штрассена.

GN>Никогда не сталкивался с этим. Погуглил — пока не вижу каких-то подводных камней. Вот Вы, как программист на ассемблере, скажите — а какие там могут быть сложности? Я пока чижу лишь одну — времени может больше уйти на написание.

Совершенно верно. К сожалению, тут действует что-то вроде "специальной теории относительности". С точки зрения теории, можно добиваться произвольно хороших результатов за счет увеличения объема вложений. На практике, "скорость света" ограничена, т.е. некоторые теоретически достижимые результаты невоспроизводимы из-за превышения объема доступных инвестиций. Проще говоря, может не просто "времени больше уйти на написание", а "в 10000 раз больше времени уйти на написание". И ситуация только ухудшается, поскольку сложность растет, ресурсы, доступные компилятору, тоже растут, а скорость думания остается такой же. В итоге алгоритмы глобальной оптимизации, ранее невозможные из-за катастрофического расхода памяти и тактов, становятся настольной задачей.

Кстати, соответствующие средства анализа почему-то предлагаются не вместо IC++, а в дополнение к нему. Это означает, что владелец IC++ начнет с очень хорошего таргет кода и станет его профилировать при помощи тех самых средств, в то время как хардкорный ассемблерщик все еще будет пытаться достичь точки А. К моменту, когда IC++ + VTune позволят добраться до точки Б, ассемблерщик рискует умереть от истощения.

Надо уже привыкать к мысли, что есть задачи, которые не стоит взваливать на хрупкие человеческие плечи. Ну вот например X29, самолет с обратной стреловидностью крыла, устойчив в полете примерно так же, как пущенная задом наперед стрела. Никакой летчик не сможет управлять им. Компьютер успевает сделать все необходимые расчеты и выдать управляюшие воздействия. Причем учитывает поступающие от летчика команды так, что создает иллюзию, будто именно человек управляет самолетом. Бессмысленно спорить с этим и говорить, что человек мог бы вести лучше. Ага, мог бы, если б ему хватило времени. Увы.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[31]: Жульничество
От: gear nuke  
Дата: 16.12.05 14:04
Оценка:
Здравствуйте, Sinclair,

GN>>Все эти факторы визуально показывают соответствующие средства анализа. Которыми никто не запрещает пользоваться.

S>Как тут уже было показано, соответствующие средства анализа показывают далеко не все.

Хм, VTune не показывает что происходит с инструкциями в pipeline CPU? а CodeAnalyst — показывает Больше в общем-то ничего и не нужно.

S>С точки зрения теории, можно добиваться произвольно хороших результатов за счет увеличения объема вложений. На практике, "скорость света" ограничена, т.е. некоторые теоретически достижимые результаты невоспроизводимы из-за превышения объема доступных инвестиций. Проще говоря, может не просто "времени больше уйти на написание", а "в 10000 раз больше времени уйти на написание".


С этим никогда не буду спорить.
Изначально, кстати, я сказал вот что (относительно теоретической скорости OCaml ) —

Теоретически, самый хороший язык — это ассемблер. Знаете как на нём всё быстро будет работать после ручной оптимизации? А если автоматическую прикрутить? Почему же на нём не пишут? Может быть, люди хотят синицу в руках сейчас, а не журавля в небе к старости?

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

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

S>Кстати, соответствующие средства анализа почему-то предлагаются не вместо IC++, а в дополнение к нему.


VTune смотрел очень давно — довольно бесполезный для оптимизации ассемблера инструмент, не показывал влияния команд друг на друга (зависимости по данным и т.п.). Он больше для выявления узких мест в С++ заточен. Для асма хорош CodeAnalyst, но он только под AMD
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[30]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 16.12.05 17:46
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>>>Под нетривиальным алгоритмом что понимать?


G>>Что-нибудь достаточно сложное, длинное, и неделимое, чтобы перестало помещаться в кратковременной памяти. Начиная с некоторого порога сложности выполнить оптимизацию лучше специально заточенной модели человек не сможет технически — возможности мозга ограничены.


GN>Понятно. Чисто теоретический предел возможностей мозга.


Напротив, исключительно практический предел. Один из этих объективных пределов — объем т.н. оперативной памяти мозга. Никакая тренировка не позволит вам запоминать более 9 предметов, показанных одновременно не более чем на несколько секунд (исключаем жульничество вроде метода ассоциаций — он поззволит вам перечислить предметы но сведет на 0 полезную функцию оперативной памяти). Примерно таким же образом, и примерно по этой самой причине вы на практике не сможете провести глобальную оптимизацию лучше компьютера с учетом всех эффектов сложного запутанного (сильно связного) куска кода сравнительно небольшого размера — по моим примерным оценкам это будет в районе до тысячи команд. Вы будете постоянно ошибаться.

G>>Например, он может учесть длины конвейров для каждой операции, и подготовить смесь операций так, чтобы оптимально нагрузить суперскалярные устройства. Естественно, он учитывает размер окна, в рамках которого производится параллельная выборка и выполнение инструкций, и много чего еще. В такой работе компьютер сильнее — факторов слишком много стало.


GN>Все эти факторы визуально показывают соответствующие средства анализа. Которыми никто не запрещает пользоваться.


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

G>>Пример алгоритма привести? Например — алгоритм Штрассена для умножения матриц, этого должно быть достаточно. Если этого будет мало — то возьмем обращение матриц, сделанное по принципу Штрассена.


GN>Никогда не сталкивался с этим. Погуглил — пока не вижу каких-то подводных камней. Вот Вы, как программист на ассемблере, скажите — а какие там могут быть сложности? Я пока чижу лишь одну — времени может больше уйти на написание.


"Больше времени" — не то слово. Время на получение результата такого же качества, как IC++ у вас будет расти быстрее, чем объем кода. И начиная с некоторого, небольшого размера кода — оно начнет скачком сремится к бесконечности. Я вам дал Штрассена как раз как пример потому, что программа умножения матриц методом Штрассена на порядок сложнее и длиннее таковой для обычного метода. На порядок — это не фигура речи, это означает раз в десять.

G>>Ну, или решение систем линейных уравнений.

GN>Довольно размытое направление...
Хорошо. Методом LU-разложения, а будет мало — вариант Штрассена этого метода. За то время, пока вы будете оптимизировать последнюю программу, интел успеет выпустить следующее поколение процессоров и версию компилятора. Что означает, что практически, т.е. на практике, невозможно оптимизировать программу лучше IC++ начиная с некоторого объема.

Ваша теоретическая возможность справиться с этой работой за 100 лет, как вы говорите, никому не интересна, и никто ее всерьез рассматривать не будет — всех интересует "то, что они могут использовать в работе." Тема, опять же — для меня очевидна, очевидна на самом деле и вам (я вам уже говорил, что ошибаются все? Ничего, это можно пережить), так что давайте прекратим тратить место на жестком диске сервера RSDN.
Re[32]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 16.12.05 18:03
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Gaperton wrote:

>>
>> GN>Понятно. Чисто теоретический предел возможностей мозга.
>>
>> Напротив, исключительно практический предел. Один из этих объективных
>> пределов — объем т.н. оперативной памяти мозга. Никакая тренировка не
>> позволит вам запоминать более 9 предметов, показанных одновременно не
>> более чем на несколько секунд (исключаем жульничество вроде метода
>> ассоциаций — он поззволит вам перечислить предметы но сведет на 0
>> полезную функцию оперативной памяти). Примерно таким же образом, и
>> примерно по этой самой причине вы на практике не сможете провести
>> глобальную оптимизацию лучше компьютера с учетом всех эффектов сложного
>> запутанного (сильно связного) куска кода сравнительно небольшого размера
>> — по моим примерным оценкам это будет в районе до тысячи команд. Вы
>> будете постоянно ошибаться.

Pzz>Вообще говоря, человек разумный умеет таким образом организовывать свою

Pzz>работу с материалом, что ему не приходится одновременно держать в поле
Pzz>внимания (кстати, это важное различие — не в памяти, а во внимании)
Pzz>больше предметов, чем он может. Иначе трудно было бы понять, каким
Pzz>образом людям удается писать программы, состоящие более, чем из
Pzz>нескольких строк...

Видимо, вы плохо представляете себе, во что оптимизирующий компилятор превращает хорошо структурированную программу, написанную человеком разумным. Возьмите хотя бы MSVC 7.1, найдите алгоритм Штрассена, скомпилируйте его так, чтобы компилятор агрессивно инлайнил функции с максимальной оптимизацией, и посмотрите на результат. Вместо Штрассена подойдет другой нетривиальный численный метод из библиотек.

Это будет очень познавательно, и будет неплохой иллюстраций к важному преимуществу компьютера над человеком — ему совсем не обязательно держать в поле внимания 7+-2 объекта, в отличии от человека. Именно поэтому человек компьютеру и проиграет — такое ему будет создать очень сложно.
Re[33]: Жульничество
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.12.05 18:18
Оценка:
Gaperton wrote:
>
> Видимо, вы плохо представляете себе, во что оптимизирующий компилятор
> превращает хорошо структурированную программу, написанную человеком
> разумным. Возьмите хотя бы MSVC 7.1, найдите алгоритм Штрассена,
> скомпилируйте его так, чтобы компилятор агрессивно инлайнил функции с
> максимальной оптимизацией, и посмотрите на результат. Вместо Штрассена
> подойдет другой нетривиальный численный метод из библиотек.

Хорошо быть теоретиком...

Нам (не мне лично, но в команде, в которой я работал) приходилось
разбираться с производительностью софтверной реализации таких
криптографических алгоритмов, как RC2, TKIP, AES-CCMP, Michael.

Компилятор был MSVC 7.1 для Форточек, и какой-то gcc для Линуха.

Во-первых, выяснилось, что gcc далеко не всегда проигрывает MSVC. Я был,
признаться, сильно удивлен, когда MSVC проиграл gcc'у на (если не
ошибаюсь) реализации RC4. И после этого перестал доверять тестам
компиляторов, и вообще всякому поверхностному сравнению компиляторов.

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

В среднем, компилятор гораздо лучше человека знает особенности
процессора. Но ручная аллокация регистров получается гораздо лучше. И
если компилятору банально не хватает регистров (а их на x86 очень мало),
то даже наивная ассемблерная реализация получается получше.
Posted via RSDN NNTP Server 2.0
Re[35]: Жульничество
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.12.05 19:04
Оценка:
Gaperton wrote:
>
> Pzz>Хорошо быть теоретиком...
> Ну что вы. Где мне, "теоретику", до глубоких практиков, в активе которых
> не написанный самим, а /найденный в интернете /ассемблерный листинг
> микротеста, который работал "очень заметно" лучше, чем какая-то
> MSVC-шная реализация, а все потому, что на эту задачу в x86 по любому не
> хватает регистров, а значит кодогенератор MSVC никак не может быть лучше
> gcc, а тесты SPEC, составленные из реальных прикладных задач —
> поверхностны. На такое у меня контраргументов нет, признаю свое поражение.

Какой микротест, о чем Вы? Вам нужна быстрая реализация RC4. Что Вы
будете делать, напишете на C, и будете всем доказывать, что быстрее
невозможно?

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

И не превращайте, пожалуйста, текст моего ответа в кашу. То, что
написали Вы к тому, что написал я, имеет лишь одно отношение: слова
использованы примерно те же самые. Идите лучше, перемешайте слова в
своей программе, и посмотрите, как она будет после этого работать...

> Хорошо, короче, быть практиком, хорошо. Желаю вам и дальше оставаться

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

А Вы за что платите, за решение проблемы, или за потраченное время?

Впрочем, денег у Вас все равно нет, так что ответ не важен
Posted via RSDN NNTP Server 2.0
Re[36]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 16.12.05 19:36
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А Вы за что платите, за решение проблемы, или за потраченное время?


Pzz>Впрочем, денег у Вас все равно нет, так что ответ не важен


Не, маленько не так. Правильнее: денег я все равно не дам .
Re[31]: Жульничество
От: gear nuke  
Дата: 16.12.05 19:50
Оценка:
Здравствуйте, Gaperton,

GN>>Понятно. Чисто теоретический предел возможностей мозга.


G>Напротив, исключительно практический предел. Один из этих объективных пределов — объем т.н. оперативной памяти мозга. Никакая тренировка не позволит вам запоминать более 9 предметов

[]

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

GN>>Все эти факторы визуально показывают соответствующие средства анализа. Которыми никто не запрещает пользоваться.


G>Как уже говорили — не все.


Примеры будут?
Я вот могу привести примеры:
http://files.rsdn.ru/45067/sse.PNG
http://files.rsdn.ru/45067/pipeline.PNG
Ну и какой компилятор владеет подобной информацией?

G>И все равно — компилятор сделает это лучше вас и быстрее, так как он железный, и не путается. И начиная с некоторого размера, он вас превзойдет.


Я не поддаюсь убеждениям.
Аргументы с радостью выслушаю.

GN>>Никогда не сталкивался с этим. Погуглил — пока не вижу каких-то подводных камней. Вот Вы, как программист на ассемблере, скажите — а какие там могут быть сложности? Я пока чижу лишь одну — времени может больше уйти на написание.


G>"Больше времени" — не то слово. Время на получение результата такого же качества, как IC++ у вас будет расти быстрее, чем объем кода. И начиная с некоторого, небольшого размера кода — оно начнет скачком сремится к бесконечности.


Стоп. Про время я уже говорил.
Ответа на вопрос так и нет.

А вот я могу привести элементарный пример, когда компилятор идёт лесом.
Проверить n&gt;30 float-ов на принадлежность интервалу
Автор: sch
Дата: 01.09.05

решение
Автор: gear nuke
Дата: 01.09.05

Здесь нет никакого ассемблера.
Может ли компилятор принимать подобные решения сам?
С теорией я плохо знаком, но практика говорит — нет.

G>Ваша теоретическая возможность справиться с этой работой за 100 лет, как вы говорите, никому не интересна, и никто ее всерьез рассматривать не будет — всех интересует "то, что они могут использовать в работе." Тема, опять же — для меня очевидна, очевидна на самом деле и вам (я вам уже говорил, что ошибаются все? Ничего, это можно пережить), так что давайте прекратим тратить место на жестком диске сервера RSDN.


Вы опять повторяете мои же слова своим языком.

Теоретически, самый хороший язык — это ассемблер. Знаете как на нём всё быстро будет работать после ручной оптимизации? А если автоматическую прикрутить? Почему же на нём не пишут? Может быть, люди хотят синицу в руках сейчас, а не журавля в небе к старости?


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

Кстати, если Вы не забыли — отквоченное говорилось исключительно, что бы показать, что теоретическое преимущество OCaml перед С++ никого не интересует. Теперь мне даказывается, что никого не интересует теоретическое преимущество ассемблера. Браво!
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[37]: Жульничество
От: gear nuke  
Дата: 16.12.05 19:54
Оценка:
Здравствуйте, Gaperton,

Pzz>>Впрочем, денег у Вас все равно нет, так что ответ не важен


G>Не, маленько не так. Правильнее: денег я все равно не дам .


Ну, если challenge будет интересным, можно и без денег. Щастье же не в них
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: C++ vs ???
От: alexeiz  
Дата: 17.12.05 11:16
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, alexeiz, Вы писали:


CS>>>>>D как язык для UI лучше чем C++ скажем в разы. Это я со всей отвественностью

CS>>>>>могу сказать.

A>>>>А причины не трудно описать? По пунктам и конкретно. А то не очень-то верится.


CS>>>1) GC. GC helps a lot managing DOM/windows/elements structure. This is huge in fact. Simplifies significantly code. Makes it clean and compact thus more robust.


A>>Мне кажется, что это просто аргумент в пользу GC, а не конкретно GC для программирования UI. В UI обычно у каждого элемента есть свой owner, который его и освобождает. Так устроено в MFC, QT, да и даже в старом Motif'е. Может быть внутри фреймвока и легче отслеживать время жизни элементов с помощью GC, но для пользователя это никогда не было проблемой.


CS>owner — да но так же есть и reference на parent. Т.е. имеем циклическую ссылку

CS>которую естесственным образом в C++ не решить.

Я не знаю есть ли проблема. Покажи мне, например, где данная проблема проявляется в MFC (MFC приводится просто как пример UI библиотеки на C++).


A>>Кстати, о проблемах с GC в UI. Бывает и так: пользователь открывает новое окно/диалог, который отъедает кучу ресурсов. Пользователь закончил свою работу с окном, закрыл его. А ресурсы всё ещё в памяти. GC ни сном ни духом не ведает, что при закрытии окна нужно что-то освободить. А пользователь жалуется. Мол окно уже закрыто, почему программа до сих пор столько памяти держит? И вот GC ждёт пока другое такое ресурсопрожорливое окно откроется, тогда он сразу спохватится, начнёт освобождать. А окно в это время тормозит.


CS>Какое отношение имеет "ресурсопрожорливое окно" к GC?


GC не имеет представления о usage pattern'е. Его работа в данном примере интерферирует с работой пользователя.


A>>Да и на C++ это дело можно сделать, так как GC имеются, а в большинстве случаев smart pointer'ов дольжно быть достаточно.


CS>В теории да. На практике нет.


И в теории и на практике. Существование C++ UI библиотек тому доказательство.

A>>Поэтому тут по возможностям D не перекрывает C++.


CS>Перекрывает именно наличием встроенного GC.


Для C++ есть GC, если тебе это необходимо. Наличие встроенного GC в D не является приемуществом.

CS>>>2) Closures/Delegates. This in fact is not so critical as I am using sinking/bubbling. Let's say it is nice to have feature — allows to simplify code and make it more understandable an regular.


A>>boost::function, boost::signal? win32 gui generics использует этот же механизм. C++ не нужно иметь delegates в языке, т.к. они есть в библиотеке.


CS>к сожалению они не завязяны на GC.

CS>Система UI объектов и их ссылок как правило имеет очень сложную струтуру с циклами.
CS>Иногда в принципе нельзя отследить кто кого держит.
CS>Для таких ситуаций GC это то что доктор прописал. Зело упрощает все эти танцы со смарт указателями.

Мне очень сильно кажется, что у тебя просто архитектура библиотеки опирается на GC. Конечно, ты не представляешь, как твою библиотеку можно реализовать без GC, потому что ты изначально проектировал её, расчитывая на GC, как на один из базовых компонент.


CS>>>3) Properties (getters/setters). Ideally reduces twice methods you need to remember. Again, it is about simplification.


A>>Если бы ты упомянул свойства для создания компонент с их последующем использовании в дизайнере, то это бы имело смысл. А иначе свойства представляют спорный вопрос, опять же не имеющий отношение к UI per se.


CS>Дело вкуса конечно.


CS>>>4) There are more features in D helping UI development e.g. mixins and templates parametrized by character strings, etc., I'll skip them here.


A>>Миксины есть в C++. Curiously recurring template pattern, policies — это всё имеет отношение к миксинам.


CS>Это не те mixins. Вернее не только те.


Я видел примеры, которые ты приводил в одной из дискуссий про D. Они достаточно близко реализумы на C++. Может быть ты предпочитаешь мыслить о миксинах как-то по другому, но для меня связь с приведёнными концепциями C++ очевидна.
Re[32]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 19.12.05 18:45
Оценка:
Здравствуйте, gear nuke, Вы писали:

G>>Напротив, исключительно практический предел. Один из этих объективных пределов — объем т.н. оперативной памяти мозга. Никакая тренировка не позволит вам запоминать более 9 предметов

GN>[]

GN>Да, это я и называю — теория. Практика — это когда человек сам пишет, и делает выводы.

Называйте как хотите. Практика — это когда человек учавствовал в разработке комплексов размером от миллиона строк и выше, причем это было не приложение баз данных. И в поддержке подобных комплексов. Представляет себе на практике, короче, где именно лежит эта пресловутая граница возможностей мозга, и потому не болтает попусту. А форумную болтовню и умствования я называю одним нецензурным словом — на п начинается на ж кончается.

GN>Я не поддаюсь убеждениям.

GN>Аргументы с радостью выслушаю.
Помилуйте, я не собираюсь вас ни в чем убеждать — думайте что хотите .

GN>А вот я могу привести элементарный пример, когда компилятор идёт лесом.

GN>Проверить n&gt;30 float-ов на принадлежность интервалу
Автор: sch
Дата: 01.09.05

GN>решение
Автор: gear nuke
Дата: 01.09.05

GN>Здесь нет никакого ассемблера.
Пример не в эту ветку. Во-первых, потому, что здесь нет никакого ассемблера.

GN>Может ли компилятор принимать подобные решения сам?

В стремлении победить в споре, вы начинаете приписывать собеседнику собственные фантазии. Я не понимаю с кем вы спорите — судя по этому пассажу — не со мной точно. Найдите какого-нибудь идиота, который будет утверждать что компилятор способен на алгоритмические оптимизации лучше человека (пусть даже низкоуровневые), и спорьте с ним — я такой глупости не говорил.

GN>С теорией я плохо знаком, но практика говорит — нет.

Так ознакомьтесь с "теорией" — и не будете путать алгоритмическую оптимизацию с оптимизациями при кодогенерации. Теория еще не вредила ни одному практику. А вот плохое с ней знакомство — вредит постоянно. Как в работе, так и при трудоустройстве.
Re[33]: Жульничество
От: gear nuke  
Дата: 20.12.05 23:01
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Называйте как хотите. Практика — это когда человек учавствовал в разработке комплексов размером от миллиона строк и выше, причем это было не приложение баз данных. И в поддержке подобных комплексов. Представляет себе на практике, короче, где именно лежит эта пресловутая граница возможностей мозга, и потому не болтает попусту. А форумную болтовню и умствования я называю одним нецензурным словом — на п начинается на ж кончается.


То есть, Вы участвовали в подобных проектах, написанных полностью на ассемблере? Мы же о нём говорим.

GN>>А вот я могу привести элементарный пример, когда компилятор идёт лесом.

GN>>Проверить n&gt;30 float-ов на принадлежность интервалу
Автор: sch
Дата: 01.09.05

GN>>решение
Автор: gear nuke
Дата: 01.09.05

GN>>Здесь нет никакого ассемблера.
G>Пример не в эту ветку. Во-первых, потому, что здесь нет никакого ассемблера.

А Вы в понятие ассемблер что вкладываете? mov eax, ebx? — дык это просто мнемоники, этимим мнемониками можно и С программу переписать, только в последнем случае компилятор С скорее всего победит.

Ассемблер предполагает использование машинно-зависимых представлений данных и операций над ними. Что и было проделано в моём случае. Ну что ж, внешне всё это закомуфлировано под С, но за такой код могут и руки оторвать!


И, кстати, возвращаясь к OCaml — как там у него с подобными трюками?

GN>>Может ли компилятор принимать подобные решения сам?

G>В стремлении победить в споре, вы начинаете приписывать собеседнику собственные фантазии.

Я ни о чём не спорю. Подхватил Вашу идею насчёт теоретического преимущества OCaml по скорости, начал проводить параллели, что бы показать, что в теории не только у OCaml всё хорошо.

G>Я не понимаю с кем вы спорите — судя по этому пассажу — не со мной точно. Найдите какого-нибудь идиота, который будет утверждать что компилятор способен на алгоритмическиеоптимизации лучше человека (пусть даже низкоуровневые), и спорьте с ним — я такой глупости не говорил.


Нет там никакой алгоритмической оптимизации. Даже операции сохранились теже. Изменилось только "представление данных", отдаваемых этим операциям. Замена || на | — вот это не может компилятор делать сам — из-за свойств языка. Хотя в простейших случаях — делает.

Подчеркну — в подобных (но более простых) случаях компилятор (именно IC++C) делает аналогичную оптимизацию сам. Я это видел. Так что в теории как раз похоже, что всё Ок. Но на практике не всегда работает.

GN>>С теорией я плохо знаком, но практика говорит — нет.

G>Так ознакомьтесь с "теорией" — и не будете путать алгоритмическую оптимизацию с оптимизациями при кодогенерации. Теория еще не вредила ни одному практику. А вот плохое с ней знакомство — вредит постоянно. Как в работе, так и при трудоустройстве.

С какой теорией предлагаете ознакомиться, можно ключевые слова? А то совет очень похож на "как жить дальше"
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[36]: Жульничество
От: Gaperton http://gaperton.livejournal.com
Дата: 22.12.05 19:59
Оценка:
G>Да, ассемблером я называю именно ассемблер в обычном понимании этого слова, а не что-нибудь другое. G>Программирование на уровне мнемоник, регистров, и адресов.

>Никто не мешает вместо мнемоники mov использовать знак = по крайней мере, в мире x86.

>А вот операции с флагами, добавил бы.
>Программируя только на уровне "мнемоник, регистров, и адресов" человек находится на уровне С.
Ну вот, в пылу дискуссии вы дошли наконец до совершенно некорректного высказывания. В соответствии с тактикой ведения споров, популярной здесь, мне следует теперь методично и неторопливо вас порвать, не так ли? А вам полагается петлять, менять тему, и делать вид, что вы что-то настолько умное имели в виду, что понять это никак невозможно .

Короче, это все несложно проделать, но давайте опустим это. Объяснять ничего больше вам не буду. Потому как мне надоел бессмысленный разговор, мне надоело отвечать на дикие высказывания, и надоели ваши попытки доказать, что вы умнее меня, компилятора IC++, и всех сразу вместе взятых.
Re[37]: Жульничество
От: gear nuke  
Дата: 22.12.05 21:41
Оценка:
Здравствуйте, Gaperton,

G>>Программируя только на уровне "мнемоник, регистров, и адресов" человек находится на уровне С.

G>Ну вот, в пылу дискуссии вы дошли наконец до совершенно некорректного высказывания.

Что же в нём некорректного с Вашей точки зрения? Всё выделенное делается в С, в асме можно много больше

G>В соответствии с тактикой ведения споров, популярной здесь, мне следует теперь методично и неторопливо вас порвать, не так ли? А вам полагается петлять, менять тему, и делать вид, что вы что-то настолько умное имели в виду, что понять это никак невозможно .


Прошу обратить внимание на выделенное...

G>Короче, это все несложно проделать, но давайте опустим это. Объяснять ничего больше вам не буду. Потому как мне надоел бессмысленный разговор, мне надоело отвечать на дикие высказывания, и надоели ваши попытки доказать, что вы умнее меня, компилятора IC++, и всех сразу вместе взятых.


А теперь вернёмся к истокам
Автор: Gaperton
Дата: 14.12.05
бессмысленного спора — я был обвинён в подтасовке результатов, т.к. использовал не какой-то там абстрактный С++ компилятор, который теоретически проигрывает OCaml, а вполне конкретный, который выигрывает.

Вместо аргументации своей точки зрения, Вы старательно начали доказывать, что С++ компиляторы производят код гораздо лучше написанного вручную. Ok, поиграли в эту игру...

И в качестве "логического завершения" спора применён хитрый тактический ход — выше выделил его часть.
Очень подходит под начало:

Сравнивайте gcc с OCamlopt — так будет честно


People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.