Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение  Обсуждение из раздела Школа ОБЕРОНА
№ 6076 18-12-2007 16:49 |  |
№ 6075 18-12-2007 16:44 |  |
Ответ на »сообщение 6071« (Борис Рюмшин)
Так ведь вроде предлагали ИГРЫ на Ящике писать, и как же там без floating point??
Я что, должен буду ждать единственно верной прорисовки сцены в три раза дольше просто потому, что компилятор после 486-го никто не развивал???
___________________________
Ответ на »сообщение 6070« (QR)
___________________________
Ответ на »сообщение 6037« (info21)
(MIPS - это миллион ветстоуновских инстр. в секунду). Т.е. налицо 3х-кратное превосходство Visual Studio. Использовался следуюший код
Если и действительно "язык с регулярным синтаксисом и отсутствием неструктурных операторов оптимизируется гораздо лучше", то хотелось бы иметь возможность также и практически пользоваться этими преимуществами, а не играть, по-принципу "ББ требует жертв", сегодня в игрушки с fps-ом соответствующим CPU 10-летней давности...
Обождите, граждане... но это тестирование работы оптимизатора FPU и основных инструкций, завязанных с ним. Естественно, стандартный набор инструкций 486-го, будет отличаться по скорости от оптимизированного под Core 2 (набор инструкций P3/4). Кто это отрицал?
Info21 говорит немного о других факторах быстродействия...
И что самое интересное, где Вам потребовалась высокая скорость работы с плавающей точкой?
Кстати, если уж совсем про скорость и качество (алгоритмическое)... возмём вот численные расчёты. Что лучше: 3 месяца считать и получить результат, или за тот же срок, с периодом в месяц получать хрень?
№ 6074 18-12-2007 16:35 |  |
Ответ на »сообщение 6070« (QR)
___________________________
Предлагаю в качестве простейшего примера рассмотреть т.н. Whetstone benchmark (известная числодробилка, проверяется быстродействие основных операций), благо обероновский код для xds имеется. Результаты получились такие (процессор Pentium Core 2, 2,4 GHz):
Visual Studio 9.0 - Whetstone MIPS 3076.9
XDS - Whetstone MIPS 2579.804
BlackBox - Whetstone MIPS 1150.6
(MIPS - это миллион ветстоуновских инстр. в секунду). Т.е. налицо 3х-кратное превосходство Visual Studio. Использовался следуюший код...
А какой сишный код использовался?
Вопрос, может быть, странный, но у меня в каталоге C:\XDS\SAMPLES\BENCH\ почему-то файла whet.c нет... :(
(Dry.c и linnew.c есть, а whet.c нет.)
№ 6073 18-12-2007 16:31 |  |
Ответ на »сообщение 6072« (Борис Рюмшин)
___________________________
C обероном и игрался в 1999 году. Недолго, пару недель.
ББ не видел. Современное положение дел в обероне не знаю.
Поэтому свой давнишнее шапочное знакомство за таковое считать не могу.
а мы уже и Хаскеля обчитаться успели.......
Вот и хорошо, хоть какая польза от промывания мозгов :)
№ 6072 18-12-2007 16:17 |  |
Ответ на »сообщение 6069« (Jack Of Shadows)
___________________________
Ответ на »сообщение 6068« (Илья Ермаков)
___________________________
Я оберон в глаза не видел, так что соседство ничего неозначает :)
Вот это да-а... :):):)
Он нам тут с 12-12-2002 22:42 (да уж 5 лет минуло...) мозги промывает, а сам ещё и Оберона не видел... а мы уже и Хаскеля обчитаться успели........
:D :D :D
№ 6071 18-12-2007 16:04 |  |
Ответ на »сообщение 6070« (QR)
___________________________
Ответ на »сообщение 6037« (info21)
(MIPS - это миллион ветстоуновских инстр. в секунду). Т.е. налицо 3х-кратное превосходство Visual Studio. Использовался следуюший код
Если и действительно "язык с регулярным синтаксисом и отсутствием неструктурных операторов оптимизируется гораздо лучше", то хотелось бы иметь возможность также и практически пользоваться этими преимуществами, а не играть, по-принципу "ББ требует жертв", сегодня в игрушки с fps-ом соответствующим CPU 10-летней давности...
Обождите, граждане... но это тестирование работы оптимизатора FPU и основных инструкций, завязанных с ним. Естественно, стандартный набор инструкций 486-го, будет отличаться по скорости от оптимизированного под Core 2 (набор инструкций P3/4). Кто это отрицал?
Info21 говорит немного о других факторах быстродействия...
И что самое интересное, где Вам потребовалась высокая скорость работы с плавающей точкой?
Кстати, если уж совсем про скорость и качество (алгоритмическое)... возмём вот численные расчёты. Что лучше: 3 месяца считать и получить результат, или за тот же срок, с периодом в месяц получать хрень?
№ 6070 18-12-2007 15:16 |  |
Ответ на »сообщение 6037« (info21)
Поскольку ссылки на код в указанном докладе не приводятся, сделать на его основе какое-то осмысленное заключение о быстроте ББ не представляется возможным.
Предлагаю в качестве простейшего примера рассмотреть т.н. Whetstone benchmark (известная числодробилка, проверяется быстродействие основных операций), благо обероновский код для xds имеется. Результаты получились такие (процессор Pentium Core 2, 2,4 GHz):
Visual Studio 9.0 - Whetstone MIPS 3076.9
XDS - Whetstone MIPS 2579.804
BlackBox - Whetstone MIPS 1150.6
(MIPS - это миллион ветстоуновских инстр. в секунду). Т.е. налицо 3х-кратное превосходство Visual Studio. Использовался следуюший код
MODULE TestWhet;
IMPORT Log := StdLog, Services, Math;
TYPE ARRAY4 = ARRAY 5 OF REAL;
VAR E1 : ARRAY4;
T, T1, T2 : REAL;
J, K, L : INTEGER;
ptime, time0, time1 : LONGINT;
PROCEDURE PA (VAR E : ARRAY4);
VAR J1 : INTEGER;
BEGIN
J1 := 0;
REPEAT
E [1] := ( E [1] + E [2] + E [3] - E [4]) * T;
E [2] := ( E [1] + E [2] - E [3] + E [4]) * T;
E [3] := ( E [1] - E [2] + E [3] + E [4]) * T;
E [4] := (-E [1] + E [2] + E [3] + E [4]) / T2;
J1 := J1 + 1;
UNTIL J1 >= 6;
END PA;
PROCEDURE P0;
BEGIN
E1 [J] := E1 [K]; E1 [K] := E1 [L]; E1 [L] := E1 [J];
END P0;
PROCEDURE P3 (X,Y : REAL; VAR Z : REAL);
VAR X1, Y1 : REAL;
BEGIN
X1 := X;
Y1 := Y;
X1 := T * (X1 + Y1);
Y1 := T * (X1 + Y1);
Z := (X1 + Y1) / T2;
END P3;
PROCEDURE POUT (N, J, K : INTEGER; X1, X2, X3, X4 : REAL);
VAR time1 : LONGINT;
BEGIN
time1:=Services.Ticks();
Log.IntForm (time1 - time0, Log.decimal, 7, 8FX, FALSE);
Log.IntForm (time1 - ptime, Log.decimal, 7, 8FX, FALSE);
Log.IntForm (N, Log.decimal, 8, 8FX, FALSE);
Log.IntForm (J, Log.decimal, 7, 8FX, FALSE);
Log.IntForm (K, Log.decimal, 7, 8FX, FALSE);
Log.RealForm (X1, 5, 14, 2,8FX);
Log.RealForm (X2, 5, 14, 2,8FX);
Log.RealForm (X3, 5, 14, 2,8FX);
Log.RealForm (X4, 5, 14, 2,8FX);
Log.Ln;
ptime := time1;
END POUT;
PROCEDURE Do*;
VAR NLoop, I, II, JJ : INTEGER;
N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11 : INTEGER;
X1, X2, X3, X4, X, Y, Z : REAL;
BEGIN
time0:=Services.Ticks();
ptime := time0;
T := 0.499975;
T1 := 0.50025;
T2 := 2.0;
NLoop := 100;
II := 800;
FOR JJ:=1 TO II DO
N1 := 0;
N2 := 12 * NLoop;
N3 := 14 * NLoop;
N4 := 345 * NLoop;
N5 := 0;
N6 := 210 * NLoop;
N7 := 32 * NLoop;
N8 := 899 * NLoop;
N9 := 616 * NLoop;
N10 := 0;
N11 := 93 * NLoop;
X1 := 1.0;
X2 := -1.0;
X3 := -1.0;
X4 := -1.0;
FOR I:=1 TO N1 DO
X1 := (X1 + X2 + X3 - X4)*T;
X2 := (X1 + X2 - X3 + X4)*T;
X3 := (X1 - X2 + X3 + X4)*T;
X4 := (-X1 + X2 + X3 + X4)*T;
END;
IF (JJ = II) THEN
POUT (N1, N1, N1, X1, X2, X3, X4);
END;
E1 [1] := 1.0;
E1 [2] := -1.0;
E1 [3] := -1.0;
E1 [4] := -1.0;
FOR I:=1 TO N2 DO
E1 [1] := (E1 [1] + E1 [2] + E1 [3] - E1 [4])*T;
E1 [2] := (E1 [1] + E1 [2] - E1 [3] + E1 [4])*T;
E1 [3] := (E1 [1] - E1 [2] + E1 [3] + E1 [4])*T;
E1 [4] := (-E1 [1] + E1 [2] + E1 [3] + E1 [4])*T;
END;
IF (JJ = II) THEN
POUT (N2, N3, N2, E1 [1], E1 [2], E1 [3], E1 [4]);
END;
FOR I:=1 TO N3 DO
PA (E1);
END;
IF (JJ = II) THEN
POUT(N3, N2, N2, E1 [1], E1 [2], E1 [3], E1 [4]);
END;
J := 1;
FOR I:=1 TO N4 DO
IF (J # 1) THEN J := 3 ELSE J := 2 END;
IF (J <= 2) THEN J := 1 ELSE J := 0 END;
IF (J >= 1) THEN J := 0 ELSE J := 1 END;
END;
IF (JJ = II) THEN
POUT (N4, J, J, X1, X2, X3, X4)
END;
J := 1;
K := 2;
L := 3;
FOR I:=1 TO N6 DO
J := J * (K-J) * (L-K);
K := L * K - (L-J) * K;
L := (L - K) * (K + J);
E1 [L-1] := J + K + L;
E1 [K-1] := J * K * L;
END;
IF (JJ = II) THEN
POUT (N6, J, K, E1 [1], E1 [2], E1 [3], E1 [4]);
END;
X := 0.5;
Y := 0.5;
FOR I:=1 TO N7 DO
X:=T*Math.ArcTan(T2*Math.Sin(X)*Math.Cos(X)/(Math.Cos(X+Y)+Math.Cos(X-Y)-1.0));
Y:=T*Math.ArcTan(T2*Math.Sin(Y)*Math.Cos(Y)/(Math.Cos(X+Y)+Math.Cos(X-Y)-1.0));
END;
IF (JJ = II) THEN
POUT (N7, J, K, X, X, Y, Y);
END;
X := 1.0;
Y := 1.0;
Z := 1.0;
FOR I:=1 TO N8 DO
P3 (X,Y,Z);
END;
IF (JJ = II) THEN
POUT (N8, J, K, X, Y, Z, Z);
END;
J := 1;
K := 2;
L := 3;
E1 [1] := 1.0;
E1 [2] := 2.0;
E1 [3] := 3.0;
FOR I:=1 TO N9 DO
P0;
END;
IF (JJ = II) THEN
POUT (N9, J, K, E1 [1], E1 [2], E1 [3], E1 [4])
END;
J := 2;
K := 3;
FOR I:=1 TO N10 DO
J := J + K;
K := J + K;
J := K - J;
K := K - J - J;
END;
IF (JJ = II) THEN
POUT (N10, J, K, X1, X2, X3, X4)
END;
X := 0.75;
FOR I:=1 TO N11 DO
X := Math.Sqrt (Math.Exp (Math.Ln (X)/T1))
END;
IF (JJ = II) THEN
POUT (N11, J, K, X, X, X, X)
END;
END;
time1:=Services.Ticks();
Log.Ln;
Log.String ('Double Whetstone KIPS ');
Log.RealForm(100.0 * NLoop * II * Services.resolution / (time1 - time0),5, 14, 0,8FX);
Log.Ln;
Log.String ('Whetstone MIPS ');
Log.RealForm (NLoop* II * Services.resolution/((time1 - time0) * 10.0),5, 14, 0,8FX);
Log.Ln;
END Do;
END TestWhet.
Если и действительно "язык с регулярным синтаксисом и отсутствием неструктурных операторов оптимизируется гораздо лучше", то хотелось бы иметь возможность также и практически пользоваться этими преимуществами, а не играть, по-принципу "ББ требует жертв", сегодня в игрушки с fps-ом соответствующим CPU 10-летней давности...
___________________________
Ответ на »сообщение 6036« (info21)
___________________________
Откуда сии факторы-то? У меня вот другие были:
http://www.inr.ac.ru/~blackbox/Oberon.Day/talks/ftkachov.pdf
там смотреть страницу 8.
№ 6069 18-12-2007 15:15 |  |
Ответ на »сообщение 6068« (Илья Ермаков)
___________________________
Я оберон в глаза не видел, так что соседство ничего неозначает :)
Anyway, судя по вашему описанию, оберон гораздо ближе к исследовательскому полигону нежели его старший брат паскаль.
Идем дальше. А как у вас с удаленным подключением к программам ? Лисп и erlang оба позволяют подключаться к программе на любой машине и проделывать все тоже самое (смотреть и менять внутренности) так как будто, программа запущена локально.
№ 6068 18-12-2007 15:01 |  |
ООтвет на »сообщение 6066« (Jack Of Shadows)
___________________________
Есть такая возможночть в обероне ? Или надо каждый раз убивать запущенную программу, компилировать, запускать заново ?
Нуууу... Уж от Вас не ожидал.. Вроде столько лет рядом с темой Оберонов ходите, соседи, можно сказать :-)
Мы целый день напролёт этим Вашим интерпретатором пользуемся. "В одном сеансе", без перезапуска среды, прямо в ней что хотим тестим, запускаем, переделываем опять запускаем... Открываем окошко просмотра памяти и прямо мышкой гуляем по ссылкам и по чему хотим... На лету переделываем что угодно - от интерфейсов и реализаций модулей до - не говоря уже про такую мелочь - разметки диалогов. Перезапуск или "убивать" - да шо Вы, как можно! Шо ж мы, дикие сишники какие? :-) Только вот поначалу никто не верит, что всё это не интерпретация, а компиляция прямо в машинный код... с подгрузкой и отгрузкой по требованию.. Уж шибко всё похоже на Лиспы и Смоллтоки.
№ 6067 18-12-2007 14:11 |  |
Ответ на »сообщение 6066« (Jack Of Shadows)
___________________________
1. Основной чертой исследовательского полигона является интерпретатор. Возможность вручную запустить любую функцию и посмотреть результат, не загружая для этого программу.
В Обероне единица исполнения -- это процедура.
Так что в обероновских осях и средах такая возможность есть.
Для этого процедура должна быть экспортирована.
2. В лиспе можно запущенную уже программу инспектировать и менять ее свойства, данные, переменные, функции, структуру обьектов. Все на лету, без перезагрузки запущенной программы, без потери работающей сессии.
<...>
Есть такая возможночть в обероне?
Такая возможность в обероновских средах есть.
(Я сейчас конкретно говорю о ББ, где диалоговые средства работают на основе метаинформации.)
Это и правда очень удобно.
Добавить свое сообщение
Отслеживать это обсуждение 
Дополнительная навигация: |
|