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

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


Сообщения - vlad

Страницы: 1 ... 6 7 [8] 9 10 ... 93
106
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 28, 2014, 04:49:28 am »
Зачем перегружать известные и предсказуемые конструкции всякой чухнёй?

И вам спасибо за отзыв :)

107
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 06:43:05 pm »
Цитировать
invalid type test: a value variable cannot be used

vlad, ты тут как бы намекаешь, что плюшка только для POINTER?
Кроме того похоже что вообще IS нельзя с RECORD использовать. Это что за прикол?

Да, это очень интересный момент. Я до последнего хотел делать переменные по месту как ссылки для рекордов (там даже тест закомментаренный остался) и тогда твой пример работает, но в итоге отказался от него в пользу единообразия - все переменные по месту являются value-типами, т.е. в случае рекордов/массивов они копируются (и не могут использоваться в IS).

Но не все так плохо. Следующий очевидный шаг -  разрешить сужение типов для аргументов процедуры - это закроет часть случаев (прежде всего любимый message bus). И второе - явно специфицировать, что ты хочешь ссылку:
VAR v <- x.pointerToRecordField^;
ASSERT(v IS Derived);

108
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 06:33:05 pm »
Всё герметично! :-)
чота не заметно:

Результирующий код должен быть эффективным ;) На герметичность не влияет.

P.S. Копий никаких не делается - они просто не нужны. Отсутствие "фатальных" модификаций "проапгрейченной" переменной гарантируется тем, что она недоступна для вложенных процедур .

109
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 06:28:19 pm »
каким будет тип поля derivedField -- целым или вещественным?

Ну этот вариант вообще из другой оперы - в шаблоны и прочая обобщенка.

110
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 06:04:33 pm »
Дико извиняюсь. Не читаю я все.  ::)

Я бы и в код мог посмотреть, но больно тошнотворен жабаскрипт для моего нежного мозга.

Не, не смотри - я все-таки надеюсь этот кусок на обероне переписать. Ну и от однопроходности избавиться.

111
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 05:50:32 pm »
Должно бы быть да, но нет. Похоже баг. Следующее успешно компилится. Но ясно что это не правильно.

Да, это баг. Сабмитни плиз? :)

112
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 05:44:53 pm »
О, Geniepro, спасибо. Интересный вопрос.

Да, это интересный случай - приведения к общей базе для Derived1 и Derived2 не будет. Придется написать "IF pb IS PCommonBase" - что, замечу, лучше отражает суть происходящего и лучше читается.

P.S. "Ага!" - сказали суровые сибирские мужики ;)

113
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 05:37:52 pm »
Очевидно, что есть более простое решение. И оно давно известно (WITH).

У WITH есть 2 фатальных недостатка. И второй неоднократно осуждали - возможность порушить пресловутую герметичность типов. Можно допиливать, накладывая всякие ограничения (и усложнения, хе-хе!). Но мне захотелось чего-то еще лучшего и естественного (IF намного менее громоздко, нежели WITH, не говоря о просто выражениях а-ля "(x IS T) & x.field"). Кроме того, в моем решении есть прицел на ненулевые указатели и OPTIONAL типы - для которых такой подход также единообразно будет работать.

Простота достигается с помощью разделения и специализации. (Разделяй и властвуй)
У тебя же с точностью наоборот. Попытка впихнуть невпихуемое.

Не понял - еще раз, где мое решение не просто? Оно даже в коде реализации достаточно простое. А при использовании так вообще - максимально естественно - проверил тип, получил к нему доступ.

А на счет простоты математики не понял. Выражение может быть сколь угодно сложным.

Оно может быть сколь угодно сложным, но для получения результата достаточно выбросить все, кроме IS, &, OR, ~. После этого все получается просто :) Представь, что ты проверяешь тип в сложном выражении и потом кастаешь его - на свой страх и риск, а тут у тебя компилятор гарантирует, что все правильно, да еще и кастать не надо! Счастье же ш и расслабон!

Значит ты либо должен сделать полный вывод и компиляцию раскладов (не представляю возможно ли такое), либо врубать неопределенность при первом шухере..., но в чем тогда смысл? По сравнению с WITH это похоже на использование скотча.

Попробуй придумать выражение, вывод которого очевиден программисту, но на котором будет тупить компилятор? Может я правда что-то упустил.

P.S. Конечно это не хаскель :) Решение очень простое - поэтому мне и странно противопоставление идеям оберона.

114
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 05:05:06 pm »
Не понял шутку юмора. Так значит таки не работает? O_o

Работает, если есть гарантия (вычисленная булевой алгеброй), что тип правильный. Ты хотел что-то другого? Для негарантийных случаев есть обычное приведение типа - не угадал - получил АВОСТ.

115
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 04:39:25 pm »
TypeError: undefined is not a function

Ага. Issue пока не завел - пароль гитхабовский забыл :)

116
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 27, 2014, 04:36:39 pm »
А вообще, вот это конкретное изменение (2), имхо, прямо противоположная идеям Оберона вещь.

Какой именно идее оно противоречит? С точки зрения математики там все чисто и просто - доказывается истинность/ложность/непределенность выражения при заданном типе и любых других аргументах. Сложность там возникает только применительно к однопроходной схеме. Причем сложность не сколько в коде и его количестве, сколько в читабельности всего этого и понимании как оно работает + сильная завязка на конкретную грамматику.

117
Общий раздел / Re: Oberon-07/13: заметки
« : Июнь 26, 2014, 03:44:00 pm »
Добавил сразу два расширения (одно зависит от другого):

1. Переменные "по месту" (избавляемся от VAR). Переменные можно объявлять (и одновременно инициализировать) везде в коде процедуры. Тип переменной выводится из выражения инициализации:
v <- f(); (* новая переменная 'v' такого же типа, как результат f() *)
https://github.com/vladfolts/oberonjs/wiki/Eberon-In-Place-Variables

2. Автоматическое приведение типа после проверки (аналог WITH), работает только с переменными по месту из пункта 1.
    IF pb IS PDerived THEN
        pb.derivedField := 123;
    END;

https://github.com/vladfolts/oberonjs/wiki/Eberon-Implicit-Type-Narrowing

118
Вот - ЧТО ЧИТАТЬ и СМОТРЕТЬ?????? Хочется ХОРОШЕЙ фантастики, а её - НЕТ.

Обливион.

119
Общий раздел / Re: Oberon-07/13: заметки
« : Март 31, 2014, 07:34:02 am »
Экспорт полей записи только для чтения (как в ББ) - https://github.com/vladfolts/oberonjs/wiki/eberon-record-fields-read-only-export.

120
Общий раздел / Re: Oberon-07/13: заметки
« : Март 23, 2014, 02:59:03 am »
Теперь результат процедуры можно вызывать (если это процедурный тип) или обращаться к полям (если это указатель): https://github.com/vladfolts/oberonjs/wiki/eberon-procedure-call-result

Штука, конечно, непринципиальная, но реально бесила...

Страницы: 1 ... 6 7 [8] 9 10 ... 93