[Конкурс] Транслятор языка

 
1 7 8 9 10 11 12 13
BG Реконструктор #18.08.2008 19:55
+
-
edit
 
Томись еще немного, у меня не все еще готово. ;) Не хочу тебя (и джаву твою) уничтожать раньше времени.
 
US Сергей-4030 #18.08.2008 20:03  @Реконструктор#18.08.2008 19:55
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Реконструктор> Томись еще немного, у меня не все еще готово. ;) Не хочу тебя (и джаву твою) уничтожать раньше времени.

Все еще не готово? Ну, давай, ждем-с. Когда готово-то будет, эта изничтожетельная версия? А то как-то уже даже не смешно и даже как-то сомнения закрадываются - а был ли мальчик. ;) Не, серьезно - когда?
 
BG Реконструктор #18.08.2008 20:08
+
-
edit
 
Когда результаты увидиш, смешно точно не будет. ;)
 
US Сергей-4030 #18.08.2008 20:10  @Реконструктор#18.08.2008 20:08
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Реконструктор> Когда результаты увидиш, смешно точно не будет. ;)

Кое-какие результаты уже наличествуют. ;) Не в твою пользу.
 
US Сергей-4030 #18.08.2008 21:09  @Реконструктор#18.08.2008 19:03
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Реконструктор> кстати, есть подобрения этого?

А чего тут одобрять-то?
 
BG Реконструктор #19.08.2008 17:48  @Сергей-4030#18.08.2008 21:09
+
-
edit
 
Реконструктор>> кстати, есть подобрения этого?
Сергей-4030> А чего тут одобрять-то?

Подобрение, не одобрение. Надо будет потрудится: У меня не очень раффинированый вариант проекта дает время 1062 на Core2 @ 1.8 MHz. Если не справишся, я этот круг соревнования прекращаю, так как основные выводы для себя я сделал.
 
BG Реконструктор #19.08.2008 17:55
+
-
edit
 
Проект, для тех, кому интересно. Не все готово, есть недостатки, может есть и баги, но работать по нему я больше не буду, пока не увижу джава вариант у которого производительность сравнима с моей. Есть некоторые ньюансы синтаксиса языка.
Прикреплённые файлы:
testlang.zip (скачать) [67,35 кбайт, 69 загрузок] [attach=112531]
 
 
 
US Сергей-4030 #19.08.2008 18:18  @Реконструктор#19.08.2008 17:55
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Реконструктор> Проект, для тех, кому интересно. Не все готово, есть недостатки, может есть и баги, но работать по нему я больше не буду, пока не увижу джава вариант у которого производительность сравнима с моей. Есть некоторые ньюансы синтаксиса языка.

Гы. :lol: Не, это надо видеть. :lol:

PS Реконструктор, вы правы, что не спорили на штуку баков. И вообще, с крутыми сиплюсплюсными программерами все ясно.
 
BG Реконструктор #19.08.2008 18:42
+
-
edit
 
Ага. 320% больше производительности из неоптимизированной программы. Действительно ясно.
 
US Сергей-4030 #19.08.2008 19:10
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Не откажу себе в удовольствии покомментировать. :lol:

code text
  1. {
  2.         goto next;
  3.         :next:;
  4. }


Программа Реконструктора выдает ошибку. Вернее, аварийно закрывается и Виндовс выдает ошибку.

code text
  1. {
  2.         print(a[18])
  3. }


Программа Реконструктора не выдает ошибки, но ничего и не делает.

code text
  1. {
  2.         print(a[18]);
  3.         print(1)
  4. }


Выдает ошибку:
Error 6 : Unknown Identifyer
Line: print(a[18])


code text
  1. {
  2.     i=0;
  3.     c=0;
  4.     b=1;
  5.     while(c<5) {
  6.         :next:;
  7.         b=b*2;
  8.         c=c+1;
  9.         i=i+1;
  10.         if(c>3)
  11.             print(1000,c);
  12.     };
  13.     print(2000,b,c,i);
  14.     c=0;
  15.     if(i<20)
  16.         goto next;
  17.     print(3000,b,c,i);
  18. }


