Oberon space

General Category => Общий раздел => Тема начата: ilovb от Декабрь 02, 2012, 03:29:50 pm

Название: Safe Objective Language
Отправлено: ilovb от Декабрь 02, 2012, 03:29:50 pm
Попалось мне тут нечто:
http://kolmck.net/sf/SOL=IdealSpade4Programmer1.htm
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 02, 2012, 03:52:39 pm
...Кладов.. знакомая фамилия - это случайно не создатель -КОЛа?
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 02, 2012, 04:12:22 pm
да.. он.. статья забавная.. стоит однозначно прочитать любителям -языкоделам типа Vartovyj... ,  с самоиронией - одно заковыченное слово "Простой" - в заголовке говорит о многом, ну а результат.. вот простейшая программа от автора - зная что она выводит известное сообщение, язык императивный , модульный - вы можете сказать что здесь к чему.. и для чего (сильно не углубляясь в описание)?
DO: hello MODULE
     IMPORT Windows;
     Msg_OK 'Hello, World!';
 END hello;
я -НЕТ... более того попытка соотнести это хозяйство с описанием ЯП.. вызывает вопросы...
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 02, 2012, 04:32:13 pm
да.. он.. статья забавная.. стоит однозначно прочитать любителям -языкоделам типа Vartovyj... ,  с самоиронией - одно заковыченное слово "Простой" - в заголовке говорит о многом, ну а результат.. вот простейшая программа от автора - зная что она выводит известное сообщение, язык императивный , модульный - вы можете сказать что здесь к чему.. и для чего (сильно не углубляясь в описание)?
DO: hello MODULE
     IMPORT Windows;
     Msg_OK 'Hello, World!';
 END hello;
я -НЕТ... более того попытка соотнести это хозяйство с описанием ЯП.. вызывает вопросы...
Без проблем. Модуль hello который импортирует модуль Windows ну и явно выводится диалоговое окошко с единственной кнопкой OK и надписью "Hello world".

В каком месте тут сложно то? Чуть необычный синтаксис всего лишь - все блоки начинаются с DO.
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 02, 2012, 04:41:10 pm
да.. он.. статья забавная.. стоит однозначно прочитать любителям -языкоделам типа Vartovyj... ,  с самоиронией - одно заковыченное слово "Простой" - в заголовке говорит о многом, ну а результат.. вот простейшая программа от автора - зная что она выводит известное сообщение, язык императивный , модульный - вы можете сказать что здесь к чему.. и для чего (сильно не углубляясь в описание)?
DO: hello MODULE
     IMPORT Windows;
     Msg_OK 'Hello, World!';
 END hello;

я -НЕТ... более того попытка соотнести это хозяйство с описанием ЯП.. вызывает вопросы...
Без проблем. Модуль hello который импортирует модуль Windows ну и явно выводится диалоговое окошко с единственной кнопкой OK и надписью "Hello world".

В каком месте тут сложно то? Чуть необычный синтаксис всего лишь - все блоки начинаются с DO.
экий вы  быстрый... а я вот не понял - в  таком случае каким образом выделяется  ГЛАВНЫЙ модуль (ведь в языке нет структур эквивалентных  programm или main() ) -  но постулируется  куча модификаторов модуля, далее - тянется Windows - зачем?... что такое  Msg_OK - где она обьявлена, или она встроена в ЯП (согласно формальным требованиям - если она в стороннем модуле.. то перед вызовом должен быть квалификатор    Windows!Msg_OK)
http://kolmck.net/sf/SOL%20-%20short%20(but%20not%20very%20short)%20description.htm (http://kolmck.net/sf/SOL%20-%20short%20(but%20not%20very%20short)%20description.htm)
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 02, 2012, 04:51:07 pm
экий вы  быстрый... а я вот не понял - в  таком случае каким образом выделяется  ГЛАВНЫЙ модуль (ведь в языке нет структур эквивалентных  programm или main() )
Полагаю что также как в Обероне :-)

