
Oleg
13.02.2018
14:06:17

Evgeny
13.02.2018
14:08:13
недостатки не фатальные, но решение мне представляется странным. Фактически нас принудительно заставляют использовать указатель на класс, маскируя при этом, что это указатель.
надо либо все ссылочное или все по значению.
По моему скромному, естественно.

Google

Pavel
13.02.2018
14:09:06
в Лиспе не только строки. В лиспе вообще не строки, а списки. Но есть и мапы. И в смешанной семантике нет ничего природного.
Природнее
СТРОКА́ ж. расположенье чего по прямой черте, сплошной ряд, линия, порядок, дорожка, полоска, что идет тесьмой, лентой, гуськом. Строка письма́, печати, ряд слов, букв, поперек страницы, а в монгольской грамоте - вдоль столбцов. Нотная строка́, пять черт, со знаками.

Evgeny
13.02.2018
14:10:57
Природнее
СТРОКА́ ж. расположенье чего по прямой черте, сплошной ряд, линия, порядок, дорожка, полоска, что идет тесьмой, лентой, гуськом. Строка письма́, печати, ряд слов, букв, поперек страницы, а в монгольской грамоте - вдоль столбцов. Нотная строка́, пять черт, со знаками.
Строка тут причем? Мы тут толкуем о природности смешанной семантики, а не строк

Pavel
13.02.2018
14:12:50

Evgeny
13.02.2018
14:19:08

Pavel
13.02.2018
14:20:00
Класс, или объект?
В принципе, он может это сделать.

Evgeny
13.02.2018
14:22:12
В принципе, он может это сделать.
не может, даже средств для этого нет, только грязный хак scoped в библиотеке, на внутренности которого смотреть без отвращения невозможно.

Dmitry
13.02.2018
14:35:24
Да ну, это все вкусовщина от однобокого опыта. Попиши полгода на окамле или другом ФЯ, там везде ссылочная семантика, и очень хорошо идет. Хотеть объекты классов на стеке - это временное заболевание, излечимое. Если нужно что-то на стеке, делай это структурой и все ок. Вон в шарпе все то же самое уже 16 лет, никто не жалуется, все ок. В жабу тоже валю-типы собираются завезти, если еще не.
Классам с наследованием хорошо жить в куче. Структурам с деструкторами хорошо жить на стеке. Это не смешивание семантики, а наоборот полнота вариантов, для разных целей разные штуки.


Evgeny
13.02.2018
14:39:08
Да ну, это все вкусовщина от однобокого опыта. Попиши полгода на окамле или другом ФЯ, там везде ссылочная семантика, и очень хорошо идет. Хотеть объекты классов на стеке - это временное заболевание, излечимое. Если нужно что-то на стеке, делай это структурой и все ок. Вон в шарпе все то же самое уже 16 лет, никто не жалуется, все ок. В жабу тоже валю-типы собираются завезти, если еще не.
пишу на эликсире, я там вообще не думаю о семантике, потому что все иммутабельное и нет никаких указателей и вообще пофиг где оно лежит, на стеке или в куче - это дело компилятора. Сравнение не катит.

Dmitry
13.02.2018
14:39:17
immutable - это отдельная песня. Местами нескладная, да, но если правильно использовать, то тоже ок. Вы не должны хотеть мутабельные ссылки на иммутабельные объекты.
Там все в куче лежит (в эликсире)

Google

Dmitry
13.02.2018
14:40:23
Ну так кто мешает на Ди писать как на эликсире?
Сделать все иммутабельным и ссылочным

Evgeny
13.02.2018
14:41:32

Igor
13.02.2018
14:42:10
единственная фишка которая меня не устаивает в плане различик класс/структура это недетерминированность вызова деструктора для класса.
в остальном всё ок

Dmitry
13.02.2018
14:42:22
А в эликсире не возникает таких мыслей, что аллокаций много?
Я бы посмотрел на юз-кейс, где на стеке нужно складывать объекты с полиморфизмом.
Обычно либо мы в системном стиле пишем, там все на структурах.
Либо в стиле ООП или ФЯ, там все в куче.

Evgeny
13.02.2018
14:43:44

Dmitry
13.02.2018
14:44:27
Да ну?

Evgeny
13.02.2018
14:44:51
Да ну?
Ага, контейнеры из буста, например

Dmitry
13.02.2018
14:45:11
И какой там полиморфизм?
Статический полиморфизм в стиле плюсов в Ди со структурами тоже доступен.
А рантайм-полиморфизм со стеком не дружит и в плюсах.
Это прямая дорога к сегфолтам

Evgeny
13.02.2018
14:46:25

