@dlangru

Страница 256 из 719
Ned Ogl
05.09.2017
09:22:43
Dmitry
05.09.2017
09:26:46


что ему не нравится то?

Google
Dmitry
05.09.2017
09:41:25
блин, импорт import std.algorithm приводи к этой ошибке. Даже тупо без вызова

Anatoly
05.09.2017
09:44:11
https://dlang.org/spec/betterc.html

As no Druntime is available, many D features won't work. For example: Garbage Collection Thread-local storage TypeInfo and ModuleInfo …

никакого TypeInfo

Dmitry
05.09.2017
09:46:10
А у где у меня тут TypeInfo?

Anatoly
05.09.2017
09:47:35
а как length реализован, хм? Это без включения алгоритмов?

Dmitry
05.09.2017
09:52:41
да, без алгоритмов length работает

Anatoly
05.09.2017
09:53:03
а без https://github.com/dlang/phobos/blob/master/std/container/array.d ?

Dmitry
05.09.2017
09:53:23
int [5] x = [1,2,3,4,5]; Я путаю или размерность указывается с нуля? т.е. должно быть int [4]?

Anatoly
05.09.2017
09:53:54
количество элементов

как в си

Dmitry
05.09.2017
09:55:36
а как в этом режиме напечатать значения массива на экран?

Anatoly
05.09.2017
09:58:37
цикл по размеру и да, %d

Google
Anatoly
05.09.2017
09:58:43
а не %i

Oleg
05.09.2017
10:01:38
а как length реализован, хм? Это без включения алгоритмов?
Массив это 'толстый указатель', по сути структура где первое поле длина, второе указатель

Anatoly
05.09.2017
10:03:14
в общем, если дёргать length, то оно нявно пытаетс яимпортить array.d, а там дальш еиспользовать TypeInfo

Oleg
05.09.2017
10:03:27
да ладно?

Anatoly
05.09.2017
10:03:42
в режиме -betterC

хм, а теперь это не воспроизводится)

Oleg
05.09.2017
10:05:15
вот сейчас length в betterC сборке проверил и норм собирается

Anatoly
05.09.2017
10:05:23
так... это же динамический массив был

бред был именно с динамическим, да.

я неправильно распарсил prog.d:(.text.main[main]+0x15): undefined reference to _d_arrayliteralTX'

Oleg
05.09.2017
10:08:47
ничё не знаю, всё работает))

Anatoly
05.09.2017
10:08:56
https://wandbox.org/permlink/kExCv3WzqOGEAr4o

Oleg
05.09.2017
10:09:06
auto x = (cast(int*)malloc(int.sizeof * 10))[0..10]; printf("%d\n", x.length); free(x.ptr);

Anatoly
05.09.2017
10:09:18
а, ну да)

Oleg
05.09.2017
10:11:30
тут недавно ссылку постили по этому поводу

там типа tips по D и как раз был этот момент

литерал массива использует GC

и как-то это хитро можно обойти

или нет)

не помню)

Google
Anatoly
05.09.2017
10:15:13
блин, scope(exit) free(x.ptr); не втыкается prog.o:(.data.DW.ref.__dmd_personality_v0+0x0): undefined reference to `__dmd_personality_v0'

даже гуглится

Oleg
05.09.2017
10:18:35
да?

Anatoly
05.09.2017
10:18:41
https://theartofmachinery.com/2016/12/18/d_without_runtime.html

Oleg
05.09.2017
10:19:01
думал это связанные сообщения

блин, scope(exit) free(x.ptr); не втыкается prog.o:(.data.DW.ref.__dmd_personality_v0+0x0): undefined reference to `__dmd_personality_v0'

даже гуглится

Anatoly
05.09.2017
10:22:09
objcopy -R .data.DW.ref.__dmd_personality_v0 -R .eh_frame obj.o ... мде

тут без makefile не обойтись

из dub такие штуки можно вызывать для генерируемых объектников?)

