- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
https://github.com/TartanLlama/optional/blob/master/optional.hpp#L853
/// Constructs the stored value with `u`.
/// \synopsis template <class U=T> constexpr optional(U &&u);
template <
class U = T,
detail::enable_if_t<std::is_convertible<U &&, T>::value> * = nullptr,
detail::enable_forward_value<T, U> * = nullptr>
constexpr optional(U &&u) : base(in_place, std::forward<U>(u)) {}
/// \exclude
template <
class U = T,
detail::enable_if_t<!std::is_convertible<U &&, T>::value> * = nullptr,
detail::enable_forward_value<T, U> * = nullptr>
constexpr explicit optional(U &&u) : base(in_place, std::forward<U>(u)) {}
/// Converting copy constructor.
/// \synopsis template <class U> optional(const optional<U> &rhs);
template <
class U, detail::enable_from_other<T, U, const U &> * = nullptr,
detail::enable_if_t<std::is_convertible<const U &, T>::value> * = nullptr>
optional(const optional<U> &rhs) {
this->m_has_value = true;
new (std::addressof(this->m_value)) T(*rhs);
}
/// \exclude
template <class U, detail::enable_from_other<T, U, const U &> * = nullptr,
detail::enable_if_t<!std::is_convertible<const U &, T>::value> * =
nullptr>
explicit optional(const optional<U> &rhs) {
this->m_has_value = true;
new (std::addressof(this->m_value)) T(*rhs);
}
/// Converting move constructor.
/// \synopsis template <class U> optional(optional<U> &&rhs);
template <
class U, detail::enable_from_other<T, U, U &&> * = nullptr,
detail::enable_if_t<std::is_convertible<U &&, T>::value> * = nullptr>
optional(optional<U> &&rhs) {
this->m_has_value = true;
new (std::addressof(this->m_value)) T(std::move(*rhs));
}
/// \exclude
template <
class U, detail::enable_from_other<T, U, U &&> * = nullptr,
detail::enable_if_t<!std::is_convertible<U &&, T>::value> * = nullptr>
explicit optional(optional<U> &&rhs) {
this->m_has_value = true;
new (std::addressof(this->m_value)) T(std::move(*rhs));
}
Я даже не знаю, какой конкретно фрагмент этого творчества сюда выкладывать.
https://github.com/TartanLlama/optional C++11/14/17 std::optional with functional-style extensions https://optional.tartanllama.xyz
Вообще меня это забавляет, все эти костылепостроения поверх плюсов. Сделайте там уже возможность в компилтайме работать напрямую с исходным кодом самого себя, т.е. чтобы был некий код, который плюсокомпилятором в компилтайме обрабатывался, и чтобы он принимал исходник самого себя просто в виде тупо текста, и мог произвольно менять содержимое исходника на этапе компиляции (не меняя при этом сами файлы в файловой системе), и чтоб в качестве библиотек к этому компилтайм-метушению шел лексер-парсер плюсов.
Понятно что из плюсов никакого гомоиконного лиспа сделать не выйдет, ведь тогда надо выкинуть очень красивый и элегантный плюсосинтаксис вида std::kukarek(std:kudah<std:kokoko{kokoko ko[hui<govno>]}>:()[*huita]{}) и заменить его на бездуховные скобочки
d_fomenok 24.10.2017 15:20 # −1
-- А почему со вкусом Си? Может быть можно было со вкусом C#?
-- C#? А что, можно было?
j123123 24.10.2017 16:07 # 0
d_fomenok 24.10.2017 16:39 # 0
Надо было подождать
Antervis 24.10.2017 17:12 # +3
d_fomenok 24.10.2017 17:15 # +1
Как же ТАКОЕ могло случиться со мной?!
subaru 24.10.2017 16:37 # 0
https://github.com/ned14/outcome/blob/boost_peer_review3/include/boost/outcome/v1.0/detail/basic_monad.ipp
Раз уж подняли эту тему, вот памятник метушиного искусства, который выглядит странно даже по крестоблядским меркам - помимо обычной крестометушни там еще кодогенерация через определение макросов и инклуд "шаблона". Это реализация утилитарного класса наподобие optional. Автор пытался пропихнуть это в буст, но его зачморили, и он с подгоревшей жопой убежал все переписывать. Вообще история отношений nial'а и буста очень грустная и преисполнена батхерта. Странный он парень.
Свежие ревизии этой библиотеки тоже можно почитать, но там все не так прикольно, обычная крестоебля.
Antervis 24.10.2017 17:31 # +1
Вспомнилась байка про старца в комитете с++, который всё время спал а потом посреди доклада говорил "А тут бах и исключение!"
> Сделайте там уже возможность в компилтайме работать напрямую с исходным кодом самого себя
Саттер метаклассы продвигает, не оно? Или тебе нужен говнокодогенератор, но внутри языка?
j123123 24.10.2017 18:05 # +1
Именно! Ведь тогда можно не допиливать каждый раз все компиляторы под новые говнофичи плюсов при выходе нового стандарта, а все эти говнофичи реализовывать через этот самый говнокодогенератор. Можно будет даже новые операторы и ключевые слова добавлять при желании, весь код перед обычной компиляцией может сколько угодно раз пропускаться через особую кодогенерирующую плюсовую метушню(старая метушня может сгенерировать новую метушню, через которую весь код опять будет пропускаться), которая бы добавляла в плюсы какие-нибудь новые хрени, типа всяких там лямбд-хуямбд, т.е. чтоб можно было бы даже синтаксис РАСШИРИТЬ, добавив например каких-нибудь триграфов, которые в C++17 собираются убрать
j123123 24.10.2017 18:28 # 0
d_fomenok 24.10.2017 18:31 # −1
govnokod.ru/23449#comment392370
d_fomenok 24.10.2017 18:30 # 0
j123123 24.10.2017 18:35 # +1
Stallman 24.10.2017 18:38 # 0
Antervis 24.10.2017 18:40 # 0
p.s. надеюсь ты не дальтоник
inkanus-gray 24.10.2017 18:53 # +4
SemaReal 24.10.2017 18:53 # 0
inkanus-gray 24.10.2017 18:57 # +1
Для розыгрыша тританопов (более редкая патология, обычно приобретается, если долго смотреть на сварку) нужно сочетание чёрного с синим.
1024-- 24.10.2017 19:01 # 0
синий текст
зелёный текст
красный текст
чёрный текст
жёлтый текст
SemaReal 24.10.2017 19:04 # +3
inkanus-gray 24.10.2017 21:54 # +1
1024-- 24.10.2017 22:08 # +4
1024-- 24.10.2017 22:09 # +1
SemaReal 25.10.2017 01:29 # +1
j123123 24.10.2017 19:16 # 0
Только реализовывать это будет достаточно один единственный раз для всех компиляторов.
Напоминаю, что компиляторов МНОГО, и если к каждому писать реализацию хуйни, то это будет сложнее написания общей хуйни для всех компиляторов через метушню.
> Ведь type deduction guides это говнометушня, куда лучше писать свой парсер языка чтобы получить поведение vector v = {1,2,3}; И как комитет до этого не додумался?
Этот ваш плюсовый type deduction - говно. Например, есть такая штука, как типизация по Хиндли-Милнеру, зависимые типы. Когда такое в плюсах сделают? Этот ваш плюсовый говнокомитет только и умеет, что какие-то кривые костыли сбоку привинчивать ржавыми болтами
roman-kashitsyn 24.10.2017 18:45 # +2
j123123 24.10.2017 19:06 # 0
roman-kashitsyn 25.10.2017 11:08 # 0
А тебе какая разница? Ты же всё равно на плюсах не пишешь.
j123123 26.10.2017 22:48 # 0
1024-- 24.10.2017 18:55 # +1
j123123 24.10.2017 19:24 # 0
Antervis 24.10.2017 19:48 # 0
SemaReal 24.10.2017 19:49 # 0
Неужели на асме правда пишут больше чем на swift?
Dummy00001 25.10.2017 10:20 # 0
мне напомнило про вот это:
http://seed7.sourceforge.net/manual/syntax.htm#The_syntax_of_a_statement
но я думаю что таких "макросов" в крестах мы еще долго не увидим, потому что не метушня.
1024-- 25.10.2017 18:11 # 0
Не очень хорошо знаю аспекты. Насколько я понимаю, это инструмент для вставки кода в нужные места согласно описанным условиям.
Если так, то расширить функционал и языка получится (например, встроить проверку границ в сишные массивы?), а синтаксис изменить - нет.
> ssed7
> Seed7, on the other hand, additionally allows user defined constructs
> The definition of the 'loop' function (semantic definition of the loop-statement) is:
Глянул ссылку. Целиком не прочитал, но на первый взгляд похоже на то, что я хочу.
Надо повнимательней посмотреть будет. Интересно, как там обрабатывается заматченная циклическая и рекурсивная питушня (например, даже обычная регулярка /(?:([a-z])+:([a-z])+;)+/ на строке "a:b;ccc:dd;zzz:zzw" в идеале должна породить иерархический вывод [[['a'],['b']],[['c','c','c'],['d','d']],[['z','z','z'],['z','z','w']]], но мы увидим только ['z','w'] в популярных реализациях)
Dummy00001 25.10.2017 18:20 # 0
хез. какой-то пасквилянт уже много лет это дело неустанно пилит (да, это буквально one man project). раньше чисто интерпретировался язык - теперь вроде на llvm пытаются посадить. я одним глазом поглядываю - потому что эти "макросы" весьма привлекательная фича. как именно эти макросы выжывают вложенность я не в курсе (но логично было бы ожидать что будут работать, а то иначе - говно).
> но мы увидим только ['z','w'] в популярных реализациях
новые регулярки только матчат рекурсивно (ака бэктрекинг) - капче группы всегда были статическими. иначе же ты их не пронумеруешь (sed/perl/etc - \1, \2, этц), тебе понадобится какое подобие xpath'а для этого. и это сложно.
inho 24.10.2017 19:11 # 0
j123123 25.10.2017 07:47 # +2
Потом они захотят многопоточность в компилтайме, и файлы читать в компилтайме, и вообще чтоб в компилтайме оно еще и отсасывать программисту могло (хотя оно и так сосет, образно).
j123123 25.10.2017 07:52 # +1
Antervis 25.10.2017 08:41 # +1
Впрочем, что тебе мешает самому себе сделать новый язык? Если ты такой мировой эксперт и прекрасно знаешь каким идеальный яп должен быть?
Dummy00001 25.10.2017 10:25 # 0
(1) потому что могут.
(2) потому что это опциональные фичи которые тебя никто не заставляет использовавать.
(3) потому что добавляются в язык посредствов стандартной библиотеки, не ломая обратной совместимости.
j123123 25.10.2017 11:18 # +2
Всё немного не так.
1. Говностандартизаторы добавляют в плюсы очередную говнофичу
2. Какие-то говнокодеры пишут говнокод с использованием говнофичи и выкладывают его в опенсорс
3. Программист Вася использует программу, написанную говнокодерами, в котором используется говнофича
3.1. Программист Вася сталкивается с необходимостью что-то в программе поменять, дабы адаптировать под свои потребности, или пофиксить баги
3.2. Программист Вася вынужден разбираться с говнофичей, придуманной плюсовыми говностандартизаторами, т.к. говнокод написан с использованием данной говнофичи, и выбора у него нет.
Т.е. можно конечно сказать, что программист на плюсах вообще не обязан знать плюсовую стдлибу, ведь можно на плюсах как на Си писать. Но на деле же, программисту на плюсах по роду своей деятельности придется иметь дело с кодом, в котором стдлиба плюсов используется, независимо от того, нравится ли ему плюсовая стдлиба или нет. Т.е. когда говнокомитет запиливает говнофичу, несомненно будет появляться говнокод с данной говнофичей, и программисты на говноплюсах эту фичу должны знать, т.к. им надо весь этот говнокод с говнофичами уметь читать-писать-понимать, за ковыряние в этом говне им зарплату платят
Dummy00001 25.10.2017 11:30 # +2
понимаю аргумент.
но на практике, даже голый ц все еще жив и процветает. и это как раз по причине что большинство разрабов - так или иначе - следуют принципу KISS.
тот же Duff's Device в ц трендом не стал - точно так же крестовая метушня после хайпа выродится в н-ное количество обычных простых примочек.
подавляющее большинство разрабов - пых, жаба, кресты или шарпы - народ весьма немудрёный и этой петушнёй/метушнёй коммерчески пользоватся просто не будут, потому что она для них слишком сложная.
поэтому то я лично (1) спокойно игнорирую метушню, (2) за будущее человечества не волнуюсь.
g0cTb 25.10.2017 12:07 # 0
Лол. Уже 15 лет хайп. Когда же уже выродится?
Dummy00001 25.10.2017 12:44 # +3
15 лет назад - народ еще мучался банальным хаосом разных несовместимых версий STL и кривой поддержкой оных в компилерах.
g0cTb 26.10.2017 12:49 # 0
Книжка александреску появилась в 2001, буст мпл появился в первой половине нулевых - все тогда было уже.
Dummy00001 26.10.2017 13:09 # 0
темплейт сам себя использует.
раньше тоже можно было, но было не практично из-за ограничений с++03.
в новых версиях ограничения убрали, и добавили вариадики. теперь это стало практично.
subaru 26.10.2017 15:48 # 0
Dummy00001 26.10.2017 16:50 # 0
defecate-plusplus 26.10.2017 22:13 # 0
вот это? http://coliru.stacked-crooked.com/a/d17f23ad814e965fp
другой вопрос - нахуя
Dummy00001 26.10.2017 22:18 # 0
(2) ты спрашиваешь меня о коде 10-ти летней давности который жил ~1 день, и был викинут потому что либо не компилировалось, либо был verbose до бесполезности.
я тут один только что ли помню старые кошмары когда авто-выведение типов было никакое?
subaru 26.10.2017 22:40 # 0
roman-kashitsyn 26.10.2017 22:43 # 0
Авто-выведение по стандарту или в твоём компиляторе от ВасянИнкорпорэйтед? Как авто-выведение в шаблонах изменилось с C++98 (кроме добавления вариадиков, разумеется)? Вроде мало серьёзных изменений до C++17
Dummy00001 26.10.2017 22:56 # 0
subaru 26.10.2017 23:30 # 0
roman-kashitsyn 26.10.2017 23:33 # +1
с++ программисты имеют странную тенденцию даже не читать сообщения об ошибках. Они беспомощно смотрят на стену текста и говорят себе "а, ну значит так нельзя".
Dummy00001 26.10.2017 23:34 # 0
Antervis 27.10.2017 06:21 # +2
bormand 27.10.2017 08:10 # 0
Потому что обычно лень читать эту стену из мусора и мыслей конпелятора...
Antervis 27.10.2017 09:42 # 0
Вот помнится писал на конфе "лабу" на ranges, так там прога на 20 строк компилилась пару минут и в случае если что-то не так выдавала 100+ строк кода. И это при том, что ошибку ловил static_assert. Ждем концепты
g0cTb 27.10.2017 10:33 # +2
> ошибку ловил static_assert
> Ждем концепты
Необучаемые крестобляди.
Antervis 27.10.2017 12:57 # +1
bormand 27.10.2017 18:42 # +1
Откуда строки в крешдампе? Там же гигабайтики из оперативки...
Antervis 27.10.2017 20:06 # 0
Antervis 25.10.2017 13:32 # −1
Dummy00001 25.10.2017 13:49 # +2
ты так высокомерно говоришь наверное потому что ты еще монументальных факапов не видел, и на тебя не вешали ответственности их "до конца недели" газгребать. через пару раз начинаешь понимать почему 100 строчек тупого кода лучше 10 строчек умного.
subaru 25.10.2017 14:35 # +3
Antervis 25.10.2017 15:30 # +1
Видел. У нас прекратили поддержку двух проектов из-за того, что вместо десятков строк умного кода лепили сотни тупого, и правили баги/добавляли фичи костылями из сотен столь же тупого кода. Один отдали мне переделать с нуля, чем я и занимаюсь последний год. Второй я рефакторил по частям по мере необходимости, но он окажется там же, если не умрет из коммерческих соображений.
И вот что я скажу: если STL предоставляет мне инструмент, идеально подходящий для выполнения той или иной задачи, я воспользуюсь им не задумываясь. И не потому, что "читать 10 строк сложного кода проще чем 100 простого" или наоборот. А потому, что в отличие от костыльных самоделок, на STL есть отличная документация и в нем нет багов. Не знаешь что делает std::whatever? Идешь на en.cppreference.com (кстати, его доку можно и в ide встроить). Не знаешь что делает вон тот трехмерный цикл с 15-ю переменными? Идешь читать/на хуй/пить/бить морду автору (нужное подчеркнуть). Но самая большая разница в другом. Увидев std::whatever, использованный по другому, я сразу буду знать что он делает. А вот увидев новый трехмерный цикл с 15-ю переменными что делать будешь? Разбираться с нуля. И самое главное: в случае ошибки лаконичный код легче понять, чем переписать с нуля.
Dummy00001 25.10.2017 15:55 # 0
> А вот увидев новый трехмерный цикл с 15-ю переменными что делать будешь?
это не тупой код - это убогий и/или кривой код.
> лаконичный код легче понять
ты называешь метушню лаконичной?..
я думаю что у нас определение "тупого кода" различные. твое определение склоняется к "глупому/кривому/убогому коду", в то время как мое скланяется к "явный, открытый и не подкопаешься" (и "лаконичный код" это верх совершенства в определении моего "тупого кода").
> У нас прекратили поддержку двух проектов из-за того, что вместо десятков строк умного кода лепили сотни тупого [...]
а ты уверен что там десятком/сотней строк обошлось бы?
если бы ты стоял у истоков проекта - у тебя бы хватило смелости взять на себя ответственность сделать "умно"? и самое главное: хватило бы у тебя совести проект до конца довести после того как "умное" облажалось?
если код убогий - но концепция правильная - то выровнять это часто пара дней/недель с регулярками в виме. но если у тебя там концепция кривая - или она в принципе из-за требований пользователей нераспрямляемая - то тогда умный код тебе будет только мешать. потому что в 10 строк умного кода встявить костыль на порядки сложнее - чем вставить костыль в 100 строк тупого кода.
Antervis 26.10.2017 06:42 # 0
Как правило код худеет в 2-3 раза. Бывало что в10.
SemaReal 25.10.2017 17:07 # 0
А зачем выдумывать что-то сложное?
Надо просто взять, и вписать еще один if в тридцать семь мест. Разве сложно?
CHayT 26.10.2017 12:38 # +3
Stallman 27.10.2017 12:14 # 0
subaru 27.10.2017 12:32 # +5
roman-kashitsyn 27.10.2017 12:48 # +5