Здравствуйте, ononim, Вы писали: O>так случилось что у меня нашелся делфи 6, и вот: http://files.rsdn.org/69464/delphi6_float.png
Да, код чуууточку получше, чем я помню по 1999му году. Научились применять стек в пределах одного выражения При этом вместо FLD ST(0)/FMUL, выполняется FMUL c memory location, что хуже по пропускной способности, несмотря на кэш.
Кстати, если вас не затруднит — можете скомпилировать вот такой вариант кода?
s := a*a;
s := t + b*b;
s := t + c*c;
s := Sqrt(s);
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Kocur, Вы писали:
K>Помню 1998 год. Тогда процентов 80 (если не больше) знакомых писали на Delphi.
Сильно до. Когда купила им нафиг не нужный Ashton-Tate (1991).
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, ononim, Вы писали: O>>так случилось что у меня нашелся делфи 6, и вот: http://files.rsdn.org/69464/delphi6_float.png S>Да, код чуууточку получше, чем я помню по 1999му году. Научились применять стек в пределах одного выражения При этом вместо FLD ST(0)/FMUL, выполняется FMUL c memory location, что хуже по пропускной способности, несмотря на кэш.
Ничего они не научились, просто в этом примере аргументы имеют тип double, который может быть непосредственно использован как memory location в FPU инструкциях.
Если поменять на Extended, получится та же хрень с сохранением в память...
Здравствуйте, Sinclair, Вы писали:
S>Всё верно. Смолток умер под гнётом собственной жадности — плюсовый компилятор было решено распространять бесплатно, а смоллток был настолько прекрасен, что за него ломили вполне ощутимую сумму. S>Ну, вот в итоге законопослушные западные разработчики и перебежали на значительно менее совершенные среды.
Вроде Страуструп подавал идею С++ — как близкий к железу C без накладных расходов медленного Смоллтока. Про платность Смоллтока он не упоминал. Это уже потом пошла тема "дешевле докупить плашку памяти, чем искать баги порчи памяти у C++". С++ был прекрасен вначале, то того, как из него нагородили противоречивый костыле-всемогутор.
Здравствуйте, Артём, Вы писали:
Аё>Вроде Страуструп подавал идею С++ — как близкий к железу C без накладных расходов медленного Смоллтока. Про платность Смоллтока он не упоминал. Это уже потом пошла тема "дешевле докупить плашку памяти, чем искать баги порчи памяти у C++". С++ был прекрасен вначале, то того, как из него нагородили противоречивый костыле-всемогутор.
А когда это было? Просто самый первый эффективный сборщик мусора впервые появился именно в Смолтоке, и это было где-то в районе 84-85 годов. Пишу по памяти. Сейчас это обычно называется сборкой на основе поколений, а тогда сами создатели назвали его как-то похоже на "эфемерную" сборку (ephemerial). Точного названия не помню. Прочитал в одной книге по лиспу.
Возможно, что Страуструп говорил о более раннем сборщике мусора, который действительно был медленным.
K>Где Борланд свернул не туда? Почему просрали такой ВЕЛИКИЙ продукт?
Продукт просрали примерно в тот момент, когда коллектив безумно продуктивных творцов с горящим взором сменился на резиновоголовых манагеров, которых ничего, кроме стрижки купонов, в продукте не интересует (Inprise, Embarcadero, и прочие корпорастные бизнес-сущности).
S>Его используют меньше 2%
Что тоже чрезвычайно дофига, на минуточку. Вполне может так статься, что в абсолютных цифрах Дельфя ничего и не потеряла, а просто-напросто размылась доля: с 1998-го программизм разросся как на дрожжах. От нишевой профессии фанатиков до вторых юристов-экономистов, коих наплодили, как собак нерезанных.
Здравствуйте, dsorokin, Вы писали:
D>А когда это было? Просто самый первый эффективный сборщик мусора впервые появился именно в Смолтоке, и это было где-то в районе 84-85 годов. Пишу по памяти. Сейчас это обычно называется сборкой на основе поколений, а тогда сами создатели назвали его как-то похоже на "эфемерную" сборку (ephemerial). Точного названия не помню. Прочитал в одной книге по лиспу.
Там дело не в сборщике мусора, а в гомоиконичности. То есть когда Кей говорил "всё есть объект" он имел в виду "всё есть объект". Безо всяких исключений.
В частности, чтобы сложить три и четыре в Смолтоке мы посылаем объекту "три" сообщение "прибавь" с параметром "четыре", а в ответ нам приезжает результат-объект "7".
Ну, ок, "сообщения" там были вызовами методов, а не шинным обменом между акторами, но идея сохраняется — нет никаких "нативных целых", есть ссылки на объект-число.
Примерно как джавовские референс-типы Integer или Float, или забоксенные дотнетовые value-типы.
Статическая типизация сего затруднена потому, что классы — тоже объекты, и мы запросто можем "на лету" добавить к классу "целое число" новый метод.
И вообще у любого класса есть метод "обработать неизвестное сообщение".
Поэтому написать какой-то магический джит, который из вот этих вот вызовов виртуальных методов сделает эффективный ассемблерный код с MOV EAX, 3; ADD EAX, 4 — крайне тяжело.
В итоге, эффективность смоллтока приближается к джаваскрипту, причём снизу (потому что первый смолток занимал пару тысяч строк и был написан отцами-основателями за несколько недель, а в современные JS-машины вбуханы тыщи человеко-лет).
D>Возможно, что Страуструп говорил о более раннем сборщике мусора, который действительно был медленным.
Страуструп в первую очередь говорил о возможности не платить за абстракции, которыми не пользуешься.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, zx zpectrum, Вы писали:
z> K>Где Борланд свернул не туда? Почему просрали такой ВЕЛИКИЙ продукт?
z> Продукт просрали примерно в тот момент, когда коллектив безумно продуктивных творцов с горящим взором сменился на резиновоголовых манагеров, которых ничего, кроме стрижки купонов, в продукте не интересует (Inprise, Embarcadero, и прочие корпорастные бизнес-сущности).
Чего это ты Inprise с Embarcadero в один ряд поставил? Inprise это тупо самопереименование Борланда, которое они расшифровывали, как Integration Enterprise. Через пару лет переименовались обратно (клоуны штопаные). Embarcadero была и есть девелоперской компанией, которая разрабатывала инструментарий для БД на продуктах Борланда. К слову, Embarcadero привнесла в Delphi очень много нового: и серьезное развитие языка и покрытие платформ. И, вроде как, не намерены останавливаться
Здравствуйте, zx zpectrum, Вы писали:
ZZ>Что тоже чрезвычайно дофига, на минуточку. Вполне может так статься, что в абсолютных цифрах Дельфя ничего и не потеряла, а просто-напросто размылась доля: с 1998-го программизм разросся как на дрожжах.
нет-нет, очень много программистов ушли с Delphi, тысячи
Здравствуйте, Michael7, Вы писали:
M>Но мы ведь говорим про компанию, которая началась как разработчик удобных компиляторов и IDE и представляется, что для лидирующего положения на рынке необходимо было выпускать актуальные для нового железа и софта средства. А вот с этим у борланда что-то пошло не так. Хотя, надо отметить, что Borland C++ был заметно более актуализированным и даже, емнип, уже в 1992-м имелись дополнения для создания 32-битных программ для MS-DOS, чего не стали делать для Паскаль-среды.
В те времена у Borland были едва ли не лучшие IDE, я всего лет 20 назад послдний раз пользовался Turbo C. И TurboVision по своим временам был весьма удобным. А вот для настоящего GUI у них как-то не получилось сделать что-то достойное. Может, по части IDE у них что-то и бло достойное, но полноценно не поддреживало ни один годный toolkit. Я ещё помню времена, когда скачать из inet'а, скжаем, netbeans было чем-то нереальнм, а на CD'юках как раз можно было найти самые разные товрения Borland. Но я хорошо помню, что на их альтернативе написать ничего толком невозможно было. Тогда, кстати, на java можно было делать applets для web ui, а CSS в Web ещё едва набирал популярность, AJAX — ещё только в проекте.
Это я уже видел (не уверен, что там была включена оптимизация). Я про код спрашиваю, потому-что он не эквивалентен предыдущему, где все вычисления делаются в одном выражении.
Здравствуйте, Ilya81, Вы писали:
I>В те времена у Borland были едва ли не лучшие IDE, я всего лет 20 назад послдний раз пользовался Turbo C. И TurboVision по своим временам был весьма удобным. А вот для настоящего GUI у них как-то не получилось сделать что-то достойное.
У них для GUI OWL (СОВА) была, в принципе, вполне можно было на нём что-то делать, я даже пробовал. Я, правда, поздно с ней познакомился, вышел C++ Builder 1.0, там уже VCL была
I>Может, по части IDE у них что-то и бло достойное, но полноценно не поддреживало ни один годный toolkit.
Вот эту фразу вообще не понял
I>Я ещё помню времена, когда скачать из inet'а, скжаем, netbeans было чем-то нереальнм, а на CD'юках как раз можно было найти самые разные товрения Borland. Но я хорошо помню, что на их альтернативе написать ничего толком невозможно было. Тогда, кстати, на java можно было делать applets для web ui, а CSS в Web ещё едва набирал популярность, AJAX — ещё только в проекте.
procedure Test;
var
a, b, c, s : Double;
begin
a := Random;
b := Random;
c := Random;
s := a * a;
s := s + b * b;
s := s + c * c;
s := Sqrt(s);
WriteLn(s);
end;
Project1.dpr.13: begin
0000000000424F80 4883EC48 sub rsp,$48
0000000000424F84 660F7F7C2430 movdqa dqword ptr [rsp+$30],xmm7
0000000000424F8A 660F7F742420 movdqa dqword ptr [rsp+$20],xmm6
Project1.dpr.14: a := Random;
0000000000424F90 E86B03FEFF call Random
0000000000424F95 660F29C6 movapd xmm6,xmm0
Project1.dpr.15: b := Random;
0000000000424F99 E86203FEFF call Random
0000000000424F9E 660F29C7 movapd xmm7,xmm0
Project1.dpr.16: c := Random;
0000000000424FA2 E85903FEFF call Random
Project1.dpr.18: s := a * a;
0000000000424FA7 660F28CE movapd xmm1,xmm6
0000000000424FAB F20F59CE mulsd xmm1,xmm6
Project1.dpr.19: s := s + b * b;
0000000000424FAF 660F28D7 movapd xmm2,xmm7
0000000000424FB3 F20F59D7 mulsd xmm2,xmm7
0000000000424FB7 F20F58CA addsd xmm1,xmm2
Project1.dpr.20: s := s + c * c;
0000000000424FBB 660F28D0 movapd xmm2,xmm0
0000000000424FBF F20F59D0 mulsd xmm2,xmm0
0000000000424FC3 F20F58CA addsd xmm1,xmm2
Project1.dpr.21: s := Sqrt(s);
0000000000424FC7 660F29C8 movapd xmm0,xmm1
0000000000424FCB E88005FEFF call Sqrt
0000000000424FD0 660F29C1 movapd xmm1,xmm0
Project1.dpr.23: WriteLn(s);
0000000000424FD4 488B0D45800000 mov rcx,[rel $00008045]
0000000000424FDB E82018FEFF call @Write0Ext
0000000000424FE0 4889C1 mov rcx,rax
0000000000424FE3 E83818FEFF call @WriteLn
Project1.dpr.24: end;