Oleg
05.09.2017
10:23:55
блин, scope(exit) free(x.ptr); не втыкается prog.o:(.data.DW.ref.__dmd_personality_v0+0x0): undefined reference to `__dmd_personality_v0'
import core.stdc.stdio; import core.stdc.stdlib; extern (C): T[] talloc(T)(size_t n) { return (cast(T*)malloc(T.sizeof*n))[0..n]; } void tfree(T)(ref T[] arr) { free(arr.ptr); arr = null; } void main() { auto x = talloc!int(10); scope (exit) tfree(x); foreach (i, ref v; x) v = cast(int)i^^2; foreach (i, v; x) printf("x[%d] = %d\n", i, v); }

Anatoly
05.09.2017
10:24:50
Хм...

Oleg
05.09.2017
10:26:17
dmd --version DMD64 D Compiler v2.076.0-dirty

срезы тоже работают

в целом юзабельно +/-

вот когда завезут в ldc2 так вообще круто будет

тк как кросскомпиляция и можно норм под железо писать

ну не прям под железо, но хотябы без рантайма, если нужно будет

хотя может быть и прям под железо...

Maxim
05.09.2017
10:32:34
вообще, штука интересная, жаль только классы (а значит и наследование, и интерфейсы) отваливаются)

Google
Andrey
05.09.2017
10:33:44
а какую можно опцию дать dmd (ldc2) чтобы ddoc генерился не по разным файлам, а в один?

Anatoly
05.09.2017
10:37:31
import core.stdc.stdio; import core.stdc.stdlib; extern (C): T[] talloc(T)(size_t n) { return (cast(T*)malloc(T.sizeof*n))[0..n]; } void tfree(T)(ref T[] arr) { free(arr.ptr); arr = null; } void main() { auto x = talloc!int(10); scope (exit) tfree(x); foreach (i, ref v; x) v = cast(int)i^^2; foreach (i, v; x) printf("x[%d] = %d\n", i, v); }
А так уже не работает import core.stdc.stdio; import core.stdc.stdlib; extern (C): T[] talloc(T)(size_t n) { return (cast(T*)malloc(T.sizeof*n))[0..n]; } void tfree(T)(ref T[] arr) { free(arr.ptr); arr = null; } int main() { auto x = talloc!int(10); scope (exit) tfree(x); foreach (i, ref v; x) v = cast(int)i^^2; foreach (i, v; x) printf("x[%d] = %d\n", i, v); return 0; }

Maxim
05.09.2017
10:39:23
Anatoly
05.09.2017
10:39:50
в Си никаких)
ну а это better c, а значит аналог гошечки)

Oleg
05.09.2017
10:40:11
Maxim
05.09.2017
10:40:15
ну тогда и CTFE выпиливать надо, да?

Anatoly
05.09.2017
10:40:48
я к тому, что и со структурками прожить можно

наследование... а разве магия со структурками не работает через всякие alias this;

Admin
ERROR: S client not available

Maxim
05.09.2017
10:41:43
пожить и без них можно, все дело в качестве жизни)

Anatoly
05.09.2017
10:43:02
мне кажется это баг
https://issues.dlang.org/show_bug.cgi?id=17603

Dmitry
05.09.2017
10:43:05
А как работает ref ? понятно дело что это ссылка, но получается это какая-то обертка над указателями видимо?

Dmitry
05.09.2017
10:44:26
а где почитать как оно устроено?

Oleg
05.09.2017
10:44:36
а зачем?)))))

Google
Anatoly
05.09.2017
10:44:44
не связанно же с деструктором
я отсюда линк взял https://theartofmachinery.com/2017/08/26/new_betterc.html

Dmitry
05.09.2017
11:07:18
а зачем?)))))
ну чтобы понимать лучше тему

просто вот: int [] x = [1,2,3,4,5]; foreach(ref i; x) { ... } Мне не очевидно почему ref мы ставим перед i а не перед x. Вроде бы по ссылке именно x перебираем

Maxim
05.09.2017
11:09:24
потому что i должно быть ссылкой на элемент массива x

т.е. на каждой итерации цикла каждый последующий элемент массива и переменная i должны находиться в одной ячейке памяти

по сути, ref и не ref — это просто соглашения о поведении, реализовать их можно разными способами

ref говорит о том, что при изменении ref переменной будет изменена и переменная, на которую та указывает

Oleg
05.09.2017
11:26:41
Это важно

Pavel
05.09.2017
11:27:21
А чем отличается от поинтера тогда?

Где то я мельком видел что ref это указатель на указатель

Maxim
05.09.2017
11:27:42
Ну и не происходит копирования при передаче ref
вот, кстати, это всегда подразумевается, но, я так понимаю, не оговаривается явно

Pavel
05.09.2017
11:27:59
Короче опасная непонятная штука )

Maxim
05.09.2017
11:28:30
А чем отличается от поинтера тогда?
всегда куда-то указывает (не может быть null) и не требует разыменовывания)

Dmitry
05.09.2017
11:31:41
я делаю для сайта пример проверки вхождения в массив. https://repl.it/Khfp/0 Функцию нашел в инете. Помогите блин это скомпилировать.

пример массива: int [] x = [1,2,3,4,5];

Pavel
05.09.2017
11:40:05
всегда куда-то указывает (не может быть null) и не требует разыменовывания)
Кстати! Указатель в D тоже не требует разыменования) Очень удобно

По крайней мере в структуре я это использовал свободно.

Maxim
05.09.2017
11:40:50
требует же

Oleg
05.09.2017
11:51:17
Кстати! Указатель в D тоже не требует разыменования) Очень удобно
для структур может быть, обычно нужно разыменовывать

NullSanya
05.09.2017
11:56:37
не, вроде точка для указателя равна -> из плюсов

Pavel
05.09.2017
11:58:26
https://wandbox.org/permlink/FeyO4G96VvRcrJG5 да, скаляры надо разыменовывать, структуры не надо

Anatoly
05.09.2017
12:26:59
не связанно же с деструктором
https://github.com/dlang/dmd/pull/6923/files#diff-53d1a3bf9d826e3dbfef565e862f4d1dR1506

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