
Evgeny
04.03.2018
12:41:04
или что подразумевается по "рантаймом"?

Dark
04.03.2018
12:41:30

Evgeny
04.03.2018
12:41:30
рантайм библиотека или противоположность компайл-тайм?

Dark
04.03.2018
12:41:42

Google

Evgeny
04.03.2018
12:42:22
Второе
что-то как-то смешались в кучу кони, люди.
классы как бы всегда освобождаются в рантайме (разве что функцию в режиме CTFE вызвать)
Нифига ведь непонятно

Dark
04.03.2018
12:46:24

Evgeny
04.03.2018
12:47:33
В большинстве случаев не можем это определить на стадии компиляции. Только если объект на стеке создан, тогда можем.

Dmitry
04.03.2018
12:48:50

Evgeny
04.03.2018
12:49:15
еще структура умеет проксировать обращение к классу
Допустим такой вот код
{
auto a = new A()
a.doWork();
}
может ли компилятор уничтожить класс в переменной a при выходе из скоупа?

Dark
04.03.2018
12:51:37

Evgeny
04.03.2018
12:51:59

Dark
04.03.2018
12:52:14

Google

Dmitry
04.03.2018
12:52:18
А вот как проверить где был класс создан? Или структура? Просто для меня стек и куча это просто абстракции, и я вынужден или верить документации или просто тыкать пальцем в небо.
Ну вот пишу я:
int a=1;
Есть способ наглядно представить то что в этот момент в Дишном коде происходит.
Ну я не знаю там столбец в виде стека и в нем записана единичка.
Или там
string x = "hello"; и в стеке ссылка, а значение в облаке под названием "куча"

Evgeny
04.03.2018
12:53:18
С чего бы?
ну например в конструкторе класс может зарегистрировать сам себя в некоем глобальном реестре или запустить новый поток и передать туда ссылку на самого себя.

Dark
04.03.2018
12:53:42

Evgeny
04.03.2018
12:53:56
А, ну да
Но в целом, то о чем ты говоришь вполне возможно. В одном языке - Rust
Компилятор rust тебе не даст увести ссылку в конструкторе или еще где. Свяжет тебя по рукам и ногам. В итоге идет постоянная борьба с компилятором.

Dark
04.03.2018
12:56:01

Evgeny
04.03.2018
12:56:35
реализация может быть вообще в сторонней бинарной либе
но может есть еще подобные языки, я только один знаю - rust

Dark
04.03.2018
12:57:52

Evgeny
04.03.2018
12:58:55
в какой-то степени это возможно, но сложно. особенно если учесть, что компилятор можно обмануть всякими cast.

Dark
04.03.2018
12:59:04

Evgeny
04.03.2018
12:59:58

Dmitry
04.03.2018
13:00:11
Ну асм увы для меня это не очень наглядно, я его плохо знаю. Просто для меня стек и куча это просто абстракции которые приходится силой держать в голове.

Evgeny
04.03.2018
13:01:02
ассоциативные массивы тоже - куча.

Dmitry
04.03.2018
13:01:58
Вот я пишу File file = File("my.txt");
Но в то же время по идее могу написать и:
File new file = File("my.txt");
Только иного пути как верить докам у меня нет.
Евгений, на счет new понял
но мне хотелось бы как-то визуализировать что происходит со стеком во время выполнения кода. Причем в простой форме, не читая асм
типа там стопка и по ней бегает указатель какой нить

Google

Evgeny
04.03.2018
13:03:29
Это же сильно зависит от настроек компилятора

Dmitry
04.03.2018
13:04:27
Ну просто чтобы понимать как это происходит. Просто тут про разные подсчеты ссылок обсуждают и мне это не очень в голову ложится

Evgeny
04.03.2018
13:04:57

Dmitry
04.03.2018
13:06:03
Ну а как происходит подсчет ссылок простыми словами?
Как понимаю все объекты на которых нет ссылок в стеке удаляются?
Тут же про Ref-count в сборщике мусора выше говорили или там есть еще какие-то техники?

Dark
04.03.2018
13:08:03
В стеке все просто выпушивается за его границы же

Evgeny
04.03.2018
13:08:32

