@dlangru

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

надо либо все ссылочное или все по значению.

По моему скромному, естественно.

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

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 лет, никто не жалуется, все ок. В жабу тоже валю-типы собираются завезти, если еще не.

Классам с наследованием хорошо жить в куче. Структурам с деструкторами хорошо жить на стеке. Это не смешивание семантики, а наоборот полнота вариантов, для разных целей разные штуки.

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
хочешь перемещай, не хочешь не перемещай

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
А покажи юз-кейс с наследованием и стеком
например мьютекс создать на стеке или в составе структуры, в D

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

Evgeny
13.02.2018
15:08:14
Если очень хочется объект класса на стеке, для того есть соответствующий аллокатор, помимо scoped
ага, сначала сделать фигню, а потом костыли вроде Rebindable и scoped для ее обхода. Это так по-дешному.

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

Evgeny
13.02.2018
15:08:50
а где там наследование?
Ну посмотри на дешный мьютекс из фобоса, что за детские вопросы

rebindable это из другой оперы, это из серии "хочу странного"
да ну? у меня иммутабельный класс, который я передаю между потоками, так вот, я не могу даже ссылку на него запомнить.

В ФЯ сплошь и рядом мутабельные "ссылки" на иммутабельные обьекты

Google
Dmitry
13.02.2018
15:12:21
В ФЯ свои аналоги rebindable - всякие IORef

Простые ссылки там тоже иммутабельные

А в чем проблема мьютекс в составе структуры сделать? Что надо в деструкторе упоминать?

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
я просто реально сталкивался. у меня есть некий стейт в котором я храню иммутабельный объект. Как это сделать? Стейт это структура или класс.

Страница 405 из 719