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

 
1 2 3 4 5 6 7 13
RU Kernel3 #06.08.2008 23:50  @Татарин#06.08.2008 23:47
+
-
edit
 

Kernel3

аксакал

Татарин> Интересно, что у Кернела за машина такая?
Intel Core2Duo E8400 3GHz.
Broken Windows® cures my ills and makes me feel alright... ©  
US Сергей-4030 #07.08.2008 00:01
+
-
edit
 

Сергей-4030

исключающий третье
★★
Еще одно соображение. Синтаксис вполне ложится на C. Т.е. я могу распарсить входной поток и сгенерировать эквивалентную программу на C. Затем ее скомпилировать и выполнить. Я надеюсь, такие трюки мы позволять не будем? Мы же соревнуемся в программировании, а не в вызывании интерфейсов?
 
US Сергей-4030 #07.08.2008 00:17
+
-
edit
 

Сергей-4030

исключающий третье
★★
Роман, а как с Линуксом? Заработало?
 
EE Татарин #07.08.2008 00:26  @Сергей-4030#07.08.2008 00:01
+
-
edit
 

Татарин

координатор
★★★★☆
Сергей-4030> Еще одно соображение. Синтаксис вполне ложится на C. Т.е. я могу распарсить входной поток и сгенерировать эквивалентную программу на C. Затем ее скомпилировать и выполнить. Я надеюсь, такие трюки мы позволять не будем? Мы же соревнуемся в программировании, а не в вызывании интерфейсов?
Мы уже договорились о том, что можно применять, а что нет.
Если Реконструктору легче написать компилятор на С, затем распарсить этот язык, конвертнуть его в С и натравить на него самописаный компилятор... что ж - почему нет? Я лично никаких претензий иметь не буду. :)
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
US Сергей-4030 #07.08.2008 00:27  @Татарин#06.08.2008 23:18
+
-
edit
 

Сергей-4030

исключающий третье
★★
Татарин> После получения решения от Реконструктора постараюсь прогнать тесты и Вашего, и его решения один за другим на одной и той же машине. Затем каждый выскажется по поводу кода и внутренней эстетики (на это там два балла из 10 зарезервированы), затем усредним результаты от каждого жюрящего. :)

Это, видимо, значит, что у меня есть еще некоторое время пригладить код и потестировать. Будет время вечером - займусь, пожалуй. Если Реконструктор пришлет к тому времени решение, прошу считать моим решением текущее на момент данного постинга.
 
US Сергей-4030 #07.08.2008 02:35  @Татарин#06.08.2008 23:47
+
-
edit
 

Сергей-4030

исключающий третье
★★
Kernel3>>>> Заработало, timetest выполнилась за 2.5 сек. ровно :)
Татарин> Татарин>> Да, всё ОК. Но на моём ноуте работало три секунды. А вроде только купил... :\
Сергей-4030>> Буржуи, блин, три секунды им много. :) На XT бы вас всех. ;)
Татарин> Минус пять баллов за неуважение к суду. :)

Эээ... сорри, был неправ. Признаю - три секунды это просто тормоза, отстой у вас ноутбук, как вас угораздило купить такой? ;)

Татарин> Интересно, что у Кернела за машина такая?

А я вот тока что на домашнем сервере (двухпроцессорный Pentium III-500 Mhz) выполнил - 27.5 секунд, во как. ;)

ЗЫ Сервер под Убунту, никаких изменений не понадобилось вовсе. Стартовал как родной. Это к вопросу о том, что хорошо переносимо, а что условно переносимо. ;) Правда, графику не попробовал - не установлена на сервере графика.
 
EE Татарин #07.08.2008 03:28  @Сергей-4030#07.08.2008 02:35
+
-
edit
 

Татарин

координатор
★★★★☆
Сергей-4030> А я вот тока что на домашнем сервере (двухпроцессорный Pentium III-500 Mhz) выполнил - 27.5 секунд, во как. ;)
А что ж не на ХТ? Буржуйствуюем помаленьку? :)

Сергей-4030> ЗЫ Сервер под Убунту, никаких изменений не понадобилось вовсе. Стартовал как родной. Это к вопросу о том, что хорошо переносимо, а что условно переносимо. ;) Правда, графику не попробовал - не установлена на сервере графика.
То, что у Явы хорошо с переносимостью - это правда. Другая правда в том, что истинная переносимость на практике не очень-то и востребована.
Я знаю только один более-менее приличный пример: ОпенОфис.