-  но постулируется  куча модификаторов модуля, далее - тянется Windows - зачем?... что такое  Msg_OK - где она обьявлена, или она встроена в ЯП (согласно формальным требованиям - если она в стороннем модуле.. то перед вызовом должен быть квалификатор    Windows!Msg_OK)
http://kolmck.net/sf/SOL%20-%20short%20(but%20not%20very%20short)%20description.htm (http://kolmck.net/sf/SOL%20-%20short%20(but%20not%20very%20short)%20description.htm)
Очевидно, что это чисто виндовозная штука. Поскольку постулируется кроссплатформенность, то в язык это вшивать не будут, следовательно это сущность из модуля Windows. Ну и очевидно же что явная квалификация происхождения сущности необходимо только в случае неоднозначности. Собственно дока это подтверждает:
Цитировать
Если в области действия оператора импорта в более, чем одном импортируемом модуле имеется требуемое имя, правило для уточнения того, из какого именно модуля объект, единственное: должно быть указано имя модуля в начале составного имени, отделённое от прочей части имени восклицательным знаком. Т.е., в этом случае составное имя имеет вид:
ИмяМодуля!имя_объекта
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 02, 2012, 05:02:17 pm

Полагаю что также как в Обероне :-) ...

Да нет, там сказано, что главный модуль ДОЛЖЕН быть помечен... ну.. и дальше..(приведенные   автором (в примере) обозначения противоречат БАЗОВЫМ постулатам) - думаю вы поняли мою мыслю - либо эта программа не валидная,
либо  в языке куча исключений(возможных трактовок)... - вот это  полное не комильфо...
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 02, 2012, 05:07:02 pm

Полагаю что также как в Обероне :-) ...

Да нет, там сказано, что главный модуль ДОЛЖЕН быть помечен... ну.. и дальше..(приведенные   автором (в примере) обозначения противоречат БАЗОВЫМ постулатам) - думаю вы поняли мою мыслю - либо эта программа не валидная,
либо  в языке куча исключений(возможных трактовок)... - вот это  полное не комильфо...

Да нет, как раз оно:
Цитировать
Для того, чтобы компилятор знал, с чего именно начинается выполнение программы, один из модулей, определённый как главный, указывается компилятору в качестве стартового.
В точности то же самое в Обероне - в опциях КОМПИЛЯТОРА задается где здесь главный модуль, где точка входа. В той же java - ровно то же самое.

В общем, это обычная практика.
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 02, 2012, 05:15:29 pm
....
В общем, это обычная практика.
я знаю это - но в конкретном случае речь шла о примере валидной программы... скажем так в xds  нужно было бы пропихнуть <+main> , - а что по поводу обязательного квалификатора  перед Msg_OK (если конечно это обертка вызова функции winapi)?  ;)
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 02, 2012, 05:25:55 pm
....
В общем, это обычная практика.
я знаю это - но в конкретном случае речь шла о примере валидной программы... скажем так в xds  нужно было бы пропихнуть <+main> , - а что по поводу обязательного квалификатора  перед Msg_OK (если конечно это обертка вызова функции winapi)?  ;)
хотя... да  принцип вызова  понятен.. как в Делфи... черт.. просто при чтении описания у меня сложилось мнение что должен  использоваться  полный квалификатор - сорри.. нефиг было читать это описание..  ;D
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 02, 2012, 05:28:42 pm
....
В общем, это обычная практика.
я знаю это - но в конкретном случае речь шла о примере валидной программы... скажем так в xds  нужно было бы пропихнуть <+main> ,
Это чисто заморочки/расширизмы xds (которые, вообще говоря, порождают проблемы). В других компиляторах оберона и в других языках в ТЕКСТЕ программы ничего не указывается. Компилятору выдается опция указывающая кто сейчас у нас вождь. Так что в примерах тот hello world абсолютно корректен.

