Страница 1 из 4

VB vs C vs Delphi

СообщениеДобавлено: 17.06.2006 (Сб) 16:04
Mikle
А как же обойтись без главного HolyWar-ного вопроса всех времен и народов?
Я неоднократно встречал подобные темы на других форумах, причем за VB практически никто не выступает. Я поначалу верил, но...
Короче, я сам удивился, но на вычислительных задачах VB не просто достойно конкурирует, он впереди! Допускаю, что это из-за того, что я недостаточно хорошо владею C & D, чтобы действительно корректно перевести код, но получается, что так же слабо ими владеют и их защитники, которые вступали в спор, а потом, после результатов VB, куда-то терялись. Это уже сомнительно.
Со временем я стал замечать, что сторонники D, как правило, мухлюют, предлагая тест, рассчитанный на хваленый их менеджер памяти. Действительно, на какой-нибудь сортировке или поиске пути, основанных на рекурсии, D вырывается вперед, но если подобрать под задачу оптимальный алгоритм - выигрывает на нем уже B. Стоит наполнить рекурсию хоть небольшим вычислительным содержимым - B уже впереди, например при рисовании фрактала.
СИ-шники тоже мухлюют - они всегда стараются задать для теста алгоритм, который явно можно оптимизировать, и который, в принципе, является ошибкой программиста - тогда их хваленый (но медлительный) компилятор находит и оптимизирует эти ошибки. В проведенных тестах на алгоритмах, не нуждающихся в оптимизации (ну, почти :wink: ), выиграл B :shock: Только после использования интеловского компилера C вышел вперед.
На этом форуме люди достаточно уважают VB, но, надеюсь, здесь достаточно и людей, владеющих C & D. Может здесь удастся без лишних эмоций и переходов на личности провести эксперименты и сравнить быстродействие B, C & D?
"На второе", если все пройдет успешно, могу предложить развенчать еще один миф - о том, что, используя ассемблер, бесполезно тягаться с современными компиляторами.

СообщениеДобавлено: 17.06.2006 (Сб) 17:05
BV
Ты бы голосовалку прикрутил, что-ли :)

СообщениеДобавлено: 17.06.2006 (Сб) 17:13
Mikle
BV
Так и знал, что ты первый ответишь :)
А зачем голосовалка? Вопрос решается прямым измерением, и статистика личных мнений тут не при чем. Я же не спрашиваю, какой язык самый удобный.

СообщениеДобавлено: 17.06.2006 (Сб) 20:07
Денис Победря
Я считаю, что для большинства прикладных задач вполне подходит ВиБи. Он прост и разработка на нём быстрая. Как в анекдоте: Пока сишник определяет константы, вибишник уже пьёт пиво. Что же касается Дельфи - не знаю, не пробовал.

СообщениеДобавлено: 17.06.2006 (Сб) 20:13
tyomitch
Кому не лень -- сравните по скорости LZW-декодеры :-)

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

СообщениеДобавлено: 17.06.2006 (Сб) 20:36
Lumen
По-моему это бесполезный спор. Каждый программирует на чём ему удобнее и возможности языка тут не причём. Есть люди, к-е на ВБ могут сотворить всё что угодно, есть очень продвинутые дельфисты или сишники. Здесь вопрос не в языке программирования, а способностях, знаниях и подготовленности (профессионализме одним словом) программиста. Язык - это всего лишь инструмент, а вот что программист сможет с помощью этого инструмента сотворить - это другой вопрос.

Вообще мне нравится Visual Basic (поэтому я здесь и нахожусь). Просто мне он нравится, мне в нем удобно, я к нему привык.

СообщениеДобавлено: 17.06.2006 (Сб) 20:56
tyomitch
Lumen, речь здесь идёт не об удобстве, а об объективном, количественном показателе -- скорости генерируемого кода. Почему бы её не сравнить?

(Чёрт возьми, во всём топике ни одного ответа в тему. Неужели все прочитали только название, а текст ниасилили?)

СообщениеДобавлено: 17.06.2006 (Сб) 21:30
BV
[tyomitch'а в игнор, на неделю]

СообщениеДобавлено: 17.06.2006 (Сб) 21:32
tyomitch
Не хочу показаться грубым, но "если нечего сказать, лучше промолчать" (с)

СообщениеДобавлено: 17.06.2006 (Сб) 21:38
VVitafresh
tyomitch писал(а):(Чёрт возьми, во всём топике ни одного ответа в тему. Неужели все прочитали только название, а текст ниасилили?)

Может потому что здесь (на этом форуме) подавляющее большинство хорошо знают ВБ и не очень Делфи и С? А тем, кто знает С/Делфи, просто лениво писать одно и то же на двух/трех языках и делать тесты.
tyomitch, начинай первый (наработки я понял у тебя уже есть), глядишь, за тобой и другие подтянутся :wink:

СообщениеДобавлено: 17.06.2006 (Сб) 22:15
tyomitch
VVitafresh писал(а):tyomitch, начинай первый (наработки я понял у тебя уже есть), глядишь, за тобой и другие подтянутся :wink:

Дык блин, всё же уже готово! ничего писать руками не надо!
Код на Си: http://www.soe.ucsc.edu/~kent/src/unzip ... ifdecomp.c
Код на VB: http://bbs.vbstreets.ru/viewtopic.php?p=66472#66472 (точный перевод)
Код на Паскале: http://www.bsdg.org/SWAG/GRAPHICS/0101.PAS.html (не идентичный, но похож)
Скомпилируйте и сравните.


Add: для тестирования могу дать ролик с зевающим котом (640х480, 45 кадров, 5.7 Мб). Моим кодом на VB (из-под среды) он грузится с полминуты.

СообщениеДобавлено: 17.06.2006 (Сб) 22:44
Роман-вб
НЕ Ругайтесь! Но вдруг кому интересно!
Если уж разговор зашёл об этой легендарной тройке "BASIC--Си--Паскаль", то приведу коё-чего из времён BASIC PDS. (И конечно же читайте "с поправкой на время").



Примером эффективности языков прог-
раммирования может служить команда вывода информации на печать -
print.
При переводе этой команды в машинный код может быть сгенерирова-
но до 10000 машинных команд. Наиболее применяемые на практике се-
годня языки программирования -это PASCAL, BASIC и Cи. Каждый из них
имеет свои положительные качества и недостатки. Все зависит от ре-
шаемой проблемы.
Си сложнее и применяется профессионалами для разработки систем-
ных программ, требующих доступа ко всем возможностям процессора и
ресурсам ПК. Современные версии BASIC и PASCAL при решении инженер-
ных и экономических задач примерно равноценны, но BASIC проще реа-
лизует запись алгоритмов, требует меньше времени на отладку, имеет
большую скорость компиляции и создает более скоростные исполняемые
модули пpи pаботе с действительными данными
.



Первым компилятором BASIC был QuickBASIC 4.0 (скоростной), имевший
до 300 команд и создававший EXE-модули с быстродействием в 2-3 ра-
за выше, чем PASCAL
.



Одна из последних перед VisualBASIC разработок фирмы Microsoft -
BASIC-PDS предназначена для профессионалов (Professional Develop-
ment System). Существует и еще один вариант названия MS BASIC
Extended - расширенный BASIC. По крайней мере, так его называет
Windows при подключении. BASIC-PDS работает в среде OS/2 или MS
DOS. Полная его версия со всеми библиотеками занимает 16 Мб памяти.
Это пока один из самых дорогих кoмпиляторов и по эффективности соз-
даваемых модулей сравним с С++ фирмы Borland. В некоторых случаях
модули, созданные BASIC-PDS, имеют на 20-25% большую эффективность
по времени, чем те же модули, созданные СИ. Такая разница возни-
кает за счет того, что часть функций BASIC-PDS реализована на ма-
шинном языке, а не на Ассемблере, как в Си. Операции с плавающей
запятой для ПК не имеющих сопроцессора BASIC-PDS выполняет в 3 ра-
за быстрее, чем С++, что имеет большое значение в сложных расчет-
ных задачах.

СообщениеДобавлено: 18.06.2006 (Вс) 20:01
Mikle
tyomitch
К сожалению у меня сейчас не на чем компилировать, но вот пример, на котором обломались оппоненты (это фрактал). Хотелось бы увидеть квалифицированный перевод:
http://tuapse-mikle.narod.ru/FrVB6.rar

СообщениеДобавлено: 18.06.2006 (Вс) 20:03
Mikle
Роман-вб
А я удивлялся в свое время, что мои проги на QB обгоняют аналогичные на C.

СообщениеДобавлено: 27.06.2006 (Вт) 22:57
AlexBlack
Главное не то на чём пишешь, а то откуда руки растут!

Если руци кривые, то любой язык -- гавно. )))

[Оффтоп]
Где-то видел статейку, что ВиБи 6 считает математику
немного быстрее чем Си пюсы.
[/Оффтоп]

СообщениеДобавлено: 27.07.2006 (Чт) 6:02
vladgri
Mikle писал(а):tyomitch
К сожалению у меня сейчас не на чем компилировать, но вот пример, на котором обломались оппоненты (это фрактал). Хотелось бы увидеть квалифицированный перевод:
http://tuapse-mikle.narod.ru/FrVB6.rar

Для Delphi
http://vlad-gri.pochta.ru/frD.rar

СообщениеДобавлено: 27.07.2006 (Чт) 16:25
Mikle
vladgri
О! Thank!
Потестировал на K6-2 400, результат в пользу VB6:
VB6 - 0.96
D - 1.11-1.38
Но, кажется, там ошибка:
int64rec = record
dw1:Longint;
dw2:Longint;
end;
Longint - это разве не int64? А Long в бейсике - это int32.

СообщениеДобавлено: 27.07.2006 (Чт) 16:30
Kovu
А у меня дельф пример работает быстрее (0,18*** у Бейсика, 0,15*** у дельфи) :roll:

СообщениеДобавлено: 27.07.2006 (Чт) 16:38
Mikle
Kovu
Сначала нужно исправить ошибку (если я не ошибаюсь).

СообщениеДобавлено: 27.07.2006 (Чт) 16:45
Kovu
А какая разница, ведь быстрее же работает, это факт :) (правда размер екзе в 5 раз больше)

СообщениеДобавлено: 27.07.2006 (Чт) 16:56
Mikle
быстрее же работает, это факт

Ты "на глазок" отличил 0.15 сек. от 0.18 ?
Эта ошибка как раз в той части, которая измеряет время.

СообщениеДобавлено: 27.07.2006 (Чт) 17:06
Kovu
Mikle
Гы, тем не менее у тебя "неправильно измеряющая время дельфийская функция" намерила больше, у меня меньше. Не кажется странным? :roll:

СообщениеДобавлено: 27.07.2006 (Чт) 17:26
Mikle
Kovu
Абсолютно не кажется. Заметь, что у меня VB дает стабильный результат, а D разброс от 1.11 до 1.38 (независимо от версии). А сейчас еще погонял - иногда зашкаливает за 2 сек.

СообщениеДобавлено: 27.07.2006 (Чт) 17:55
keks-n
Нужно юзать не "неравильно измеряющая время дельфийская функция", а GetTickCount...

СообщениеДобавлено: 27.07.2006 (Чт) 18:08
Mikle
keks-n
GetTickCount на таких коротких промежутках очень неточен. Так что использование QueryPerformanceCounter оправдано.

СообщениеДобавлено: 27.07.2006 (Чт) 18:28
RayShade
Mikle писал(а):BV
Так и знал, что ты первый ответишь :)
А зачем голосовалка? Вопрос решается прямым измерением, и статистика личных мнений тут не при чем.




Прямо, достоинством меряться собрались, не иначе :lol:

СообщениеДобавлено: 28.07.2006 (Пт) 5:48
vladgri
Mikle писал(а):vladgri
О! Thank!
Потестировал на K6-2 400, результат в пользу VB6:
VB6 - 0.96
D - 1.11-1.38
Но, кажется, там ошибка:
int64rec = record
dw1:Longint;
dw2:Longint;
end;
Longint - это разве не int64? А Long в бейсике - это int32.

Longint в delphi равен Long в VB т.е. int32
Kovu писал(а):правда размер екзе в 5 раз больше

MSVBVM60.DLL

СообщениеДобавлено: 28.07.2006 (Пт) 8:58
keks-n
MSVBVM60.DLL один на ВСЕ программы на VB. А в Дельфях в КАЖДУЮ программу вшивается рантайм. Хорошо сделано в сях - сам выбираешь, вшивать рантайм(а он там есть) или нет.

СообщениеДобавлено: 28.07.2006 (Пт) 11:39
vladgri
keks-n писал(а):MSVBVM60.DLL один на ВСЕ программы на VB. А в Дельфях в КАЖДУЮ программу вшивается рантайм. Хорошо сделано в сях - сам выбираешь, вшивать рантайм(а он там есть) или нет.

В Delphi можно истользовать рантайм паккаджи
вот пример
http://vlad-gri.pochta.ru/frd2006withpackage.rar
используемые паккаджи
http://vlad-gri.pochta.ru/packageD2006.rar

Этот же пример нативно без VCL
http://vlad-gri.pochta.ru/frDnative.rar
ну и с использорванием трюков
http://vlad-gri.pochta.ru/frd2006trick.rar
Дальше будем бодаться?

СообщениеДобавлено: 28.07.2006 (Пт) 11:54
keks-n
VB6 выпущен почти 10 лет назад... Если уж сравнивать, то последние версии, а для бейсика это VB 2005 на втором фреймворке, за счёт чего возможностей... А в твоих дельфях поддержка программирования на мобильных девайсах типа КПК и смартвонов(которая была уже в седьмом VB) даже не планируется.

Кросс-платформенность рулит...