На рынке ПЦ довлеет винда, а на серверах, как правило, заказчик с самого начала знает, под чем именно будет бежать приложение. Ситуации, когда требуется перенести крупное линуксовое серверное приложение на виндовый сервер или наоборот - редки, и, как правило, связаны с геммороем (такой переход в серьёзной организации - это вообще большой гемморой).
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
BG Реконструктор #07.08.2008 12:06
+
-
edit
 
Кстати, о переносимости никто ничего не говорил. :(
 
EE Татарин #07.08.2008 12:23  @Реконструктор#07.08.2008 12:06
+
-
edit
 

Татарин

координатор
★★★★☆
Реконструктор> Кстати, о переносимости никто ничего не говорил. :(
Именно поэтому этого и не требуется для выигрыша спора: условия его оговорены. :)

Но переносимость Яве как языку в плюс, согласись?
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
RU Kernel3 #07.08.2008 13:48  @Сергей-4030#07.08.2008 00:01
+
-
edit
 

Kernel3

аксакал

Сергей-4030> Еще одно соображение. Синтаксис вполне ложится на C. Т.е. я могу распарсить входной поток и сгенерировать эквивалентную программу на C. Затем ее скомпилировать и выполнить. Я надеюсь, такие трюки мы позволять не будем?
Будем, если компилятор С тоже будет своим :F
Broken Windows® cures my ills and makes me feel alright... ©  
RU Balancer #08.08.2008 20:28  @Сергей-4030#07.08.2008 00:17
+
-
edit
 

Balancer

администратор
★★★★★
Сергей-4030> Роман, а как с Линуксом? Заработало?

Двое суток за компом не сидел. И сейчас не за проверки сяду, а новости про Грузию читать. Завтра во второй половине дня м.б. погляжу.
 
US Сергей-4030 #09.08.2008 10:07
+
-
edit
 

Сергей-4030

исключающий третье
★★
В общем, сегодня мне было скучно и я сделал вот что:

1. Реализовал другие типы нежели число, а именно - строки и целые. Теперь можно писать:

println('Here we go',code);

2. Реализовал всю арифметику - логику, побитовые выражения и т.п.

3. Дополнил IF нормальным else.

4. Вставил оператор for

5. Реализовал user-defined функции. Теперь можно написать так:

code text
  1. {
  2.     function max(a,b) {
  3.          if(a>b)
  4.               max=a
  5.          else
  6.               max=b
  7.     };
  8.  
  9.     print('Maximum is:',max(5,10));
  10. }


6. Вставил всякие служебные функции типа считать число со стандартного ввода.

И честно говоря, я уже даже не знаю, чего бы такого реализовать. На самом деле, надоело, напишу ишшо нормальную документацию (ибо время позволяет, похоже) - и усе, вперед.
По этому поводу вопрос - такое усложнение немного ухудшило скорость. Раньше timetest был на моей машине 2.7 сек, а теперь 3.4. А у нас быстродействие было с весом 5. Поэтому интересуюсь я - у нас быстродействие оценивается как "да/нет"? Если программа у одного участника на 10% медленнее, чем у другого, то это как, все 5 пойнтов потеряны, или нет?
 
US Сергей-4030 #09.08.2008 10:10
+
-
edit
 

Сергей-4030

исключающий третье
★★
Кстати, о бесконечной арифметике - собственно, это фора Реконструктору, опять же. :( Потому как в поставке JVM есть реализация бесконечной арифметики, надо только исходники содрать оттуда. Ну да ладно, сдирать - нечестно.

ЗЫ С другой стороны, за месяц можно ничего и не писать, за месяц спокойно можно найти готовый парсер. Ну да будем доверять людям. ;)
 
RU Kernel3 #09.08.2008 21:02  @Сергей-4030#09.08.2008 10:07
+
-
edit
 

Kernel3

аксакал

Сергей-4030> По этому поводу вопрос - такое усложнение немного ухудшило скорость. Раньше timetest был на моей машине 2.7 сек, а теперь 3.4. А у нас быстродействие было с весом 5. Поэтому интересуюсь я - у нас быстродействие оценивается как "да/нет"?
Нет :)
Broken Windows® cures my ills and makes me feel alright... ©  
US Сергей-4030 #09.08.2008 21:03
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сделал последние правки, чтоб можно было пользоваться рекурсией в функциях. Сам себе враг - по спецификациям оно нахрен не нужно, а если бы функции были бы нереентерабельными, сэкономил бы процентов 10 быстродействия. Ну да ладно, так интереснее. Ждем-с Реконструктора все равно.

