
Maxim
04.09.2017
12:40:45
для intel процессоров — это размер регистра
но вообще, конечно, геморроя там много, например в 16-разрядной модели памяти intel используется адресация сегмент:смещение, и указатели могут быть дальние (сермент и смещение) и ближние (только смещение)
думаю, если все это описывать в книге, то у читателя может случиться инсульт от перенапряжения

Andrey
04.09.2017
12:44:11
у меня еще один вопрос новичка - а как делать clear() для двумерного массива?

Google

Andrey
04.09.2017
12:45:06
пробегаться циклом и делать remove?

Pavel
04.09.2017
12:45:45
а что в элементах массива лежит?

Andrey
04.09.2017
12:46:12
да у меня что-то даже просто с int-ами не выходит - пишет source/gui/text/textpanel.d(77,11): Error: template object.clear cannot deduce function from argument types !()(int[][]), candidates are:
/Library/D/dmd/src/druntime/import/object.d(1909,6): object.clear(T : Value[Key], Value, Key)(T aa)
/Library/D/dmd/src/druntime/import/object.d(1914,6): object.clear(T : Value[Key], Value, Key)(T* aa)


Dmitry
04.09.2017
12:46:37
Я написал так:
Несколько слов нужно сказать о типе size_t. Долгое время размер int совпадал с битностью микропроцессора т.е. во время господства 32-битных систем размер int был де-факто равен 32 битам. Однако с появлением 64-битных систем появилась проблема, что нужно или расширять размеры int или вводить новый тип. Для целого ряда операций было достаточно int'а равного 32 битам и так же очень не хотелось ломать обратную совместимость. Поэтому был введен новый тип под названием size_t который был привязан уже не к фиксированному числу, а к максимально возможному целочисленному типу для данной платформы.
—
Критикуйте

Andrey
04.09.2017
12:46:50
то есть массив объявляю как int[][] a;

Oleg
04.09.2017
12:47:56

Pavel
04.09.2017
12:48:02
Почему бы просто не написать что size_t это максимально возможное значение адреса ячейки памяти, не пойму

Andrey
04.09.2017
12:48:14
size_t это uint/ulong, ptrdiff_t - int/long

Oleg
04.09.2017
12:49:30

Andrey
04.09.2017
12:49:59
я хочу очистить массив от массивов (:

Oleg
04.09.2017
12:50:02
можно очистить сам массив массивов: a.length = 0

Andrey
04.09.2017
12:50:05
которые в нем есть
да, прочитал об этом, а это правильно?

Google

Maxim
04.09.2017
12:50:37
короче, расставляем точки над i, в object.d есть такая штука:
version(D_LP64)
{
alias ulong size_t;
alias long ptrdiff_t;
}
else
{
alias uint size_t;
alias int ptrdiff_t;
}

Dmitry
04.09.2017
12:50:41

Oleg
04.09.2017
12:50:48

Maxim
04.09.2017
12:51:14
D_LP64 — это Pointers are 64 bits

Andrey
04.09.2017
12:51:14
как-то непривычно и странно выглядит. и - если у меня массив массивов объектов, то они как там потом по памяти - соебер их сборщик мусора или нет (вечно беспокоюсь)?

Oleg
04.09.2017
12:51:15
gc жи есть ☝️

Andrey
04.09.2017
12:51:51

Oleg
04.09.2017
12:52:11
отпусти это и живи спокойно)
ну или не отпускай и беспокойся)
ну в простых задачах норм

Dmitry
04.09.2017
12:52:45
@deviator просто выше же обсуждали что размер указателя зависит от компилятора %)

Pavel
04.09.2017
12:52:53

Andrey
04.09.2017
12:53:02
ну я как представлю, что там объекты, их много, что вот обнулил указатель (или как там правильно) и бросил все на произвол судьбы - так не по себе

Andrey
04.09.2017
12:53:23

Oleg
04.09.2017
12:53:43

Andrey
04.09.2017
12:54:17

Dmitry
04.09.2017
12:54:43
не от компилятора, а от платформы
https://www.viva64.com/ru/k/0044/
"размер указателя зависит от конкретной реализации компилятора и не связан напрямую с разрядностью используемой платформы"

Andrey
04.09.2017
12:55:04
так мы ж про Ди

Dmitry
04.09.2017
12:55:09
а тут все иначе?

Oleg
04.09.2017
12:55:28

Google

qwerty
04.09.2017
12:55:42
делает

Pavel
04.09.2017
12:55:44
Теоретически я могу представить что компилятор с++ эмулирует 64битный указатель на 32битной платформе

Oleg
04.09.2017
12:55:54

Pavel
04.09.2017
12:55:57
Чтобы сохранять совместимость.

qwerty
04.09.2017
12:56:12
?

Oleg
04.09.2017
12:56:21
совместимость чего с чем?

Maxim
04.09.2017
12:56:49
короче, конкретно в D size_t и ptrdiff_t зависит от размера указателя платформы, так написано в object.d, я выше кинул)

Pavel
04.09.2017
12:56:56
Чтобы говнокодеры могли хардкодить 64битные адреса и это работало бы на 32 битах )

Oleg
04.09.2017
12:57:02
старого 64 битного кода с новой 32битной платформой, которая умеет в 64-битные указатели?

Andrey
04.09.2017
12:57:34
https://dlang.org/spec/type.html#size_t

Oleg
04.09.2017
12:57:35

Pavel
04.09.2017
12:58:15
Или более человечный вариант - когда на 32битной платформе надо скомпилировать 64битный код

Oleg
04.09.2017
12:58:52
ну так этот тип то как раз для этого и делали, чтобы применять там где подразумеваются размеры и адреса

Dmitry
04.09.2017
13:00:25
"type that is large enough to represent an offset into all addressible memory"
т.е. максимально возможные размер смещения?

Pavel
04.09.2017
13:04:27
да
адрес это и есть смещение

Andrey
04.09.2017
13:05:24
но только положительные

Eto
04.09.2017
15:14:12
Опубликовал свою NodeJS-поделку. В первом раунде у неё было 558 секунд, во втором померла из-за ограничений по памяти на ноду (1.4 гига), о которых я не знал. Было понятно, куда доделывать, но не успел - а сейчас уже не интересно. Там особенного ничего наверное нет, но если у кого-то результат был хуже, то можно подглядеть, как работало у меня. Спасибо за конкурс ? https://github.com/oleggromov/hlc2017

Google

Pavel
04.09.2017
15:17:54
Кстати если бы я шел в решении не от навороченных фреймворков к простым решениям а наоборот, может и повыше место занял бы :)
Вчера копал кишки libasync, там тоже много всяких наворотов, выделение буфера под события каждый раз, обнуление памяти и т.д.

Andrey
04.09.2017
15:18:52
там командой можно было участвовать?

Pavel
04.09.2017
15:19:05
Нет конкурс одиночный

Eto
04.09.2017
15:24:50
Можно было поучаствовать командой, но никому не сказать. :)

Dmitry
05.09.2017
08:26:45
Интересный тред пошел https://www.linux.org.ru/news/development/13651713/page8?lastmod=1504599904979#comment-13659347
Я читал что в в Go указатели какие-то обрезанные. Вопрос. В чем их обрезанность?

Ievgenii
05.09.2017
08:51:33
Они Евреи))) (без обид, просто не сдержался)

Maxim
05.09.2017
09:00:31
в Go нет адресной арифметики

Dmitry
05.09.2017
09:01:33
тоесть указатели там полноценные?

Admin
ERROR: S client not available

Maxim
05.09.2017
09:01:41
т.е. можно объявить указатель, получить указатель на переменную (&) и разыменовать его

Dmitry
05.09.2017
09:01:45
Но я к примеру не могу сделать +1 к указателю?

Maxim
05.09.2017
09:01:53
да

Dmitry
05.09.2017
09:02:30
а где адресная арифметика бывает полезна?

Maxim
05.09.2017
09:02:54
это штука опасная)
ну, скажем, в Си массив — это просто указатель на его начало, соответственно, по массиву можно пройтись, просто увеличивая значение указателя)
строки так удобно обрабатывать, потому что они в Си заканчиваются нулем, и возможны такие конструкции:
void processString(char *str) {
char *s = str;
do {
//do something with string
} while(*(++s) != 0);
}

Oleg
05.09.2017
09:09:41

Dmitry
05.09.2017
09:09:53

Google

Dmitry
05.09.2017
09:10:49
Кстати, а как понять какие функции можно в режиме betterC использовать, а какие нет?
к примеру canFind в betterC не работает

Oleg
05.09.2017
09:10:59
Я же вроде говорил, что на d не сталкивался с необходимостью её где либо использовать

Maxim
05.09.2017
09:12:44
ну и сразу можно отбросить все, что работает с GC

Dmitry
05.09.2017
09:13:01
а как по ним понять то что они его юзают?

Maxim
05.09.2017
09:13:12
вот, кстати betterC — это тот случай, когда в D может пригодиться адресная арифметика)
я же правильно понимаю, что betterC — это D с отключенным GC?

Oleg
05.09.2017
09:16:34

Maxim
05.09.2017
09:16:50
ну и с вырезанным D рантаймом за ненадобностью

Oleg
05.09.2017
09:17:05
Ну да
Знаю только mir, из тех что используют betterC

Ned Ogl
05.09.2017
09:19:28

Oleg
05.09.2017
09:20:57

Ned Ogl
05.09.2017
09:21:20

Oleg
05.09.2017
09:21:31
Ну не весь

Ned Ogl
05.09.2017
09:21:34
Что-то из core может работать

Maxim
05.09.2017
09:21:37
я вот сейчас читаю, вроде, в BetterC можно юзать замыкания, а они используют GC вроде как
в смысле, делегаты

Oleg
05.09.2017
09:22:07
Всё что с метапрограммированием должно работать

Ned Ogl
05.09.2017
09:22:21