Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2013-01-22 16:25:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Кстати
Еще к этому:

Вообще-то упорное нежелание поддерживать средствами систем типов вариант "значение не определено" несколько удивляет - потому как делается несложно, и кроме того, что повышает читаемость и позволяет на уровне системы типов отслеживать этот вопрос, еще и просто полезно как распространенный случай представления данных (как в этом примере например).

В общем тип 'a option рулит.


(Добавить комментарий)


[info]boza
2013-01-22 18:49 (ссылка)
Так NULL же

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2013-01-22 18:52 (ссылка)
Так а есть у булевского поля он? А во вторых - как раз именно что очень полезно, когда то, что может быть NULL от того чего не может быть отделено. И читаемость повышает и уйму багов вылавливает.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]boza
2013-01-22 18:59 (ссылка)
эээ, должен быть. Если поле не определено, то оно чему равно?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2013-01-22 19:14 (ссылка)
Боюсь, что на самом деле в данном случае false.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]boza
2013-01-22 19:19 (ссылка)
Вопрос интересный. Мне сейчас не до этого, доделаю работку - мне все равно надо в пробирку ставить wamp, вот на ем и поэкспериментирую

(Ответить) (Уровень выше)


(Анонимно)
2013-01-22 22:16 (ссылка)
Это Maybe что ли? data Maybe = Nothing | Just a.

(Ответить)


[info]qwerty
2013-01-23 03:01 (ссылка)
Гм, но потом же надо все операции определить на расширенной области определения. Вот, допустим, есть целое с неопределенным значением. Неопределенное + 1, наверно, равно неопределенному? При этом, очевидно, невозможно выбрать неопределенное целое так, чтобы сложение в железе само произвело такой результат. Чтобы он получился, надо в скомпилированном коде генерировать как минимум соответствующую проверку, а в оптимизаторе, соответственно, ее тащить вверх и изводить. Скучно это и уныло.

(Ответить) (Ветвь дискуссии)


(Анонимно)
2013-01-23 03:22 (ссылка)
если не целое, то NaN

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2013-01-23 03:37 (ссылка)
Если плавающее, то какой-нибудь NaN.

(Ответить) (Уровень выше)


[info]kouzdra
2013-01-23 16:11 (ссылка)
По моему опыту (c 'a option в первую очередь) - смешиваются два этих случая очень нечасто - то есть если компилятор форсит на уровне типов явные преобразования с проверкой - вдруг оказывается, что их писать надо очень и очень редко - либо у тебя может быть неопределенное - но тогда тебе ни с чем его в 90% случаев складывать не надо - либо не может быть - а тогда в локальной окрестности эта проверка скорее всего уже где-то сделана и на уровне типов все протянуто.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2013-01-23 19:51 (ссылка)
Если есть функция, которая не инлайнится, проверка должна быть сделана на каждый содержательно используемый параметр.

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

Было бы прекрасно, если бы проверка неопределенности всегда могла быть выполнена статически.

Кстати, хочется именно неопределенности значения или неопределенности переменной? Можно ли неопределенное значение присваивать (литералом, другой переменной, передавать параметром)?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2013-01-23 23:41 (ссылка)
Нет - у тебя практически на 99% уже известно что он определенный. Тут же я грю - два разных типа - обязательно определенный, может быть неопределенный, если тебе надо второй превратить в первый - изволь сам разобраться.

В реале этих разборок оказывается раз-два и обчелся. То йсть просто система типов эти два случая четко разводит.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2013-01-24 01:05 (ссылка)
А, ты хочешь отдельный тип. Это запросто.

(Ответить) (Уровень выше)


(Анонимно)
2013-01-23 23:31 (ссылка)
Неопределенное + 1 это ошибка на уровне тайпчекера.

(Ответить) (Уровень выше)