Форум » Для флейма » Интерпретаторы » Ответить

Интерпретаторы

Pasha: Возьмем 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с обзавестись приличным движком, да вот как-то не сложилось. Ну а движок харбора порадовал, хорош. Можно было протестировать продукты и на других режимах, скажем, добавить тест ООП, но, думается, смысла в этом нет, класс уже понятен и без этого.

Ответов - 33, стр: 1 2 All

AlexMyr: Pasha пишет: Как говорится, за много-много лет ничто не мешало 1с обзавестись приличным движком, да вот как-то не сложилось. Но это им не мешает занимать почти всю долю рынка для бухгалтерии, и я думаю, что они сильно не переживают и не напрягаются как внутри все устроено, главное красивая картинка

Сыроежка: Pasha Мне представляется, что сравнение не совсем корректное. Для Harbour задача решалась в консольном режиме, а для 1С в графическом режиме. Причем для 1С вполне возможно имеется развитая встроенная система перехвата исключений, а в Harbour, если вы сами не используете BEGIN SEQUENSE система перехвата исключений отсутствует. А кроме того сразу же подключается режим отладки при возникновении ошибки. То есть код не идентичен в обоих случаях и не представляет собой то, что вы видите в листинге. Что касается замечания Pasha пишет: Как говорится, за много-много лет ничто не мешало 1с обзавестись приличным движком, да вот как-то не сложилось то оно также не совсем корректно. Тут главное, что этот язык есть. Много ли вы знаете фирм, разрабатывающих бухгалтерское программное обеспечение, у которых есть такой развитый язык? А мы видим, что в 1С их встроенный язык прошел большой путь эволюции, начиная с языка 1С 6.0 и до языка 1С 8.Х. У них в приоритете стояла задача охватить встроенным языком все многообразие бухгалтерских задач, сделать его гибким, позволяющим настраивать и модифицировать любую часть программного комплекса, и при этом чтобы от пользователей не требовалось больших знаний в программировании. И с этой задачей они справились. То есть, как говорится, хороша ложка к обеду, то есть хорош тот продукт, который решает поставленную задачу. Для срравнения, например, Java естественно уступает в скорости С++, но тем не менее Java превосходит С++ во многих областях применения, для которого он прредназначен. Так что я не вишу большого смысла в таком сравнении. Pasha , мне бы было интереснее сравнить ваш собственный язык, который вы разработали самостоятельно для своей бухгалтерской программы, с языком 1С. Вот здесь был бы предмет для сравнения.

Pasha: Возражения не принимаются. Графический режим никакой роли не играет, харбор в графическом режиме показал бы тот же результат. По поводу исключений - это только домыслы. Да и какие там исключения могут быть. Отладка есть и в харборе. Код не полностью идентичен, конечно, но представление о качестве движка дает. По поводу встроенного движка 1с - так 1с постарше харбора будет. Могли бы движок и довести за это время. Я уж не говорю о том, что 1с - продукт коммерческий, делается за деньги, и очень немаленькие, а харбор - свободная разработка, держится на инициативе. А насчет смысла сравнения я написал. Я сравнивал то общее, что есть в этих продуктах. А по поводу моего собственного языка - так этот язык и есть харбор. Настройка у меня делается через файлы hrb, которые выполняются hvm с той же производительностью, что и родной пи-код харбора. Это, собственно, он и есть. Так что я могу смело сказать, что мой собственный язык в 20 раз производительнее, чем язык 1с :)


Сыроежка: Pasha Я не знаю вашего языка для бухгалтерских программ. Вот когда вы его обнародуете, когда можно будет с его помощью работать со всякими справочниками, формами, запросами, тогда и будет предмет для разговора. Более того у 1С имеется связь между выполняемым языком и исходным кодом в случае возниконовения ошибки. То есть при возникновении ошибки происходит перехват исключительной ситуции, запускается режим отладки, и высвечивается исходная строка кода программы с детальным указанием ошибки. То есть имеет место быть не просто язык, а целая интегрированная среда его использования. К тому же язык 1С рассчитан на многопользовательских режим работы. Поэтому там стоят различные проверки режима работы программы. Все это накладывает отпечаток на производительность. Как я уже сказал, это все равно, что сравнивать Java и С++, или С# и C++. В перрвые языки уже многие средства высоокого уровня встроены, и пользователю языка не нужно заботиться о многих вещах. А в с++ аналогичные вещи придется разрабатывать самостоятельно, как говорится, с чистого листа. То же самое и в отношении 1С. Если бы вы решили самостоятельно разработать язык на освное Harbour для бухгалтерских задач, вы увидели бы, сколько бы вам пришлось бы надстраивать над этим базовым языком дополнительных слоев, и как производительность постепенно бы снижалась.