Цитировать
а что по поводу обязательного квалификатора  перед Msg_OK (если конечно это обертка вызова функции winapi)?  ;)

Так я писал же про это уже:
...
Ну и очевидно же что явная квалификация происхождения сущности необходимо только в случае неоднозначности. Собственно дока это подтверждает:
Цитировать
Если в области действия оператора импорта в более, чем одном импортируемом модуле имеется требуемое имя, правило для уточнения того, из какого именно модуля объект, единственное: должно быть указано имя модуля в начале составного имени, отделённое от прочей части имени восклицательным знаком. Т.е., в этом случае составное имя имеет вид:
ИмяМодуля!имя_объекта
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 02, 2012, 05:38:11 pm
согласен!  :)
Название: Re: Safe Objective Language
Отправлено: Илья Ермаков от Декабрь 02, 2012, 09:14:15 pm
Несмотря на "дремучесть" в ряде моментов (типа выходов из вложенных циклов и ограничения итераций - хотя хз, может быть, для встроенки такое ограничение от зависания тоже имеет смысл), там накопана "траншея" в правильную сторону - там, где касается указателей и управления памятью.
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 02, 2012, 09:16:55 pm
Несмотря на "дремучесть" в ряде моментов (типа выходов из вложенных циклов и ограничения итераций - хотя хз, может быть, для встроенки такое ограничение от зависания тоже имеет смысл),
А можно чутка подробней - что там с ограничениями итераций? (читать этот талмуд я пока не осилил)

там накопана "траншея" в правильную сторону - там, где касается указателей и управления памятью.
То есть стоит таки распечатать и покурить этот мануал?
Название: Re: Safe Objective Language
Отправлено: Илья Ермаков от Декабрь 02, 2012, 09:23:41 pm
Там к WHILE приписывается ограничитель максимального числа итераций. Типа, "защита от зависания" для встроенки.
Так же защита от глубины рекурсии :)

Я пробежал "талмуд" за 20 минут, отметил корреляции со своим пониманием в плане управления памятью.
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 02, 2012, 09:31:48 pm
Там к WHILE приписывается ограничитель максимального числа итераций. Типа, "защита от зависания" для встроенки.
Так же защита от глубины рекурсии :)
Вау! Я же в том же направлении копал, и пришел к примерно тем же выводам (правда признал их слишком корявыми :-) ). Это попытка избавиться от полноты по Тьюрингу (ибо она нафиг не уперлась в подавляющем большенстве задач и алгоритмов) с её замечательной задачей о останове. В не Тьюринг-полных языках, вообще говоря, проблем со, скажем, выходом за границы массива может и не быть (и никаких рантайм проверок).

Ну и как побочная фича - можно автоматически оценить сверху время выполнения/трудоемкость любых библиотечных функций (даже если там внутри что-то жирное-жирное, вроде кодирования h264).

Я пробежал "талмуд" за 20 минут, отметил корреляции со своим пониманием в плане управления памятью.
Да, надо будет пробежаться тоже. Правда мне не слишком нравится тон которым оно написано. Слишком поучительный :-) Я бы хотел прочесть просто спеку + отдельно rationale.
Название: Re: Safe Objective Language
Отправлено: vlad от Декабрь 03, 2012, 03:58:28 am
Несмотря на "дремучесть" в ряде моментов (типа выходов из вложенных циклов и ограничения итераций - хотя хз, может быть, для встроенки такое ограничение от зависания тоже имеет смысл), там накопана "траншея" в правильную сторону - там, где касается указателей и управления памятью.

