Non-nullable types?
От: -VaS- Россия vaskir.blogspot.com
Дата: 18.06.15 20:17
Оценка:
Есть ли в Nemerle non-nullable типы, как в F#?
Re: Non-nullable types?
От: DarthSidius  
Дата: 18.06.15 23:58
Оценка:
Здравствуйте, -VaS-, Вы писали:

VS>Есть ли в Nemerle non-nullable типы, как в F#?


Options?

https://github.com/rsdn/nemerle/blob/master/lib/option.n
https://github.com/rsdn/nemerle/wiki/Simple-options
https://github.com/rsdn/nemerle/wiki/Using-options-for-data
https://rsdn.ru/article/Nemerle/TheNemerleLanuage-prt-3.xml#ECAAC
Автор(ы): Чистяков Владислав Юрьевич
Дата: 25.07.2010
Неформальное введение в язык программирования Nemerle. В этой части, на базе примера «калькулятор», описываются типы данных variant и class.
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re[2]: Non-nullable types?
От: _NN_ www.nemerleweb.com
Дата: 19.06.15 09:58
Оценка:
Здравствуйте, DarthSidius, Вы писали:

DS>Здравствуйте, -VaS-, Вы писали:


VS>>Есть ли в Nemerle non-nullable типы, как в F#?


DS>Options?

Подозреваю имеется ввиду по умолчанию типы без null значения.
И такого в Nemerle нет.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Non-nullable types?
От: -VaS- Россия vaskir.blogspot.com
Дата: 19.06.15 17:50
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, DarthSidius, Вы писали:


DS>>Здравствуйте, -VaS-, Вы писали:


VS>>>Есть ли в Nemerle non-nullable типы, как в F#?


DS>>Options?

_NN>Подозреваю имеется ввиду по умолчанию типы без null значения.
_NN>И такого в Nemerle нет.

Да, именно. Жаль И что интересно, этого нельзя добиться даже макросами.
Re[4]: Non-nullable types?
От: _NN_ www.nemerleweb.com
Дата: 19.06.15 18:12
Оценка:
Здравствуйте, -VaS-, Вы писали:

DS>>>Options?

_NN>>Подозреваю имеется ввиду по умолчанию типы без null значения.
_NN>>И такого в Nemerle нет.

VS>Да, именно. Жаль И что интересно, этого нельзя добиться даже макросами.

Тут палка о двух концах, с одной стороны хотим удобную интеграцию с остальным .NET миром включая C# где такого понятия нет.
С другой стороны хотим удобств в виде безнулевых типов.
Даже в Kotlin не смогли изначально сделать, чтобы и было удобно и безопасно.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Non-nullable types?
От: -VaS- Россия vaskir.blogspot.com
Дата: 05.07.15 13:05
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, -VaS-, Вы писали:


DS>>>>Options?

_NN>>>Подозреваю имеется ввиду по умолчанию типы без null значения.
_NN>>>И такого в Nemerle нет.

VS>>Да, именно. Жаль И что интересно, этого нельзя добиться даже макросами.

_NN>Тут палка о двух концах, с одной стороны хотим удобную интеграцию с остальным .NET миром включая C# где такого понятия нет.
_NN>С другой стороны хотим удобств в виде безнулевых типов.
_NN>Даже в Kotlin не смогли изначально сделать, чтобы и было удобно и безопасно.

В F# сделали изначально. Получилось отлично: в F# коде нельзя присвоить переменным/полям/свойствам non-nullable типа null и нельзя передать null качестве аргумента таких типов. Из других языков .NET такие типы видны как обычные и, естесственно, в F# сборку может приплыть null. На практике фича сильно повышает надежность кода и считается одной из самых сильных фич F#. Я думаю, стоило бы изучить, как именно это реализовано и перенести в Nemerle.
Re[6]: Non-nullable types?
От: kekekeks  
Дата: 05.08.15 13:54
Оценка: +1
Здравствуйте, -VaS-, Вы писали:

VS>В F# сделали изначально. Получилось отлично: в F# коде нельзя присвоить переменным/полям/свойствам non-nullable типа null и нельзя передать null качестве аргумента таких типов. Из других языков .NET такие типы видны как обычные и, естесственно, в F# сборку может приплыть null. На практике фича сильно повышает надежность кода и считается одной из самых сильных фич F#. Я думаю, стоило бы изучить, как именно это реализовано и перенести в Nemerle.


Когда в контексте того же C# говорят о non-nullable, люди хотят помечать таким образом не типы, а аргументы, поля и переменные. Чтобы гарантировать, что null не сможет приехать вместо строк, например.

В F# в этом плане достаточно деревянно всё сделано. F#-овские типы помечены спецатрибутом, который говорит, что они F#-овские и не даёт переменным и полям такого типа присваивать null. Чтобы отключить это поведение тип должен быть помечен атрибутом AllowNullLiteral. При этом из строки non-nullable сделать никак нельзя.


Например:
[<AllowNullLiteralAttribute>]
type MyType = class end

let callMe(lst : System.String) =
    printfn "%i" lst.Length

let callMeMt(mt : MyType) =
    printfn "%s" (mt.ToString())

[<EntryPoint>]
let main argv = 
    callMe null
    callMeMt null
    0
Re[7]: Non-nullable types?
От: -VaS- Россия vaskir.blogspot.com
Дата: 09.08.15 12:22
Оценка:
K>Когда в контексте того же C# говорят о non-nullable, люди хотят помечать таким образом не типы, а аргументы, поля и переменные. Чтобы гарантировать, что null не сможет приехать вместо строк, например.

Согласен насчет строк в F#, приходится оборачивать / доставать в нормальные типы на границах.

Не согласен, что развешивание атрибутов во всех местах, где встречается тип, лучше, или даже жизнеспособно. Т.к. non-nullability нужно/желательно в 99.9% случаев, код будет процентов на 30 состоять из этих самых атрибутов. Далее, нично не гарантирует / предупредит тебя, если ты забудешь этот атрибут повесить. Т.е. решение на уровне if (x == null) throw new ArgNullExn("x"), только времени компиляции (что уже лучше, конечно).
Re[8]: Non-nullable types?
От: kekekeks  
Дата: 09.08.15 15:38
Оценка:
Здравствуйте, -VaS-, Вы писали:

VS>Не согласен, что развешивание атрибутов во всех местах, где встречается тип, лучше, или даже жизнеспособно.


Так пусть компилятор развешивает, проблемы-то какие.
Re[8]: Non-nullable types?
От: kekekeks  
Дата: 09.08.15 15:39
Оценка:
https://github.com/dotnet/roslyn/issues/227 — для справки
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.