Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Geniepro

Страницы: 1 ... 125 126 [127] 128 129 ... 131
1891
Общий раздел / Re:Oberon-07M
« : Март 22, 2011, 07:16:26 am »
Новые компиляторы по-хорошему нужно прогонять на множестве тестов, специально разработанных для проверки компилятора на соответствие спецификации.
Тестирование доказывает лишь наличие ошибок.
Во французском университете INRIA разработали верифицированный компилятор подмножества Си для PowerPC -- это куда надёжнее, чем просто тестирование на наборе тестов...

1892
Общий раздел / Re:Oberon-07M
« : Март 22, 2011, 06:13:40 am »
Компилятор TinyC, кстати, забавно оптимизировал эту функцию:
#define WHILE     for(;;) if (
#define DO        ) {
#define ELSIF     ; } else if (
#define WEND      ; } else break

int gcd(int x, int y)
{
    WHILE x > y DO x = x - y
    ELSIF x < y DO y = y - x
    WEND;
    return x;
}
декомпиляция выдала такое:
int __cdecl sub_401070(int a1, int a2)
{
  while ( 1 )
  {
    while ( a1 > a2 )
      a1 -= a2;
    if ( a1 >= a2 )
      break;
    a2 -= a1;
  }
  return a1;
}
Вполне вменяемо. Хотя "if ( a1 >= a2 ) break;" немного смущает.
Вот так было бы лучше:
int gcd(int x, int y)
{
    do
    {
        while (x > y) x -= y;
        while (x < y) y -= x;
    } while (x != y);
    return x;
}

1893
Общий раздел / Re:Oberon-07M
« : Март 22, 2011, 05:58:33 am »
Вообще как-то странно компилирует этот компилятор. Вот, декомпилировал эту функцию:
  PROCEDURE GCD(x, y: INTEGER) : INTEGER;
  BEGIN
    WHILE x > y DO x := x - y
    ELSIF x < y DO y := y - x
    END;
    RETURN x
  END GCD;
Получил страшный ужас:
int __cdecl sub_407971(int a1, int a2, int a3)
{
  signed int v0; // ecx@2
  signed int v1; // ecx@6
  int  r; // [sp+0h] [bp+0h]@1

  dword_409FFC = (int)& r;
  while ( 1 )
  {
    v0 = 1;
    if ( a3 <= a2 )
      v0 = 0;
    if ( v0 != 1 )
      break;
    a3 -= a2;
  }
  while ( 1 )
  {
    v1 = 1;
    if ( a3 >= a2 )
      v1 = 0;
    if ( v1 != 1 )
      break;
    a2 -= a3;
  }
  return a3;
}
Во-первых, какой-то левый неиспользуемый параметр появился у функции.
Во-вторых, самое главное, цикл:
    WHILE x > y DO x := x - y
    ELSIF x < y DO y := y - x
    END;
скомпилировался в что-то типа этого:
    WHILE x > y DO x := x - y END;
    WHILE x < y DO y := y - x END;
Но это же неверное представление цикла Дейкстры!

1894
Общий раздел / Re:Oberon-07M
« : Март 22, 2011, 04:33:02 am »
Пара багрепортов от меня:

1) Компилятор не ругается на использование неинициализированных переменных.
Это затрудняет отладку программ.

2) Виртовский вариант цикла Дейкстры реализован как-то неправильно. Вот стандартный пример его использования:
MODULE TestGCD;

  IMPORT c := Console;

  PROCEDURE GCD(x, y: INTEGER) : INTEGER;
  BEGIN
    WHILE x > y DO x := x - y
    ELSIF x < y DO y := y - x
    END;

    ASSERT(x = y);

    RETURN x
  END GCD;

BEGIN
  c.Int(GCD(255, 150));
  c.Ln;
END TestGCD.
Программа падает на ассерте, в логе пишется:
TestGCD.GCD
x INTEGER 105
y INTEGER 45
хотя при данных аргументах (255 и 150) обе переменные должны быть равны 15, и сам цикл должен завершаться, когда x = y.

Сишный аналог этой процедуры работает правильно:
#define WHILE     for(;;) if (
#define DO        ) {
#define ELSIF     ; } else if (
#define WEND      ; } else break
#define ASSERT(p) if (!(p)) { printf("Oops in %s at line %d", __FILE__, __LINE__); exit(1); }

int gcd(int x, int y)
{
    WHILE x > y DO x = x - y
    ELSIF x < y DO y = y - x
    WEND;

    ASSERT(x == y);

    return x;
}

3) Вот такой вариант тоже падает на ассерте:
  PROCEDURE GCDrec(x, y: INTEGER) : INTEGER;
    VAR
      result : INTEGER;
  BEGIN
    IF    x > y THEN result := GCDrec(x-y,  y )
    ELSIF x < y THEN result := GCDrec( x,  y-x)
    ELSE             result := x
    END;

    ASSERT(x = y);

    RETURN result
  END GCDrec;
Такое впечатление, что что-то не то с операциями сравнения...