Почитал про указатели. Ничего интересного там не накопано. Сильные/слабые указатели - давно известный и применяемый паттерн. Описание попыток контроля циклических ссылок со стороны компилятора - не выдерживает проверки на абстрактных типах. Само по себе счетчики ссылок - всегда были только от бедности. Проблема ненулевых указателей никак не обозначена. Вобщем буков много, но все равно бледно.
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 03, 2012, 07:06:07 am
Это попытка избавиться от полноты по Тьюрингу (ибо она нафиг не уперлась в подавляющем большенстве задач и алгоритмов) с её замечательной задачей о останове. В не Тьюринг-полных языках, вообще говоря, проблем со, скажем, выходом за границы массива может и не быть (и никаких рантайм проверок).
Опять использование  понятия "полноты по Тьюрингу" - совершенно не коррелирующее с моим и проблемой(в  моем понимании)... - вопрос.. как вы избавитесь от проверки  если верхняя граница массива вводится ДИНАМИЧЕСКИ (во время выполнения) - с консоли...
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 03, 2012, 10:29:16 am
то есть самое простое:
var A:array [1..10] of real;
     i:integer;
Begin
readln(i);
a[i]:=Pi; - //вопрос - как  обойтись здесь проверкой времени компиляции, предложите процесс на Тюринг - неполном ЯП - основываясь только на этих данных  ;)
writeln(a[i]);
end.
Название: Re: Safe Objective Language
Отправлено: Geniepro от Декабрь 03, 2012, 10:50:37 am
Примерно так:
type ArrSize is new Integer range 1 .. 10;

with Ada.Text_IO; use Ada.Text_IO;

package ArrSize_IO is new Integer_IO(ArrSize);

arr: array (ArrSize) or Real;
i: ArrSize;

begin
    Get(i);
    a(i):=Pi;
    Put(a(i));
end
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 03, 2012, 10:55:30 am
Примерно так:
type ArrSize is new Integer range 1 .. 10;

with Ada.Text_IO; use Ada.Text_IO;

package ArrSize_IO is new Integer_IO(ArrSize);

arr: array (ArrSize) or Real;
i: ArrSize;

begin
    Get(i);
    a(i):=Pi;
    Put(a(i));
end
Не понял.. как вы на этапе КОМПИЛЯЦИИ определите возможную ошибку... - в вашем коде замаскированная проверка ВРЕМЕНИ ВЫПОЛНЕНИЯ
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 03, 2012, 11:08:36 am
вообще говоря меня насторожило
http://oberspace.dyndns.org/index.php?action=post;quote=10797;topic=384.0;last_msg=10865 (http://oberspace.dyndns.org/index.php?action=post;quote=10797;topic=384.0;last_msg=10865) - но тогда я подумал, что Алексей гнусно стебается
над jordan'ом...
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 03, 2012, 11:21:27 am
вообще говоря меня насторожило
http://oberspace.dyndns.org/index.php?action=post;quote=10797;topic=384.0;last_msg=10865 (http://oberspace.dyndns.org/index.php?action=post;quote=10797;topic=384.0;last_msg=10865) - но тогда я подумал, что Алексей гнусно стебается
над jordan'ом...
то есть ты намекаешь таки, что всетаки можно? :-)
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 03, 2012, 11:26:35 am
вообще говоря меня насторожило
http://oberspace.dyndns.org/index.php?action=post;quote=10797;topic=384.0;last_msg=10865 (http://oberspace.dyndns.org/index.php?action=post;quote=10797;topic=384.0;last_msg=10865) - но тогда я подумал, что Алексей гнусно стебается
над jordan'ом...
то есть ты намекаешь таки, что всетаки можно? :-)
я намекаю на то что не очень хорошо стебаться над начинающими.. - это порождает  ложное чувство  безнаказанности ... и может вернуться в неожиданных ситуациях.... а по вопросу - я не знаю такого способа.. для незамкнутой системы  (вот и хотел просветится от "профессионалов" поднаторевших  в данных вопросах)  ;)
Название: Re: Safe Objective Language
Отправлено: Geniepro от Декабрь 03, 2012, 11:30:17 am
Не понял.. как вы на этапе КОМПИЛЯЦИИ определите возможную ошибку... - в вашем коде замаскированная проверка ВРЕМЕНИ ВЫПОЛНЕНИЯ
Часть сообщения не отправилась из-за невнимательности, наверное. И ваще правильнее, наверное, так (компилятора под рукой нет что бы проверить):
type ArrSize is new Integer range 1 .. 10;