Dmitry
04.03.2018
13:09:12
Это ты технику работы сборщика мусора описываешь или есть какая-то другая?

Evgeny
04.03.2018
13:09:26
Я описываю технику работы RC.

Dmitry
04.03.2018
13:09:34
А какую роль тогда стек играет? Это просто очередь операций получается?

Evgeny
04.03.2018
13:09:46
А сборщик мусора - это более общее понятие.

Dmitry
04.03.2018
13:09:46

Evgeny
04.03.2018
13:10:18

Dmitry
04.03.2018
13:10:33
В чем плюсы\минусы RC?

Evgeny
04.03.2018
13:10:39
Но у нее есть свои изъяны
В чем плюсы\минусы RC?
Плюсы - детерминированность уничтожения объектов.
минусы - оверхед и возможные утечки если будут циклические ссылки.

Pavel
04.03.2018
13:13:28
У объектов на стеке время жизни детеминировано. Как только объект снимается со стека, или снимается содержащий его фрейм, он разрушается.

Google

Pavel
04.03.2018
13:14:02
зона видимости не связана со стеком

Evgeny
04.03.2018
13:15:01
а что такое "объект снимается со стека, или снимается содержащий его фрейм" если не выход из зоны видимости?
Время жизни объектов на стеке вполне себе связано с областью видимости, хотя, конечно, это разные вещи.

Pavel
04.03.2018
13:15:45
время жизни - да, стек - нет

Evgeny
04.03.2018
13:16:21
время жизни объектов на стеке - да.

Pavel
04.03.2018
13:16:59
в общем случае нет

Evgeny
04.03.2018
13:17:25
ну разве что в таком общем, что мы за пределы D вылезаем.

Pavel
04.03.2018
13:17:45
стек - это уже за пределами D

Evgeny
04.03.2018
13:18:06
ну, мы вроде как обсуждаем стек именно в D.
А так-то да, это детали реализации.
можно вместо стека, хоть облачное хранилище задействоать.
"стек" - это типа то, что не куча :)

Pavel
04.03.2018
13:19:58
Ну а область видимости - больше об именах чем о времени жизни.

Evgeny
04.03.2018
13:20:20
да, но оно тесно связано
Как минимум время жизни объекта должно полностью включать в себя зону видимости. Если так можно выразиться.

Dark
04.03.2018
13:22:57
Мне вот всегда было интересно, стек уничтожается на уровне кода при returne'е или на уровне процессора?

Igor
04.03.2018
13:23:23
В dip1000 подробно описано про видимость и время жизни

Dark
04.03.2018
13:24:03
Мы все помрем

Pavel
04.03.2018
13:25:41

Evgeny
04.03.2018
13:26:03

Google

Pavel
04.03.2018
13:26:37
В разных системах стек организовывается по-своему.

Evgeny
04.03.2018
13:26:49
но это таки стек

Dark
04.03.2018
13:26:59

Pavel
04.03.2018
13:27:15
да

Dark
04.03.2018
13:28:29
Понятно. Хотя где он хранит - тот еще вопрос. Надо посмотреть, как в С это сделано

Pavel
04.03.2018
13:29:37
адрес возврата сохраняется на стеке
для остального только память и регистры
Компилятор может вообще упразднить вызовы некоторых функций.

Dark
04.03.2018
13:30:50
Ну еще параметры через стек, вроде

Pavel
04.03.2018
13:31:06
обычно да

Dark
04.03.2018
13:32:19
В смысле обычно? Первые 6 - через регистры, остальные через стек

Evgeny
04.03.2018
13:33:20
У D вообще есть вменяемый ABI?

Dark
04.03.2018
13:33:52
Вроде да
В доках есть пункт

Pavel
04.03.2018
13:34:01
https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B5

Dark
04.03.2018
13:34:05
ABI

Evgeny
04.03.2018
13:34:19
нашел
https://dlang.org/spec/abi.html
Что-то не вижу там "Первые 6 - через регистры, остальные через стек"

Pavel
04.03.2018
13:36:22
https://en.wikipedia.org/wiki/Calling_convention - тут ещё веселее

Dark
04.03.2018
13:36:47