@dlangru

Страница 407 из 719
Valeriy
15.02.2018
08:29:10
он там пишет что статья в общем не о произволительности а о коде
На счёт кода согласен. D позволяет писать более читаемый код

особенно для людей не знакомых с синтаксисом C++ и D

Pavel
15.02.2018
08:29:54
У плюсов ешё и стандартная библиотека более отточена.

Но там есть дурацкий препроцессор и нет модулей.

Google
Igor
15.02.2018
08:41:24
в принципе, если не иметь ввиду библиотеку и gc - скорость такого языка как D - вопрос только к качеству кодогенератора или оптимизатора, а эта часть может улучшаться со временем. или есть технические причины по которым D (как язык) должен быть медленее?

Valeriy
15.02.2018
08:54:57
в принципе, если не иметь ввиду библиотеку и gc - скорость такого языка как D - вопрос только к качеству кодогенератора или оптимизатора, а эта часть может улучшаться со временем. или есть технические причины по которым D (как язык) должен быть медленее?
По большому счёту разница в использовании кучи. D может неявно использовать кучу. В C++ легче это контралировать. И в сборщике мусора да. Ну ещё Наличие в C++ UB теоретически позволяет компилятору генерировать более эффективный код.

Например вот такое выражение a = b = c; может вести к UB, но зато это даёт возможность компилятору сгенерировать более эффективный код

Pavel
15.02.2018
10:10:26
Ещё в с++ на данный момент удобнее использовать simd. Адекватно переварить http://benchmarksgame.alioth.debian.org/u64q/program.php?test=nbody&lang=gpp&id=3 в Ди мне не удалось.

Если и там и там simd упразднить, для ldc скорость идентична полученной с g++.

Dmitry
15.02.2018
10:28:20
хорошая статья https://seb.wilzba.ch/b/2018/02/the-expressive-c17-coding-challenge-in-d/
Эта заметка несколько раз обновилась после выхода. Вчера там другие цифры были, по-моему.

Evgeny
15.02.2018
12:08:36
Например вот такое выражение a = b = c; может вести к UB, но зато это даёт возможность компилятору сгенерировать более эффективный код
поверь, это не дает никакого профита вообще. Современные компиляторы отлично оптимизируют и выражение b=c; a=b;

Valeriy
15.02.2018
12:10:17
поверь, это не дает никакого профита вообще. Современные компиляторы отлично оптимизируют и выражение b=c; a=b;
Не там не об этом речь. В с++ есть вещи не регламентируемые стандартом. Например порядок вычисления до точки следования. Или порядок вычисления аргументов. Компиляторы используют это для оптимизации. Но с другой стороны, это может вести к неопределённому поведению

т.е. грубо говоря вы написали f(g(x), h(x)); Не известно как это будет вычислено. Сначала может быть h(x), потом g(x)

Stanislav
15.02.2018
12:48:41
всем привет! а тут можно всякие нубские вопросы позадавать по ди? ? а то я не настоящий сварщик и на ди почти не писал

Pavel
15.02.2018
12:49:15
да конечно

Stanislav
15.02.2018
12:58:15
а есть в ди какие-нибудь удобные средства для сериализации/десериализации объекта в массив байт? я хочу написать имплементацию протокола, работающего поверх tcp. в си бы я просто сделал - структура с выравниванием в 1 байт, и сразу бы кусочек пакета скопировал в структуру (ну и потом network byte order поменял где надо) в принципе на ум приходит написать просто конструктор для чтения из ubyte[] и функцию которая в ubyte[] будет по очереди записывать все поля пакета. но может быть можно сделать как-нибудь поудобнее?

Pavel
15.02.2018
12:59:42
Тебе нужно именно объект или структура тоже сойдет?

Google
Stanislav
15.02.2018
12:59:58
структура тоже сойдет

Pavel
15.02.2018
13:00:59
https://github.com/nexor/socks5d/blob/event-loop/source/socks5d/packets.d#L476 я пришел в итоге вот к такой конструкции, довольно удобно