Dmitry
13.02.2018
14:47:07
потому что размер объектов не известен в момент компиляции

Google

Dmitry
13.02.2018
14:47:26
слайсинг

Evgeny
13.02.2018
14:47:33
и можно передать как базовый по указателю в другие функции

Dmitry
13.02.2018
14:48:28
эти другие ф-ии не смогут копировать объект себе на стек

Evgeny
13.02.2018
14:49:07

Dmitry
13.02.2018
14:49:08
там, где тип известен, нет рантайм-полиморфизма
если с объектом вся работа потом через ссылки, это уже ссылочная семантика по сути пошла

Evgeny
13.02.2018
14:50:24

Dmitry
13.02.2018
14:51:10
Так это в плюсах она смешанная получается: с одним и тем же объектом работаешь и так и так
А в Ди она не смешивается обычно: либо так, либо так
Хотя передача структур по ссылке тоже бывает, конечно

Evgeny
13.02.2018
14:52:23
а в дешке выглядит одинаково, а на самом деле нет.

Dmitry
13.02.2018
14:54:52
Зато меньше граблей разложено, компилятор не даст делать глупости, вроде копирования объектов по значению там, где точный тип не известен.
В плюсах все на совести программиста

Evgeny
13.02.2018
14:55:27
в плюсах всегда есть выбор, хошь по значению передавай, хошь по ссылке. В дешке принудительная ссылочность классов.

Pavel
13.02.2018
14:56:31
хочешь перемещай, не хочешь не перемещай

Evgeny
13.02.2018
14:57:04

Dmitry
13.02.2018
14:57:50
Это вопрос типизации, насколько она строгая. Кому-то вон вообще статические типы жмут, неудобно. :)

Evgeny
13.02.2018
14:58:30

Google

Dmitry
13.02.2018
14:58:34
Принудительная ссылочность классов - это хорошо, это исправление бага.

Evgeny
13.02.2018
14:59:29

Dmitry
13.02.2018
14:59:34
В плюсах если ты используешь рантайм-полиморфизм, то тоже только по ссылке передавать можешь.
Вот это и внесли в типы.

Evgeny
13.02.2018
15:02:04
а создать на стеке полиморфный объект тоже могу легко. И передавать его по указателю.

Dmitry
13.02.2018
15:02:58
И в Ди можешь такое сделать, наследуя структуру через alias this

Evgeny
13.02.2018
15:03:22
это грабли почище копирования полиморфного объекта на стек

Dmitry
13.02.2018
15:04:08
А покажи юз-кейс с наследованием и стеком
Какие-то странные проблемы
У меня за 6 лет не возникли
Если очень хочется объект класса на стеке, для того есть соответствующий аллокатор, помимо scoped

Evgeny
13.02.2018
15:07:02

Dmitry
13.02.2018
15:08:11
а где там наследование?

Evgeny
13.02.2018
15:08:14

Dmitry
13.02.2018
15:08:43
rebindable это из другой оперы, это из серии "хочу странного"

Evgeny
13.02.2018
15:08:50
В ФЯ сплошь и рядом мутабельные "ссылки" на иммутабельные обьекты

Google

Dmitry
13.02.2018
15:12:21
В ФЯ свои аналоги rebindable - всякие IORef
Простые ссылки там тоже иммутабельные
А в чем проблема мьютекс в составе структуры сделать? Что надо в деструкторе упоминать?

Evgeny
13.02.2018
15:15:50

Dmitry
13.02.2018
15:16:42
(про эликсир) по-моему, мы это уже обсуждали. переопределение переменной это не присваивание

Evgeny
13.02.2018
15:18:49

Dmitry
13.02.2018
15:19:06
нет, это не мутабельная ссылка, совсем
там даже тип может меняться
это просто совпадение имен

Evgeny
13.02.2018
15:19:37
мутабельная ссылка это аналог биндинга обьектов в ФЯ.

Dmitry
13.02.2018
15:19:56
нет

Evgeny
13.02.2018
15:20:04
да

Dmitry
13.02.2018
15:20:08
нет

Evgeny
13.02.2018
15:20:11
да
:)

Dmitry
13.02.2018
15:20:14
:)
let a = "aaa" in
let pair = (a,a) in
let a = "bbb" in
fst pair
если бы "a" была мутальной ссылкой, мы бы тут получили "bbb", но получим старое значение - "ааа"
вот и вся разница
это новая переменная каждый раз
Такие "мутабельные ссылки" у тебя и Ди есть, просто называй ее каждый раз по-разному. :)

Evgeny
13.02.2018
15:26:46
я просто реально сталкивался. у меня есть некий стейт в котором я храню иммутабельный объект. Как это сделать? Стейт это структура или класс.