Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой язык больше похож на Delphi? 
:(
    Опции темы
diadiavova
Дата 2.8.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




Цитата(LamerTM @  2.8.2009,  16:43 Найти цитируемый пост)
Функция Sin сложная и скорее всего написана в обоих языках на асме.

И что с того? На шарпе в релизе этот тест на моём компе показал 223 миллисекунды, а на плюсах - 7,5 ... СЕКУНД (примерно в 35 раз медленнее).
В конечном итоге какая разница что и как реализовано? Если ты пишешь на языке, то используешь те возможности, которые он предоставляет. Тебе нужны вычисления? Пожалуйста - дотнет выполняет их довольно быстро. В каких-то других ситуациях может и тормозит, но зато там масса других вкусностей присутствует, а даром ничего не даётся - за удобство разработки чем-то жертвовать приходится.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LamerTM
Дата 2.8.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006




Цитата(diadiavova @ 2.8.2009,  16:04)
И что с того? На шарпе в релизе этот тест на моём компе показал 223 миллисекунды, а на плюсах - 7,5 ... СЕКУНД (примерно в 35 раз медленнее).
В конечном итоге какая разница что и как реализовано? Если ты пишешь на языке, то используешь те возможности, которые он предоставляет. Тебе нужны вычисления? Пожалуйста - дотнет выполняет их довольно быстро. В каких-то других ситуациях может и тормозит, но зато там масса других вкусностей присутствует, а даром ничего не даётся - за удобство разработки чем-то жертвовать приходится.

Когда нужны функции библиотек языка - это одно. Когда нужен быстрый язык для реализации своих функций - это другое. Я не использую синусы. Я использую только примитивные операции (+-*/) с типами int и double, максимум Round, Trunc и Power.



Купил сегодня Borland Developer Studio 2006. За 200 рублей. Надеюсь оно того стоит. smile 



Цикл на C# [ for(i=0;i<1000000000;i++) k=k+1; ] компилится в это:

inc dword ptr [ebp-0x18]
inc dword ptr [ebp-0x14]
cmp [ebp-0x14],0x3b9aca00
jl 0x.....




Цикл на Delphi7 [for i := 0 to 1000000000 do k := k + 1;] компилится в это:

inc ebx
dec eax
jnz $-04

(Аж слезы навернулись smile )



Цикл на Delphi 2006 :

inc ebx
dec eax
jnz $-04

(то же что Delphi7  smile  smile )



C++Builder (BDS2006)

inc dword ptr [ebp-$38]
inc dword ptr [ebp-$34]
cmp [ebp-$34],$3b9aca00
jl $00401bf9

 smile 



Все это как бы неиллюзорно намекает, что Delphi рвет всех на части. По крайней мере на этом простом цикле. При этом C++Builder каким-то чудесным образом генерит код аналогичный C#, как по самому коду, так и по тормознутости.
200 рублей на ветер. Ну хоть делфю апргейднул, а то была Delphi7.

Цикл и инкремент это еще не все операторы, однако тендеция налицо.
Что-то похоже моя идея найти более крутой язык слегка обламывается. 
PM MAIL   Вверх
wester
Дата 2.8.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009




LamerTM
ну и на чем остановились ?))


PS по одному циклу полагать что он обходит C++ с дотнетом как минимум странно
а вообще пишите на асме если так важна скорость , я думаю он удовлетворит ваши потребности

PM MAIL   Вверх
LamerTM
Дата 2.8.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006




Цитата(wester @ 2.8.2009,  17:04)
LamerTM
ну и на чем остановились ?))


PS по одному циклу полагать что он обходит C++ с дотнетом как минимум странно
а вообще пишите на асме если так важна скорость , я думаю он удовлетворит ваши потребности

Я и другие операторы посмотрю. Всякое может быть конечно. Но по-моему и так все ясно. 
Лет 5 назад написал процедуру на асме, чтобы заменить делфийскую для повышения скорости. Скорость не повысилась (в пределах погрешности измерений). Посмотрел код, компилируемый делфи. И проникся, так сказать, глубоким уважением к этому компилятору. Так что писать на асме, имея делфи, совсем не обязательно. Серьезной разницы не получится. В разы - точно. По крайней мере тогда я пришел именно к этом выводу. Тогда тестировался не один цикл, а довольно большая процедура, где было много всего разного.

На чем остановился... да вот на том что надо будет думать как жить дальше на делфи, как обходить эти извраты что понаставили его создатели. Не эти бы ограничения, была бы конфетка.
PM MAIL   Вверх
diadiavova
Дата 2.8.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




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

Вот пример, добавь в приведённую программу ещё один тест
Код

void test4()
{
    double k = 0;
    for(double i = 0; i < 100000000; i++)
    {
        k = k*k/i;
    }
    cout<<k;
}


Код

       static void test4()
        {
            double k = 0;
            for (double i = 0; i < 100000000; i++)
            {
                k = k * k / i;
            }
        }


На моём компе плюсы показывают 1,168 секунд, а шарп - 1,068. Не 35 раз, конечно, но всё же. Кстати в дебаге шарп тормозит, а плюсы показывают одинаковые результаты. На дельфях проверить не могу.



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
diadiavova
Дата 2.8.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




В последнем примере ошибку нашёл
Код

void test4()
{
    double k = 0;
    for(double i = 1; i <= 100000000; i++)
    {
        k = k*k/i;
    }
    cout<<k;
}

Код

       static void test4()
        {
            double k = 0;
            for (double i = 1; i <= 100000000; i++)
            {
                k = k * k / i;
            }
        }