- аварийное завершение (Программа Реконструктора вообще не любит goto - приципиально, goto не для крутых) :lol: И правильно - чего реализовывать goto - без него ведь можно быстрее сделать исполнение, и сказать, что это от сиплюсплюсной крутизны. :lol: И обработку ошибок нехрен тоже реализовывать.


code text
  1. {
  2.         print(1somethinghere);
  3. }


Ошибка:
Error 6 : Unknown Identifyer
Line: print(1somethinghere)


code text
  1. {
  2.     a=5;
  3.     b[a]=10;
  4.     a=a+1;
  5.     b[a]=9;
  6.     b[a][0]=0;
  7.     b[a][1]=1;
  8.     print(b[5],-b[5+1],b[a][0],b[a][1],b[a][2]);
  9. }


Опять ошибка, Реконструктор не балует нас разнообразием:

Error 6 : Unknown Identifyer
Line: print(b[5],-b[5+1],b[a][0],b[a][1],b[a][2])


Теперь попробуем графику. Не слишком сложную программу для начала. :lol:

code text
  1. {
  2.         plot(1,1,1,1);
  3. }


Результат - аварийное завершение, как водится.


Попробуем ишшо немного попроще.
code text
  1. print(1)


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


Теперь тест посложнее. :lol:

code text
  1. {
  2.         i=0;
  3.         while(i<2) {
  4.                 print(i+5000);
  5.                 if(i==0) {
  6.                         print(1000);
  7.                 };
  8.                 print(i+6000);
  9.                 i=i+1;
  10.         }
  11. }


- тут уж программа Реконструктора опять вельми сурова:

Error 6 : Unknown Identifyer
Line: print(i+5000)

В сумме, получается вот что: из 24 моих тестов примерно на 2/3 программа вылетела по аварийному завершению, остальные - работала неправильно (кроме 2 тестов, на которых, как ни странно, сработала).

По "быстродействию" у меня даже и комментариев нет. Если забить на.. хм... да на все. На goto - ужасный оверхед (если его реализовывать :lol: ). На макроподстановки - еще хуже оверхед (опять же, если реализовывать :lol: ). То тогда у Реконструктора + суровый C++ получается (на моей машине) время выполнения около 1 секунды, моя версия - 3.5 секунды. Если я забью на goto и на макроподстановки, то тогда, думаю, не хуже Реконструкторовой версии будет исполнение. А может, и получше. Ибо поглядите, как наш герой реализует вычисление арифметических операций:

code text
  1.                         case RPN_type_operator:
  2.                                 if ((theStack.si - nStartSP) < 2) return eval_unbalanced;
  3.  
  4.                                 op2 = theStack.pop();
  5.                                 op1 = theStack.pop();
  6.  
  7.                                 switch(m_BinRPN[nPos++])
  8.                                 {
  9.                                         case operator_mul:
  10.                                                 r = op1 * op2;
  11.                                                 break;
  12.  
  13.                                         case operator_idiv:
  14.                                                 r = (int) (op1 / op2);
  15.                                                 break;
  16.  
  17.                                         case operator_div:
  18.                                                 r = op1 / op2;
  19.                                                 break;
  20.  
  21.                                         case operator_mod:
  22.                                                 r = (int)op1 % (int)op2;
  23.                                                 break;


Во так вот! Во время "исполнения"! :lol: Спасибо, компилятор наверняка умный и умеет switch разбирать в хэш какой-нибудь. ;) Кстати, я хотел проверить, как реконструкторов продукт поведет себя если придется выполнять длинное выражение, добавил в code_test строку: f=180-3*5(1+2+3+4+6+6+7+8+9+10); Уже готовился злобно хохотать, но меня обломали - выдали вот чего: Runtime Error 1 : Stack Overflow

В общем, теперь слово комиссии. ;)

