На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (11) « Первая ... 5 6 [7] 8 9 ... Последняя » все  ( Перейти к последнему сообщению )  
> Python vs Delphi
    Цитата Ho Im @
    А сколько времени мессир писали свой класс?
    Думаю, что не больше, чем то же самое делал(и) автор(ы) Python'а :)
      Возможно, но почему тогда каждый третий плюсовик должен писать свой велосипед для bignum'ов? К C++ батарейки не прилагают, что ли?
        Цитата Ho Im @
        Возможно, но почему тогда каждый третий плюсовик должен писать свой велосипед для bignum'ов?
        Зачем? Бери мой класс и пользуйся. :) Не нравится мой класс - возьми что-нибудь другое. Выбор - это хорошо.
        Откуда берется это "должен"? Может, но не обязан.
        А "каждый третий плюсовик питонщик должен писать свой велосипед для" вычисления синуса?
        Сообщение отредактировано: trainer -
          Цитата trainer, 11.08.2006, 10:48:34, 1214679
          Точное значение 1754!

          что-то 436 нулей в конце подозрительны... по идее, не должно бы таких чисел получиться .

          Цитата trainer, 11.08.2006, 10:48:34, 1214679
          Так что и Python и Delphi дружно сливают C++
          :yes:
            Цитата Змей(Чёрный) @
            что-то 436 нулей в конце подозрительны... по идее, не должно бы таких чисел получиться .
            А ты прикинь, сколько раз там происходит умножение на числа, кратные 10 и пары чисел, кратных 5 и 2.
              Цитата Змей(Чёрный) @
              что-то 436 нулей в конце подозрительны... по идее, не должно бы таких чисел получиться .

              А ты посчитай на бумажке.

              Добавлено
              trainer, я худший садист :)
                По вашему для Дельфи нет модулей для больших чисел? Хе :D
                  Даешь войну "У кого больше библиотек"! :D
                    Цитата Ho Im, 11.08.2006, 12:55:01, 1214951
                    А ты посчитай на бумажке.

                    хм... как-нить потом... В принтере последние два листочка, а туалетной всего три рулончика осталось... не хватит...
                      Цитата Romkin @
                      Писать так - моветон в Delphi :) Там принято и создавать, и уничтожать объект в одном блоке (в одной процедуре). Либо, как в VCL, вести список компонентов.
                      Но можно так

                      procedure my_func2(mc: MyClass); begin ... end;
                      begin
                      with my_func do
                      try
                      ... //работа с результатом функции
                      finally
                      Free; //Освободили
                      end;
                      end.


                      Второй путь - интерфейсы встроены, хочешь отслеживание области действия и множественное наследование, используешь их. Только как-то и не надо. Никогда мне не нужны были "обходы ограничений" :)

                      э-ээ.. Этот код отличается от моего. Нужно передать в my_func2 то, что нам вернула my_func, а затем это удалить. Интересно, как это будет выглядеть с with? И сколько строчек он будет занимать? А если аргументов --- не один, а пять?
                      Цитата Smike @
                      Есть, представь себе. Интерфейсные классы, уничтожаются автоматически при выходе из зоны видимости.

                      Можно примерчик?
                        Цитата trainer @
                        Даешь войну "У кого больше библиотек"! :D

                        /me вспомнил CPAN и понял, что сейчас самое время появиться перловщикам
                        /me еще напряг серое вещество и вспомнил Java
                        /me посинел от натуги, покраснел от гнева и понял, что C# доступно такое, о чем все перечисленные выше могут только мечтать
                        /me считает, что плюсовикам лучше вообще не влезать в спор "у кого больше библиотек", т. к. все плюсовые библиотеки либо костыли для действий, не предусмотренных стандартом (как boost), либо просто врапперы над сишными; категория реально нужных вещей вроде Qt очень немногочисленна
                          Итак как я проводил соревнования Python vs Delphi.
                          Цель измерить время работы одного алгоритма на Python и Delphi.
                          Платформа
                          OS: Windows XP (Build 2600: Service Pack 2)

                          Borland Delphi Enterprise version 7.0 (Build 4.453)
                          Кидаем компонент memo на пустую форму. Дальше собственно
                          ExpandedWrap disabled
                            procedure TForm1.FormCreate(Sender: TObject);
                            var
                              Begin_Time, End_Time: TDateTime;
                              x,y,z: Integer;
                              r:real;
                             
                            begin
                              Begin_Time:=Time;
                              for x:=0 to 100 do
                                for y:=0 to 1000 do
                                  for z:=0 to 100 do
                                    r:=sin(x)+cos(y)+sin(z);
                              End_Time:=Time;
                              memo1.Lines.Add('Begin_Time '+TimeToStr(Begin_Time));
                              memo1.Lines.Add('End_Time '+TimeToStr(End_Time));
                              memo1.Lines.Add('All_Time '+TimeToStr(End_Time-Begin_Time));
                            end;


                          Результат:
                          ExpandedWrap disabled
                            Begin_Time 14:31:06
                            End_Time 14:31:09
                            All_Time 0:00:03


                          Python 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC v.1200 32 bit (Intel)] on win32
                          Программа. В циклах "+ 1" изза "дощечек в заборе"...
                          ExpandedWrap disabled
                            # -*- coding: cp1251 -*-
                            from time import gmtime, strftime, localtime
                            from math import sin,cos
                            print "Begin_Time ", strftime("%a, %d %b %Y %H:%M:%S +0000", localtime())
                            for x in range (0,100 + 1):
                                for y in range (0,1000 + 1):
                                    for z in range (0,100 + 1):
                                        r=sin(x)+cos(y)+sin(z)
                            print "End_Time ", strftime("%a, %d %b %Y %H:%M:%S +0000", localtime())


                          О функциях:
                          Цитата
                          strftime( format)
                          Return a string representing the date, controlled by an explicit format string. Format codes referring to hours, minutes or seconds will see 0 values. See the section on strftime() behavior.

                          localtime( [secs])
                          Like gmtime() but converts to local time. The dst flag is set to 1 when DST applies to the given time. Changed in version 2.1: Allowed secs to be omitted.


                          Результат:
                          ExpandedWrap disabled
                            Begin_Time  Fri, 11 Aug 2006 14:41:02 +0000
                            End_Time  Fri, 11 Aug 2006 14:41:30 +0000
                            All_Time  0:00:28


                          Таким образом со счетом (0:00:03) против (0:00:28) те 3 сек. против 28 сек. победил (фанфары барабаны) Delphi ;) Ура товарищи!

                          Цитата Smike @
                          В Дельфи успешно вычислен факториал:
                          1754!=1.97926189010501006E4930

                          Smike во первых я использовал исключительно целый тип это раз у тебя он никак не целый смотри сам "1>>>.<<<97926189010501006E4930" Это что такое? Во вторых я для расчета факториала не использовал ни функций ни циклов ни одного модуля не потревожил :tong:
                          И сама функция факториала - лямбда рекурсия в одну строку ;)

                          Цитата Ho Im @
                          Цитата
                          >>> def factorial(x):
                          ... a = 1
                          ... for i in range(1,x+1):
                          ... a = a * i
                          ... return a

                          Ho Im если пользоваться твоим (классическим) факториалом тогда максимальный факториал для Python равен 3628799! для факториала через лямда форму (по моему) 993! предел... Странно надо разобраться почему так. :blink:
                          PS С факториалом я не туда поглядел!
                          Сообщение отредактировано: best_lamer -
                            Цитата mo3r @
                            Этот код отличается от моего. Нужно передать в my_func2 то, что нам вернула my_func, а затем это удалить

                            Сори, я твой код просто не понял. Но так как ты хочешь - просто не делают. Объект не уничтожают в функции, если он пришел как параметр, это уж слишком :)
                            Принял объект от MyFunc, передал в MyFunc2, она что-то слелала - вот и уничтожай. Понятно, нужна переменная. И что? :)

                            Цитата mo3r @
                            Цитата (Smike @ Сегодня, 10:39)
                            Есть, представь себе. Интерфейсные классы, уничтожаются автоматически при выходе из зоны видимости.

                            Можно примерчик?


                            Да сколько угодно :)
                            ExpandedWrap disabled
                              type
                                IFoo = interface
                                  procedure FooFoo;
                                end;
                               
                                //Реализация
                                TFoo = class(TInterfacedObject, IFoo)
                                protected
                                  procedure FooFoo;
                                public
                                  destructor Destroy; override; //Для иллюстрации даем сообщение
                                end;
                               
                              implementation
                               
                              { TFoo }
                               
                              destructor TFoo.Destroy;
                              begin
                                ShowMessage('Destroy');
                                inherited;
                              end;
                               
                              procedure TFoo.FooFoo;
                              begin
                                ShowMessage('Foooo! :)');
                              end;
                               
                              //Пример вызова
                               
                              procedure TForm1.Button1Click(Sender: TObject);
                              var
                                Foo: IFoo;
                              begin
                                Foo := TFoo.Create;
                                Foo.FooFoo;
                              end;

                            Или мне, по традиции, привести полное консольное приложение? :lool:
                            ExpandedWrap disabled
                              program Project1;
                               
                              {$APPTYPE CONSOLE}
                               
                              type
                                IFoo = interface
                                  procedure FooFoo;
                                end;
                               
                                //Реализация
                                TFoo = class(TInterfacedObject, IFoo)
                                protected
                                  procedure FooFoo;
                                public
                                  destructor Destroy; override; //Для иллюстрации даем сообщение
                                end;
                               
                              destructor TFoo.Destroy;
                              begin
                                WriteLn('Destroy');
                                inherited;
                              end;
                               
                              procedure TFoo.FooFoo;
                              begin
                                WriteLn('Foooo! :)');
                              end;
                               
                              //Чтобы была область видимости
                              procedure DoFoo;
                              var
                                Foo: IFoo;
                              begin
                                Foo := TFoo.Create;
                                Foo.FooFoo;
                              end;
                               
                              begin
                                DoFoo;
                                ReadLn;
                              end.
                              Цитата best_lamer @
                              Ho Im если пользоваться твоим (классическим) факториалом тогда максимальный факториал для Python равен 3628799! для факториала через лямда форму (по моему) 993! предел... Странно надо разобраться почему так. :blink:

                              Питон не делает оптимизации хвостовых вызовов.
                                Цитата Romkin @
                                Но так как ты хочешь - просто не делают. Объект не уничтожают в функции, если он пришел как параметр, это уж слишком :)

                                :yes: Вот именно --- так не делают. Но я и не хочу этого. В функцию приходит параметр. В функции его удалить нельзя. Это очевидно. Значит, его надо удалить вне функции. Так как в дельфах объект можно удалить, только явно вызвав Free (или как деструктор назван). Значит, для этого надо завести столько временных переменных, сколько параметров у вызываемой функции. Т.е.,
                                ExpandedWrap disabled
                                  type MyClass = class ... end;
                                  function my_func: MyClass; begin result := MyClass.Create(); end;
                                   
                                  procedure my_func2(mc1,mc2,mc3: MyClass); begin ... end;
                                   
                                  var
                                    t1,t2,t3: MyClass;
                                   
                                  begin
                                    t1 := my_func;
                                    t2 := my_func;
                                    t3 := my_func;
                                    my_func2(t1,t2,t3);
                                    t1.Free;
                                    t2.Free;
                                    t3.Free;
                                  end.

                                Т.е., --- почувствуйте себя ассемблером (в том смысле, что надо вручную разворачивать выражения так, чтобы не было вложенных вызовов функций).
                                Цитата Romkin @
                                Или мне, по традиции, привести полное консольное приложение? :lool:

                                Дельфы под рукой нету, нельзя ли показать вывод от этого приложения?
                                Цитата Romkin @
                                type IFoo = interface procedure FooFoo; end; //Реализация TFoo = class(TInterfacedObject, IFoo) protected procedure FooFoo; public destructor Destroy; override; //Для иллюстрации даем сообщение end;

                                Да, это "очень удобно и немногословно". А как у этой штуки с наследованием --- ведь TInterfacedObject --- это класс, не так ли? А это уже не даст отнаследовться от других классов. Так что, как ни крути, а будет неудобно.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0529 ]   [ 14 queries used ]   [ Generated: 18.07.25, 09:22 GMT ]