Сыроежка: Добавлю еще, что когда в Harbour вы используете локальные переменные, то Harboir не хранит о них информации, то есть об имени переменной и т.д. А потому в сулчае ошибки во время выполнения, пользователь не получит сведений об имени переменной. В 1с для переменных строится таблица, которая хранит названия этих переменных, точно также как это делается пря private или public переменных в Harbour. То есть изначально при создании языка ставились разные приоритеты. В 1С главным приоритетом был понятность и доступнос ь пользователям- не программистам.

Pasha: А вот это как раз те самые проблемы индейцев, которые меня, шерифа, не волнуют. Наверное, много чего в движке 1с сделано плохо, раз мы имеем такой результат. Да и покажите мне пользователя, который будет копаться в конфигурации 1с. Нет, конечно, всякое бывает, земля российская рождает платонов с невтонами, но это будет редким, редчайшим исключением. Работа с конфигурацией = это как раз функция т.н. "программиста 1с", да и то не всякого. Большинство просто ставят готовые конфигурации. Так что Вы цель создания встроенного языка 1с определили неверно. Конечный пользователь не знает и не должен знать о его существовании.

Pasha: Смешались в кучу кони, люди. У меня, положим, тоже есть класс справочник, функции создания форм и много чего еще. Но к производительности интерпретатора это отношения не имеет. Ттак же и в 1с. Есть предопределненные обьекты, у них какие-то свойства и методы. И есть интерпретатор, который работает с этими обьектами, но его главная функция - просто выполнять код. И он выполняет обычный код в 20 раз медленнее харбора. В 1с есть связь с исходным кодом, и в случае ошибки можно увидеть, где она возникла ? Все это есть и в харборе, но почему-то для 1с это является оправданием, а для харбора - нет. Многопользовательский режим работы с БД к производительности движка также не имеет отношения. То есть, этот фактор играет роль только при обращении к БД, а когда просто выполняется код - это никакого значения не имеет. Я сравнил производительность движка, и никаких оправданий тут быть не может. Кстати, движок харбора не всегда был таким мощным. Было время, когда харбор работал гораздо медленнее. Я имел возможность воочию наблюдать, как улучшался харбор, и даже принял в этом процессе некоторе участие, хоть и косвенное. Почему 1с не прошел этот путь - ну кто же им доктор.

AlexMyr: Сыроежка пишет: У них в приоритете стояла задача охватить встроенным языком все многообразие бухгалтерских задач, сделать его гибким, позволяющим настраивать и модифицировать любую часть программного комплекса, и при этом чтобы от пользователей не требовалось больших знаний в программировании. Можно хотя бы один пример 1с ф-ции, которая охватывает хоть малую бухгалтерскую задачу и для которой не нужно больших знаний в программировании. Сыроежка пишет: Pasha , мне бы было интереснее сравнить ваш собственный язык, который вы разработали самостоятельно для своей бухгалтерской программы, с языком 1С. Вот здесь был бы предмет для сравнения. А Вы всегда разрабатываете свой язык основываясь на другом языке, чтобы выполнить какую-то задачу? Вы профи

Dima: Clipper 5.2e Real Mode 85.19 Protected mode 99.96

Pasha: Dima пишет: Clipper 5.2e Real Mode 85.19 Protected mode 99.96 Это мой тест ? А в сравнении с харбором как клиппер будет ? Надо же запускать на одном и том же компьютере.

Dima: Pasha пишет: Это мой тест ? Да твой тест. Машинка такая Intel Pentium 4 630, 3000 MHz (15 x 200) 2GB RAM ЗЫ Harbour на этой машинке от 25 до 35 сек

Pasha: То есть, даже интерпретатор клиппера работает в разы быстрее, чем интерпретатор 1с, и это несмотря на то, что выполняется 16-ти разрядное приложение под дос-эмулятором. Прямо Феррари :)

AlexMyr: Version: Harbour 3.1.0dev (Rev. 17139) Compiler: MinGW GNU C 4.6.1 (32-bit) Platform: Windows XP 5.1.2600 Service Pack 3 с 19.50 без15.97 clipper 5.3(b) без 71.68 с ошибка Error BASE/1209 String overflow: + Called from MAIN(24) cc1 += L_C + chr(nn1 % 256)

Сыроежка: Сыроежка пишет: цитата: У них в приоритете стояла задача охватить встроенным языком все многообразие бухгалтерских задач, сделать его гибким, позволяющим настраивать и модифицировать любую часть программного комплекса, и при этом чтобы от пользователей не требовалось больших знаний в программировании. AlexMyr пишет: Можно хотя бы один пример 1с ф-ции, которая охватывает хоть малую бухгалтерскую задачу и для которой не нужно больших знаний в программировании. Причем здесь функции? Вы что так наивно думаете, что одна функция должна решать полностью какую-то бухгалтерскую задачу? Это все равно, что сказать, что Harbour должен состоять из одной функции, которая решает любую задачу программиста. Так что, извините, но никакого смысла в вашей реплике я не вижу. Под охватом многообразия бухгалтерских задач имеется в вииду, что вы можете работать со справочниками, документами, создавать формы входных и выходных документов, делать запросы по любому критерию на встроенном языке. У них для каэжого объекта в терминах бухгалтерских категорий создан соответствующий объект в терминах объектов языка программирования. И это достаточно удобно. Сыроежка пишет: цитата: Сыроежка пишет: Pasha , мне бы было интереснее сравнить ваш собственный язык, который вы разработали самостоятельно для своей бухгалтерской программы, с языком 1С. Вот здесь был бы предмет для сравнения. AlexMyr пишет: А Вы всегда разрабатываете свой язык основываясь на другом языке, чтобы выполнить какую-то задачу? Вы профи А этот ваш вопрос вообще не понятен. Причем здесь то, разрабатывал лично я свой язык, основыцваясь на другом языке или нет? Я разве какие-то выдвигаю претензии, что я сам сделал лучше 1С? Я не имею отношение ни к разработке 1С, ни к разработке Harbour. Но если говорить о бухгалтерских программах, то очевидно, что они должны иметь встроенный язык, позволяющий пользователям самостоятельно выполнять различные запросы. Иначе программа совершенно не нибкая и для получения любой даже самой примитивной справки или отчета придется обращаться к разработчикам.

PSP: Думается, что любой объект (языки программирования - не исключение) существует, пока кто-то в нём нуждается. Т.е., и 1C и Harbour существуют одновременно не для соревнования. Они в разных мирах. Есть мир 1С и есть мир Harbour. Какой смысл их сравнивать? Это все равно, что сравнить две лопаты: штыковую и для уборки снега. И та, и другая - лопата. Но каждая имеет свое предназначение, т.е. существует в своём мире. Не ломайте копья, парни...

Pasha: Мне просто захотелось посмотреть, насколько хорош движок харбора, вот я и сравнил его с тем, что оказалось под рукой. Еще интересно было бы сравнить с java. А насчет 1с - я подобный нынешнему тест: огромный цикл с простейшими вычислениями - гонял лет 5-6 назад с тогдашним харбором и 1с 7.7. Результат и тогда был в пользу харбора: быстрее на 2 порядка, то есть (не удивляйтесь) в 100 раз. Так что с тех времен у 1с наблюдается несомненный прогресс. Хотя, конечно, я взял сильное место харбора и (как оказалось) слабое место 1с.

Dr. Oldwarez: Ну, java вообще работает как черепаха. И интерфейс кривой и подключение баз данных - НЕЧТО. И вообще очень запутанный язык, даже сложнее, чем Си. 1с - это как бы Visual Basic, переведенный на русский язык. Кривоватый и чересчур узконаправленный, но это единственный успешный РУССКИЙ язык программирования. Я английский знаю и по мне так лучше Visual Basic, если бы он не таскал за собой кучу DLL. Foxpro под ДОС - это мой первый язык. Помню XT-шку с зелёным экраном, на которой и писались программы под FOXPRO. Visual Foxpro - это уже "смесь бульдога с носорогом". И туёва хуча DLLек для запуска в автономном режиме.

AlexMyr: Dr. Oldwarez пишет: Ну, java вообще работает как черепаха Это да, чего стоит работа с клиент банком от бифита, надо уметь так писать

Dr. Oldwarez: Непонятно только, чего эту жабу сейчас всюду суют. От неё только компы висят.

Pasha: Прогнал свой тест на java. Java оказался примерно в 5 раз быстрее харбора. Таким образом, получается, если движок харбора - это реактивный истребитель, то движок java - космическая ракета.

AlexMyr: Pasha пишет: Прогнал свой тест на java можно исходник адаптированный для java?