Зато теперь можно делать вычисление сорокового члена числа Фибоначчи:

code text
  1. {
  2.         function fibo(n) {
  3.                 if(n==0)
  4.                         fibo=0
  5.                 else if(n==1)
  6.                         fibo=1
  7.                 else
  8.                         fibo=fibo(n-1)+fibo(n-2)
  9.         }
  10.        
  11.         n=40;
  12.         begin=time();
  13.         println('Fibo(',n,')=',fibo(n));
  14.         end=time();
  15.         println("Time:",end-begin);
  16. }


Результат:358219 тиков, т.е. 358 секунд.


ЗЫ Неправильно публиковать результаты тестов. Реконструктор теперь имеет оценку быстроты моего интерпретатора и может свой оптимизировать пока не обгонит. Дурак я, дурак.

ЗЗЫ Зато если и в этих тепличных условиях Реконструктор не выиграет спор - ни у кого не будет ни грамма сомнений, что такое C++ и что такое Java. ;) Как и сомнений в том, кто настоящие разработчики - java-guys или сишники из Болгарии. ;)
 
US Сергей-4030 #09.08.2008 21:07  @Kernel3#09.08.2008 21:02
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>> По этому поводу вопрос - такое усложнение немного ухудшило скорость. Раньше timetest был на моей машине 2.7 сек, а теперь 3.4. А у нас быстродействие было с весом 5. Поэтому интересуюсь я - у нас быстродействие оценивается как "да/нет"?
Kernel3> Нет :)

OK. Тогда единственное, что я еще собираюсь сделать - написать относительно нормальную документацию. Завтра, пожалуй. И все, спать. ;)
 
BG Реконструктор #09.08.2008 23:46
+
-
edit
 