Создаешь структуру с align 1, она лежит сплошняком в памяти, далее делаешь union из структуры и байтового буфера, по длине равного размеру структуры. И получается что буфер всегда содержит эту структуру, с бесплатным оверхедом.

Когда надо работать с логикой - обращаешься к полям и методам структуры, а когда надо отправить в сокет - даешь указатель на буфер

Stanislav
15.02.2018
13:03:15
о, крутая идея! чет я даже забыл про union

Denis
15.02.2018
13:03:27
Для этого оно и изобреталось когда-то

Pavel
15.02.2018
13:03:42
Кстати можно еще в сокет отправить саму структуру как-то так socket.send(&mystruct[0..1]) но как-по мне, это выглядит как какой-то костыль )

Stanislav
15.02.2018
13:24:24
спасибо! еще вопрос есть, а почитать что-нибудь кроме книги Александреску есть по ди интересного?)

Denis
15.02.2018
13:24:56
Книг всего 3, вроде

Александреску, D Cookbook [Adam D. Ruppe], И про Vibe.d

Stanislav
15.02.2018
13:33:57
англицкий тоже пойдет. надо наверн еще раз александреску перечитать) а d cookbook интересная? спасибо) в принцие для базовых вещей документации хватает, а во всяких новых плюшках пока так не доходят руки разобраться (типа map reduce, mixins, fibers к своему стыду так и не разобрался ? и еще целая пачка вещей)

Denis
15.02.2018
13:37:50
> а d cookbook интересная? Я на неё через гугл постоянно попадаю в поисках ответов на вопросы.

Denis
15.02.2018
15:15:36
Вопрос по DlangUI: как заставить картинку (или любой виджет) быть размерами "не менее чем", а если растягивают то растягиваться пропорционально и чтобы изображение при этом масштабировалось без размазывания (интерполяция нужна наиболее "тупая")

Или ткните на документацию по картинкам? Что-то этот вопрос не освещён особо, кажется.



Google
Denis
15.02.2018
15:19:21
https://github.com/denizzzka/dcpu16/blob/master/source/app.d Этот код должен рисовать сетку 128x96 между верхней надписью и нижними кнопками, а рисует нечто похожее на сетку, но размазанное и растянутое.

Dmitry
15.02.2018
16:12:23
Про размер - переопределяешь у виджета override void measure(int parentWidth, int parentHeight), в нем вызываешь measuredContent(parentWidth, parentHeight, w, h); с тем размером, что нужен.

Denis
15.02.2018
16:13:51
Что при этом происходит? Не хочу чтобы это магией было

Dmitry
15.02.2018
16:14:08
см доки, я сам плохо помню подробности

Denis
15.02.2018
16:14:18
ok

Dmitry
15.02.2018
16:14:37
с интерполяцией при ресайзе хитрее. бэкэнд случаем не OpenGL?

Denis
15.02.2018
16:14:52
А даже не знаю, скорее всего да

Dmitry
15.02.2018
16:14:53
когда бэкенд софтверный там проще

Denis
15.02.2018
16:15:11
я могу сам софтово интерполирвоать картинку, но это как-то неправильно

Dmitry
15.02.2018
16:15:23
там есть разные конфигурации, которые можно выбирать при сборке dlangui

Denis
15.02.2018
16:15:31
Это да, это знаю.

Хочется же чтобы оно на любых работало

Моя очередь нубские вопросы задавать! ) Реализация FIFO с ограниченным максимальным размером очереди есть?

Denis
15.02.2018
16:29:21
О, круто, сейчас попрбую

Dmitry
15.02.2018
16:35:15
Моя очередь нубские вопросы задавать! ) Реализация FIFO с ограниченным максимальным размером очереди есть?
Надо по пакетам с контейнерами пошукать, наверняка есть несколько. И вот тут что-то видно: http://code.dlang.org/search?q=queue

Denis
15.02.2018
16:35:28
Надо ещё ImageDrawable без буфера создать там, а то получается дублирование