with Ada.Text_IO; use Ada.Text_IO;

package ArrSize_IO is new Integer_IO(ArrSize);

arr: array (ArrSize) or Real;
i: ArrSize;

begin
    Get(i); -- здесь будет исключение Data_Error, если введёное значение не является числом от 1 до 10
    arr(i):=Pi;
    Put(arr(i));
end
Естественно, проверка рантаймная, а по другому никак, чудес не бывает...
Как вариант, процедура Get, инстанцированная для типа ArrSize, просто не позволит ввести значение, не являющееся числом от 1 до 10. Тогда никаких ошибок времени выполнения не будет...
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 03, 2012, 11:34:03 am
да из замкнутыми тоже... пример...
пусть у нас есть функция random( min, max) - генерирующая случайное целое число в диапазоне от min до max (вычисляющая член некоторой алгебраической последовательности)
var i:integer;
     a:array[1..10] of real;
begin
i:=random(5,15);
a[i]:=Pi; //аналогичный вопрос...
writeln(a[i])
end.
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 03, 2012, 11:36:35 am

Естественно, проверка рантаймная, а по другому никак, чудес не бывает...
И я про это..., а за одно про то что кое кому не стоит мозги ...ть простым людям.. ну по крайней  без необходимости..
 а вот шутки ради - пожалуйста   :D
Название: Re: Safe Objective Language
Отправлено: Geniepro от Декабрь 03, 2012, 11:42:26 am
пусть у нас есть функция random( min, max) - генерирующая случайное целое число в диапазоне от min до max (вычисляющая член некоторой алгебраической последовательности)
var i:integer;
     a:array[1..10] of real;
begin
i:=random(5,15);
a[i]:=Pi; //аналогичный вопрос...
writeln(a[i])
end.
У выражения random(5,15) тип, очевидно, Integer range 5 .. 15, что не совпадает с типом индекса массива Integer range 1 .. 10, так что будет просто ошибка компиляции -- несоответствие типов в выражении a(i):=Pi...
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 03, 2012, 11:44:07 am
пусть у нас есть функция random( min, max) - генерирующая случайное целое число в диапазоне от min до max (вычисляющая член некоторой алгебраической последовательности)
var i:integer;
     a:array[1..10] of real;
begin
i:=random(5,15);
a[i]:=Pi; //аналогичный вопрос...
writeln(a[i])
end.
У выражения random(5,15) тип, очевидно, Integer range 5 .. 15, что не совпадает с типом индекса массива Integer range 1 .. 10, так что будет просто ошибка компиляции -- несоответствие типов в выражении a(i):=Pi...
это знает ИСПОЛНИТЕЛЬ ЧЕЛОВЕК... а вот исполнитель "КОМПУТЕР" - НЕТ...
Название: Re: Safe Objective Language
Отправлено: DIzer от Декабрь 03, 2012, 11:53:51 am
хотя в данном случае вопрос решается переопределением функции random - она должна принимать аргументы вышеуказанного диапазона...- вопрос.. считать ли эту постановку эквивалентной начальной...
Название: Re: Safe Objective Language
Отправлено: Berserker от Декабрь 03, 2012, 05:32:06 pm
vlad, что насчёт взвешенного счётчика ссылок? Расход памяти на каждый указатель удваивается, но циклически ссылки не страшны.
Название: Re: Safe Objective Language
Отправлено: vlad от Декабрь 03, 2012, 10:27:22 pm
vlad, что насчёт взвешенного счётчика ссылок? Расход памяти на каждый указатель удваивается, но циклически ссылки не страшны.

Что такое взвешенные счетчики ссылок?