PS Я лично уже готов наслаждаться следующим актом Марлезонского балета - как Реконструктор будет становиться в позу что быстродействие-то ого-го, а если есть мелкие недостатки, так это все решаемо. :lol:
 
Это сообщение редактировалось 19.08.2008 в 19:36
US Сергей-4030 #19.08.2008 19:18  @Реконструктор#19.08.2008 18:42
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Реконструктор> Ага. 320% больше производительности из неоптимизированной программы. Действительно ясно.

Эт точно. И еще удобнее, когда программа не выдает требуемой функциональности. :lol: Реконструктор, в общем, ты лох. Я только что написал программу, которая дергает твою во все дыры по производительности в этом тесте. Вот она:

main() {
println(1);
}

Она, будучи запущена с твоим code_test, выполняется меньше чем за миллисекунду. Конечно, есть еще мелкие недоработки, баги, но конкретно этот тест - конфетка. :lol:

PS Ты типа правда не понимаешь, что реализация goto, макроподстановок и прочего, чего ты не реализовал, кое-что добавит ко времени исполнения? :lol:

PPS А я думал, он на самом деле профессиональный программист. :lol:

PPPS Не надо забывать, что я реализовал (типы, реентерабельные функции и т.п) , и что - Реконструктор. И совсем не надо забывать, за сколько была написана вполне работающая в известных пределах версия на Java и за сколько была написана версия на C++, которая не то, что не вполне работающая, а нихрена, по большому счету, неработающая.
 
Это сообщение редактировалось 19.08.2008 в 19:28
US Сергей-4030 #19.08.2008 19:21
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
В общем, еще раз, слово комиссии. Честно говоря, неудобно даже как-то, я думал, Реконструктор - серьезный человек. Типа, я уважал соперника, чего-то там упирался, разрабатывал, стеснялся посылать совсем уж неработающее говно. А тут - вот те, бабушка, и Юрьев день.
 
RU Серокой #19.08.2008 19:22
+
-
edit
 

Серокой

координатор
★★★
☤☤
Эх, Гриша. Как ж ты в машину-то свой контроллер ставил, если такие дыры?
Больше не раскалятся ваши колосники. Мамонты пятилеток сбили свои клыки. ©  
US Сергей-4030 #19.08.2008 19:26
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Чего-то я того, распалился, плохое впечатление наверняка произвожу на прочитателей и комиссию. Сорри, гайзы, но как-то малость неприятно, когда вот такие сюрпризы получаешь. Я-то пытался играть по правилам и подходить ответственно.
 
US Сергей-4030 #19.08.2008 19:29  @Реконструктор#19.08.2008 17:48
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Реконструктор>>> кстати, есть подобрения этого?
Сергей-4030>> А чего тут одобрять-то?
Реконструктор> Подобрение, не одобрение. Надо будет потрудится: У меня не очень раффинированый вариант проекта дает время 1062 на Core2 @ 1.8 MHz. Если не справишся, я этот круг соревнования прекращаю, так как основные выводы для себя я сделал.

Вот нихера себе. :lol: Впрочем, я тоже выводы для себя сделал. Товарищи прочитатели, оставьте свои комментарии тоже, пожалуйста, а то нам с Реконструктором будет не очень понятно, на чьей стороне просвещенное сообщество.
 
US Сергей-4030 #19.08.2008 19:32
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Кстати, вот тут мой вариант. Распакуйте, там есть readme.txt.

ЗЫ Понятно, что поскольку широко опубликованы исходники, конкурс закончен. Слово комиссии.
Прикреплённые файлы:
contest.zip (скачать) [446,53 кбайт, 43 загрузки] [attach=112565]
 
 
 
US Сергей-4030 #19.08.2008 19:38  @Серокой#19.08.2008 19:22
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Серокой> Эх, Гриша. Как ж ты в машину-то свой контроллер ставил, если такие дыры?

Программирование на уровне из регистра достать - в регистр всунуть - это одно, а когда головой думать надо - это совсем другое.
 