Это чтобы на ноль не делить, работает быстрее, но шарп всё равно даёт немного лучшие результаты.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LamerTM
Дата 2.8.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006




diadiavova

О, это уже интереснее. C# порвал делфю! 

Код делфи:

Код

procedure TForm1.Button1Click(Sender: TObject);
var       i: Integer;
          k: Double;
          dt: TDateTime;
begin
          dt := Now;
          k := 0;
          for i := 1 to 100000001 do k := k * k / i;
          Caption := FloatToStr(k);
          Button1.Caption := IntToStr(MilliSecondsBetween(Now, dt));
end;


На C#:

Код

private void button1_Click(object sender, System.EventArgs e)
        {
            DateTime dd=DateTime.Now;
            double k = 0;
            for (double i = 1; i < 100000001; i++)
            {                  
                k = k * k / i;
            }
            TimeSpan f=DateTime.Now-dd;


            button1.Text=f.ToString();
            Text =k.ToString();
        }
}



Резалты:
делфи: 1608 мс (запуск экзешника такой же)
С#: в дебагере 1.75, запуск екзешника - 1.14

Да, ты прав, тут надо целое исследование проводить.
PM MAIL   Вверх
wester
Дата 2.8.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009




LamerTM
да зачем исследование , просто есть JIT компиляция и непосредственная компиляция на платформу типа C++ и дельфи
PM MAIL   Вверх
diadiavova
Дата 2.8.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




Экзешник надо именно из папки Release запускать.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
LamerTM
Дата 2.8.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006




Цитата(diadiavova @ 2.8.2009,  18:01)
Экзешник надо именно из папки Release запускать.

Папка Release это где?



Я вот тут подумал, что код не эквивалентен. В С# перебирается Double, а на Delphi - Integer. Double там нельзя. Из-за чего там еще одна переменная получается.

Но все равно C# рвет старую делфи. А с D2006 вровень. (у меня C# из BDS2006, если что)

Код

procedure TForm1.Button1Click(Sender: TObject);
var       i, c, cc: Integer;
          k: Double;
          dt: TDateTime;
begin
          dt := Now;
          k := 100;
          c := 0;
          cc := 0;
          for i := 1 to 100000001 do
          begin

            if c = 0 then
            begin
              k := k * i;
              c := 1;
            end else
            begin
              k := k / i;
              c := 0;
            end;
            cc := cc + 1;

          end;
          Caption := FloatToStr(k)+' '+IntToStr(cc);
          Button1.Caption := IntToStr(MilliSecondsBetween(Now, dt));
end;


Код

private void button1_Click(object sender, System.EventArgs e)
        {
            DateTime dd=DateTime.Now;
            double k=100;
            int c=0;
            int cc=0;
            for (int i = 1; i <= 100000001; i++)
            {

                if (c==0) { k = k * i; c=1;} else {k = k / i;c=0;}
                cc = cc+1;
                

            }
            TimeSpan f=DateTime.Now-dd;


            button1.Text=f.ToString();
            Text =k.ToString()+' '+cc.ToString();
        }


Резалты:

Delphi 7 - 1563 ms
D2006 - 1000 ms
C# - 1.031 s
PM MAIL   Вверх
Akella
Дата 2.8.2009, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант




Цитата(LamerTM @  2.8.2009,  16:55 Найти цитируемый пост)
Цикл на Delphi7 [for i := 0 to 1000000000 do k := k + 1;] компилится в это:

Я где-то читал, что так лучше:

Код

[for i := 0 to 1000000000 do Ink(k)

PM MAIL   Вверх
LamerTM
Дата 2.8.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006




Цитата(Akella @ 2.8.2009,  19:00)
Я где-то читал, что так лучше:

Код

[for i := 0 to 1000000000 do Ink(k)

Код генерится один и тот же. Да и как там из тех трех асмовских команд можно сделать лучше, мне, например, не понятно.
PM MAIL   Вверх
diadiavova
Дата 2.8.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




Цитата(LamerTM @  2.8.2009,  19:58 Найти цитируемый пост)
Папка Release это где?

В BDS - не знаю. В VS создаётся два варианта ехешника: один для отладки, другой - как есть, первый запускается не сам по себе, а под контролем дедаггера, естественно на этом производительность падает дальше некуда.
Цитата(LamerTM @  2.8.2009,  19:58 Найти цитируемый пост)
Я вот тут подумал, что код не эквивалентен. В С# перебирается Double, а на Delphi - Integer. Double там нельзя. Из-за чего там еще одна переменная получается.

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

Добавлено через 43 секунды
Цитата(LamerTM @  2.8.2009,  19:58 Найти цитируемый пост)
у меня C# из BDS2006, если что

Думаю - без разницы.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
neweraser
Дата 3.8.2009, 15:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 17.2.2008




Цитата(unicuum @  1.8.2009,  23:21 Найти цитируемый пост)
Какой язык больше всего похож на Delphi
Brainfuck 

 smile  и опять религиозные войны!!  smile  лень было читать все, так просмотрел, не знаю к какому выводу пришли, но я за делфи  smile 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Lazin
Дата 3.8.2009, 15:27 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re




господа, вы кажется не учитываете то, что программа на C# - управляемая, тоесть, там весь код - ненативный, и этот код работает быстрее того, что создает компилятор delphi, что говорит о том, что компилятор delphi - очень плохо оптимизирует код
а BDS2006 видимо уже тоже создает .NET приложение, поэтому результат так похож на C#

Добавлено через 1 минуту и 32 секунды
это какбэ намекает нам на то, что Delphi, это lol smile

Это сообщение отредактировал(а) Lazin - 3.8.2009, 15:27
PM MAIL Skype GTalk   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.0977 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.