P.S. Кстати, публикация за 2008 год. Я так понимаю с тех пор оно никуда не двинулось?
Название: Re: Safe Objective Language
Отправлено: Peter Almazov от Декабрь 04, 2012, 04:31:44 am
http://kolmck.net/sf/SOL2010.htm
Название: Re: Safe Objective Language
Отправлено: vlad от Декабрь 04, 2012, 04:43:17 am
http://kolmck.net/sf/SOL2010.htm

Пошел по ссылкам и случайно зацепил вот этот шедевр:
Цитировать
Для каждого типа объекта в памяти статически (на этапе компиляции) создается объект-заглушка данного типа. Все его числовые поля всегда имеют значение 0, все его указатели всегда имеют значение NONE (т.е. ссылаются на заглушки соответствующих типов), все его виртуальные методы ссылаются на заглушки, которые не выполняют никаких действий и просто возвращаются, в случае функций возвращают 0 или NONE. При попытках чтения данных по указателю проверка указателя на равенство NONE может не делаться, обязательная проверка делается только при записи значений в поля объекта, при этом опять же исключения не возникают, просто игнорируются попытки записи в поля объекта, и они продолжают сохранять свои "нулевые" значения.

Закопать.
Название: Re: Safe Objective Language
Отправлено: Berserker от Декабрь 04, 2012, 11:14:37 am
Цитировать
при этом опять же исключения не возникают, просто игнорируются попытки записи в поля объекта
Интересен механизм такого игнорирования при записи.
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 04, 2012, 11:19:18 am
http://kolmck.net/sf/SOL2010.htm

Пошел по ссылкам и случайно зацепил вот этот шедевр:
Цитировать
Для каждого типа объекта в памяти статически (на этапе компиляции) создается объект-заглушка данного типа. Все его числовые поля всегда имеют значение 0, все его указатели всегда имеют значение NONE (т.е. ссылаются на заглушки соответствующих типов), все его виртуальные методы ссылаются на заглушки, которые не выполняют никаких действий и просто возвращаются, в случае функций возвращают 0 или NONE. При попытках чтения данных по указателю проверка указателя на равенство NONE может не делаться, обязательная проверка делается только при записи значений в поля объекта, при этом опять же исключения не возникают, просто игнорируются попытки записи в поля объекта, и они продолжают сохранять свои "нулевые" значения.

Закопать.
Откопать. Во многих случаях это хорошая практика. Собственно скажем в мире java это вполне распространенное явление - вместо null'a используют вот такие вот заглушки (для каждого класса формируется такой вот объект). Ибо для ряда задач лучше если скажем в формочке вместо правильного текста выведется заглушка (пустой текст, или спец. текст), чем случится "assert" (null pointer exception) и программа сложится.

Кроме того, в ObjC nil как раз и является такой вот заглушкой.
Название: Re: Safe Objective Language
Отправлено: Berserker от Декабрь 04, 2012, 11:19:55 am
vlad,

Цитировать
Weighted reference counting

In weighted reference counting, we assign each reference a weight, and each object tracks not the number of references referring to it, but the total weight of the references referring to it. The initial reference to a newly-created object has a large weight, such as 216. Whenever this reference is copied, half of the weight goes to the new reference, and half of the weight stays with the old reference. Because the total weight does not change, the object's reference count does not need to be updated.

Destroying a reference decrements the total weight by the weight of that reference. When the total weight becomes zero, all references have been destroyed. If an attempt is made to copy a reference with a weight of 1, we have to "get more weight" by adding to the total weight and then adding this new weight to our reference, and then split it.

The property of not needing to access a reference count when a reference is copied is particularly helpful when the object's reference count is expensive to access, for example because it is in another process, on disk, or even across a network. It can also help increase concurrency by avoiding many threads locking a reference count to increase it. Thus, weighted reference counting is most useful in parallel, multiprocess, database, or distributed applications.