US Сергей-4030 #19.08.2008 19:40
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Гоги, скорее ищи партнера по ставкам, чтоб заматчил твою сотку. Я, конечно, не комиссия, но какое-то у меня подспудное чувство, что ты можешь выиграть пари. ;)
 
US Сергей-4030 #19.08.2008 19:52
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
И ишшо немножечко про собственно вычисления. Вариант Реконструктора:

code text
  1. {
  2.         b=(2^-2)^-2;
  3.         print(b);
  4. }


- выдает ~1.18. То есть, (1/4)-2 = 1.18. Нетривиально. :lol:

Теперь изменим скобки, пусть будет так:

{
b=2^(-2-2);
print(b);
}

- выдает 0.37521 То есть, 2^(1/4)= корень четвертой степени из 2 == 0.37. Совсем нетривиально. :lol:


И наконец, без скобок:

{
b=2-2-2;
print(b);
}

- выдает опять же 1.18 - наконец-то правильно! То есть имеем и неправильную группировку и неправильное вычисление. Что заставляет сильно думать - чего там, в тесте на время, на самом деле реконструкторова программа считает и как оно соотносится к тому, что она должна считать? И как долго она будет считать, если считать правильно, а не как Реконструктору на душу бог положит. ;)
 
US Сергей-4030 #19.08.2008 19:53
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Кстати, кажется, я понял. :) Реконструктор считает x^y как y^x. ;)
 
US Сергей-4030 #19.08.2008 20:30
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Кстати, если бы я был бы жестоким человеком, я бы обратил внимание уважаемейшего Реконструктора на то, что теперь, имея более-менее работающую программу я мог бы заменить критические блоки в своей программе хоть на C хоть на ассемблер - и тогда мой вариант отдерет даже и его недоделанный вариант во все места и по быстродействию тоже. И сделал бы я это явно раньше, чем Реконструктор бы привел свой вариант более-менее в соответствие со спецификациями. ;)

PS Я бы даже поспорил с ним по этому поводу на штуку баков, только он, наученный горьким опытом, не согласится нифига. :lol:
 
US Сергей-4030 #19.08.2008 20:52
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
code text
  1. {
  2.         i=0;
  3.         while(i<1000) {
  4.                 if(i==5)
  5.                         print(-1);
  6.                 print(i);
  7.                 i=i+1;
  8.         };
  9. }


Ну объясните мне, пожалуйста, почему

Error 4 : Syntax Error in "%s"
Line: if(i==5)print(-1)

??????!! Что не так????!! Как надо записать, чтоб заработало? Я даже не про ошибку, расскажите мне, как обойти, что тест сработал?
 
US Сергей-4030 #19.08.2008 21:03
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Кстати, а когда комиссия-то соберется? :) Ау, комиссия, кончайте политикой заниматься, сделайте перерывчик. ;)
 
US Сергей-4030 #19.08.2008 21:23
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
И ишшо напоследок. Конечно, в данном случае язык - дело десятое. Такую простую задачку можно было сделать хоть на Java хоть на чем. На Java таки малость попроще и поудобнее, чем на C++ - просто за счет лучшей платформы - но в общем, одно и то же. Я полагаю, на C++ мой вариант был бы готов примерно в те же сроки, может, раза в полтора дольше. Но мы не только про платформы говорили, мы и про программистов говорили. Реконструктора никто не тянул за язык когда он вылупался, что java-программисты не умеют программировать алгоритмы. Вот и посмотрите, у кого какие алгоритмы теперь, уважаемые господа. Тексты доступны. ;)
 
US Сергей-4030 #19.08.2008 21:30
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Я уж не говорю о том, что в любом представимом случае использования данного языка преимущество в скорости в 3 раза (даже если Реконструктор имплементирует спецификации полностью и при этом не потеряет в быстродействии) не будет иметь ровным счетом никакого значения. А будет разница только если числодробительные расчеты делать. Ну да это, впрочем, неважно, ибо Реконструктору пошли навстречу и сделали быстродействие приоритетом. ;)
 
1 7 8 9 10 11 12 13

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru