@dlangru

Страница 119 из 719
Grigirii
23.01.2017
13:04:53
только там пусто

потому что все стандартные свойства можно только в доке посмотреть

https://dlang.org/spec/arrays.html

Армен
23.01.2017
13:06:01
This consists of the fields that take up memory space, excluding the hidden fields like the virtual function table pointer or a context pointer for nested types.

Google
Армен
23.01.2017
13:06:13
Только поля, которые занимают место в памяти

Grigirii
23.01.2017
13:07:05
ну там есть и другие трейты для всех функций и свойств

Dmitry
23.01.2017
13:08:29
Как я понимаю .init показывает каким значением каждый элемент инициализируется? Только это как-то не логично. Видимо я не так понял идею init

Армен
23.01.2017
13:08:55
трейты это понятно, но то, что начинается Field включает в себя только то, что поля, которые занимают память

init инициализирует переменную стандартным значением для этого типа

Dmitry
23.01.2017
13:11:11
тоесть я все же правильно понял? я щас создал статический массив — вернуло нули

да проверил — я праивльно все понял

Армен
23.01.2017
13:12:59
вернуло нули где? Вероятно, да. Массив интов, к примеру, будет заполнен нулями, если не присвоено другое значение. В D при создании переменной происходит инициализация стандартным значением. при вызове .init ты делаешь это явно

Dmitry
23.01.2017
13:15:33
int [5] x = [4,5,3,1,2]; writeln(x.init); выведет нули

Grigirii
23.01.2017
13:17:08
init - статическое свойство, это один эталонный объект, с которого копируется стартовое значение

Денис
23.01.2017
13:20:41
Всем привет. А вот кстати такой вопрос. MyClass[] arr; MyClass obj; arr ~= obj;

Вызывается ли тут конструктор копирования?

Grigirii
23.01.2017
13:21:02
нет, если это класс

Google
Денис
23.01.2017
13:21:08
А если структура?

Grigirii
23.01.2017
13:21:14
да

у классов нет конструктора копирования, у них это просто присвоение ссылки

а вот у структур есть

Dmitry
23.01.2017
13:22:19
А как работает idup написано что он создает неизменяемую копию и помещает ее в изменяемый массив. Как такое может быть. Динамический массив-получателя у нас же изменяемым будет

Денис
23.01.2017
13:22:38
у классов нет конструктора копирования, у них это просто присвоение ссылки
То есть массив MyClass[] - фактически массив ссылок на реальные объекты и меняя что-то в этих объектах - содержимое контейнера будет соответственно меняться?

Oleg
23.01.2017
13:22:56
@DmitryBubnenkov immutable в обычный не записать, система типов не позволит

@andrushaTheSlayer ЕСТЕСТВЕННО)

Армен
23.01.2017
13:23:22
C .init не всё так просто. Init выводит инициализирующее значение и не более того. И не всегда ранее нулю. Init у типа и переменной может отличаться. struct Foo { int a; int b = 7; } Foo.init.a // is 0 Foo.init.b // is 7

Dmitry
23.01.2017
13:24:06
ты имешь ввиду статический в динамический не записать? или есть модификаторы которые делают массив неизменяемым?

Oleg
23.01.2017
13:24:59
idup делает immutable копию массива

ты в обычный её не запишешь

Dmitry
23.01.2017
13:31:56
погоди, разве динамический массив может быть immutable? Create a dynamic array of the same size and copy the contents of the array into it. The copy is typed as being immutable.

Oleg
23.01.2017
13:32:35
а ты попробуй сам)

Dmitry
23.01.2017
13:32:36
подразумевается, что мы можем расширить динамический массив, но не можем его поменять?

ок щас

Oleg
23.01.2017
13:33:00
зачем ты столько вопросов задаёшь, если можно проверить и поиграться?

Dmitry
23.01.2017
13:39:31
Проверил. Получается что idup просто неизменяемую копию создает и все.

т.е. в данимический массив только dup может записать

Oleg
23.01.2017
13:40:55
в динамический массив можно запихать только динамический массив, либо получить из статического динамический

Google
Oleg
23.01.2017
13:41:12
dup создаёт динамическую копию

Dmitry
23.01.2017
14:04:02
просто меня смущает фраза: .idup Create a dynamic array Может тут имеется ввиду, что создается динамическая копия, а потом она уже становится immutable? Просто ну никак не не получается что из статического массива мы можем сделать динамический и при этом чтобы он был immutable

Grigirii
23.01.2017
14:05:29
динамический он по тому, что создаётся в куче, понятно, что immutable не даст менять

Oleg
23.01.2017
14:06:38
int[3] x; int[] y; y = x[].dup;

Dmitry
23.01.2017
14:07:33
да с dup все понятно

Grigirii
23.01.2017
14:08:30
да, idup возвращает immutable(T)[], а не immutable T[], так что ничего не мешает писать: auto arr = [1,2].idup; arr ~= 3;

Dmitry
23.01.2017
16:42:37
Я не совсем понимаю чем keys от byKey() для ассоциативного массива отличается:



Grigirii
23.01.2017
16:46:53
первый создаст массив, то есть выделит память и вернёт. а второй вернёт ленивый range, который хранит только позицию

Dmitry
23.01.2017
16:55:41
Т.е. в первом случае при переборке создается полная копия ключей?

и дальше по ним итерация как по массиву элемнетов так?

Grigirii
23.01.2017
16:58:35
да

Dmitry
23.01.2017
17:06:25
а где не ленивые ствойства могут быть полезны?

А кто С++ знает, подскажите, данный код возвращает указатель на чары? char* shortcut::getSelectedText()

Grigirii
24.01.2017
10:17:33
нет, это определение метода getSelectedText в классе shortcut, возвращающий char*

там дальше должна идти { и тело метода

Dmitry
24.01.2017
10:21:01
Так, я смотрю примеры WinAPI и куски С++ примеров. Вызов подобного метода же нельзя транслировать напрямую записав его так: char* shortcut.getSelectedText() { }

Grigirii
24.01.2017
10:21:41
это не вызов, это определение

Dmitry
24.01.2017
10:21:54
ой, да оговорился

Grigirii
24.01.2017
10:22:24
можно транслировать так: class shortcut { char*getSelectedText() {} }

Google
Dmitry
24.01.2017
10:22:52
обязательно внутрь класса помещать?

Grigirii
24.01.2017
10:23:18
ну а как ещё объявить метод класса?

можно конечно функцией и расчитывать на UFCS, но это не совсем транслирование

Dmitry
24.01.2017
10:30:43
Так, а всё API Windows доступно или там может быть, что можно только каккую-то часть вызывать?

Отвечу на свой же вопрос. Походу не все. Только некоторая часть WinAPI включена в Phobos

Так. Как я понимаю в Си нет строк и массивов чаров, есть только области памяти (Си не знаю, но так из того что читал). Вот допустим есть функция: char* buffer = new char[100]; SendMessage(window , EM_GETSELTEXT, 0, LPARAM(buffer)); Она в указатель на буфер возвращает какие-то значения, так? Т..к. мы тут все же на Ди пишем, то в языке есть понятие строка т.е. я могу char * buffer объявить как string buffer и на всякий случай строку кастнуть в набор чаров, однако откуда-то int всплывает: Error: cannot implicitly convert expression (cast(char[])buffer) of type char[] to int Получается что буфер должен быть интов ?

Admin
ERROR: S client not available

0x9d8e
25.01.2017
10:03:57
Люди, кто-нибудь знает, есть ли вариант запилить какие-то вычислния на GPU (пока что поиграться) кроссплатформенно/кроссвидяшечно? И как обстоят дела с фоллбеком если видяшка отсутствует? Писать версию всего этого кода, адаптированную под цп?

Язык побоку, можно хоть на Си, хоть на боярском. Лишь бы более-менее абстрагироваться от соответсвующих апишек (их вроде минимум две, куда и ещё что-то)

На хабре чел писал как физику в игре подобным макаром на гпу реализовал, да у него там юнити. А у меня к ней иррациональная неприязнь.

Хочу попробовать запилить очень неадекватный клеточный автомат

Grigirii
25.01.2017
10:35:00
opencl, он есть у всех, он работает на cpu

язык почти C, если брать совсем последние версии, то хороший C++

Oleg
25.01.2017
10:42:50
Совсем последние не поддерживаются nvidia

Grigirii
25.01.2017
10:43:18
это да, поэтому на старом добром 1.Х можно писать везде

Oleg
25.01.2017
10:45:25
@Ivan_0x9d8e а что за клеточные автоматы? Не MCA ли случаем?)

0x9d8e
25.01.2017
10:50:59
@Ivan_0x9d8e а что за клеточные автоматы? Не MCA ли случаем?)
Неа. Игрушки всё. Описывал тут как-то игрушку о программируемых нано-роботах (с нано-ассемблером нано-процессора на борту). Она пока так в планах и висит. Но стало интересно получится ли что-то подобное запилить на гпу. А то по прежнему плану как-то не интересно, ибо всё понятно и основная сложность найти столько времени.

Правда они при этом скорее всего станут ещё более "нано" и программироваться станут почти совсем никак. Это можно скомпенсировать "размножением" и "генетикой".

Хотя чего я гоню, скорее всего точно также они будут программироваться.

Google
Evil
25.01.2017
11:10:58
Зверюга)

Dmitry
26.01.2017
16:49:45
Читаю документацию. Пытаюсь понять что они в скобках пишут и как это применять. Вот тут допустим. первая группа скобок отмеченных зеленым это что?



и как ожидается применение второй группы обведенной красным. Типа можно передать byLine(No.keepTerminator, 'какая-то-буква') ?

Просто если пишу: file.byLine(No.keepTerminator, 'a') оно ругается: undefined identifier 'No'

Так, это шаблонная функция. Надо ей все передавать так: file.byLine!(char, char)(KeepTerminator.yes, 'm')

первая группа скобок обязательна

постоянно почему то с этим туплю, только тогда не понятно почему работат: file.byLine(KeepTerminator.no, 'm')

Max
26.01.2017
18:45:51
Потому что компилятор тип шаблона сам выводит

Dmitry
26.01.2017
18:46:44
ты имеешь ввиду определяет его?

file.byLine(KeepTerminator.no, 'm') почему-то работает, однако в документации указано, что надо писать: No.keepTerminator

Когда есть базовый класс, мы говорим о том, что создаем экземпляр класса, но допустим File у нас структура. Работает два вариант со словом new и без. auto file = new File("test.txt", "r"); Как я понимаю new выделяет все в куче. а без него оно где-то еще будет или какая логика? И тогда как это читать? "Создаем копию структуры File" или как?

Просто если контент у нас будет в стеке храниться т.е. без слова new, то как такое возможно? Я читал что стек ограничен и не предназначен для хранения больших данных

Разобрался. Мы создаем конструктор структуры передавая туда параметры. Сама структура (ссылка на нее, а не сами данные) будет храниться в стеке. Если со словом new создавать то вроде как выделение будет происходить в куче

А с точки зрения корректности можно ли про метод говорить как про функцию? Просто не всегда понятно по документации является ли это отдельной функцией или методом класса. По сигнатуре вот тут как-то можно понять что это метод или функция? https://dlang.org/phobos/std_range.html#stride

Сергей
29.01.2017
07:33:31
А Visual-D пока не очень работоспособный? При просмотре значений через отладчик иногда показывает не правильные значения, притом что выводятся они верно через writeln

qwe
29.01.2017
08:29:03

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