Или вообще убрать его. Просто через drawRescaled сразу в выходной буфер рисовать



Dmitry
15.02.2018
16:45:00
Надо смотреть которая из реализаций используется. Если оно средствами OpenGL это делает, то получается с интерполяцией..

Google
Denis
15.02.2018
16:45:26
Видимо, опенгл. Для x11 собрал - всё без сглаживания идёт

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

@thedeemon а как у вас реализовано принудительное перерисовывание кадра? invalidate() + что-то ещё?

Dmitry
15.02.2018
16:48:33
invalidate() просто

опять же с OpenGL это может не так себя вести

Denis
15.02.2018
16:49:15
invalidate() просто
Я смотрел - оно просто флажок _needRedraw выставляет.

Может опенгл сам постоянно рендерит буфер? Проверим..

С measure и measuredContent всё просто: система вызывает measure, которое мы переопределям если хотим свой размерю Но так как всё учесть сложно нам самим (все отступы и прочее что там в системе есть для каждого виджета) то мы просто вызываем measuredContent которая за нас это всё учитывает.

Да, всё идеально с размерами и масштабирвоанием, спасибо)

@thedeemon https://github.com/denizzzka/dcpu16/commit/54c5b32a375cf1bbd623e2ff965cf8daf07262e2 Изначально бралось из вашего кода. Так более верно - оно ещё видимость роидетелй првоеряет.

решил вопрос)

Dmitry
17.02.2018
07:20:57
А зачем нужны tuples если есть структуры?

Maxim
17.02.2018
07:22:11
чтобы не делать на каждый чих структуру?

Dmitry
17.02.2018
07:23:56
Экономия какая то очень незначительная получается. Тем более что пользовательские типы данных не каждый 10 строк появляются

Проще было сделать упрощенный вариант инициализации структур.

Maxim
17.02.2018
07:25:08
в общем и целом кортеж — это анонимный тип данных, который может хранить совершенно разные значения, применение такому может придумать каждый сам)

я вот тоже считаю, что в большинстве случаев кортежи в Ди больше запутывают код, чем приносят пользу)

Dmitry
17.02.2018
07:26:27
+1 те же мысли

Maxim
17.02.2018
07:27:43
правда, есть случаи, когда без кортежей трудно. например, какая-нибудь ORM

Dmitry
17.02.2018
07:28:07
Поясни чем они там полезны

Google
Maxim
17.02.2018
07:29:20
в той части, где происходит непосредственно обращение к базе, удобно представлять ответ в виде кортежа, поскольку от селекта будет меняться структура ответа)

и тут кортеж как раз кстати — анонимная группа связанных между собой элементов

Evgeny
17.02.2018
08:35:00
А зачем нужны tuples если есть структуры?
В D кортежи и есть структуры.

Denis
17.02.2018
08:45:31
Правда есть риск ошибиться с синтаксисом и тут да, кортежи выигрывают

Maxim
17.02.2018
08:46:52
D тем и хорош, что позволяет одну задачу решить несколькими способами

Denis
17.02.2018
09:24:40
Чем просмотреть trace.log кроме глаз?

Igor
17.02.2018
09:44:32
https://bitbucket.org/andrewtrotman/d-profile-viewer

Denis
17.02.2018
09:49:14
Оно не собирается (там в issues есть тикет)

и автор не может его пофиксить

Igor
17.02.2018
09:54:01
Странно, у меня dub run d-profile.... срабатывает

Denis
18.02.2018
15:10:18
Речь о представлении ответа (от БД) в терминах языка

Pavel
18.02.2018
18:37:54
Видимо нет, потому что не совсем понятно что именно ты хочешь )

Denis
18.02.2018
18:38:18
Эффективный с точки зрения скорости шаблон FIFO

Pavel
18.02.2018
18:38:28
Реализация FIFO пишется строк в 10, еще пару строк на макс. размер. Тебе какие-то конкретные характеристики нужны, навроде тредо-безопасности?

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