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

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


Сообщения - Jordan

Страницы: 1 2 [3] 4 5 ... 19
31
Общий раздел / Re: Делаем строку на O7
« : Март 15, 2014, 02:47:43 pm »
Вот что получилось в oberonjs:
https://github.com/vladfolts/oberonjs/wiki/eberon-strings
Критикуйте :)

Что критиковать? Отличная работа, теперь в языке нормальные строки, которые должны быть.
Как дела обстоят с юникодом? Будет отдельный тип вроде WSTRING, или при компиляции можно выбрать, считать STRING unicod'ом?

Во free pascal'е 2 вариант, есть ключ компиляции, который string заменяет на wstring. Исходники переделывать не нужно. По умолчанию utf8. Как мне кажется, лучше сделать по умолчанию utf32, а уже в зависимости от системы, внутренние функции будут конвертировать в системную кодировку. К примеру в windows utf16, в linux utf8.

32
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Январь 22, 2014, 04:48:28 pm »
Статья Вирта в переводе.

Хорошие идеи: взгляд из Зазеркалья

Цитировать
Аналогичным примером является инструкция проверки границ массива. Она сравнивала индекс массива с нижней и верхней границами массива и вызывала системное прерывание, если значение индекса не находилось в этом диапазоне, объединяя, тем самым, две инструкции сравнения и две инструкции ветвления.

33
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Январь 22, 2014, 04:34:35 pm »
MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 999999999999999999999999999999999999999999999999999999;
M[I] := 5;
 JS.alert(M[I]);
END test.

Возможность компиляции такого кода, явно не соответствует рапорту. :)

34
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Январь 22, 2014, 04:25:20 pm »
Цитата: vlad
Да, есть такая проблема. Просто она не приоритетная. Потому что:
1. Сам репорт ничего не говорит про проверки. Т.е., текущая реализация никак не противоречит оригинальному репорту. Так что вообще говоря лучше начинать с убеждения Вирта в важности таких проверок и необходимости включения их в репорт.

Опыт си языков, доказал, что данные проверки необходимы. Всегда можно добавить флаг компиляции. Убеждать Вирта, смешно... Данные проверки не меняют язык, потому их наличие ни как не противоречит репорту.

Цитата: vlad
2. В случае компиляции в JS получаемый undefined behavior конечно неприятен, но не настолько фатален как в случае native кода - память не портится (пресловутая герметичность сохраняется).

Да, но ошибка критична. В любом случае программа будет работать неправильно.

Цитата: vlad
3. Решение этой проблемы сильно зависит от того, к чему придет компилятор в плане генерации кода. И от того к чему придут браузеры. В JS уже есть типизированные массивы, возможно добавят и возможность проверки индексов - в этом случае проблема решится автоматически.

Идею понял. С тем же успехом можно ждать пока в браузеры встроят поддержку оберон.
Неужели данная проверка сложнее, чем уже написанный компилятор, или это личное убеждение?

Самое главное, данные ошибки отлавливаются в рунтайме. Программист при ошибке, получает вменяемое сообщение. Упрощается поиск ошибки, не нужно лопатить код.

35
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Январь 22, 2014, 02:47:14 pm »
JS динамический язык, странно, что сам интерпритатор JS не сообщает об ошибке. Или в JS  это нормально?

Да, это нормально для JS. Думал об этой проблеме, но пока не знаю что делать. Проверку на уровне JS не врубить, делать вручную - будет крайне неэффективно.

По умолчанию, компилировать со всеми проверками. Добавить флаг, компилировать без проверок. Написал потестил, и скомпилировал без проверок. Особенно когда циклов много, ищи где там, что переполнилось.

36
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Январь 22, 2014, 12:27:34 pm »

var test = function (JS){
var M = RTL$.makeArray(10, 0);
var I = 0;
var J = 0;
J = 500;
I = J + 1e+54 | 0;
M = 5;
JS.alert(M);
}(this);


JS динамический язык, странно, что сам интерпритатор JS не сообщает об ошибке. Или в JS  это нормально?

37
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Январь 22, 2014, 12:13:33 pm »
Ещё забавнее.

MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 999999999999999999999999999999999999999999999999999999;
M[I] := 5;
 JS.alert(M[I]);
END test.


Всё работает, ответ 5.
В этом случае I почему-то принимает значение 0, хотя в предыдущем -- 503...

Происходит переполнение, потому и сбрасывается в ноль, предположение. Возможно проверка есть в динамике. Но лучше такое ловить на стадии компиляции. Так как такое значение, нереально для диапазона INTEGER. Ну и выдавать сообщение об ошибке.

38
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Январь 22, 2014, 11:39:51 am »
Ещё забавнее.

MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 999999999999999999999999999999999999999999999999999999;
M[I] := 5;
 JS.alert(M[I]);
END test.


Всё работает, ответ 5.

39
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Январь 22, 2014, 11:35:52 am »
Такой код, компилится и выполняется.

MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 3;
M[I] := 5;
 JS.alert(M[I]);
END test.

Выводит 5. JS увеличивает сам массив?

40
Спасибо.

Давно исходники у вас появились? На сайте оберкора проскакивали сообщения, что кто то, где то пишет ББ под линукс. Я посмотрел реализацию хост, написана на gtk. Это те самые исходники?

И ещё раз спасибо. Буду изучать.

41
Общий раздел / Re: Юмор
« : Декабрь 15, 2013, 08:22:19 pm »

42
Общий раздел / Re: Юмор
« : Ноябрь 07, 2013, 10:37:32 am »
Думаю серый цвет более нейтральный.

Пример, серого комментария.


43
Общий раздел / Re: Юмор
« : Ноябрь 06, 2013, 03:07:36 pm »
Откуда код из основного ББ? И кто сей пакостник :)

44
Общий раздел / Re: Юмор
« : Ноябрь 06, 2013, 03:04:46 pm »
Подправил ссылку. Теперь показывает.


45
Общий раздел / Re: Юмор
« : Ноябрь 02, 2013, 08:12:45 am »
Не сдержался. Картинка так и просится. :)


Страницы: 1 2 [3] 4 5 ... 19