The primary problem with simple weighted reference counting is that destroying a reference still requires accessing the reference count, and if many references are destroyed this can cause the same bottlenecks we seek to avoid. Some adaptations of weighted reference counting seek to avoid this by attempting to give weight back from a dying reference to one which is still active.

Weighted reference counting was independently devised by Bevan, in the paper Distributed garbage collection using reference counting, and Watson, in the paper An efficient garbage collection scheme for parallel computer architectures, both in 1987.
Название: Re: Safe Objective Language
Отправлено: ilovb от Декабрь 04, 2012, 12:45:34 pm
...
Закопать.
Откопать.
...
Вандалы   :D
Название: Re: Safe Objective Language
Отправлено: vlad от Декабрь 04, 2012, 02:23:07 pm
Откопать. Во многих случаях это хорошая практика.

Не надо придумывать случаи, когда такое поведение может отработать "как надо". Я и сам придумаю. И я сам пользуюсь подобными "заглушками". Принципиальный момент в том, что это не может быть "дефолт" для всех нулевых указателей.

И я знаю, что такой подход "маскировать ошибку и до последнего оттягивать конец" имеет своих последователей. А самый типичный представитель ЯП, пропагандирующий такой подход - жабаскрипт. Но лично мне такой подход претит и мешает создавать эти самые надежные программы. Может это чисто психологическое, но тем не менее. Я не могу понять, как можно сопровождать такой код, не "генерируя кучу кирпичей" (с) твой:
obj.property = 123;
assert(obj.property == 456); // Ха-ха! obj.property - read-only и запись в нее _молча_ _игнорируется_
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 04, 2012, 02:51:12 pm
Откопать. Во многих случаях это хорошая практика.

Не надо придумывать случаи, когда такое поведение может отработать "как надо". Я и сам придумаю. И я сам пользуюсь подобными "заглушками". Принципиальный момент в том, что это не может быть "дефолт" для всех нулевых указателей.

И я знаю, что такой подход "маскировать ошибку и до последнего оттягивать конец" имеет своих последователей. А самый типичный представитель ЯП, пропагандирующий такой подход - жабаскрипт. Но лично мне такой подход претит и мешает создавать эти самые надежные программы. Может это чисто психологическое, но тем не менее. Я не могу понять, как можно сопровождать такой код, не "генерируя кучу кирпичей" (с) твой:
obj.property = 123;
assert(obj.property == 456); // Ха-ха! obj.property - read-only и запись в нее _молча_ _игнорируется_
Это ж не тот случай. тут у тебя obj явно не NONE, и все запишется как надо. Либо будет исключение.

Какой дефолт выбрать (NONE или NULL) - зависит на самом деле от задачи. В некоторых случаях предпочтительней одно, в некоторых другое. Единственное что всегда плохо - неопределенное поведение (UB) по умолчанию.
Название: Re: Safe Objective Language
Отправлено: vlad от Декабрь 04, 2012, 03:45:33 pm
Цитировать
Weighted reference counting

Спасибо. Может еще кофе не дошло, но я все равно не понял как:
- разруливаются циклические ссылки
- удается избежать доступа к счетчику при копировании ссылок (в том числе доступа на запись) в многопоточной/процессной среде.
Название: Re: Safe Objective Language
Отправлено: vlad от Декабрь 04, 2012, 03:50:39 pm
obj.property = 123;
assert(obj.property == 456); // Ха-ха! obj.property - read-only и запись в нее _молча_ _игнорируется_
Это ж не тот случай. тут у тебя obj явно не NONE, и все запишется как надо. Либо будет исключение.

В смысле? Представь, что я этот obj честно получил через третьи руки.

Какой дефолт выбрать (NONE или NULL) - зависит на самом деле от задачи. В некоторых случаях предпочтительней одно, в некоторых другое.

