- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
// https://habr.com/ru/post/490222/
Почему мы должны сломать ABI
Прежде всего, есть несколько полезных изменений в реализации стандартной библиотеки, которые можно внедрить, если нарушить текущий ABI:
...
* Ускорить работу std::regex (На данный момент быстрее запустить PHP и выполнить на нем поиск по регулярному выражению, чем использовать стандартный std::regex)
j123123 28.02.2020 01:22 # 0
Блядь, как всё сложно. Модули-хуёдули, ABI какие-то. Взять бы всё, и на ассемблер переписать.
3.14159265 28.02.2020 01:43 # 0
C этого момента поподробней.
gost 28.02.2020 07:37 # 0
3.14159265 29.02.2020 14:23 # 0
Как оказалось не совсем.
Крестушачие конструкторы/деструкторы всё портят.
https://youtu.be/MWBfmmg8-Yo?t=484
gost 29.02.2020 15:45 # 0
3.14159265 29.02.2020 15:49 # +1
1024-- 01.03.2020 14:29 # 0
Fike 28.02.2020 01:58 # +2
guest8 28.02.2020 04:58 # −999
j123123 28.02.2020 01:28 # 0
> Если вы разработчик встраиваемых систем, то эти 5% могут стать гранью между работающим продуктом и необходимостью купить более дорогой и мощный чип, а он может стоить миллионы
А не пойти бы вам нахуй? Никакой гранью это не станет, это просто приведет к выкидыванию нахуй этой вашей триждыблядской крестоговняной стдлибы (возможно даже вместе с самим крестоговном и переходом на Си)
1024-- 28.02.2020 19:30 # +1
j123123 08.03.2020 15:42 # +2
3.14159265 08.03.2020 16:03 # 0
А вы выдрали из контекста кусочек, и опровергли. И я плюсанул не глядя.
>Большего можно добиться некоторыми оптимизациями
Главное-то здесь!
Лучшие алгоритмы дают ускорение НА ПОРЯДКИ.
Не какая-то заумная хрень. А простой отказ от алгоритмов маляра Шлемиэля.
Ассемблерные вставки в нужных местах дают ускорение В РАЗЫ.
"5-10% - питушня", по сравнению с профитами проистекающими от других отпимизаций.
j123123 08.03.2020 16:22 # 0
> Главное-то здесь!
> Лучшие алгоритмы дают ускорение НА ПОРЯДКИ.
> Ассемблерные вставки в нужных местах дают ускорение В РАЗЫ.
Бывает так, что алгоритм и так самый лучший. Но при этом улучшать еще есть куда, и это оправдано. И кстати, можно взять самый лучший алгоритм, реализовать его на какой-нибудь скриптушне, например напитоне и на ассемблере - там тоже ускорение от ассемблера может быть на порядки из-за некоторых говноособенностей скриптушни
j123123 28.02.2020 01:38 # 0
В ассемблере никаких локалей нет. Именно поэтому я за ассемблер
3.14159265 28.02.2020 01:51 # 0
В ассемблере никаких regexов нет. Именно поэтому за «PHP».
3.14159265 28.02.2020 01:51 # 0
Зачем? Зачем?
Просто сделайте новый метод.
j123123 28.02.2020 02:04 # 0
> Это первое и очевидное решение. Если мы не можем поменять std::unordered_map, может нам просто добавить std::fast_map? Есть несколько причин, почему так делать плохо. Добавление типов в стандартную библиотеку обходится дорого как с точки зрения расходов на поддержку, так и с точки зрения образования. После введения нового класса неизбежно появятся тысячи статей, в которых объясняется, какой контейнер стоит использовать. К примеру, мне следует использовать std::scoped_lock или std::lock_guard? А я понятия не имею! Мне нужно каждый раз гуглить.
j123123 28.02.2020 02:08 # +2
bormand 29.02.2020 03:31 # 0
nblXOMAKAKA 29.02.2020 04:06 # 0
guest8 29.02.2020 04:07 # −999
nblXOMAKAKA 29.02.2020 04:15 # 0
А у «Оберона» спецификация чуть ли не на одной странице. Вру, одна страница на синтаксис, 20 страниц — полное описание. Стандартная либа состоит из питушни вроде Texts.Scan и Texts.WriteString. Реальный пример:
j123123 01.03.2020 15:25 # +1
А сколько страниц займет стандарт крестов, если из него выбросить стандартную либу? Я думаю что тоже очень и очень дохуя.
bormand 01.03.2020 15:32 # 0
Desktop 01.03.2020 15:30 # 0
Сишку, кстати, можно в две страницы формального описания уместить?
bormand 01.03.2020 15:38 # +1
Desktop 01.03.2020 15:40 # 0
guest8 01.03.2020 15:46 # −999
Desktop 01.03.2020 15:56 # +5
bormand 01.03.2020 15:42 # +1
Desktop 01.03.2020 15:43 # 0
guest8 01.03.2020 15:45 # −999
bormand 01.03.2020 15:51 # 0
nblXOMAKAKA 01.03.2020 16:02 # 0
bormand 01.03.2020 16:04 # +1
Хех, а ведь когда-то этот том реально было прочитать.
Desktop 01.03.2020 16:07 # 0
guest8 01.03.2020 16:27 # −999
guest8 01.03.2020 16:25 # −999
bormand 01.03.2020 16:28 # 0
guest8 01.03.2020 15:47 # −999
bormand 01.03.2020 15:50 # 0
Desktop 01.03.2020 15:57 # 0
BOPEHHOE 01.03.2020 16:56 # 0
guest8 14.07.2020 17:47 # −999
vistefan 14.07.2020 17:49 # 0
vistefan 14.07.2020 17:49 # 0
gost 14.07.2020 18:04 # +2
TEH3OPHblu_nemyx 14.07.2020 20:13 # 0
3.14159265 15.07.2020 21:12 # 0
Рекомедую попробовать ужать хотя бы JLS хотя бы на десяток A4.
gost 15.07.2020 21:34 # +1
Да, четырёх человек в десяток листов A4 вряд ли получится сжать.
MAKAKA 15.07.2020 21:36 # 0
Ты что, 15-ти летняя девочка?
gost 15.07.2020 21:52 # 0
3.14159265 15.07.2020 21:51 # 0
А что если использовать «принцимп мухи»?
gost 15.07.2020 21:52 # 0
3.14159265 15.07.2020 22:05 # 0
gost 15.07.2020 22:06 # +1
gostinho 15.07.2020 22:07 # +1
gost 15.07.2020 22:08 # 0
3.14159265 15.07.2020 22:12 # 0
Если спамерство ещё можно простить, то двухпробельным говном срут только больные ублюдки.
MAKAKA 15.07.2020 22:17 # 0
3.14159265 15.07.2020 22:19 # 0
3.14159265 15.07.2020 22:10 # 0
MAKAKA 15.07.2020 21:48 # 0
TLC принципиально другой: если выкинуть команду expr и её синтаксис (по сути это язык в языке), то он вообще на пол страницы влезет. Правда, тогда придется потерять условные выражения, и он кажестя станет не ТП.
3.14159265 28.02.2020 02:12 # 0
Альтернатива, которую они предлагают: сломать нахуй всё, ради глупой питушни. Питушни, которую в будущем они ещё несколько раз поменяют.
Это свидетельство анскильности комитета, который сперва бездумно принимает всякую хуйню. А когда она пошла в прод, пытается переделать её.
>Ускорить работу std::regex (На данный момент быстрее запустить PHP и выполнить на нем поиск по регулярному выражению...)
А нужно было просто сделать std::php::regex
j123123 28.02.2020 02:14 # 0
Именно поэтому я за Си - там комитет почти нихуя не меняет
3.14159265 28.02.2020 02:17 # 0
TOPT 28.02.2020 02:56 # 0
По этому я за поссаль
KpunoBblu_nemyx 28.02.2020 08:58 # 0
3.14159265 15.07.2020 21:13 # 0
Деструкторы, женерики, неймспейсы, динамические массивы.
Очень много.
https://wiki.freepascal.org/FPC_New_Features_3.0.0
https://wiki.freepascal.org/FPC_New_Features_3.2.0
TEH3OPHblu_nemyx 15.07.2020 21:15 # 0
«Object Pascal» от «Standard Pascal» отличается примерно как «C++» или «Objective C» от «Plain C».
3.14159265 15.07.2020 21:19 # 0
http://pascal-central.com/docs/iso10206.pdf
Но речь даже не о багланде, а об fpc. И туда регулярно завозят новые фичи.
TEH3OPHblu_nemyx 15.07.2020 21:48 # 0
«fpc», как и «Delphi», реализует «Object Pascal». Сейчас они немного разошлись: в «fpc» завезли одни конструкции, в «Delphi» — другие. Стандарта на «Object Pascal» нет. На базе «Object Pascal» ещё несколько проектов: «PascalABC», «Oxygene»...
Мне нравится «Object Pascal»: он не такой примитивный, как «Standard Pascal» или «Oberon», но и не такой сложный, как «язык Ада».
3.14159265 15.07.2020 21:57 # 0
TOPT 15.07.2020 21:28 # 0
Собственно и lua не меняется уже лет 17, только мелкие исправления и минимальное добавления функции. Вот 30 июня вышла новая версия.
guest8 15.07.2020 21:43 # −999
TEH3OPHblu_nemyx 15.07.2020 21:50 # 0
guest8 15.07.2020 21:51 # −999
TOPT 15.07.2020 21:54 # 0
3.14159265 15.07.2020 21:55 # 0
И багор, именно из-за того что он меняется.
https://govnokod.ru/26508#comment534819
gost 15.07.2020 21:56 # +2
https://github.com/bolknote/SedChess
3.14159265 15.07.2020 21:59 # 0
Я всегда говорил что ed и его производные — выбор скилльных пацанов.
gostinho 15.07.2020 22:06 # 0
3.14159265 15.07.2020 22:02 # +1
В статье ссылки на «тетрис», «сокобан» и «калькулятор».
3.14159265 15.07.2020 22:26 # 0
https://catonmat.net/ftp/sed/turing.txt
3.14159265 15.07.2020 22:41 # 0
Какой GUI )))
3.14159265 15.07.2020 22:51 # 0
Например первый ход Ng1-f3 записывается как «g1 f3».
Так же в игре есть особенность. В отличие от нормальных шахмат король может уходить «под бой». И для победы его надо явно забрать.
3.14159265 15.07.2020 23:04 # 0
Король спасась от мата может «есть» свои фигуры.
Пример:
В обычных шахматах на невозможности friendly-fire построено огромное количество трюков и моментов. Например паттерн «спёртый мат».
MAKAKA 15.07.2020 23:06 # +1
3.14159265 15.07.2020 23:19 # 0
Но многие вореции эзотерических шахмат, вроде js на 1kb альтернативно трактуют те или иные сложнореализумые правила. Вроде рокировки, выбора фигуры превращения и взятия-на-проходе.
Интересно было бы ещё изучить как он ведёт себя когда ему «пат».
Но спать уже хочу нереально.
Судя по коду полагаю что король просто пойдёт под бой, где его можно будет съесть. Что впрочем соответствует очень старым правилам, где и «пат», и «мат» считались победой.
guest8 15.07.2020 22:07 # −999
3.14159265 15.07.2020 21:53 # 0
Это как застывшее говно мамонта, которое никому не нужно.
Или студенческая поделка на гитхабе, на которую забил её единственный автор.
Тем более что все полтора адепта begin~end используют совершенно другие диалекты Паскаля.
MAKAKA 16.07.2020 18:50 # 0
ruby?
XYPO3BO3 16.07.2020 00:40 # 0
Сейчас можно скачать «FPC», который можно запустить на ARM («Linux», «WinCE», «Android», игровые сосноли), на PPC («Amiga», «AIX», «Linux», «Mac OS X», игровые сосноли), на SPARC («Linux», «Solaris»), на 68000 («Amiga», «Linux»), на x86 в 32-битном режиме («Windows», «Linux», «Mac OS X», «FreeBSD», «Solaris», «OS/2», «Haiku», DPMI), на x86 в 16-битном режиме (голый «DOS»), на x86 в 64-битном режиме («Windows», «Linux», «FreeBSD», «Solaris»).
Поддержка «DOS» нормальная, даже круче, чем у «Турбо Паскаля» (добавили указатели типа huge), не то, что экспериментальный проект «gcc-i8086», который даже указатели типа far не поддерживает.
Помимо этого можно собрать или скачать готовые кросскомпиляторы для целевых платформ AVR («Arduino»), «Win16», «JVM», «UEFI», «NativeNT» (можно писать программы, которые зависят только от «ntdll.dll», а не от клиентских библиотек, и даже драйвера нулевого кольца). Даже давно забытый «MIPS» не обошли стороной.
https://wiki.freepascal.org/FPC_JVM
https://wiki.freepascal.org/DOS
https://wiki.freepascal.org/AVR
https://wiki.freepascal.org/ARM
https://wiki.freepascal.org/UEFI
https://wiki.lazarus.freepascal.org/Target_NativeNT
https://wiki.freepascal.org/MIPS_port
3.14159265 16.07.2020 11:59 # +1
Самое удивительное что у них вся инфраструктура родная: компилятор и экосистема написаны на Паскале.
В отличии от «пuтушни» и остальных clang/gcc-based недоязычков где всё ворованное.
gost 16.07.2020 12:00 # 0
3.14159265 16.07.2020 12:03 # 0
TEH3OPHblu_nemyx 16.07.2020 15:38 # 0
Проверку дискриминанта у записи с вариантами они реализовывать не стали (проверку реализовали в «Irie Pascal», а больше реальных примеров я не знаю). Сделали точную копию сишного union, как и в «TP».
Единственное, что пока не очень радует — слабоватый оптимизатор. Даже у «Delphi» и у «Virtual Pascal» код был чуть-чуть быстрее. Но их можно понять: они начали с нуля, не используя кодогенератор «gcc» или «llvm», при этом поддержали несколько разных процессоров.
3.14159265 16.07.2020 15:48 # +1
Ага, я видел.
https://wiki.freepascal.org/FPC_New_Features_Trunk#Support_for_code_generation_through_LLVM
Ну шланг они в транке прикрутили, как опциональный кодогенератор.
TEH3OPHblu_nemyx 16.07.2020 16:38 # 0
В игрушечном стандартном «Паскале» была ещё одна особенность, которую редко реализовывали: разыменовывание файловой переменной. Реальный пример: Эту неявную питушню «fpc» реализовывать не стал.
gost 16.07.2020 16:42 # +1
Прямо ко-ко-кое-то «MMIO».
TEH3OPHblu_nemyx 16.07.2020 17:43 # 0
Что-то типа volatile.
В «Турбо Паскале» (и в других компиляторах вслед за ним) заморачиваться не стали и вместо перегрузки разыменования положили в стандартную библиотеку процедуры Read и Write.
guest8 16.07.2020 18:11 # −999
MAKAKA 16.07.2020 18:09 # 0
gost 16.07.2020 18:26 # 0
guest8 16.07.2020 18:28 # −999
gost 16.07.2020 18:32 # 0
Он тут читает по одному и тому же адресу. Через «mmap» таким образом он бы прочитал одну запись, которая находится в начале файла.
guest8 16.07.2020 18:33 # −999
TEH3OPHblu_nemyx 16.07.2020 21:19 # 0
Т. е. f^ — это ещё не геттер-сеттер, это «буфер».
*****
Когда я учился, нам приходилось переводить с «ISO 7185 Standard Pascal» на «Turbo Pascal 7.0», потому что в библиотеке были задачники по «ISO 7185 Standard Pascal», а на компьютерах был установлен «Turbo Pascal 7.0» (даже полный «Borland Pascal»). Так что нам приходилось объяснять преподам (которые в совершенстве знали только «Фортран»), почему наши конструкции отличаются от тех, которые в задачниках. По идее я должен был получить навык перевода с одного диалекта на другой на автомате. И наоборот, чтобы значение вытолкнулось из буфера в реальный файл и указатель текущей позиции файла подвинулся, нужно вызвать put с единственным параметром:
j123123 28.02.2020 07:58 # +4
Ждем std::mysql::real_escape_string
bormand 28.02.2020 11:31 # +1
З.Ы. А ещё там есть unique_lock...
guest8 28.02.2020 11:41 # −999
bormand 28.02.2020 12:40 # +3
Никак, пишем свои.
KpunoBblu_nemyx 28.02.2020 12:47 # 0
Desktop 28.02.2020 12:08 # 0
1024-- 28.02.2020 19:33 # 0
BOPEHHOE 01.03.2020 16:59 # +2
TEH3OPHblu_nemyx 16.07.2020 21:52 # 0
gost 16.07.2020 21:55 # 0
TEH3OPHblu_nemyx 16.07.2020 22:19 # 0
gost 16.07.2020 22:24 # 0
TEH3OPHblu_nemyx 16.07.2020 22:28 # 0
gost 16.07.2020 22:31 # 0
3.14159265 17.07.2020 00:30 # 0
Сломаешь биоритм, потом хер заснёшь.
3.14159265 17.07.2020 01:12 # 0
Именно поэтому «Спокойной ночи».
TEH3OPHblu_nemyx 17.07.2020 07:42 # 0
gostinho 17.07.2020 08:58 # 0
gostinho 17.07.2020 08:59 # 0
bormand 28.02.2020 08:05 # 0
Но... там же void...
gost 28.02.2020 08:07 # +3
А вообще я джва года жду кококой-нибудь movable_pop_back(). Чтобы можно было не писать питушарское «x = vec.back(); vec.pop_back()».
3.14159265 28.02.2020 13:09 # +3
Зачем? Зачем?
>можно было не писать питушарское «x = vec.back(); vec.pop_back()».
> я джва года жду кококой-нибудь movable_pop_back()
Комитет будет всякую хуйню апрувить, а реально полезные вещи вроде этой — нет.
govnokod3r 28.02.2020 01:56 # 0
j123123 28.02.2020 01:58 # +4
3.14159265 28.02.2020 01:59 # 0
Откуда такие сумасшедшие вообще лезут.
bormand 28.02.2020 08:47 # +1
Сумасшедший тут только комитет, который живёт в своём мире со стабильным ABI с розовыми пони и не видит, что происходит в реальности...
А в реальности только слабоумные и отважные решаются передавать std'шную хуйню между либами, собранными разными тулчейнами. Потому что в реальности какая-то мелочь да ломается. И проще пересобрать всё с нуля и не задумываться про ABIпроблемы.
3.14159265 28.02.2020 09:19 # 0
> But sometimes, removing functions is actually a useful non-breaking change.
А я полагаю что автор. Который постоянно путает API и ABI
bormand 28.02.2020 09:26 # 0
1024-- 28.02.2020 19:36 # +2
Когда питушня нравится ко-ко-комитету - "Как же, как же, столько кода сломается!"
Когда питушня не нравится ко-ко-комитету - "А хрен с вашими кучами кода. Перепишете!"
Desktop 28.02.2020 02:08 # 0
j123123 28.02.2020 02:09 # 0
KpunoBblu_nemyx 28.02.2020 08:59 # 0
gost 28.02.2020 09:06 # 0
guest8 28.02.2020 11:48 # −999
bormand 28.02.2020 09:07 # 0
j123123 28.02.2020 09:28 # 0
guest8 28.02.2020 11:31 # −999
guest8 28.02.2020 11:47 # −999
bormand 28.02.2020 13:15 # +1
eukaryote 28.02.2020 13:39 # 0
guest8 28.02.2020 15:20 # −999
nblXOMAKAKA 28.02.2020 15:21 # 0
guest8 28.02.2020 15:22 # −999
nblXOMAKAKA 28.02.2020 15:28 # 0
j123123 28.02.2020 15:14 # 0
guest8 28.02.2020 15:19 # −999
j123123 29.02.2020 01:13 # 0
nblXOMAKAKA 29.02.2020 01:17 # 0
guest8 29.02.2020 01:20 # −999
nblXOMAKAKA 29.02.2020 01:25 # 0
j123123 01.03.2020 04:39 # 0
guest8 01.03.2020 04:41 # −999
j123123 01.03.2020 07:01 # +2
nblXOMAKAKA 01.03.2020 07:24 # 0
bormand 01.03.2020 11:25 # 0
gostinho 01.03.2020 11:27 # 0
kak 29.02.2020 19:50 # 0
j123123 01.03.2020 05:01 # 0
Fike 28.02.2020 10:45 # 0
а так как существование бога никому пока не удалось доказать,
nblXOMAKAKA 28.02.2020 18:52 # 0
guest8 28.02.2020 03:58 # −999
phpBidlokoder2 28.02.2020 07:54 # 0
bormand 28.02.2020 08:00 # +3
Как можно сломать то, чего нет?
З.Ы. У конкретных компиляторов то оно есть, само собой. Но не в стандарте.
bormand 28.02.2020 08:11 # +3
Стандартизаторы, видимо, живут в своём мире, где после выхода нового конпелятора не надо пересобирать всё крестодерьмо.
KpunoBblu_nemyx 28.02.2020 09:01 # +3
3.14159265 28.02.2020 09:08 # 0
По тону статьи оно звучит как API (сигнатуры методов, аргументы).
Но меня насторожило другое. Предлагается сломать всё нахуй ради мифического пиздежа про 5% пирфоманса.
Аргументы потрясающие:
The estimated performance loss due to our unwillingness to break ABI is estimated to be 5-10% This number will grow over time. To put that in perspective
> If you are a Big Tech company, you can buy a new data center or pay a team to maintain a library
Вот так и представляю, сидит правление компании с миллиардными прибылями и думает куда деть лишний миллион.
Айтишным обезьянам на поддержку говнолибы или начальству на шлюх и кокаин бонусы.
> If you are a game company, it might be the difference between your game being great or your user vomiting in their VR headset
> If you are in trading, it might be the difference between a successful transaction or not.
И вообще если судьба человечества так сильно зависит от 5% пирфоманса, что было бы если б вдруг рост процессорных частот остановился в районе 1-2Ггц. Походу коллапс мироздания.
Анскильному отребью конечно неизвестно, что улучшение алгоритмов ускоряет программы В РАЗЫ.
bormand 28.02.2020 09:14 # +2
Представь, что ты добавил новый опциональный аргумент в какой-то метод. API не изменилось, старый код нормально скомпилится. А вот ABI сломано и неперекомпиленный код распидорасит при вызове.
guest8 28.02.2020 11:53 # −999
3.14159265 28.02.2020 13:12 # 0
И добавление новых аргументов не то чтобы ломает программу. Но заставляет вызываться другой перегруженный метод.
Desktop 28.02.2020 13:36 # 0
bormand 28.02.2020 13:37 # +1
Desktop 28.02.2020 13:48 # 0
И это пиздец. В Свифте точно такая же вафля.
3.14159265 28.02.2020 13:59 # +1
Стало:
Вызов
a(new Object[]{1,2,3})
стал ходить в другую сигнатуру
Desktop 28.02.2020 14:03 # 0
3.14159265 28.02.2020 14:04 # 0
Desktop 28.02.2020 14:05 # 0
посылает нахуй с "Cannot convert value of type '[Int]' to expected argument type 'Int'"
3.14159265 28.02.2020 14:07 # 0
Desktop 28.02.2020 14:09 # 0
guest8 28.02.2020 14:59 # −999
bormand 28.02.2020 22:16 # 0
Я думал только скриптухи себе такие неоднозначные перегрузки позволяют... Как console.log() или конструктор массива в js, к примеру.
Т.е. мне придется писать new Object[](new Object[1, 2, 3])) чтобы вернуть старый смысл?
nblXOMAKAKA 28.02.2020 23:53 # 0
1024-- 29.02.2020 09:04 # 0
1024-- 29.02.2020 09:12 # 0
3.14159265 29.02.2020 14:39 # 0
>Т.е. мне придется писать new Object[](new Object[1, 2, 3])) чтобы вернуть старый смысл?
Я бы так писать не стал. Вдруг там:
>только скриптухи себе такие неоднозначные перегрузки позволяют...
То ли дело кресты с миллионом правил ADL и SFINAE.
3.14159265 29.02.2020 14:44 # 0
>Т.е. мне придется писать new Object[](new Object[1, 2, 3])) чтобы вернуть старый смысл?
Я бы так писать не стал. Вдруг там:
void a(Object[][] o) {
}
bormand 29.02.2020 16:03 # 0
Ну по крайней мере в крестах нельзя отстрелить себе ногу одной функцией без всяких там перегрузок...
guest8 29.02.2020 16:06 # −999
guest8 28.02.2020 15:04 # −999
nblXOMAKAKA 28.02.2020 13:50 # 0
Подтверждаю.
В скомпилированном коде нет никаких имён полей (они могут быть в отладочных таблицах и в RTTI, но на выполнение программы они не влияют), в нём только смещения. После переставления полей меняются их смещения.
Если вызывающий код и вызываемый компилировали с разным порядком полей, данные распидорасит.
bormand 28.02.2020 09:16 # +3
3.14159265 28.02.2020 09:22 # 0
bormand 28.02.2020 09:39 # 0
kak 29.02.2020 19:55 # +2
Rooster 01.03.2020 22:18 # 0
gostinho 01.03.2020 22:20 # 0
Rooster 01.03.2020 22:37 # 0
guest8 01.03.2020 22:40 # −999
gostinho 01.03.2020 22:45 # 0
guest8 01.03.2020 23:01 # −999
ropuJIJIa 03.03.2020 17:33 # 0
guest8 03.03.2020 17:39 # −999
ropuJIJIa 03.03.2020 17:35 # 0
gostinho 03.03.2020 17:36 # 0
Desktop 03.03.2020 18:13 # +1
На нашу репу из трёх бранчей...
kak 01.03.2020 23:02 # −1
phpBidlokoder2 28.02.2020 09:09 # +1
phpBidlokoder2 28.02.2020 09:10 # +3
j123123 02.03.2020 10:56 # 0
j123123 01.03.2020 04:10 # +4
> Сап, двощ. Я работаю курьером Delivery Club в ДС1.
> Есть один программист (я буду так называть его), на внешку бебифейс, но с патлами и бородой, возможно 24 — 26 года. Почти каждый !!! день с 2017 он заказывает еды на 500-1500 рублей. Чаще всего вечером. Сегодняшний случай заставил создать меня этот тред.
> Данный господин живет в трешке, видимо один, ибо это пиздец: вся хата — совковый интерьер, под стеной висит веревочный включатель времен совка, выцвевшие обои, некоторе места заклеены газетами аля «советский спорт», на полу часто видны тараканы, летают мухи.
> Но, картину ломают аккуратно сложенные коробки от процессоров, материнских плат, макбука. В некоторых валяются какие-то гайки и куски хлеба, коробки иногда пропадают, перемещаются или снова появляются старые. Сам задрот с патлами до поясницы и хуй пойми как растущей бородой, месяцами носит одну и ту же футболку. Весь его интерьер я разглядывал как и сказал с 2017, дальше порога я, увы, не заходил. Я видел у него какие-то книги по С++, которые валялись в коридоре, поэтому я называю его программистом.
> Нахуя я создал этот тред
> Когда я передавал ему заказ, я постоянно слышал воркование, и крики птенцов голубей (звук знаком с детства, проведенного на крышах), почти каждый день. Я думал это телевизор, но сомнения быстро рассеялись, потому что это было каждый день.
> Сегодня, передавая очередной заказ, я увидел ГОЛУБЯ! Он вылетел из дальней комнаты, и сел на совковый холодильник, который стоял в коридоре, и начал клевать какую-то хуйню там. У меня просто не было слов, я боюсь теперь туда ходить, думаю увольняться, потому что клиента не выбирают, нельзя там так — его заказы попадаются мне довольно часто. Определил его балкон — там часто тусуются всякие птицы.
Вот к чему крестоговно приводит!
guest8 01.03.2020 04:14 # −999
bormand 01.03.2020 21:48 # +1
Rooster 01.03.2020 22:17 # 0
nblXOMAKAKA 01.03.2020 04:16 # +3
j123123 01.03.2020 04:21 # 0
nblXOMAKAKA 01.03.2020 05:29 # 0
https://tools.ietf.org/html/rfc6214
Адаптация RFC 1149 (это как 2549, но без QoS) к IPv6.
j123123 01.03.2020 06:54 # +2
bormand 01.03.2020 10:43 # +2
j123123 01.03.2020 12:19 # 0
BOPEHHOE 01.03.2020 16:32 # 0
kak 01.03.2020 23:07 # +1
guest8 05.03.2020 11:22 # −999
gost 05.03.2020 11:23 # +1
Звучит как болезнь. Опасная.
1024-- 05.03.2020 18:59 # 0
3.14159265 05.03.2020 19:20 # 0
3.14159265 05.03.2020 19:16 # +2
Программистская секта обладает очень серьёзными высокоразвитыми технологиями, которые и не снились даже инопланетянам. Они изучили днк таракана в совершенстве и управляют им как индивидуально, так и в массовом порядке на больших расстояниях.
Последние годы в мире появилось множество тараканов зрелого возраста абсолютно здоровых, но с полностью отсутствующей днк. Так вот это у Программистов произошла утечка прибора способного стирать с таракана человека всю информацию, но при этом ничего не записывать обратно.
И Программисты усердно ищут этот прибор, и кто его украл. Это как всем известный сайт домена в зоне org, которую контролируют шестипалые. Этот энергетический центр rfc6-2-1-4 находится в интернете в параллельном нашем мире только в другом измерении на севере-востоке ietf.org в 333-х хопах от него.
1024-- 05.03.2020 19:35 # 0
j123123 06.03.2020 20:43 # +2
j123123 17.03.2020 17:11 # 0
j123123 18.03.2020 13:30 # 0
kak 18.03.2020 13:43 # 0
j123123 05.03.2020 11:15 # 0
> Проснувшись, я увидел, что хлеб, который я оставил в пакете на столе, погрызен крысами, «Ну и чёрт с ним, что крысы в доме. Буду прятать продукты в металлический холодильник» — подумал я в тот момент и пошёл на улицу. Выйдя на улицу, я почувствовал покусывания в ногах, закатав колоши, я увидел кучу блох (14 штук). Изучив квартиру, я обнаружил, что они обитают в определенном месте в доме, которое находится далеко от комнаты, где я сплю, но чтобы выйти на улицу, я должен пересечь их логово. В общем, большую часть времени я находился в безопасной комнате (и блох на мне действительно в это время не появлялось), а когда нужно было выйти на улицу, я быстро пробегал через блохастую комнату, иногда даже выходя на улицу не подцепив ни одной блохи, но чаще всего 1-2 все же цеплялись.
Там видимо тоже какой-то протокол с блохами и крысами тестировался
guest8 05.03.2020 11:20 # −999
gostinho 01.03.2020 10:20 # 0
bormand 01.03.2020 10:48 # 0
Подозрительный курьер, про кресты знает...
gostinho 01.03.2020 10:55 # +2
guest8 01.03.2020 15:48 # −999
bormand 01.03.2020 15:55 # +1
А куда сейчас с TCL'ом можно пойти кроме курьерства? Циски админить разве что...
guest8 01.03.2020 16:05 # −999
BOPEHHOE 01.03.2020 16:35 # 0
guest8 01.03.2020 18:47 # −999
gostinho 01.03.2020 18:50 # 0
Rooster 01.03.2020 21:15 # 0
guest8 01.03.2020 21:59 # −999
Rooster 01.03.2020 21:15 # 0
guest8 01.03.2020 21:59 # −999
Rooster 01.03.2020 22:13 # 0
guest8 01.03.2020 22:26 # −999
Rooster 01.03.2020 22:33 # 0
guest8 01.03.2020 22:37 # −999
Rooster 01.03.2020 22:39 # 0
guest8 01.03.2020 22:41 # −999
Rooster 01.03.2020 22:45 # 0
bormand 02.03.2020 08:50 # 0
Rooster 02.03.2020 11:29 # +1
bormand 02.03.2020 11:56 # 0
Rooster 02.03.2020 12:04 # 0
guest8 02.03.2020 15:18 # −999
guest8 02.03.2020 15:18 # −999
guest8 02.03.2020 17:20 # −999
1024-- 02.03.2020 17:57 # +2
Последнюю строку даже проверил в интерпретаторе. Поначалу по ошибке передал f.call вместо f в f.call.apply.
ropuJIJIa 02.03.2020 18:32 # 0
ropuJIJIa 02.03.2020 18:46 # 0
1024-- 02.03.2020 18:59 # 0
> 'f'
Сила PHP!
В JS только поля можно по имени доставать, а питушни из скоупов - нет. Зачем, зачем?
ropuJIJIa 02.03.2020 20:29 # 0
1024-- 02.03.2020 20:56 # 0
Rooster 02.03.2020 19:25 # 0
Rooster 02.03.2020 19:31 # +1
Именно поэтому
gostinho 02.03.2020 20:12 # 0
gost 02.03.2020 19:41 # +2
Rooster 02.03.2020 19:48 # +3
gost 02.03.2020 20:00 # +2
1024-- 02.03.2020 22:12 # 0
"C++" тем крут, что можно без изменения стандарта придумывать новые фичи в синтаксис (хотя, ко-комитет так не умеет).
Не знаю, можно ли в чистой функциушне сделать циклическую сосульку. В данных вроде нельзя, иначе пришлось бы один раз присваивать. А в конструкциях, нужных для исполнения функциушни?
На ум приходят кобенаторы, хотя там на функцию ссылается не она сама, а объект-вызыватель, и вообще они зацикливают программу до смерти, там пофиг на циклование данных. Хотя, для зумерка не пофиг. Интересно, его можно сделать через код со сборкой сосулек?
Ну и использование питушни до того, как она была создана.
Кстати, функции можно перегрузить так, чтобы у них operator () для питушни, содержащий питушню вида _1, ... вызывал operator () от operator &. А operator & чтоб делал std::bind.
Вариадический питузок будет следить за каррированием. Если что, ему можно отдать operator , или ещё какой ненужный.
Паттерн матчинг можно попробовать накрутить через виртуальную питушню.
Как генерить АТД? Не знаю, может быть
type<a,b,c> будет эквивалентен type_<1,a,b,c>, type_<...> наследуется от type__ и expr.
Внутри | будет кастовать правый операнд - в type_<n+1,d,e,f>, если левый был type_<n,a,b,c>. Так вореанты будут пронумерованы, и паттерн матчинг сможет использовать разные классы для своей работы.
С вариадическими питухами и новыми возможностями C++ (например, perfect pituzing) можно сделать функциональную питушню повыразительнее, чем она была раньше.
1024-- 02.03.2020 22:20 # 0
type_<n> наследуется от func_<expr>
_1 - func_<expr, expr>
_1+_2 - func_<expr, expr, expr>
(_1+_2) & 1 - call_<func_<expr, expr, expr>, int> наследуется от func_<expr, expr>
3.14159265 02.03.2020 22:34 # +1
Мне на глаза в комментариях на ютубе попался старый боян.
МатематикуПрограммисту и физику была предложена одна и та же задача: вскипятить чайник. Даны подсобные инструменты: плита, чайник, вода, спички. Оба поочередно наливают воду в чайник, включают газ, зажигают его и ставят чайник на огонь.
Затем задачу упростили: предложен чайник, наполненный водой и плита с горящим газом. Цель та же — вскипятить воду. Физик ставит чайник на огонь.
МатематикПрограммист выливает из чайника воду, выключает газ и говорит: "Задача свелась к предыдущей."
Так вот. Я его прочитал и понял что у программиста на крестах компилер должен догадаться сделать move-семантику.
Взять воду с чайника и выпилить деструктор/конструктор, то есть стадию выливания/наливания*.
* если чайник с водой был аллоцирован на стеке
3.14159265 02.03.2020 22:40 # 0
Мысль избавиться от циклической питушни C++, делая все структуры немутабельными — красивая.
Тогда не придётся дрочиться с weakref и можно пилить всё на shared_ptr и uniq_ptr.
1024-- 02.03.2020 22:59 # 0
Зумерок - Z-комбинатор.
expr имеет в своём интерфейсе (), +, -, *, ...
a + b для expr<a_t>, expr<b_t> - объект типа expr<add<a_t, b_t>>. В случаях, когда a или b - вычисленные значения (не функции), за счёт вычислений над типами на этапе компиляции может быть достигнут тип expr<decltype(a_t() + b_t())>, а add использовать только когда один из операндов - функция.
3.14159265 03.03.2020 03:06 # +1
Напомнило эту статью.
https://habr.com/ru/post/218341/
Избранные цитаты:
>Не компилируется. И лог ошибок на 64 килобайта. Почему?
>К сожалению, дождаться вычисления факториала семи мне не удалось, не говоря уже о том, что на 32-битных системах компилятор попросту умирает от переполнения стека. Но всё равно!
>Всё время, пока я писал пост, меня не покидала мысль: «Это или уже есть в Бусте, или пишется там в три строки».
3.14159265 02.03.2020 22:49 # 0
Для каррирования есть std::tuple, std::tie.
Меня только раздражает что нужно писать РОВНО столько аргументов, сколько полей в кортеже.
Я знаю про std::any, но всё же.
>Паттерн матчинг можно попробовать накрутить через виртуальную питушню.
Его завезут в новом стандарте.
https://govnokod.ru/26337
1024-- 02.03.2020 23:10 # 0
Префиксный & - сахарок для std::bind (и чтобы потом при вычислении подставили значения()) для реализации ленивых вычислений.
Инфиксный & - сахарок для каррирования.
Кстати, префиксный & можно выкинуть в моём примере, если соблюдается ссылочная прозрачность, и h(10) дешевле вычислить сразу же при определении f.
Что интересно, префиксный & наверно понадобится только для замыканий. Хотя, аргументы замыкания - это всё равно особая питушня вида _1, _2, либо зависящая от _1, _2, а потому до вызова функции - функция.
В общем, префиксный & наверно встанет в один ряд со строгим паттерн хаскелевским матчингом и строгими версиями свёрток там же - где функциушня столкнулась с реальным миром.
viagrinho 03.03.2020 00:15 # 0
3.14159265 03.03.2020 02:54 # 0
Допустим паттерн-матчинг можно реализовать простым массивом struct с кортежем для матчинга и лямбдой.
std::any может интерпретироваться как истинный предикат.
>со строгим паттерн хаскелевским матчингом
А вот более сложные формы, вроде матчинга аргументов по типам, такого конечно не сделать. Но в крестах для этого есть шаблонные перегрузки и ADL (https://en.cppreference.com/w/cpp/language/adl)
gost 03.03.2020 06:31 # 0
1. Максимально функциональные языки. Они изначально проектировались под функциональщину, поэтому выражение функциональных парадигм в них наиболее простое и ёмкое. По-хорошему, «функциональными» нужно называть именно такие языки: «Haskell», «ML», etc.
2. Удачно-функциональные языки. Это мультипарадигменные ЯП, которые, тем не менее, обладают мощной и удобной функциональной составляющей. Возможно, это так задумывалось при проектировании, а, может, просто так получилось. Идеальный пример — «JavaScript».
3. Неполноценно функциональные языки. Это, опять же, мультипарадигменные ЯП, в которых присутствуют функциональные элементы: функции высшего порядка, замыкания, etc., но которые проектировались без учёта (или со слабым учётом, «на отъебись») функциональных парадигм. В принципе, на таких языках можно писать в функциональном стиле, но выглядеть это будет… хуёво. Реальный пример — «C++». Реальный пример реальной хуйни — последняя строка из моего комментария. Простая логика подсказывает, что там должно быть «apply(bind(invoke, f, _1, _2), x, y)»… А вот нихуя. Из-за каких-то чрезвычайно запутанных ограничений (кажется, invoke() принимает аргументы по rvalue-ссылке, а apply() не может их правильно пробросить в результат bind-а… примерно такая хуйня, короче) нельзя просто взять и написать идиоматичный функциональный код, а вместо этого приходится ебаться с компилятором и читать тонны ошибок в шаблонах. Поэтому ФП в крестах ограничивается простенькими лямбдами с, иногда, биндами. А кто пытается сделать что-то более сложное — тому в дурку надо (ну, если результат такого творчества в продакшен пойдёт, конечно).
4. Языки без ФП: нет либо функций высшего порядка, либо функций вообще. Борманд знает!
ropuJIJIa 03.03.2020 06:34 # 0
gost 03.03.2020 06:36 # 0
ropuJIJIa 03.03.2020 06:38 # 0
gost 03.03.2020 06:41 # 0
ropuJIJIa 03.03.2020 14:39 # 0
gost 03.03.2020 14:42 # 0
guest8 03.03.2020 14:51 # −999
gostinho 03.03.2020 15:14 # 0
ropuJIJIa 03.03.2020 17:32 # 0
guest8 03.03.2020 14:52 # −999
1024-- 03.03.2020 20:17 # 0
eukaryote 03.03.2020 07:37 # 0
gost 03.03.2020 09:18 # 0
1024-- 03.03.2020 09:59 # +1
1. Максимально кастомизируемые языки. В них можно описать синтаксис и семантику любого языка и использовать (языки будущего).
2. Широко кастомизируемые языки. Можно наворачивать питушни, что код будет не похож на код на этом языке (например, Haskell; местами C++)
3. Малость кастомизируемые языки. В них можно только создать функцию и всё (C без препроцессора)
4. Некастомизируемые языки (brainfuck)
Кастомизация может поднять язык по оси функциональной выразительности. Я именно предлагаю поднять C++. И это не будет сильно страшно. Есть же boost::lambda, boost::phoenix, и такую питушню даже в стандарт пустили.
Desktop 03.03.2020 11:30 # +1
- Лишп изобрели, когда моя бабушка ещё была молодой, лол
guest8 03.03.2020 14:56 # −999
ropuJIJIa 03.03.2020 15:02 # 0
guest8 03.03.2020 16:31 # −999
gostinho 03.03.2020 16:32 # 0
guest8 03.03.2020 16:33 # −999
ropuJIJIa 03.03.2020 17:21 # 0
ropuJIJIa 03.03.2020 16:57 # 0
2. Джава седьмая не нужна.
Следует ли из этого, что функции высшего порядка не нужны?
guest8 03.03.2020 17:03 # −999
ropuJIJIa 03.03.2020 17:21 # 0
gost 03.03.2020 17:24 # 0
ropuJIJIa 03.03.2020 17:25 # 0
gostinho 02.03.2020 19:50 # 0
gostinho 01.03.2020 23:42 # 0
Rooster 02.03.2020 00:14 # 0
guest8 02.03.2020 01:13 # −999
ropuJIJIa 02.03.2020 05:30 # 0
https://pecl.php.net/package/operator
Можно было бы перегрузить плюс... но автор его адаптировал только для 5.3 и 5.4, а потом приуныл.
Rooster 02.03.2020 11:31 # +1
guest8 02.03.2020 15:18 # −999
Desktop 01.03.2020 11:42 # +1
nblXOMAKAKA 01.03.2020 16:04 # 0
Desktop 01.03.2020 16:05 # 0
Но вообще да, думаю, что минимум половина комментариев от фаек админа, ещё часть от ботов.
Кстати, насколько сложно задеанонить админов такого сайта?
Rooster 01.03.2020 21:15 # 0
guest8 01.03.2020 04:18 # −999
Rooster 01.03.2020 21:16 # 0
nblXOMAKAKA 01.03.2020 21:28 # 0
Ты сидишь и ждёшь его давно.
Может, он забыл, что ты сказала,
Или человек — человек-говно.
https://youtu.be/5WJqEh7KvPU
guest8 01.03.2020 22:00 # −999
ropuJIJIa 03.03.2020 17:31 # 0
guest8 01.03.2020 05:19 # −999
Rooster 01.03.2020 21:15 # 0
guest8 03.03.2020 17:03 # −999
ropuJIJIa 03.03.2020 17:21 # 0
ropuJIJIa 03.03.2020 17:29 # +1
ropuJIJIa 03.03.2020 20:35 # 0
1024-- 03.03.2020 20:41 # +2
guest8 03.03.2020 20:58 # −999
YxaHbckuu_nemyx 05.03.2020 21:40 # 0
guest8 06.03.2020 20:45 # −999
j123123 11.03.2020 10:14 # +2
gostinho 11.03.2020 10:31 # 0
3OJIOTA9I_MAKAKA 11.03.2020 11:06 # +1
https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern
Там же ссылка на трюк Бартона — Накмана:
https://en.wikipedia.org/wiki/Barton%E2%80%93Nackman_trick
Ещё в одном термине опечатка, следует читать как NRVO:
https://en.wikipedia.org/wiki/Copy_elision
https://en.cppreference.com/w/cpp/language/copy_elision
SFINAE недавно обсуждали.
Как хорошо, что в «PHP» ничего из этого нет.
3OJIOTA9I_MAKAKA 11.03.2020 11:11 # +2
https://knowyourmeme.com/memes/i-accidentally
gost 11.03.2020 11:13 # 0
guest8 11.03.2020 11:51 # −999
3OJIOTA9I_MAKAKA 11.03.2020 12:14 # 0
И тут мы приходим к тому, о чём я уже говорил.
https://learn.adacore.com/courses/intro-to-ada/chapters/contracts.html
guest8 11.03.2020 12:17 # −999
3.14159265 12.03.2020 01:11 # +1
СУКА. БЛЯТЬ. СУКА. БЛЯТЬ. СУКА.
У меня от этого говна до сих пор БИТОВОЕ И.
Какой выблядок придумал столько этих ебаных значков?
guest8 12.03.2020 02:19 # −999
3.14159265 12.03.2020 02:32 # +1
govnokod3r 12.03.2020 13:57 # +1
bormand 12.03.2020 09:00 # +1
gost 12.03.2020 09:01 # 0
bormand 12.03.2020 09:09 # +1
1024-- 12.03.2020 19:10 # 0
bormand 12.03.2020 19:13 # 0
asdfghjkl 12.03.2020 19:28 # 0
KOPOHABuPYC 14.03.2020 16:51 # 0