Dima: Pasha пишет: Прогнал свой тест на java Пробни еще Perl , думаю он будет еще быстрее.

Pasha: AlexMyr пишет: можно исходник адаптированный для java? Да, конечно. Конкатенацию строк я опять убрал, java с ней не справляется. package javaapplication1; public class JavaApplication1 { public static void main(String[] args) { int i; int nLoops = 5000000; double L_F = 112345.67; int L_N = 10000; String L_C = "0123456789ABCDEF"; long nn; double nf; String cc; long nn1 = 0; double nf1 = 0.1; String cc1 = ""; long nn2; double nf2; for( i = 1; i <= nLoops; i++ ) { 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 + "0"; //+ nn1.toString(256); } if( (cc1.length() % 3) == 0 ) { nn2 = nn1 % 13; nf2 = nf1 % 13; } nn = (nn1 + L_N + 1)*100/15; nf = (nf1 + L_F + 1.0)*100.00/15.00; } System.out.println("Hello"); System.out.println(nn1); System.out.println(nf1); } }

Pasha: Еще пару слов о фокспро. За примерно 10 лет от vfp6 до vfp9sp2 его движок потерял в "мощности" примерно 10%. Тест конечно очень условный, я его набросал на скорую руку, просто для того, чтобы выстроить продукты по рангу.

AlexMyr: Pasha пишет: Да, конечно. Конкатенацию строк я опять убрал, java с ней не справляется. спасибо, попробую.

AlexMyr: На домашнем ноуте такой результат: java: пришлось поправить первые строки package javaapplication1; public class JavaApplication1 { public static void main(String[] args) { Hello 50005000000 5.61733349977449E11 harbour: 14.60

Петр: AlexMyr пишет: harbour: 14.60 Для java добавьте в код long nBegin = System.currentTimeMillis(), nEnd; .. nEnd = System.currentTimeMillis(); System.out.println( (nEnd - nBegin) / 1000.0 );

Петр: Не знаю почему, но мне понравилась идея сравнения Java c Harbour, нет не вообще (тут все понятно - масштабы конечно не те), а именно выполнения конкретного кода. Для начала я скачал и установил Java SE 7u2 (JDK 7) и чуть поправил код от Pasha [pre2]/*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; out.printf("%s %s %s %s %s\n", System.getProperty("java.vm.vendor"), System.getProperty("java.vm.name"), System.getProperty("java.version"), System.getProperty("os.name"), System.getProperty("os.arch")); tB = System.currentTimeMillis(); for( int i = 1; i <= nLoops; i++ ) { 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.append(L_C).append( (char) (nn1 % 256) ); } if( cc1.length() % 3 == 0 ) { nn2 = nn1 % 13; nf2 = nf1 % 13; } nn = (nn1 + L_N + 1) * 100/15; nf = (nf1 + L_F + 1.0) * 100.00/15.00; if( i % 1000000 == 0 ) { out.printf("%d\n", nLoops-i); } } out.println(""); out.printf("%.2f\n", (System.currentTimeMillis() - tB) / 1000.0); out.printf("%d\n", nLoops); out.println(""); out.printf("%d %.3f %s\n", nn, nf, cc); out.printf("%d %.3f %d\n", nn1, nf1, cc1.length()); out.printf("%d %.6f\n", nn2, nf2); } } [/pre2]А затем с помощью скрипта (будете копировать - помните о концевых пробелах, да и начальных - тоже) [pre2]rem jtest.bat @ECHO OFF IF NOT DEFINED "%JDK_HOME%" SET JDK_HOME="C:\Program Files\Java\jdk1.7.0_02" @%JDK_HOME%\bin\javac -Xlint jtest.java @%JDK_HOME%\bin\jar -vcfe apptest.jar jtest jtest.class @%JDK_HOME%\bin\jar -i apptest.jar @%JDK_HOME%\bin\java -Xint -Xincgc -Xms512m -Xmx512m -jar apptest.jar [/pre2]запустил его на исполнение.

Петр: Получил такой вот результат [pre2]Oracle Corporation Java HotSpot(TM) Client VM 1.7.0_02 Windows XP x86 8,63 5000000 333366733340 3744889748827,460 0123456789ABCDEF0123456789ABCDEF 50005000000 561733349977,449 42500000 3 6,778931 [/pre2] Немного о параметрах запуска -Xint - Java HotSpot VM работает в режиме интерпретатора (байт кода), режим не основной - отключает JIT и прочие фирменные ухищрения Sun -Xincgc - включить инкрементальный сборщик мусора -Xms512m -Xmx512m - установить начальный и максимальный размер кучи памяти равным 512 Mb (у Java апетит на память хороший ). Если -Xint упустить или использовать -Xmixed, результат будет другой [pre2]Oracle Corporation Java HotSpot(TM) Client VM 1.7.0_02 Windows XP x86 1,73 5000000 333366733340 3744889748827,460 0123456789ABCDEF0123456789ABCDEF 50005000000 561733349977,449 42500000 3 6,778931 [/pre2]

Петр: Теперь перейдем к Harbour. Выполнялся вот такой код от Pasha [pre2] #translate printf( [<explist,...>] ) => QOut( hb_strFormat(<explist>) ) #translate println( [<explist,...>] ) => QOut( <explist> ) #define N_LOOPS 5000000 #define L_F 112345.67 #define L_N 10000 #define L_C "0123456789ABCDEF" FUNCTION main() LOCAL cc LOCAL nn LOCAL nf LOCAL nn1 := 0 LOCAL nf1 := 0.1 LOCAL cc1 := "" LOCAL nn2 LOCAL nf2 LOCAL tB LOCAL i QQOut( hb_Version(), hb_Version(11), hb_Version(1), hb_Version(21) ) tb := hb_SecondsCPU() FOR i := 1 to N_LOOPS 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) END IF Len(cc1) % 3 == 0 nn2 := nn1 % 13 nf2 := nf1 % 13 END nn := (nn1 + L_N + 1) * 100/15 nf := (nf1 + L_F + 1.0) * 100.00/15.00 IF i % 1000000 == 0 printf( "%d", N_LOOPS - i ) END NEXT println() printf("%.2f", hb_SecondsCPU() - tb) printf("%d", N_LOOPS) println() printf("%d %.3f %s", nn, nf, cc) printf("%d %.3f %d", nn1, nf1, Len(cc1)) printf("%d %.6f", nn2, nf2) RETURN NIL [/pre2]

Петр: 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 и запускаем. Получаем такой вот результат [pre2]Harbour 3.1.0dev (Rev. 17173) Jan 2 2012 18:44:16 MinGW GNU C 4.6.1 (32-bit) WIN 13.16 5000000 333366733340 3744889748827.460 0123456789ABCDEF0123456789ABCDEF 50005000000 561733349977.449 42500000 3 6.778931 Harbour 3.1.0dev (Rev. 17173) Jan 2 2012 18:12:19 Microsoft Visual C++ 16.0.30319 (32-bit) WIN 15.30 5000000 333366733340 3744889748827.460 0123456789ABCDEF0123456789ABCDEF 50005000000 561733349977.449 42500000 3 6.778931[/pre2]Т.е. получается Java HotSpot(TM) где-то в 1,5-1,7 раза быстрее в режиме интерпретатора байт-кода.

Петр: Теперь компилируем hbmk2 jtest.prg -st /gc3 и снова запускаем. Смотрим результат [pre2]Harbour 3.1.0dev (Rev. 17173) Jan 2 2012 18:44:16 MinGW GNU C 4.6.1 (32-bit) WIN 7.22 5000000 333366733340 3744889748827.460 0123456789ABCDEF0123456789ABCDEF 50005000000 561733349977.449 42500000 3 6.778931 Harbour 3.1.0dev (Rev. 17173) Jan 2 2012 18:12:19 Microsoft Visual C++ 16.0.30319 (32-bit) WIN 9.50 5000000 333366733340 3744889748827.460 0123456789ABCDEF0123456789ABCDEF 50005000000 561733349977.449 42500000 3 6.778931 [/pre2] Все таки есть у HotSpot(TM) свои фишки - 4,1-5,5 Заметили, MinGW быстрее? Что-то я расписался здесь, но ведь флейм же Кстати, тестировалось на машине с процессором AMD Athlon X2 64 Dual 3600+ (2,01 ГГц), ОЗУ 1 Гб DDR2.

Pasha: Про 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* после операций сравнения: Вместо if( hb_xvmGreater() ) break; if( hb_xvmPopLogical( &fValue ) ) break; if( !fValue ) goto lab00001; Компилировать код в if( hb_xvmNewGreater( &fValue ) ) break; if( !fValue ) goto lab00001; и так далее Но у Przemeka в todo list есть такой пункт: % 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. Наверное, это какое-то радикальное решение.



полная версия страницы