Да-да. Узнаю жабаскрипт: null, undefined, NaN... Закопать без права выкапывать :)
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 04, 2012, 03:55:31 pm
obj.property = 123;
assert(obj.property == 456); // Ха-ха! obj.property - read-only и запись в нее _молча_ _игнорируется_
Это ж не тот случай. тут у тебя obj явно не NONE, и все запишется как надо. Либо будет исключение.

В смысле? Представь, что я этот obj честно получил через третьи руки.
И что от этого поменяется? У тебя тут ВСЕГДА сработает  assert, просто потому, что поля заглушки не могут иметь такое значение.
Название: Re: Safe Objective Language
Отправлено: valexey_u от Декабрь 04, 2012, 03:58:24 pm
Да, если хочется падение (или исключение какое) ну воткни ты assert(obj!=NONE) и все. В этом случае одна проверка заменяется другой. Система симметрична.

А вот множество undefined и прочую дрянь следует искоренить :-) (NaN - оставить. Он математически кошерен (плавающая точка, да)). Равно как и искоренить ub у null'а в сях. Это ж не дело, когда оно долгое время с нулями как-то пашет, а потом внезапно на том же обращении к нулю падает.
Название: Re: Safe Objective Language
Отправлено: vlad от Декабрь 04, 2012, 04:06:33 pm
И что от этого поменяется? У тебя тут ВСЕГДА сработает  assert, просто потому, что поля заглушки не могут иметь такое значение.

Признайся, ты издеваешься? ;) Ты хочешь, чтоб я после каждого присваивания писал assert? :) Такой assert подразумевается при чтении кода. И если он не выполняется, то генерируется пресловутая куча кирпичей.

P.S. Я понимаю, что такую херотень можно на том же С++ написать, не изобретая нового ЯП. Но там, во-первых, для этого надо приложить определенные усилия. А во-вторых, написавшему такое делается внушение и он такое больше не пишет. Кстати, можно посоветовать аффтору поглубже изучить/пописать на С++. Чтоб таких странных идей поубавилось.

P.S.S. Шутки шутками, но я конкретно вот на эти грабли наступал в жабаскрипте не раз. Первый раз было, конечно, больнее всего. Но даже в последующие разы ловить такие баги очень сложно.
Название: Re: Safe Objective Language
Отправлено: vlad от Декабрь 04, 2012, 04:15:08 pm
Да, если хочется падение (или исключение какое) ну воткни ты assert(obj!=NONE) и все.

И чем это будет отличаться от "null reference exception"? Кроме того, что но  является дополнительной сущностью, требующей поддержки со стороны компилятора, рантайма и программиста ;)

Равно как и искоренить ub у null'а в сях. Это ж не дело, когда оно долгое время с нулями как-то пашет, а потом внезапно на том же обращении к нулю падает.

Эффективность здорово просядет. Собственно даже в управляемых языках "null reference exception" возникает как результат трансляции аппартного исключения, а не софтварной проверки на NULL. А понятия "просто разименования" (*pointer) без доступа по такому указателю - там просто нет.
Название: Re: Safe Objective Language
Отправлено: Berserker от Декабрь 04, 2012, 05:59:55 pm
Цитировать
Спасибо. Может еще кофе не дошло, но я все равно не понял как:
- разруливаются циклические ссылки
- удается избежать доступа к счетчику при копировании ссылок (в том числе доступа на запись) в многопоточной/процессной среде.
Давно это тему изучал. Сейчас начал поднимать работы и не нашёл что-то отложившегося в памяти преимущества. Циклические ссылки разруливаются через добавления в очередь адреса памяти при уничтожении любого указателя на него. Когда-нибудь он будет проверен на цикличность.

Цитировать
Собственно даже в управляемых языках "null reference exception" возникает как результат трансляции аппартного исключения, а не софтварной проверки на NULL
Это уже не обращение к нулевому адресу в таком случае. Для записей будет умеренное по размеру смещение от 0, для динамических массивов смещение может вывести итоговый адрес в зону, не похожую ну null. Так что кошерно всё же TEST EAX, EAX => JZ Exception.