@dlangru

Страница 351 из 719
Evgeny
25.12.2017
12:56:35
костыльный assumeSafeAppend

Oleg
25.12.2017
13:00:26
Ну так это просто знание языка

Evgeny
25.12.2017
13:04:59
да, но это лишний WAT

вот я тут сделал пример: https://run.dlang.io/is/t88k7F

Google
Evgeny
25.12.2017
13:05:44
почему эти две функции работают по разному?

первая не реаллоцирует, а вторая реаллоцирует?

и где-нибудь есть в доках описание, как именно себя ведет capacity у слайсов?

Oleg
25.12.2017
13:08:28
нужно объединить такие вещи в отдельный раздел на dusful

чтобы явно показывать "правильный путь"

когда нет ub

Evgeny
25.12.2017
13:09:21
если правая граница слайса меньше, чем длина исходного массива, то капасити автоматически становится нулевым (отсюда и реаллокация), а если совпадает с длиной исходного массива, то капасити равно капасити исходного массива минус левая граница слайса

ub нет, все вполне определено, только слишком запутанно и сложно

Oleg
25.12.2017
13:10:21
тоесть это где-то определено?..

или это из ответа на форуме от разработчиков?

Evgeny
25.12.2017
13:10:47
Это определено мною экспериментально, давно

ну и оно вполне логично

Google
Oleg
25.12.2017
13:11:16
так это может быть ub

Evgeny
25.12.2017
13:11:34
нет, я могу заранее сказать будет реаллокация или нет, достаточно точно

Oleg
25.12.2017
13:11:35
просто конкретная реализация в данном случае вот такая

потому что используется один и тот же фронтенд

ub это же не обязательно рандом

Evgeny
25.12.2017
13:12:11
ub - это рандом

тут скорее не описано точно

Oleg
25.12.2017
13:12:31
это то поведение, на которое не следует полагаться, которое не документированно и может меняться от версии к версии

Evgeny
25.12.2017
13:12:47
ага, но тут скорее UB в доках

Oleg
25.12.2017
13:13:15
так это и попадает под термин undefined

не определённое поведение

не определено оно в документации

значит как оно себя конкретно ведёт не является ни правильным, ни неправильным

Evgeny
25.12.2017
13:13:58
это скорее терминологический спор

Oleg
25.12.2017
13:14:07
например инициализация переменных в Си

Evgeny
25.12.2017
13:14:09
предлагаю забить, ибо неинтересно

кстати в новой редакции стандарта C++ кое что изменили

Oleg
25.12.2017
13:14:47
сделали как в D?)

Evgeny
25.12.2017
13:15:04
сделали как в D?)
ни в коем случае

теперь отстутствие инициализации там называют тоже инициализацией

Google
Evgeny
25.12.2017
13:15:13
:D

И вроде как формально нет никакого UB :)

Oleg
25.12.2017
13:15:56
и что в итоге там лежит например для float и int?

nan и 0?

Evgeny
25.12.2017
13:16:08
все как раньше

неведомо что

Oleg
25.12.2017
13:16:15
а

и это именно должен реализовывать компилятор?

Evgeny
25.12.2017
13:16:40
просто раньше это называлось отсутствие инициализации, а теперь инициализация отсутствием инициализации, как-то так :D

в компиляторе ничего не поменялось в этом плане, изменился текст

теперь каг-бэ все переменные в плюсах инициализируются. Просто некоторые конкретными значениями, а некоторые рандомом из стека, хе-хе-хе.

кстати статика и глобальность в плюсах инициализируется по умолчанию нулями

Oleg
25.12.2017
13:19:19
можешь по D примеры вот такие выписать (как с массивом)? я потом оформлю в dusful (если конечно тебе не сложно, то было бы здово если бы ты сам их туда скинул)

это действительно может вызвать боль у людей, которые знакомятся с D

Evgeny
25.12.2017
13:20:01
мне очень лениво, не умею и не люблю писать документацию

вообще, неестественностей в D и фобосе полным-полно

Oleg
25.12.2017
13:21:02
просто для меня уже такой проблемы нет, я настолько ко всем таким приколам привык, что даже не замечаю как обхожу их

Evgeny
25.12.2017
13:22:45
вот еще один прикол: https://run.dlang.io/is/y0vFGd

как определить тип элемента массива? ни в коем случае не ElementType, а typeof(T.init[0]) изврат сука

Oleg
25.12.2017
13:24:14
не не не, стоп, тут всё удобно

Google
Evgeny
25.12.2017
13:24:30
оно удобно, но не очевидно

любому новичку это покажется крайне странным

Oleg
25.12.2017
13:24:51
возможно

Evgeny
25.12.2017
13:25:01
это хреново

чем меньше неочевидностей, тем лучше

автодекодирование вообще спорная штука, авторы сами сомневаются, что это верный подход

Oleg
25.12.2017
13:26:19
и того, на данный момент можно написать про 1. SFINAE 2. массивы и перевыделение памяти 3. аттрибуты 4. автодекодирование строк

Evgeny
25.12.2017
13:26:41
сфинае редкий зверь

я с этой жопой столкнулся когда сериализовал в json в vibe.d

Admin
ERROR: S client not available

Evgeny
25.12.2017
13:27:51
там все хорошо, но если кастомная полиси сериализации было с ошибкой, то сериализатор молча делал fallback к умолчальной полиси.

именно из-за SFINAE

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

такая же херня с opDispatch

через раз работающий inout

тут можно долго перечислять наверное

Oleg
25.12.2017
13:30:53
через раз работающий inout
вот это можно объяснить

всмысле я не понял

я его только в простых ситуациях пользовал

Evgeny
25.12.2017
13:31:32
ну я пример с ходу немогу привести, просто оно перестает компиляться хотя должно. я вообще перестал им пользоваться из-за этого

Google
Evgeny
25.12.2017
13:32:18
имеется в виду ` class Foo { int foo() inout {...} }

многие не понимают еще разницу между immutable и const

ну и знаменитая жопа с невозможностью создать мутабельную ссылку на иммутабельный класс, из-за которого был накостылен уродский Rebindable

Dmitry
25.12.2017
13:49:10
В других языках с иммутабельностью это тоже делается не так просто, используются специальные рефы, мвары да атомы..

Evgeny
25.12.2017
13:57:42
почему? в плюсах легко

мутабельная ссылка на константный класс делается на раз

Oleg
25.12.2017
14:08:04
по всей видимости кто-то когда-то решил, что это может редко пригодиться и это "вошло в моду"

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

Evgeny
25.12.2017
14:11:02
вообще-то это полезная штука для concurrency

на самом деле - ошибка дизайна как по мне

Dmitry
25.12.2017
14:27:59
Я про языки с настоящей иммутабельностью - окамл, хаскель, кложа.. Не С++.

Evgeny
25.12.2017
14:29:15
эти языки нет смысла обсуждать, потому что в них нет мутабельных ссылок

я говорю про мутабельные ссылки на иммутабельный класс

в дешке можно сделать мутабельную ссылку на иммутабельный массив, а вот на класс нет

и чем дешная иммутабельность не настоящая?

окамл, хаскель и кложа - это вообще ФП, они тут совсем не в тему

Dmitry
25.12.2017
14:33:40
Там есть мутабельные ссылки.

А ненастоящая иммутабельность в С++.

Evgeny
25.12.2017
14:41:31
в хаскеле вроде нет

Dmitry
25.12.2017
14:42:20
https://hackage.haskell.org/package/base-4.10.1.0/docs/Control-Concurrent-MVar.html

Evgeny
25.12.2017
14:42:24
почему в плюсах ненастоящая иммутабельность? Если объект изначально создан const, то он вполне себе настоящий иммутабельный

этож костыль

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