1895
Общий раздел / Re:[Oberon-07] Менеджер памяти.
« : Март 22, 2011, 04:20:38 am »
Вообще, у меня ощущение, что компилятор Оберона-07 не слишком сложная штука, может алтернативу на хаскеле запилим ? :-)
Я думал над этим, но пришёл к выводу, что практически это вряд ли кому нужным будет. Если уж делать, так более современный язык...

1896
Общий раздел / Re:[Oberon-07] Менеджер памяти.
« : Март 21, 2011, 05:20:37 pm »
Ну, время покажет. Rifat сделал компилятор, вот и посмотрим, что из этого получится со временем...

1897
Это я так понимаю Ваш вариант ответа  ;) ?   - поражает своей бессмысленностью и отрывом от контекста обсуждения...  :-*
Вапще мне непонятно, что там Вам непонятно.

Это же уже тут обсуждалось, и довольно подробно -- все низкоуровневые средства вроде ввода/вывода, изменяемых переменных, процессов, в Хаскелле завёрнуты в монаду IO, которая является типом данных языка Хаскелл, и, соответственно, их (этих низкоуровневых средств) использование контроллируется системой типов Хаскелла.
Реализованно это на уровне языка программирования без использования каких-то дополнительных средств типа IDE. Значит, в принципе для контроля использования низкоуровневых средств можно обойтись без IDE.

Что тут может быть непонятно? В чём здесь бессмысленность и отрыв от контекста?
Если тема, поднятая Сергеем Прохоренко, была оторвана от контекста обсуждения этого топика, то претензии к нему.

1898
Это я так понимаю Ваш вариант ответа  ;) ?   - поражает своей бессмысленностью и отрывом от контекста обсуждения...  :-*
Меня в свою очередь поражает Ваше (не)понимание простых казалось бы вещей, обсуждающихся здесь.
Или Вы просто троллингом занимаетесь от безделья?

1899
ЧТО строится в Хаскеле, с КАКОЙ ЦЕЛЬЮ, КАКИМИ средствами, для КОГО,  и наконец , ДЛЯ ЧЕГО ИДЕ не нужна?

... необходимо иметь среду разработки (IDE), которая бы сопротивлялась неуместному использованию низкоуровневых средств. То есть, одним только языком тут не обойтись.
То же самое делается в Haskell'e на уровне системы типов языка :-)
IDE для этого не нужна.

1900
Спасибо (всем за ссылки), но Богатырев насколько я понял (поправьте)  вел речь в первую очередь о ОС в которую ПОЛНОСТЬЮ ортогонально (то есть независимо) интегрируется (а также единовременно поддерживются) несколько языков. Я предлагаю  другое...
Он предлагал разработать семейство дополняющих языков -- от самого низоуровневого до языка интеграции систем, написанных на языках более низкого уровня.
Вы предложили два уровня языков, а Богатырёв то ли три, то ли четыре, уже точно не помню...

1901
Что-то подобное когда-то предлагал Р.Богатырёв, да так вроде и заглохло...
Можно ссылку или направление поиска? (интересно насколько он проработал идею)...
В основном вот:
http://rbogatyrev.livejournal.com/2007/07/17/
http://rbogatyrev.livejournal.com/2007/08/24/

Вообще эти обсуждения велись на форуме Oberoncore и вроде как были перенесены в архив.

1902
Что-то подобное когда-то предлагал Р.Богатырёв, да так вроде и заглохло...

1903
ЭЭЭ так он смешанный...

Ну что значит "смешанный"?
Любой промышленный язык обречён иметь дело с вводом/выводом информации, так что императивная часть неизбежно будет присутсвовать в любом полноценном языке.
Другое дело, что стандартные языки типа сей смешивают императивную и функциональную части программы. Вот они и есть "смешанные"...

И вот как раз такое разделение программы на чистую и грязную части помогает бороться со сложностью. Так что диссонансы возникают лишь у упёртых императивщиков, дальше оберонов и сей не видящих...

1904
Дэк этта… Хаскель это ж в том числе и прекрасный императивный язык со строгой системой типов и простым синтаксисом :-)
Не понял таки Императивный или Функциональный?
Ну это зависит от того, как Вы его используете. На Хаскелле можно писать и в чисто функциональном стиле, и в жёстко-императивном (ввод/вывод, параллельные процессы и т.д.).
Просто эти два мира (Функциональный и Императивный) в Хаскелле строго разделены, и если функциональщина без проблем может использоваться в императивной части программы, то императивщина находится в специальной резервации -- в монаде ввода/вывода.

1905
Например, я ТОЧНО знаю что уровень владения абстрактными понятиями НЕОБХОДИМЫМИ для программирования на Хаскеле = превышает тот , который имеют наши студенты (математики) на 1 курсе (тогда как программирование на том же ББ можно давать им и на 1 курсе), на эту хрень накладываются еще абстракции задачи.

John O’Donnell, Cordelia Hall and Rex Page
"Discrete Mathematics Using a Computer"

Учебник по дискретной математике, являющийся заодно и учебником по Хаскеллу.

Короче, на ФИГА ЭТО НУЖНО, КОМУ, ПОЧЕМУ...с вариантами ответа -мазохистам, культистам (от чистой математики), и just for fun ... полностью согласен...

Ну хотя бы для того, что бы изучать дискретную математику.

Страницы: 1 ... 125 126 [127] 128 129 ... 131