Гм, у меня какое-то волшебство с точностью :(
Можете выполнить следущий код, на чем-нибудь != VC 6 ?

x = 3.14;
y = 4.001;
z = 13.333;
n1 = 1;
n2 = 8;
f1 = 100;
f3afdkjfkj = 3;

result = (((((10+2)*x) + (((x/4) / z) / (n2 >> n1))) / ((x*2) - f1)) * 1024) /

(((2 << f3afdkjfkj) / (f3afdkjfkj / 2)) + 101);
 
US Сергей-4030 #10.08.2008 01:42  @Реконструктор#09.08.2008 23:46
+
-
edit
 

Сергей-4030

исключающий третье
★★
Реконструктор> Гм, у меня какое-то волшебство с точностью :(
Реконструктор> Можете выполнить следущий код, на чем-нибудь != VC 6 ?
Реконструктор> x = 3.14;
Реконструктор> y = 4.001;
Реконструктор> z = 13.333;
Реконструктор> n1 = 1;
Реконструктор> n2 = 8;
Реконструктор> f1 = 100;
Реконструктор> f3afdkjfkj = 3;
Реконструктор> result = (((((10+2)*x) + (((x/4) / z) / (n2 >> n1))) / ((x*2) - f1)) * 1024) /
Реконструктор> (((2 << f3afdkjfkj) / (f3afdkjfkj / 2)) + 101);

У меня программа выдает -3.456656888203944. А чего там с точностью, вроде решили особо не заморачиваться с точностью?
 
US Сергей-4030 #10.08.2008 09:30
+
-
edit
 

Сергей-4030

исключающий третье
★★
Ну, все, доделал, вставил документацию, разослал комиссии. Бум ждать теперь. ;)
 
BG Реконструктор #10.08.2008 16:19  @Сергей-4030#10.08.2008 01:42
+
-
edit
 
Сергей-4030> У меня программа выдает -3.456656888203944. А чего там с точностью, вроде решили особо не заморачиваться с точностью?

Не знаю. У меня результат -3.4576798838561897. VC++ 6.0 выдает результат -3.6882865205897399, что уже совсем не то. Что у тебя там жава считает?
 

Murkt

Pythoneer

У меня говорит -3.5201593742416417.
[team Їжачки - сумні падлюки]  
US Сергей-4030 #10.08.2008 19:22  @Реконструктор#10.08.2008 16:19
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>> У меня программа выдает -3.456656888203944. А чего там с точностью, вроде решили особо не заморачиваться с точностью?
Реконструктор> Не знаю. У меня результат -3.4576798838561897. VC++ 6.0 выдает результат -3.6882865205897399, что уже совсем не то. Что у тебя там жава считает?

Что значит - не то? Вот:

code text
  1. {
  2.  
  3.         x = 3.14;
  4.         y = 4.001;
  5.         z = 13.333;
  6.         n1 = 1;
  7.         n2 = 8;
  8.         f1 = 100;
  9.         f3afdkjfkj = 3;
  10.  
  11.         op1= ((10+2)*x);
  12.         op2= (((x/4) / z) / (n2 >> n1));
  13.         op3= ((x*2) - f1);
  14.         op4= (2 << f3afdkjfkj) / (f3afdkjfkj / 2);
  15.        
  16.        
  17.         for(i=1;i<5;i=i+1)
  18.                 println( 'op['+i+']='+op[i] );
  19.        
  20.        
  21.         result = ( ( (op1 + op2) / op3) * 1024)
  22.                     /
  23.                     ((op4)+101);
  24.         println(result);
  25.  
  26. };


выдает

op[1]=37.68
op[2]=0.01471911797794945
op[3]=-93.72
op[4]=16

-3.456656888203944

Но тут есть один нюанс - результат целого деления - целое число. Если пользоваться вещественными:

code text
  1. {
  2.  
  3.         x = 3.14;
  4.         y = 4.001;
  5.         z = 13.333;
  6.         n1 = 1;
  7.         n2 = 8;
  8.         f1 = 100;
  9.         f3afdkjfkj = 3;
  10.  
  11.         op1= ((10+2)*x);
  12.         op2= (((x/4.) / z) / (n2 >> n1));
  13.         op3= ((x*2.) - f1);
  14.         op4= (2 << f3afdkjfkj) / (f3afdkjfkj / 2.);
  15.        
  16.        
  17.         for(i=1;i<5;i=i+1)
  18.                 println( 'op['+i+']='+op[i] );
  19.        
  20.        
  21.         result = ( ( (op1 + op2 ) / op3) * 1024)
  22.                     /
  23.                     ((op4)+101);
  24.         println(result);
  25.  
  26. }


то получается:

op[1]=37.68
op[2]=0.01471911797794945
op[3]=-93.72
op[4]=10.666666666666666
-3.6882863891307944

Если это перевычислить на калькуляторе, результаты в точности те же, исключая разницу в числе разрядов (у меня - double). Скажем, Microsoft Calculator дает:

1 = 37.68
2 = 0.014 719 117 977 949 448 736 218 405 460 137
3 = -93.72
4 = 10.666666666666666666666666666667

результат: -3.6882863891307948320662265796966

Разница - в 16 знаке после запятой, чего еще?

ЗЫ Кстати, спасибо за наводку, у меня целая арифметика была сделана отдельно и если делить два целых числа - выводится целое число, дробная часть отбрасывается. Это правильно "в общем", но противоречит спецификациям. Будем править.
 
US Сергей-4030 #10.08.2008 19:25
+
-
edit
 

Сергей-4030

исключающий третье
★★
А вообще, вопрос по теме - надо ли делать результатом деления двух целых чисел вещественным? Уважаемая комиссия, вы как? Что должно выдаваться при таком операторе:

print(3/2)

- 1.5 или 1?
 
US Сергей-4030 #10.08.2008 19:33
+
-
edit
 

Сергей-4030

исключающий третье
★★
О, и еще спасибо, баг нашел пока копался в вашем примере, у меня при операторе сложения вещественных чисел у второго операнда участвовала только целая часть. %( Поправлю и ночью пошлю фикс.
 
RU Kernel3 #10.08.2008 20:58  @Сергей-4030#10.08.2008 19:25
+
-
edit
 

Kernel3

аксакал

Сергей-4030> Что должно выдаваться при таком операторе:
Сергей-4030> print(3/2)
Сергей-4030> - 1.5 или 1?
Думаю, 1.5. Речь изначально же про вещественные числа шла :)
Broken Windows® cures my ills and makes me feel alright... ©  
1 2 3 4 5 6 7 13

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