Возьмем 3 продукта: 1с 8, visual foxpro и harbour. Назначение у них различное, коня и трепетную лань сравнивать не стоит, но есть и кое-что общее: все они имеют интерпретатор, построенный на похожем принципе: сначала делается предкомпиляция в некий промежуточный код, а затем этот код выполняется. Поэтому возникла мысль сравнить производительность этих интерпретаторов, посмотреть, так сказать, чей движок мощнее.
Берем простенький тест:
func main Local i, nLoops := 5000000 Local L_F := 112345.67 Local L_N := 10000 Local L_C := "0123456789ABCDEF" Local nn, nf, cc Local nn1 := 0 Local nf1 := 0.1 Local cc1 := "" Local nn2, nf2
Local nSec := Seconds()
for i := 1 to nLoops nn := L_N nf := L_F cc := L_C nn := L_N + 1 nf := L_F + 1.0 cc := L_C + L_C nn1 += L_N + 1 nf1 += L_F + 1.0 if (nn1 % 2) == 0 // cc1 += L_C + chr(nn1 % 256) endif if (len(cc1) % 3) == 0 nn2 := nn1 % 13 nf2 := nf1 % 13 endif nn := (nn1 + L_N + 1)*100/15 nf := (nf1 + L_F + 1.0)*100.00/15.00 next ? Seconds() - nSec ? nn, nf, cc ? nn1, nf1, len(cc1) ? nn2, nf2 retu nil
И запускаем его, с учетом различия в синтаксисе языков, конечно. Компьютер: Celeron 2.5 GHZ, 1GB RAM
Закомментаренный оператор - это конкатенация строк. Сразу скажу, что с конкатенацией не справился никто, кроме, естественно, харбора. Да и на его результате конкатенация сказалась незначительно: Время с конкатенацией 18.59 сек Время без конкатенации 16.86 сек
foexpro показал вполне приличный результат - 48.08 сек, что всего лишь в три раза хуже харбора.
Ну а что же хваленые канадские профессионалы 1с ? Ждать пришлось долго, 330 сек, что в 20(!) раз хуже харбора. Здесь даже не подходит аналогия сравнения двигателя Запорожца с двигателем Ламборджини, надо сравнивать с двигателем реактивного истребителя. Как говорится, за много-много лет ничто не мешало 1с обзавестись приличным движком, да вот как-то не сложилось. Ну а движок харбора порадовал, хорош. Можно было протестировать продукты и на других режимах, скажем, добавить тест ООП, но, думается, смысла в этом нет, класс уже понятен и без этого.
Отправлено: 23.12.11 13:53. Заголовок: Pasha пишет: Как го..
Pasha пишет:
цитата:
Как говорится, за много-много лет ничто не мешало 1с обзавестись приличным движком, да вот как-то не сложилось.
Но это им не мешает занимать почти всю долю рынка для бухгалтерии, и я думаю, что они сильно не переживают и не напрягаются как внутри все устроено, главное красивая картинка
Отправлено: 23.12.11 14:10. Заголовок: Pasha Мне представл..
Pasha Мне представляется, что сравнение не совсем корректное. Для Harbour задача решалась в консольном режиме, а для 1С в графическом режиме. Причем для 1С вполне возможно имеется развитая встроенная система перехвата исключений, а в Harbour, если вы сами не используете BEGIN SEQUENSE система перехвата исключений отсутствует. А кроме того сразу же подключается режим отладки при возникновении ошибки. То есть код не идентичен в обоих случаях и не представляет собой то, что вы видите в листинге.
Что касается замечания Pasha пишет:
цитата:
Как говорится, за много-много лет ничто не мешало 1с обзавестись приличным движком, да вот как-то не сложилось
то оно также не совсем корректно. Тут главное, что этот язык есть. Много ли вы знаете фирм, разрабатывающих бухгалтерское программное обеспечение, у которых есть такой развитый язык? А мы видим, что в 1С их встроенный язык прошел большой путь эволюции, начиная с языка 1С 6.0 и до языка 1С 8.Х. У них в приоритете стояла задача охватить встроенным языком все многообразие бухгалтерских задач, сделать его гибким, позволяющим настраивать и модифицировать любую часть программного комплекса, и при этом чтобы от пользователей не требовалось больших знаний в программировании. И с этой задачей они справились. То есть, как говорится, хороша ложка к обеду, то есть хорош тот продукт, который решает поставленную задачу. Для срравнения, например, Java естественно уступает в скорости С++, но тем не менее Java превосходит С++ во многих областях применения, для которого он прредназначен. Так что я не вишу большого смысла в таком сравнении. Pasha , мне бы было интереснее сравнить ваш собственный язык, который вы разработали самостоятельно для своей бухгалтерской программы, с языком 1С. Вот здесь был бы предмет для сравнения.
Отправлено: 23.12.11 14:26. Заголовок: Возражения не приним..
Возражения не принимаются. Графический режим никакой роли не играет, харбор в графическом режиме показал бы тот же результат. По поводу исключений - это только домыслы. Да и какие там исключения могут быть. Отладка есть и в харборе. Код не полностью идентичен, конечно, но представление о качестве движка дает. По поводу встроенного движка 1с - так 1с постарше харбора будет. Могли бы движок и довести за это время. Я уж не говорю о том, что 1с - продукт коммерческий, делается за деньги, и очень немаленькие, а харбор - свободная разработка, держится на инициативе. А насчет смысла сравнения я написал. Я сравнивал то общее, что есть в этих продуктах. А по поводу моего собственного языка - так этот язык и есть харбор. Настройка у меня делается через файлы hrb, которые выполняются hvm с той же производительностью, что и родной пи-код харбора. Это, собственно, он и есть. Так что я могу смело сказать, что мой собственный язык в 20 раз производительнее, чем язык 1с :)
Отправлено: 23.12.11 14:41. Заголовок: Pasha Я не знаю ва..
Pasha
Я не знаю вашего языка для бухгалтерских программ. Вот когда вы его обнародуете, когда можно будет с его помощью работать со всякими справочниками, формами, запросами, тогда и будет предмет для разговора. Более того у 1С имеется связь между выполняемым языком и исходным кодом в случае возниконовения ошибки. То есть при возникновении ошибки происходит перехват исключительной ситуции, запускается режим отладки, и высвечивается исходная строка кода программы с детальным указанием ошибки. То есть имеет место быть не просто язык, а целая интегрированная среда его использования. К тому же язык 1С рассчитан на многопользовательских режим работы. Поэтому там стоят различные проверки режима работы программы. Все это накладывает отпечаток на производительность. Как я уже сказал, это все равно, что сравнивать Java и С++, или С# и C++. В перрвые языки уже многие средства высоокого уровня встроены, и пользователю языка не нужно заботиться о многих вещах. А в с++ аналогичные вещи придется разрабатывать самостоятельно, как говорится, с чистого листа. То же самое и в отношении 1С. Если бы вы решили самостоятельно разработать язык на освное Harbour для бухгалтерских задач, вы увидели бы, сколько бы вам пришлось бы надстраивать над этим базовым языком дополнительных слоев, и как производительность постепенно бы снижалась.
Отправлено: 23.12.11 14:47. Заголовок: Добавлю еще, что ког..
Добавлю еще, что когда в Harbour вы используете локальные переменные, то Harboir не хранит о них информации, то есть об имени переменной и т.д. А потому в сулчае ошибки во время выполнения, пользователь не получит сведений об имени переменной. В 1с для переменных строится таблица, которая хранит названия этих переменных, точно также как это делается пря private или public переменных в Harbour. То есть изначально при создании языка ставились разные приоритеты. В 1С главным приоритетом был понятность и доступнос ь пользователям- не программистам.
Отправлено: 23.12.11 15:04. Заголовок: А вот это как раз те..
А вот это как раз те самые проблемы индейцев, которые меня, шерифа, не волнуют. Наверное, много чего в движке 1с сделано плохо, раз мы имеем такой результат. Да и покажите мне пользователя, который будет копаться в конфигурации 1с. Нет, конечно, всякое бывает, земля российская рождает платонов с невтонами, но это будет редким, редчайшим исключением. Работа с конфигурацией = это как раз функция т.н. "программиста 1с", да и то не всякого. Большинство просто ставят готовые конфигурации. Так что Вы цель создания встроенного языка 1с определили неверно. Конечный пользователь не знает и не должен знать о его существовании.
Отправлено: 23.12.11 15:19. Заголовок: Смешались в кучу кон..
Смешались в кучу кони, люди. У меня, положим, тоже есть класс справочник, функции создания форм и много чего еще. Но к производительности интерпретатора это отношения не имеет. Ттак же и в 1с. Есть предопределненные обьекты, у них какие-то свойства и методы. И есть интерпретатор, который работает с этими обьектами, но его главная функция - просто выполнять код. И он выполняет обычный код в 20 раз медленнее харбора. В 1с есть связь с исходным кодом, и в случае ошибки можно увидеть, где она возникла ? Все это есть и в харборе, но почему-то для 1с это является оправданием, а для харбора - нет. Многопользовательский режим работы с БД к производительности движка также не имеет отношения. То есть, этот фактор играет роль только при обращении к БД, а когда просто выполняется код - это никакого значения не имеет. Я сравнил производительность движка, и никаких оправданий тут быть не может.
Кстати, движок харбора не всегда был таким мощным. Было время, когда харбор работал гораздо медленнее. Я имел возможность воочию наблюдать, как улучшался харбор, и даже принял в этом процессе некоторе участие, хоть и косвенное. Почему 1с не прошел этот путь - ну кто же им доктор.
Отправлено: 23.12.11 15:29. Заголовок: Сыроежка пишет: У н..
Сыроежка пишет:
цитата:
У них в приоритете стояла задача охватить встроенным языком все многообразие бухгалтерских задач, сделать его гибким, позволяющим настраивать и модифицировать любую часть программного комплекса, и при этом чтобы от пользователей не требовалось больших знаний в программировании.
Можно хотя бы один пример 1с ф-ции, которая охватывает хоть малую бухгалтерскую задачу и для которой не нужно больших знаний в программировании.
Сыроежка пишет:
цитата:
Pasha , мне бы было интереснее сравнить ваш собственный язык, который вы разработали самостоятельно для своей бухгалтерской программы, с языком 1С. Вот здесь был бы предмет для сравнения.
А Вы всегда разрабатываете свой язык основываясь на другом языке, чтобы выполнить какую-то задачу? Вы профи
Отправлено: 23.12.11 16:16. Заголовок: То есть, даже интерп..
То есть, даже интерпретатор клиппера работает в разы быстрее, чем интерпретатор 1с, и это несмотря на то, что выполняется 16-ти разрядное приложение под дос-эмулятором. Прямо Феррари :)
цитата: У них в приоритете стояла задача охватить встроенным языком все многообразие бухгалтерских задач, сделать его гибким, позволяющим настраивать и модифицировать любую часть программного комплекса, и при этом чтобы от пользователей не требовалось больших знаний в программировании.
цитата:
AlexMyr пишет: Можно хотя бы один пример 1с ф-ции, которая охватывает хоть малую бухгалтерскую задачу и для которой не нужно больших знаний в программировании.
Причем здесь функции? Вы что так наивно думаете, что одна функция должна решать полностью какую-то бухгалтерскую задачу? Это все равно, что сказать, что Harbour должен состоять из одной функции, которая решает любую задачу программиста. Так что, извините, но никакого смысла в вашей реплике я не вижу. Под охватом многообразия бухгалтерских задач имеется в вииду, что вы можете работать со справочниками, документами, создавать формы входных и выходных документов, делать запросы по любому критерию на встроенном языке. У них для каэжого объекта в терминах бухгалтерских категорий создан соответствующий объект в терминах объектов языка программирования. И это достаточно удобно.
цитата:
Сыроежка пишет:
цитата: Сыроежка пишет:
Pasha , мне бы было интереснее сравнить ваш собственный язык, который вы разработали самостоятельно для своей бухгалтерской программы, с языком 1С. Вот здесь был бы предмет для сравнения.
цитата:
AlexMyr пишет: А Вы всегда разрабатываете свой язык основываясь на другом языке, чтобы выполнить какую-то задачу? Вы профи
А этот ваш вопрос вообще не понятен. Причем здесь то, разрабатывал лично я свой язык, основыцваясь на другом языке или нет? Я разве какие-то выдвигаю претензии, что я сам сделал лучше 1С? Я не имею отношение ни к разработке 1С, ни к разработке Harbour. Но если говорить о бухгалтерских программах, то очевидно, что они должны иметь встроенный язык, позволяющий пользователям самостоятельно выполнять различные запросы. Иначе программа совершенно не нибкая и для получения любой даже самой примитивной справки или отчета придется обращаться к разработчикам.
Отправлено: 23.12.11 19:42. Заголовок: Думается, что любой ..
Думается, что любой объект (языки программирования - не исключение) существует, пока кто-то в нём нуждается. Т.е., и 1C и Harbour существуют одновременно не для соревнования. Они в разных мирах. Есть мир 1С и есть мир Harbour. Какой смысл их сравнивать? Это все равно, что сравнить две лопаты: штыковую и для уборки снега. И та, и другая - лопата. Но каждая имеет свое предназначение, т.е. существует в своём мире. Не ломайте копья, парни...
Отправлено: 23.12.11 20:00. Заголовок: Мне просто захотелос..
Мне просто захотелось посмотреть, насколько хорош движок харбора, вот я и сравнил его с тем, что оказалось под рукой. Еще интересно было бы сравнить с java. А насчет 1с - я подобный нынешнему тест: огромный цикл с простейшими вычислениями - гонял лет 5-6 назад с тогдашним харбором и 1с 7.7. Результат и тогда был в пользу харбора: быстрее на 2 порядка, то есть (не удивляйтесь) в 100 раз. Так что с тех времен у 1с наблюдается несомненный прогресс. Хотя, конечно, я взял сильное место харбора и (как оказалось) слабое место 1с.
Отправлено: 24.12.11 17:32. Заголовок: Ну, java вообще рабо..
Ну, java вообще работает как черепаха. И интерфейс кривой и подключение баз данных - НЕЧТО. И вообще очень запутанный язык, даже сложнее, чем Си.
1с - это как бы Visual Basic, переведенный на русский язык. Кривоватый и чересчур узконаправленный, но это единственный успешный РУССКИЙ язык программирования. Я английский знаю и по мне так лучше Visual Basic, если бы он не таскал за собой кучу DLL.
Foxpro под ДОС - это мой первый язык. Помню XT-шку с зелёным экраном, на которой и писались программы под FOXPRO. Visual Foxpro - это уже "смесь бульдога с носорогом". И туёва хуча DLLек для запуска в автономном режиме.
Отправлено: 26.12.11 21:00. Заголовок: Прогнал свой тест на..
Прогнал свой тест на java. Java оказался примерно в 5 раз быстрее харбора. Таким образом, получается, если движок харбора - это реактивный истребитель, то движок java - космическая ракета.
Отправлено: 26.12.11 21:16. Заголовок: Еще пару слов о фокс..
Еще пару слов о фокспро. За примерно 10 лет от vfp6 до vfp9sp2 его движок потерял в "мощности" примерно 10%. Тест конечно очень условный, я его набросал на скорую руку, просто для того, чтобы выстроить продукты по рангу.
Отправлено: 03.01.12 00:20. Заголовок: Не знаю почему, но м..
Не знаю почему, но мне понравилась идея сравнения Java c Harbour, нет не вообще (тут все понятно - масштабы конечно не те), а именно выполнения конкретного кода. Для начала я скачал и установил Java SE 7u2 (JDK 7) и чуть поправил код от Pasha
/*jtest.java*/
import static java.lang.System.out;
public class jtest { public static void main(String[] args) { final int nLoops = 5000000; final double L_F = 112345.67; final int L_N = 10000; final String L_C = "0123456789ABCDEF"; String cc = ""; long nn = 0; double nf = 0.0; long nn1 = 0; double nf1 = 0.1; StringBuilder cc1 = new StringBuilder(65536); long nn2 = 0; double nf2 = 0.0; long tB;
Немного о параметрах запуска -Xint - Java HotSpot VM работает в режиме интерпретатора (байт кода), режим не основной - отключает JIT и прочие фирменные ухищрения Sun -Xincgc - включить инкрементальный сборщик мусора -Xms512m -Xmx512m - установить начальный и максимальный размер кучи памяти равным 512 Mb (у Java апетит на память хороший ).
Если -Xint упустить или использовать -Xmixed, результат будет другой
Oracle Corporation Java HotSpot(TM) Client VM 1.7.0_02 Windows XP x86
Отправлено: 03.01.12 00:58. Заголовок: Harbour был собран д..
Harbour был собран для компилятора MinGW 4.6.1 и VC 16 (из состава MSVC 2010) (HB_USER_CFLAGS=-DHB_GC_AUTO) В принципе по результатам выполнения speedtst, всегда лучшим был VC. Но после выхода MinGW 4.6.x разницой в 0.25 - 1 сек можно принебречь. Компилируем hbmk2 jtest.prg -st и запускаем. Получаем такой вот результат
Harbour 3.1.0dev (Rev. 17173) Jan 2 2012 18:44:16 MinGW GNU C 4.6.1 (32-bit) WIN
Все таки есть у HotSpot(TM) свои фишки - 4,1-5,5 Заметили, MinGW быстрее? Что-то я расписался здесь, но ведь флейм же Кстати, тестировалось на машине с процессором AMD Athlon X2 64 Dual 3600+ (2,01 ГГц), ОЗУ 1 Гб DDR2.
Отправлено: 03.01.12 09:18. Заголовок: Про JIT я тоже сразу..
Про JIT я тоже сразу сообразил, что такое сравнение с харбором не совсем корректно, но как отключить его не увидел Я пользовался netbeans. и jre6 от sun, а там такого ключика не увидел. Получается, как интерпретаторы java и harbour находятся примерно на одном уровне, а в режиме реального кода java все-таки намного быстрее.
Резервы у harbour конечно еще есть. Я думаю, в режиме -gc3 надо исключать работу со стеком. Частично это уже сделано, это т.н. multi PCODE operations. Я попробовал в таком же духе изменить операцию вида Field->FName := uLocalVar Такой тест:
Local nLoops := 5000000 Local nVar1 := 1 Local nVar1 := 2 Local nVar1 := 3 Local nVar1 := 4 for i := 1 to nLoops Field->F1 := nVar1 Field->F1 := nVar2 Field->F1 := nVar3 Field->F1 := nVar4 next
показал увеличение производительности примерно на 5%
Можно было бы оптимизировать в таком же духе все команды HB_P_JUMP* после операций сравнения:
% rewrite compiler internal logic to not generate PCODE online but use some meta code (expression list) and introduce new multiline optimizations using above meta code.
Все даты в формате GMT
3 час. Хитов сегодня: 49
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет