Двач.hk не отвечает.
Вы видите копию треда, сохраненную 12 мая 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
image.png1,1 Мб, 1246x701
Самых крутых концепций в программировании тред 1607051 В конец треда | Веб
Накидайте крутых штук типа Y-комбинатора или монад, желательно, с пояснением для дегенератов.
image.jpg61 Кб, 600x390
2 1607057
>>607051 (OP)
- иммутабельность
- функциональщина
- кодогенерация
- "всё есть объект"
- слабая типизация
- доступ к AST
3 1607067
>>607057
это хуйня для петухов, на элитарность и крутизну совсем никак не тянет
4 1607237
>>607051 (OP)
Самомодифицирующийся код. Базарю, вынесет твой мозг.
5 1607250
>>607067
пикрил не подгрузился?
6 1607421
>>607051 (OP)
Прыжки на батуте например

https://en.wikipedia.org/wiki/Trampoline_(computing)
7 1607992
>>607051 (OP)
В PLT самая годнота - системы переписывания в конкатенативных вариантах.
Основатели информатики дали вам самое ценное - линейно-адресуемый RAM с доступом за константное время. Круче только квантовые вычисления.
Свёртки. Каскадное кэширование. Мемоизация. Автоматное кодирование.
А впрочем, всё меркнет на фоне теории графов.
8 1608271
>>607237
Где он нужен кроме вирусов и обфускаторов?
9 1608281
>>608271

> Где он нужен


У нас тут борщехлёбский тред, мы не заморачиваемся такими мелочами!
10 1608290
continuation-passing style очень нравится
11 1609484
>>608290
И что там особенного?
12 1610334
>>607057

>- иммутабельность



вашу оперативку пожрал борщехлеб, милорд
13 1610388
>>609484
С непривычки мозг взрывает только так
14 1610399
>>610388
От скудоумия С непривычки и ООПчик вершиной мысли покажется. А на самом деле, кромешное говно
15 1610437
>>610334
Пруфы? Это вообще не влияет на потребление памяти.
16 1610443
>>610437
Плодить 100500 объектов из-за того, что строки рид-онли - это, по твоему, не влияет на потребление памяти?
17 1610470
Векторизация ЗБС
18 1610476
>>607051 (OP)
Зависимые типы
19 1610495
>>610443
Пруфы будут? Можно подумать ты знаешь как устроены рантаймы таких языков. Ты просто выдумал байку. Имутабельные структуры можно прикрутить и к JS, и это никак не повлияет на потребление памяти. Чтобы рассуждать о таких темах, нужно в этом шарить. Ты не шаришь. Поэтому займись чем-то по-легче.
20 1610519
>>610495

> JS, и это никак не повлияет на потребление памяти



ее как не было так и не будет свободно
21 1610528
>>610437
А вот и он.
22 1610570
>>610476
рассказывай давай, с примерами, интересно
23 1614137
24 1614152
>>607051 (OP)
Подписался, схоронил
https://arhivach.ng/thread/536289/

Мимовкатывальщик
25 1614944
>>614152
оптимизация хвостовой рекурсии
вывод типов по хиндли-милнеру
динамическое программирование
26 1614959
>>614944

>динамическое программирование


Можно подумать бывает нединамическое.
27 1614960
>>614959
Линейное, например. И куча других, называемых программированием по недоразумению и вводящих в заблуждение.
28 1614971
>>607992
Звучит как просто набор слов.
29 1614974
>>614959
ты бы хоть погуглил историю названия, прежде чем кукарекать
30 1614977
>>614974
Если историю названия надо гуглить, то очевидно это хуевое название.
31 1614978
>>614977
как скажешь ты и саму концепцию-то не осилишь, кукаретик
32 1614988
>>614978
Записывать цифры в массив и сравнивать? О да, такое же не проходят на втором занятии по программированию.
33 1617515
>>614988
на словах звучит просто, а на деле обдрищешься
34 1617742
>>607051 (OP)
Логическое программирование, а именно Пролог:
- Bi-directional data. Предикат atom_chars(foo,Chars) даст Chars = [f,o,o], а atom_chars(Atom,[f,o,o]) даст Atom = foo.

- Жесткое мета-программирование. Программа на прологе может анализировать сама себя, перестраивать, модифицировать. Запилить систему типов поверх пролога? Как делать нехуй. Небольшой синтаксический сахар? Самое простое, что можно сделать в прологе.

- Мета-предикаты.

- Все есть данные и унификация(паттернметчинг). Термы можно рассматривать как quote в лиспе. Т.е предикат в прологе не редуцируются. writeln(5+5) напишет в sdout 5+5. В прологе ты полностью контролируешь процесс вычислений.
35 1617743
>>617742

> Предикат atom_chars(foo,Chars)


Цель*
36 1617747
>>607051 (OP)

> Y-комбинатора


Какая-же бесполезная хуйня, хоть и забавная.
37 1617748
>>610443

МУСОРОСБОРНИЧЕК ПОРЕШАЕТ

@

АХАХАХАХА

@

БАЙТОЛЮБ НАХУЙ ИДИ
38 1617757
>>617742

>В прологе ты полностью контролируешь процесс вычислений.


Всю комнату жиром с монитора залило.
39 1617761
>>617757

> Всю комнату жиром с монитора залило.


Ок, всё за границей бектрекинга ты не можешь, но я говорил не про это.
40 1617777
>>617747
В смысле бесполезная?
Без неё лямбда-исчисление не эквивалентно машине Тьюринга.
41 1619048
>>617777

>лямбда-исчисление


есть годная литература по этой теме? вкинь, плиз
44 1619787
>>607051 (OP)
Можно ли написать Y-комбинатор на языке со строгой статической типизацией, без всяких оберток в object'ы?
45 1619872
>>619787
Только через дженерики, и (если возможно) dynamic/any тип. Если известно заранее, что будут возвращать ламбды в комбинаторе, можешь забиндить на типы лямбд.
46 1619918
>>619872
Блять, никак не могу понять, как его записать в языке, в котором нет рекурсивных типов. Как определить тип лямбды?
47 1619919
>>619787

>строгой


почему вы слово strong переводите как "строгий"?
48 1619922
>>619918
Нужен самописный примитивный бокс.
Пишешь функцию, которая принимает аргумент типа структуры с тремя полями, одно из которых - ссылка/делегат на функцию, второе - собственно, значение аргумента функции, а третье поле - флаг того, что из первых двух активно.
49 1619923
>>619919
Потому что устоялось.
50 1619930
>>619922

>Пишешь функцию


И обращаться к ней по имени? Тогда какой же это Y-комбинатор?
51 1619940
Почитал про Y-комбинатор и монады.
Какое-то говно из под коня.
Это то что есть в любом нормальном языке типа С из коробки. Любой программист впитывает это на первых занятиях.
Только яйцеголовым ученым пришло в голову писать десятки заумных страниц на эту тему. Сами себе придумывают трудности чтобы потом героически их преодолевать.
52 1619964
>>619930
Обращаешься по делегату, который передан в качестве аргумента. Ты в любом же случае её в качестве аргумента передаешь, только в динамической типизации от тебя этот процесс определения типа аргумента и обращения по нему скрыт.
53 1619965
>>619940
This. Ты понял суть борщехлёбов.
54 1619975
>>619964
можешь скинуть пример на шарпе или джаве?
55 1619987
>>619975
https://pastebin.com/XiiF7A9B
Ну тут я начинал писать факториал по какому-то туториалу для JS, но когда понял, как это работает, дописывать не стал, так что не уверен, что будет особо полезно.
56 1619988
>>619940
мандада - массив
sage 57 1619997
монады ето динамический массив содержащией еллементы любых типов

такое есть во всех быдлокодерских языках

а в лиспах ничего кроме монад нету

вот они на них и молятся, пишут книги, дрочат, сочиняют сказки и легенды
58 1619999
>>619940
Соглашусь. Профит от У-комбинатора не понятен. И даже если в каком-то языке запрещена рекурсия (но при этом разрешено передавать функцию как аргумент, что уже кажется взаимоисключающим), то У-комбинатор - слишком уж ебанутый способ обойти это ограничение.
sage 59 1620001
вобщемто ето ваше "функциональное программированеи" полнейшай хуетень.

введение искуственных ограничений без получения какоголибо профита с етого.

надежды возложеные на "ленивое программирование" и "автоматическое распаралеливание" не оправдлаись.

человек делает ето намного лучше чем машина.
60 1620011
>>619999
Дебилушка, естественно его профит в языках без каррирования и ленивости по-умолчанию, а так ж поддержки пойнтфри и прочих средств функциональной/комбинаторной композиции никак не ощущается. В своей императивной параше можешь как Духаст Вечаславыч на лабах учил писать while true.
61 1620013
>>620011
Найс подрыв.
62 1620014
>>607051 (OP)
Польза Y комбинатора на практике точно такая же если ты начнешь каждую "лямбда функцию" переписывать в лямбду калькулус
1484102666710.png102 Кб, 580x713
63 1620024
>>619997
Все же знают что монада это вантуз запихивающий значение туда куда оно не пролезает.
64 1620025
>>620024
Я из-за этих конченных картинок только на неделю дольше нихуя не понимал
sage 65 1620029
>>620013
Поражает тупость местной студентоты, которая ничего кроме императивной дрисни не видела, а поэтому не понимает назначения всех этих абстракций, и по быдло-логике считает их ненужными, так как они никак не помогают выгрузить вооон тот отчёт для Марьи Ивановны и заработать на жрат.
66 1620031
>>620029
И в чем же их нужность? Уже изобрели неимперативный процессор?
67 1620037
>>620031
Не изобрели, но ведь борщехлёбам это не нужно.
68 1620042
>>620024
Всегда орал с этих «мондады в картинках» и прочих «ФП для чайников», где простые и понятные вещи объясняют языком для пехепешников отстающих в развитии детей.
69 1620044
>>620031
Что за уебанский вопрос. К чему это вообще?
70 1620046
>>619940

>монады


>есть в любом нормальном языке типа С из коробки


Ору, ты вообще походу не понял что такое монады, но мнение имеешь
71 1620047
>>620037
Может хотя бы пояснишь нахуй они нужны, чтобы их изобретать?
Ну вот например лисп-машины. Но они

>ушли с рынка


потому что

>а определённом этапе экспоненциального роста вычислительной мощности (закон Мура) аппаратная поддержка лямбда-исчисления утратила экономический смысл для компьютеров широкого потребления


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

мимо
72 1620051
>>620044
>>620047

>Может хотя бы пояснишь нахуй они нужны, чтобы их изобретать?


Ну что бы хоть как то обосновать нужность.
Очевидно что если все используемые процессоры императивны, то и смысла в неимперативных языках нет.
73 1620053
>>620051
ну да, процессоры императивные, значит и в математике смысла нет, нахуй он не нужна
74 1620054
>>620046
А шо там понимать?
Просто у вас мутабельных переменных нет вот вы и ебетесь со своими f1(f2(f3(f4(f5(x)))))
Там где нормальный программист просто ебанет цикл
for(int i = 0, s = 0; i < 5; i++) {
s += i;
s += "+" + str(i);
}
75 1620055
>>620053
Всё так, математика для программирования не нужна.
76 1620056
>>620053
В процессоре есть сложения, умножения, ебанат.
77 1620058
Вся суть пр 2020 >>620054
78 1620059
>>620056
в процессоре есть x = x + 1, а в математике нет

>>620055
если только ты клепаешь сайтики на похапэ, тогда да, не нужна, но и похапэ с сайтиками слабо связан с программированием
79 1620062
>>620054
Инымим словами C код и так выполняется в монаде, внутри блока {}
80 1620064
>>620059

>в процессоре есть x = x + 1


Ты бы инструкцию к чипу почитал чтоле.
Есть отдельно x+1, и есть отдельно store
81 1620065
>>620059
Часто интегралы считаешь, когда SQL-скрипты пишешь? Или когда сообщения в очереди отправляешь?
82 1620069
>>620065
как минимум палю алгоритмическую сложность по быстродействию и по памяти, но тебе-то откуда про это знать, ты наклепал лапшу на коленке, хуяк, и в продакшен
83 1620070
Все типы отражающиеся в данных (даже если они редуцируются во время комплекляктции) можно назвать монадами
Вышеупомянутые тупо енумы в С не называют монадами (на уровне языка) из-за общепринятых реализаций монад в ФЯП
84 1620071
>>620051
Ну раз нет аппаратной поддержки модулей и объектов, значит модульное и ОО-программирование не нужно, так что-ли?
Ты совсем ебобо, не видишь разницы между кодом, его абстрактным исполнителем и реализацией этого исполнителя?
Очевидно, для построения систем сложнее laba1, которое неизбежно требует вовлечения различных абстракций, процедурный байтопердолинг не подходит.
Эквивалентность машины Тьюринга и лямбда исчисления показывает, что нет принципиальной невозможности перевести лямбда-код в императивный код.
То что императивные исполнители на данный момент быстрее остальных, для нормальных людей причина писать оптимизирующийся компиляторы из языка для людей в байтоговно, для долбоебов - повод ничего не делать и продолжать жрать говно большой ложкой.
85 1620074
>>620071

>ОО-программирование не нужно


Тащемта да.

>Очевидно, для построения систем сложнее laba1, которое неизбежно требует вовлечения различных абстракций, процедурный байтопердолинг не подходит.


Расскажи это авторам Линукса.

>То что императивные исполнители на данный момент быстрее остальных


Означает что они всегда будут быстрее остальных.
87 1620078
>>620074

>Расскажи это авторам Линукса.


Плохой пример, разработка ядра линукс по сути имеет неограниченые человеческие ресурсы, поэтому сложность тут не имеет значения.
88 1620082
>>620078
Ахуительный маневр.
89 1620087
>>620031
https://en.m.wikipedia.org/wiki/Lisp_machine
Более того, можно спокойно написать эмулятор x86 на лямбда исчислении.
90 1620091
>>620087
Ты бы почитал по ссылке чтобы не позориться

>PUSH


>PUSH


>BRANCH


>SET


>INCREMENT


Обычный императивный дискретный процессор.
91 1620092
>>620074

>Расскажи это авторам Линукса.


Причем тут Линукс, долбоеб? Там императивный код, который пердолит императивные микросхемы, он и должен таким быть, это тупо эффективнее и быстрее в этом случае. А вот когда ты переходишь на другой уровень абстракции, то там уже императивная пораша начинает сосать с проглотом. Тебе уже написали, что функциональное программирование - это абстракция, компилятор оттранслирует это в эффективную императивную дрисню.
92 1620094
>>620069

> алгоритмическую сложность


Ну и при чём тут интегралы? Максимум логарифмы, Да и то нужно редко.
93 1620095
>>620094
какие интегралы, идиот, блять, у тебя математика == интегралы? загляни хотя бы в раздел алгебры для начала, базарю, ты охуеешь, если у тебя, конечно, хотя бы зайчатки интеллекта есть
94 1620097
>>620092

>Причем тут Линукс, долбоеб?


Ты вообще не следишь за контестом, довнич?

>для построения систем сложнее laba1

95 1620098
>>620095
Чел, ты если под веществами, не заходи в тред, или читай хотя бы на что отвечали.
96 1620099
Какой смысл что-то объяснять долбоебу, у которого есть причинно-следственная связь межу «нет не-императивного процессора» и «нельзя писать не-императивный код», очевидно это зелёный или просто придурок.

>Расскажи это авторам Линукса.


Долбоеб, у них там своя реализация ООП и других абстракций, про которые процессор знать не знает, и которые транслируются в машинную дрисню как и в любом языке.
97 1620100
>>620097
системы разные бывают, придурок, и для них требуются разные инструменты
98 1620105
>>620099
Да, там есть абстракции. Нормальные императивные абстракции, чтобы не копипастить много императивного кода, все близко к ассемблеру. Там нет дрисни вида f(f(f(f(f(huy(pizda)))))
99 1620106
>>620100
Жаль, функциональщина нигде не требуется.
100 1620107
>>619918
Как я понимаю, чтобы сформулировать комбинатор неподвижной точки, тебе нужно выбрать хотя бы одно из этого списка:
- рекурсивные функции (изи, Y f = f (Y f))
- рекурсивные типы (самоприменение внутри тела комбинатора)
- нарушение типобезопасности (nuff said)

Если ты хочешь построить комбинатор неподвижной точки в simply-typed lambda calculus (i.e. нет рекурсии ни термов, ни типов), то это невозможно
101 1620108
В 2120 императивный код будет компелироваться в деклиративный, скриньте
102 1620110
>>620053
дегич, процессоры функциональные, потому что основаны на логических функциях
103 1620113
>>620110
блять, по ходу надо валить из этого раздела, сколько тут ебанутых развелось в последнее время, это пиздец
104 1620114
>>620106
Я как-то пытался переписать свой пет-проект в строгой функциональной манере на шарпе через повсеместные readonly struct. По началу даже код казался более красивым и лаконичным. Но в итоге получался чудовищный уродливый нечитаемый даже автором кривой монстр на костылях. Но возможно я просто тупой.
105 1620117
>>620108
будут аппаратные реализации редуцирующей графы хаскель-машины, а императивные программы будут записываться в виде do-нотации (как сейчас)
106 1620118
>>620113
Двачую, с нового года прям нахлынули.
107 1620119
>>620114
Потому что сярп плохо задезайнен под фп
В том же хаскеле практически всё легчко читается по исходному коду и в 95% доки автогенерируемые
108 1620120
>>620113
про логические вентили почитай, маня
109 1620124
>>620120
Про тактовый сигнал почитай, довен.
110 1620126
Здорово, наверное, на хаскелле писать большие проекты. Объявить один огромный тип с кучей всего типа подключения к БД и логгера и прокидывать его от main до недр бизнес-логики.
111 1620128
112 1620136
>>620051

>Очевидно что если все используемые процессоры императивны, то и смысла в неимперативных языках нет.


Совершенно неочевидно. Объясни, почему.
113 1620142
>>620124
про волновые функции почитай
114 1620146
>>620051
очевидно, что если все используемые процессоры императивны, то и смысла в императивных языках нет, ведь любители побаловаться императивщиной в попку могут с успехом писать на ассемблере
115 1620149
>>620146
Кто о чем, а функциональщик о попках.
116 1620151
>>620146
mov rbx, 0
out 5Ah >>= rbx
int 80h
117 1620152
>>620146
Демагогия, одно дело постепенная надстройка, по сути макросы ассемблеры, другое - совершенно левая искусственная концепция.
118 1620153
>>620151
Тонко.
119 1620158
>>620152
ФП - более совершенная закономерная надстройка
120 1620161
>>620158
Синтаксический сахар в виде мап редьюса вместо циклов - да.
Ебанина где нет ничего кроме f(f(f(f(f(x))))) - нахуй не нужно.
121 1620163
>>620158
Ты понимаешь смысл слова "надстройка"?
Надстройка не ломает то что уже есть в процессоре - императивность, т.е. выполнение инструкций подряд, мутабельные переменные, и т.д.
122 1620170
>>620163
необходимо срочно отказаться от многопоточности, потому что она эмулируется через прерывания на одноядернах системах, тем самым ломая выполнение инструкций подряд

кстати, слышал про переупорядочивание инструкций?
123 1620172
Разберем код цепляющий к строке другие строки из массива:
function add(str, strArr ){
for (let i = 0; strArr.length > i; ++i) {
str + strArr;
}
return str;
}
В императивном языке у нас всего 2 переменных и 1 массив

Тем временем в функциональном не дорозумении:

add str strArr = if null strArr then str else add (str ++ head strArr) tail strAdd

У нас пропадает перменная счетчик но теперь вместо всего одного массива и 1 переменной у нас на каждый шаг свой массив и своя строка т.е. вместо 2 переменных и 1 массива у нас N переменных и N массивов (представьте если у нас массив из 1000 элементов вместо 1 счетчика 1 строки и 1 массива у нас тупо 1000 строк и 1000 массивов)

Думаю комментарии функцианальных макак излишни
124 1620174
>>620172

>tail strAdd


tail strArr
быстрофикс
125 1620176
>>620172
10000 МАСИВАВ НЕ СУЩЕСТВУЕТ ЭТА АБСТРАКЦИЯ
74963278392020.jpg75 Кб, 797x797
sage 126 1620185
127 1620216
>>620172
add str strList = foldr (++) "" (str : strList)

Твоё говно, небось, и с бесконеными списками не работает?
А, извини, в вашей параше нет коданных
128 1620220
>>620174
у тебя хуйня внутри цикла написана, даже императивно писать не умеешь
129 1620224

>Думаю комментарии функцианальных макак излишни


>>620216

>пук


>>620220

>пук

130 1620227
>>620224
смотрите, этот говнокодер усрался
131 1620241
>>620172
Во, нормально раскидал
Сразу всё понятно на императивном языке
Функциональная макака даже отладить этот свой add не сможет нормально после тово как он всю память займёт
132 1620247
>>620172

> add str strArr = if null strArr then str else add (str ++ head strArr) tail strAdd


Лол. Это же просто набор слов, да?
image.png29 Кб, 890x256
133 1620253
134 1620260
>>620074
>>620071

> То что императивные исполнители на данный момент быстрее остальных


означает, что их можно генерить из декларативной верифицированной спецификации уже оптимизированными
135 1620269
>>620065
SQL большей частью декларативный, в курсе, да?
136 1620290
>>620163
То есть ООП идёт нахуй.
137 1620295
>>620290
Есть хоть одно доказательство существования ООП?
138 1620299
>>620295
Несущетвующее не может идти на хуй.
139 1620302
>>620290
Демагогия, ООП не отказывается от мутабельных переменных, функций с более чем одним параметром, и т.д.
140 1620307
>>620247
Специально в одну строчку написал чтобы выглядело запутаннее.
141 1620310
>>620302
Мутабельные "объекты" к ООП и не относятся.
ООП это про потокобезопасность, не путай с императивной парашей где везде и всюду надо проверять а не изменился ли твой "объект".
142 1620312
>>620310
Еще раз, для тугих.
ООП это просто надстройка над императивностью.
Борщи это когда все пишется на неестветсвенных ф(ф(ф(ункциях как бута работающих мгновенно))) но все это конвертируется все равно в императивность.
image.png123 Кб, 1801x686
143 1620318
>>620176
действительно, если нормально написать, то не существует.
код из >>620216 работает в ограниченной памяти (хоть и с бОльшим трафиком) для входных данных любого размера, в отличие от императивного накопления в переменной.
пикрелейтед - запуск на бесконечном списке строк.
если исполнение не прервать - будет бесконечно выводить "pr ", ограничившись несколькими МБ ОЗУ
144 1620320
>>620318
Лолблядь. Тебе невдомек, что бесконечный цикл в императиве вообще не будет жрать ничего, кроме пары регистров процессора.
145 1620322
>>620312
Долбоёб, тебе уже сказали, все абстракции конвертируются в машкод, нет никакой разницы между оопешными объектами, HOFами, прологовской резолюцией и прочими другими человеческими абстракциями в этом смысле.

>на неестветсвенны


Неестественных для кого?

>но все это конвертируется все равно в императивность


И что? Это как то должно помешать писать не императивно?
Так пиши сразу на машкодах, хули ты какие-то высокоуровневые пользовательские процедуры вызываешь, в конце же всё в машкод превратиться.
146 1620324
>>620126 Так и делаю, только через тайп классы развязываю логику. Выходит круче любого внедрения зависимости.
Хаскелл/блокчейн программист.
147 1620326
>>620320
приведи императивное решение проблемы из >>620172, работающее для бесконечного списка строк
148 1620330
>>620216

> add str strList = foldr (++) "" (str : strList)


mconcat же, и все:3
149 1620333
>>620320
Лолблять. Тебе невдомёк, что императивный цикл, строящий результирующую строку, будет реаллоцировать память по весь результат по мере его роста.
150 1620335
>>620330
няша, ты победил
151 1620336
>>620322
Сука, как же горит с твоей тупости, для процессоров неестественно.
152 1620337
>>620333
Зачем, дебс? Будет просто писать по буковке на экран.
153 1620342
>>620337
с хуя ли ты тут собрался на экран что-то писать внутри цикла?
154 1620343
>>620336

>для процессоров неестественно.


Они тебе это сами сказали?
normalno.png6 Кб, 245x150
155 1620346
156 1620347
>>620336
Процессоры вообще неестественны. Видел, чтобы природа создавала интегральные схемы?
image.jpg17 Кб, 400x400
157 1620349

>Обычная строка


>Высрана в линкед листах


Всё что нужно знать о ФП
158 1620350
>>620312
Почему неестесственных, почему кого-то должно ебать как там байтики в регистрах прыгают и почему иммутабельные объекты это "надстройка над императивностью" и это ок, а фп это тоже надстройка над императивностью но при этом это не ок.
159 1620351
>>620336
Ты процессор дохуя?
160 1620353
>>620349
В питухоне обычная строка линкед лист.
161 1620354
>>620336
Да и в рот их ебать.

Код пишется и читается людьми для обслуживания человеческих потребностей.
Главное чтобы: 1) кода было мало, писать его можно было быстро, читать и поддерживать легко, он был надёжный 2) оно не тормозило.
Первая задача решается развитием языков и исследованиями в этих направлениях, вторая - развитием компиляторов и железа.
В некоторых случаях есть дополнительные задачи, типа чтоб отрабатывало за точное время, потребляло точное количество ресурсов, тут к сожалению без говноедства до конца обойтись, но в целом прогресс тоже есть.
162 1620355
>>620353
Ну питухон язык скриптинга а не программироавния
163 1620357
>>620336
Машина должна и будет служить людям, она не шлюха, чтобы люди исполняли её прихоти. Отсюда байтобляди (а так же сочувствующие им императивные пидорасы, надрачивающие на показатели System.currentTimeMillis() - start) - пиздолисы, которые опускаются до полного говноедства, лишь бы ублажить её регистры и микросхемы. Альфапрограммисты, как и положено альфам, если машина не выполняет положенных ей задач и требует пресмыкаться перед ней и ублажать её байтами, просто берут и за патчкорды, ебашат с вертушки по передней панели и списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000% неоптимизированного оверхеда. И настоящего программиста не волнуют вопросы выдрачивания и быстродействия - он решает важную задачу из предметной области гораздо более сложной, чем низкоуровневое дрочево, и отвлекаться на всякую подзалупную хуету вроде осоьбеннойстей какой-то там архитектуры ему некомильфо.
164 1620361
>>620336
Демагогия. Для процессоров неестественно иметь надстройки. Пиши на асме. Абстракция - совершенно левая искусственная концепция. У процессора нет имён переменных, это искусственная концепция, чуждая процессору.
165 1620370
Вы хоть раз попытались поставить себя на место процессора прежде чем пиздеть тут?
166 1620387
>>620172

> В императивном языке у нас всего 2 переменных и 1 массив


Нет. На каждой итерации цикла создаётся новая строка, так что

>вместо 1 счетчика 1 строки и 1 массива у нас тупо 1000 строк и 1 массив

167 1620389
>>620387
Нет в каждой итерации перезаписывается ячейка со строкой
В функциальной помойке будет вызываться рекурсия по значению с новыми переменными на каждый вызов функции
168 1620390
>>620350
фп это не надстройка над императивностью, это f(f(f(f(f(f(f(...
169 1620393
>>620354

>оно не тормозило


Лолблядь. Ну естественно борщи будет тормозить. Он на других принципах, чем процессор. Закон мура давно остановился.
170 1620397
>>620342
Ты угараешь что ли сука? Ты мне скидываешь скрин где твоя борщехлебская программа выводит на экран по буковке И ПРИ ЭТОМ ОТЖИРАЕТ ВСЕГО ЛИШЬ МЕГАБАЙТЫ.
171 1620401
>>620397
Чел отжираешь всего лишь мегабайты тут только ты
172 1620407
>>620361
Чел, ты реально троллишь тупостью. Переменные - это оверхед в 1-2 инструкцию. Ооп - в пару косвенных переходов.
Но главное что при этом не отнимаются возможности мутабельных регистров/переменных. А твои бесконечные рекурсии и создания новых объектов на каждый чих - в десятки раз тормознее.
173 1620409
>>620401
Это не мои слова, довен, борщехлеб сам пишет
>>620318

>если исполнение не прервать - будет бесконечно выводить "pr ", ограничившись несколькими МБ ОЗУ

174 1620411
>>620354

> кода было мало, писать его можно было быстро, читать и поддерживать легко, он был надёжный


Хорошо что обычный
while(true) { cout << "pr "; } этому удовлетворяет лучше чем

add str strArr = if null strArr then str else add cad cdr fmap (str ++ head strArr) tail strAdd
175 1620413
>>620389
очевидно, что в коде на каждой итерации создаётся новая строка
176 1620415
>>620411

>add str strArr = if null strArr then str else add cad cdr fmap (str ++ head strArr) tail strAdd


Чел ты научись хотя бы не стрелять себе в ноги n^n потом пиши
177 1620417
>>620397
мегабайты аллоцированы под кучу
178 1620421
>>620411
он ничему не удовлетворяет, т.к. твоя хуйня не переиспользуема совершенно
179 1620424
>>620421
Твоя тем более.
180 1620426
>>620411
то, что ты написал, функцкиональщик запишет как
forever (putStr "pr ")
181 1620433
Хаскель быстрее С
182 1620436
>>620433
Черное это белое
183 1620535
>>620389

>Нет в каждой итерации перезаписывается ячейка со строкой


А строка это массив байтов, который какбэ нельзя просто так брать и увеличивать.
Либо создаётся новый объект "строка" и на него начинает указывать имя переменной (ну прямо как в функциональной помойке) а старый попадает под сборщик мусора, либо строка изначально является связным списком, что тоже в плане быстродействия фейл из десяти.

>В функциальной помойке будет вызываться рекурсия по значению с новыми переменными на каждый вызов функции


Которая будучи хвостовой, имеет порядок роста памяти O(1)
184 1620538
Даунёнок совсем сдулся
185 1620547
>>620433
Раст быстрее хаскелля
186 1620554
>>620547
Нет
187 1620570
https://github.com/GtHbA/PIDOR

Как это, так в треде уже почти 200 постов, а так никто и не приплёл самую ахуенную архитектуру для разработки iOS приложений...
188 1620571
>>620426

Когда вернется домой после работе на нодке или гошке
189 1620573
>>620571
Вот ты и выдала себя, грязная работоблядь
190 1621042
>>620571
Скорее уж с ворочанья легаси на джавке или пышке.
191 1621311
>>621042
Не тот типаж. На пышке и джавке пишут быдланы-мелениалы, которые общаются про тачки, баб, сиськи, пиво...

На крестах и си кодят бородатые бумеры

На нодке и гошке хипстеры.
ФП тот же типаж любит.
192 1621568
>>621311

>На нодке и гошке хипстеры.


>ФП тот же типаж любит.

193 1621581
>>621568
ещё типичные ФПшники
194 1621582
Ладно не могу найти ни одного нормального человека пищущего что-то серьезное на ноде/дене
195 1621586
>>621311
Все это полная чушь.
Поколения еще худо-бедно отличаются. Двадцатилетние например в среднем худее и менее уверены в себе, но к 30 раскабанеют и обнаглеют.
Но языки - вообще нет.
1.png7 Кб, 268x188
196 1621599
>>621586
я чмоня
197 1621609
>>621311

>На крестах и си кодят бородатые бумеры


Либо думеры.
image.png868 Кб, 1024x776
198 1621610
199 1621615
>>621610
профессор фортран - даг?
200 1621748
>>621311

>На нодке и гошке хипстеры.


>ФП тот же типаж любит


Сука, из-за тебя поперхнулся.
201 1622319
>>621748
А шо не так?
202 1622427
>>622319
ФП не модно среди хипстеров уже лет 6.
203 1622461
>>622427
а что щас "модное"? хаскель у хипстерков не взлетел, там мозги нужны, так что они сейчас дрочат?
1.jpg7 Кб, 316x202
204 1622476
>>622461

>%язык программирования%


>нужны мозги


>не взлетел

205 1622478
>>622461

>а что щас "модное"?


Rust, Swift, Kotlin.
206 1622484
>>622478

> Rust


Всем насрать на него, никто на нём всерьёз не пишет.

> Swift


У яблочников выбора просто нет, а больше нигде он не нужен.

> Kotlin


Да.
207 1622526
>>622484

>хипстеры


>всерьёз



...
208 1622534
>>622526
Хипстеры хоть стартапы пытаются пилить.
209 1622552
>>622534
Ага, по фанчику запилить сырое MWP говно, в лучшем случае потом сплавить его кому-то на поддержку, потому что суппорт подразумевает тесты, фикс багов, покрытие эдж-кейсов, профилирование и устранение боттленков, рефакторинг, а это всё очень скучная инженерная РАБота, которая тру-визионеров стартапщиков не интересует.
Но это скорее исключение. Как правило никакого суппорта не будет, и всё закончиться просто проёбом инвесторских бабок, как обычно и go next. Лёгкость бытия.
210 1622824
>>620051

> то и смысла в неимперативных языках нет.


Давай сразу на машинном коде писать, хули нет? Естественно, блядь, под любым декларативным кодом лежит императивный, так же как под асинхронным всегда находится синхронный код. Вот только толку от этой лапши из if'ов и for'ов, когда можно писать человекочитаемый высокоуровневый код?
211 1623078
>>622824
На это уже был ответ, одно дело синтаксический сахар над императивщиной, которая выполняется последовательно, другое дело маняфункции f(f(f(f(f(f))))
212 1623194
>>623078

>маняфункции f(f(f(f(f(f))))



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

но так ты же ещё можешь использовать боголисп, где открыты просто любые возможности: хоть функциональщиной обмазывайся, хоть состояние нежно тереби.
213 1623200
>>622484
>>622478

Ну хз, челы.

Discord - это рил хипстерская программа на хипстерских технологиях. И они юзают elixir
214 1623366
>>623078
На этот ответ уже поступило возражение, что дескать вкусовщина из десяти, раз уж отходить от концепции машинного кода, то нет принципиальной разницы в какую именно сторону. Если одному удобно мыслить императивно, это не значит, что другому не может быть удобно мыслить функционально или объектно.
То, что компьютер работает императивно, совершенно никого кроме ассемблероёбов не интересует и аргументом служить не может, мы на другом уровне абстракции а абстракция на то и абстракция, чтобы скрывать детали нижележащего слоя, а ты этот слои пытаешься намазать на вышележащий и продавить это намазывание как аргумент.
215 1623456
216 1623457
>>623366

>То, что компьютер работает императивно, совершенно никого кроме ассемблероёбов не интересует и аргументом служить не може



ты что это выдумаешь.
вот есть у человека задница, значит надо везде срать!
217 1623829
>>623366

> раз уж отходить от концепции машинного кода, то нет принципиальной разницы в какую именно сторону.


Есть принципиальная разница. Надстройки над императивщиной добавляют мало оверхеда, а маняфункции - много. Потому что натягивается совершенно другая парадигма, которая запрещает пользоваться тем, что есть (мутабельные регистры процессора, последовательное выполнение инструкций, сайд эффекты).

>Если одному удобно мыслить императивно, это не значит, что другому не может быть удобно мыслить функционально


Это вообще лесом, речь идет об устройстве выполнения (процессорах)

>То, что компьютер работает императивно, совершенно никого кроме ассемблероёбов не интересует и аргументом служить не может


А, ну раз ты скозал.
218 1623845
>>623829

> Надстройки над императивщиной добавляют мало оверхеда, а маняфункции - много.


Во-первых это спорное утверждение, т.к. та же оптимизация хвостовой рекурсии позволяет писать КАК УДОБНО но с нулевым добавленным оверхедом в рантайме (на компиляции может быть какой-то добавленный оверхед есть, но не в рантайме), т.е. порядок роста твоей f(f(f(x))) по памяти будет O(1), а не O(n) как при отсутствии такой оптимизации.
Во-вторых сейчас не семидесятые и можно гонять хоть килотонны неоптимизированного оверхеда и всем похуй - купить сервак помощнее выгоднее, чем нанять ещё троих сишников маэстро оптимизации.

>речь идет об устройстве выполнения


Устройству выполнения совершенно насрать. Поэтому и лисп-машины вымерли.

>А, ну раз ты скозал.


Я и рынок спроса на труд программистов.
219 1623864
>>623366
Совершенно верно. Абстракции для того и предназначены, чтобы упрощать понимание и взаимодействие с необходимым уровнем. Есть барьеры абстракций, которые помогают склеивать уровни, и совершенно неважно что есть на нижнем уровне, когда ты работаешь поверх. Есть авто, а есть двигатель авто, это отдельная абстракция, и совершенно неважно какое авто, потому как двигатель существует отдельно. Точно также в двигателе существуют отдельно другие абстракции, как например поршневая система. И так далее...
220 1623880
>>623864
В реальности это так не работает, гугли закон протекающих абстракций. Работает твой автомобиль-как-абстракция ровно до того момента, как зимой не заведется. Или ты решишь закурить рядом с бензобаком.
Screenshot2020-03-0515-07-49.png105 Кб, 623x830
221 1623884
>>623880
Ну я так и понял, что это какой-то закон про пидоров и для пидоров.

По делу - пока машина твоя заводится тебе нет дела до того чё там внутри, это факт, то же самое касается работы компа мне поебать абсолютно как там внизу работает мой софт пока он не багует а будет баговать буду разбираться и в этом мне поможет чистый и кристально прозрачный код с уровнями абстракций а не с навалом ассемблерной лапши.
222 1623912
>>623884
Твой софт будет тормозным говном
223 1623939
>>623912
Машина должна и будет служить людям, она не шлюха, чтобы люди исполняли её прихоти. Отсюда байтобляди (а так же сочувствующие им императивные пидорасы, надрачивающие на показатели System.currentTimeMillis() - start) - пиздолисы, которые опускаются до полного говноедства, лишь бы ублажить её регистры и микросхемы. Альфапрограммисты, как и положено альфам, если машина не выполняет положенных ей задач и требует пресмыкаться перед ней и ублажать её байтами, просто берут и за патчкорды, ебашат с вертушки по передней панели и списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000% неоптимизированного оверхеда. И настоящего программиста не волнуют вопросы выдрачивания и быстродействия - он решает важную задачу из предметной области гораздо более сложной, чем низкоуровневое дрочево, и отвлекаться на всякую подзалупную хуету вроде осоьбеннойстей какой-то там архитектуры ему некомильфо.
224 1624020
>>623880
Дай дураку стеклянный йух...
225 1624024
>>623912
На практике в реальных приложениях, кроме некоторых особо гнилых отраслей, мест, требующих оптимизации не больше 10%, из них лишь мизерная часть требует низкоуровневых изъёбов.

Напоминаю, что оптимизация делает код сложнее в сопровождении, а лоулевел петушение ещё и повышает вероятность возникновения в них ебейших багов, как известно по печальным поделиям байтоблядей.
226 1624030
>>623939
Машина должна служить людям, поэтому байтоебы командуют машине как ей себя вести, конкретно, а борщехлебы борются с хвостовыми рекурсиями и уговаривают пролог хоть как то ограничть перебор всего до тепловой смерти вселенной. Байтоебы приказывают имеющимся машинам, а борщехлебы копят с завтраков на более мощную машину, потому что на этой у них ничего не запустится.
>>623845
Рынок показал что одинаково не нужны ни те ни те, но все же все макакинское говно работает поверх железа и систем созданными байтоебами. Браузеры, ос, сетевые стеки, сервера - все на сишке.
227 1624049
>>624030
Байтодрочерство это ни что иное как борьба с ненужной сложностью. Пролог дает повышенный уровень абстракции. Что позволяет решать задачу, а не бороться с системой. Вам шашечки или ехать?!
228 1624058
>>624049
Пролог - это говно, где в какой то момент вместо решения задачи приходится бороться с системой. Но поскольку пролог представляет собой сорт оф черный ящик, нормальными командами указать ты ему это не сможешь, надо писать страницы кода чтобы убедить его сделать cut
229 1624063
>>624030

> байтоебы командуют машине как ей себя вести


Накомандуй мне интернет магазин за 2 дня, о повелитель машины.
230 1624067
>>624063
Нюфаня, не слышавший про CGI?
Алсо бекенд http://cppcms.com/wikipp/en/page/main
Фронтенд на imgui через emscripten и вперед.
231 1624077
>>624030

>пролог хоть как то ограничть перебор всего до тепловой смерти вселенной.



Пролог так то имеет императивную составляющую и позволяет отсечениями ограничить перебор. Говнарская хуйня, кстати. То ли дело Mercury с чисто декларативной системой модов для предикатов, которая высокоуровнее (как и весь язык), а работает намного быстрее.

Но дело даже не в этом. Игра "Жизнь" на прологе описывается знаешь во сколько строк? Меньше 100 LOC с комментариями. А теперь то же самое сделай на асме своём любимом, говнарик. То-то же.
232 1624080
>>624067
Я думал мы говорим он нормальном низкоуровневом кодинге, а ты мне говно с кучей абстракций принёс.

Но даже на нём за два дня - хуй ты успеешь.
233 1624086
>>624030
В голосину с этого командира машины с laba1.
Со времён старого pr таких непуганных байтослесарей не встречал.
sage 234 1624101
>>607051 (OP)
Борщехлёбы, угомонитесь уже. На языках, в которые сложности добавляют ради самих сложностей, называя это математической красотой, никто никогда всерьёз писать не будет.
235 1624129
>>624077
Имей совесть на асме 42 байта, 80 строк
http://olivier.poudade.free.fr/src/life42.asm
236 1624152
>>624101
Разумеется, но таких языков не существует.
237 1624162
>>624080
Еще раз повторю если туго доходит, абстракции над императивным кодом для императивного процессора - норм, годно сделоли. Маняфункции с маняиммутабельностью - не наш бро.
238 1624228
>>624030

>но все же все макакинское говно работает поверх железа и систем созданными байтоебами. Браузеры, ос, сетевые стеки, сервера - все на сишке


С этим никто не спорил, и это никого не ебёт. Не примазывайся к славе тех байтоёбов, что пишут "браузеры, ос, сетевые стеки, сервера" - лучше заслужи её.
239 1624231
>>624162
Ещё раз повторяю - доказательная база хромает на обе ноги.
240 1624251
>>624228

>Не примазывайся к славе тех байтоёбов


Потому что?
241 1624269
>>624152
Да пожалуйста:
- rust
- haskell
- prolog
- smalltalk
1483959717372.png101 Кб, 1379x970
242 1624270
>>624231
Как скажешь
243 1624325
>>624162
Абстракции нужны для людей.

Для выебанных в мозг операционной семантикой, аппликативным порядком и прочими прелестями процедурного пердолинга инвалидов, императивный стиль, наверное, больше подходит. Правда это не точно, ведь большинство из них ничего другого и не видели.
244 1624331
>>624058
Пролог это просто способ решать задачу. Некий язык, который позволяет рассуждать о вычислениях, об алгоритмах, а не об устройстве какого то примитивного вычислителя. Его компилятор/интерпретатор берет на себя все сопутствующие проблемы, которые выплывают при использовании примитивных императивных языков. Его уровень абстракции находится в плоскости решения алгоритмических задач, а не в плоскости борьбы с императивным наследием ЭВМ. Зачем нужен язык программирования, если его уровень абстракции это противостояние несовершенству архитектуры компьютера? Может лучше написать такой умный транслятор, который будет давать такой уровень абстракции, который позволит не думать об архитектуре ЭВМ, а позволит решать таки алгоритмические задачи, которые позволят писать софт для людей. Нет необходимости говорить с компьютером на языке его архитектуры. Это неудобно для человека. Цель программирования, заставить компьютер общаться с человеком на удобном для человека языке. Для этого придумали удобные языки, как тот же Пролог, а заботу об взаимодействии Пролога с компьютером переложили на его транслятор.
245 1624345
>>624058
Пролог привел в пример не я. На его месте может быть Лисп, или Standard ML, или что то еще. Это в общем то языки с близким уровнем абстракции. Все они позволяют не думать об архитектуре ЭВМ, а решать алгоритмические задачи.
246 1624348
>>624067
CGI, серьезно? Это не самый удобный инструмент для написания веб-приложений.
247 1624352
Нужно: писать поддерживаемый, легко модифицируемый, надёжный код для масштабируемых систем.

Нормальный человек: пишет свой язык и оптимизирующий компилятор, который превратит удобные для него абстракции в процедурную байтодрисню. Или берёт готовые, в зависимости от задачи и на свой вкус.

Байтоговнарик: пишет процедурную байтодрисню руками, жутко гордиться этим, отрицает прогресс, стреляет себе в ногу, нажирается дешёвой водкой, позерски ноет о тяжести нищебросдкой жизни.
248 1624354
>>624077

>Игра "Жизнь" на прологе описывается знаешь во сколько строк? Меньше 100 LOC с комментариями.


В том то и дело. Пролог может выглядеть странным, но он дает тот уровень абстракции, который позволяет не просто байты перекладывать, а решать реально сложные алгоритмические задачи, затрачивая на это минимум усилий.
249 1624357
>>624270
Не забудь доказать что это актуально более чем в 5% отрасли.
250 1624370
>>624357
Бинарные деревья - это вообще 99% отрасли. И там сраная даже Java быстрее, лол.
251 1624371
>>624251
Потому что они - адекватные уравновешенные люди (не шизики), прекрасно осведомлённые о недостатках языков, на которых пишут и понимающие, почему именно эти языки пригодны для именно их задач (а не для всех возможных задач), и реально работающие в этих отраслях.
252 1624373
>>624352

>превратит удобные для него абстракции в процедурную байтодрисню.


Не превратит.
253 1624374
>>624357

> 5%


А ты оптимист. Как насчёт 0.0005?
254 1624378
>>624371
Кто "они" то? Ты поехавший?
255 1624384
>>624162
Давай разберемся. Человеку нужен удобный язык, который позволяет решать задачу с минимальными усилиями. Не думать ни о чем кроме самой задачи. Все остальное за него решают компиляторы/интерпретаторы, фреймворки/библиотеки, etc. Это будет язык максимально приближенный к предметной области. Зачем человеку решающему сложную вычислительную задачу думать об архитектуре процессора, или о других не важных для решения его задачи вещах? Вопрос риторический. Человек хочет командовать компьютером, его укрощать. Пускай все проблемы несовершенства ЭВМ решают программы на нужном уровне абстракции. Например, компилятор Хаскела позволяет писать ленивый код, преобразуя его в подходящий код для процессора. Грубо говоря, можно написать такой интерпретатор, который будет преобразовывать любой самый абсурдный код с точки зрения процессора, в удобный для этого процессора вид. Программисту останется только освоить это язык, и больше не задумываться о том как устроен компьютер на низком уровне. За него будет думать компилятор/интерпретатор.
Simon-Peyton-Jones.jpg1,9 Мб, 3872x2592
256 1624389
>>624373
Чё ещё расскажешь?
257 1624410
>>623939
Двачую, байтоёбы рабы во всём - рабы машины. рабы предубеждений, рабы производительности, рабы стереотипов, рабы обрабатываемых штеудом х86 типов данных - для них всё, что не кратно 2 байтам и больше 16 байт не может быть примитивным типом, хотя число - это просто число, оно может быть целым, дробным, рациональным, комплексным, но не "в 2 байта в 4 байта в 8 байт". Да, байтобляди были актуальны пару-тройку десятков лет назад, когда кроме этого пресловутого отлизывания регистров и микросхем не было способов заставить машину быстро решать задачу. Но теперь-то в нашем распоряжении оптимизирующие компиляторы, многоядерные процессоры с параллелизацией, которые производительнее машин 20летней давности в сотни тысяч раз. Жаль, что программирование было поглощено стереотипным быдлом, не могущим в думать, и способным работать лишь по зазубренной инструкции, написанной кровью и потом сотен павших хомячков-байтоёбов до него. Настоящее, полноценное программирование, благодаря подобным обмудкам, мало теперь где востребовано. Хотя там где оно востребовано, можно кататься как в масле сыр и получать в три раза больше не то что сениор-байтоёба, а ёбанного заместителя директора быдлоконторы в которой этот байтоёб работает. С другой стороны это и хорошо - в космическую промышленность, Data mining и прочие сложные и непосильные для императивных байтохомячков сферы попадает лишь элита.
258 1624415
>>624378
Пиздец, ты нить диалога в голове удержать не можешь?
259 1624417
>>624373

>Не превратит.


Rust, OCaml, MLton, GHC, etc. Это умные компиляторы, позволяющие писать код не в рамках архитектуры фон Неймана. Они преобразуют код в нужный вид для процессора. С этим нет никаких проблем. Программисту остается только понимать как на них писать. Ему не нужно знать устройство процессора.
260 1624424
>>624415
Шизик, ты выдумал каких-то "они", ну выкинь тогда телефон, компьютер, в 99% устройств в мире используется мой байтоебский алгоритм.
261 1624428
>>624270
Разницу в 1-10 раз можно нивелировать правильно подобранным алгоримом, или увеличением мощности. Тупо используешь 10 машин вместо одной, и не ибешься с тоннами неподдерживаемого кода на Си. На Хаскеле кода будет во много раз меньше, и он будет удобен в поддержке.
262 1624430
>>624370
Тыскозал?
263 1624431
>>624354
>>624331
Пролог не позволяет решать алгоритмические задачи. Вместо написания алгоритма, программист на прологе должен будет написать в три раза больше кода, убеждающего пролог сделать именно так, как возможно посчитать на императивном процессоре, существующем в реальном мире.
264 1624432
>>624430
Бенчмарк выше сказал.
265 1624435
>>624424

> Не примазывайся к славе тех байтоёбов, что пишут "браузеры, ос, сетевые стеки, сервера"


После этого ты пишешь

>потому что?


Ты не переспрашивал нихуя, из чего я делаю вывод что ты прекрасно всё понял, а уже впоследствии ты якобы вспомнил что нихуя не понял и решил потроллить тупостью.
266 1624436
>>624384
В реальном мире существуют процессоры, которые по тактам выполняют команды последовательно, и обладают мутабельными регистрами, возможностью передавать несколько параметров в функции и т.д. Умышленный отказ от этого всего, с маняфункциями без императивности, без мутабельности, создает дичайший оверхед, поскольку процессору приходится выполнять не алгоритм, а какую нибудь всратую виртуальную манямашину чтобы обслуживать надуманные конструкции языка.
267 1624440
>>624432
Бенчмарк выше говорит, что памяти слегка вдвое больше джава использует в процессе. Плюс непонятно причём тут хаскель, я за него вообще ничего не говорил.
268 1624442
>>624431
Иди читай про логическое программирование.
269 1624443
>>624410
Все эти "целые", "дробные", "комплексные" считаются на реальном железе с реальными регистрами такого размера. Благодаря байтоебам у нас еще хоть что то работает, а манякукаретики загаживают все своими маняфункциями, из за чего на смартфоне, который как ты выражаешься в сотни тысяч раз мощнее старых компов, ввод и вывод текста работает медленнее, чем на тех старых компах.
270 1624449
>>624417
Это все фантазии. Конечно они превращают в нужный для процессора вид, потому что других не существует и не будет существовать (уж точно не в варианте с маняфункциями вида y=f(f(f(f(f(f(x)))))). Но это все идет ценой оверхеда.
271 1624450
>>624435
Я спросил не примазываться - потому что что?
272 1624453
>>624436
Учитывая скорость вообще похую что они там могут и умеют, всю программу можно редуцировать до одной инструкции mov и всё равно изменений в скорости работы большей её части заметить не удастся.
"Преждевременная оптимизация - корень всех зол", и сказал это ни кто иной как отец всея байтослесарства.
273 1624456
>>624440
А си использует в 585 раз меньше хаскеля.
274 1624457
>>624443

>Все эти "целые", "дробные", "комплексные" считаются на реальном железе с реальными регистрами такого размера


И чё? Усраться теперь?
275 1624459
>>624453
Нет таких компиляторов которые умеют редуцировать нетривиальную программу сложнее хеллоу ворлда. Поэтому, нет не похую. И на скорость не похую. По хорошему надо сжечь всю инфраструктуру и начать пилить веб с нуля.
276 1624462
>>624450
То, что ты спросил именно это, а не "к кому примазываться" - означает что ты понял к кому. Нехуй теперь упираться.
277 1624463
>>624457
Да, усраться. Заводи какие хочешь типы, только они будут эмулироваться, императивными инструкциями выполняемыми по порядку, а значит будет снова тот самый десятикратный оверхед
278 1624465
>>624442
Я достаточно знаком с прологом и уже обоссал его в прошлом треде.
280 1624468
>>624436

>создает дичайший оверхед


Вранье. Опять же, оверхед покрывается правильным алгоритмом или увеличением количества машин. Не помню кто сказал, вроде Кормен, или Ахо, что правильный алгоритм позволяет увеличивать производительность программы в сотни, тысячи, и даже более раз, а вот быстрый язык может увеличить производительность только раз в 10, как например Си против Хаскела, ну или против Окамла. Дело в том что, быстрый алгоритм на Хаскеле/Окамле/etc можно написать намного быстрее и проще чем на Си. В итоге Си не выиграет ничего. Если даже он будет быстрее, можно тупо увеличить количество машин.
281 1624472
>>624467
Красиво, потом посмотрю.
282 1624474
>>624449
Окамл иногда быстре Си. Раст часто быстрее Си. Млтон тоже часто быстрее Си. При этом код на них понятнее, проще, компактнее. В остальных случаях просто увеличиваешь количество машин.
283 1624475
>>624436
Какой же ты долбоёб.
Любой, даже самый высокоуровневый код можно транслировать в низкоуровневую парашу, вплоть до нейтив кода, что GHC и MMC и делают, например.
284 1624478
>>624465
Можешь доказать что логическое программирование уступает императивному в уровне абстракции?
285 1624479
>>624468

>Вранье


Сухие факты. В том числе подтверждаемые бенчмарками, да и банальной логикой. Одно дело оверхед, скажем, для конструктора объекта в крестах, там все ограничивается парой слов и парой косвенных вызовов, и другое - оверхед от маняфункций f(f(f(f(f(x))))) нахуй не нужных зато чтоб иммутабельно

>оверхед покрывается правильным алгоритмом


Сравниваются эквивалентные алгоритмы. Если вдруг твой маняязык быстрее байтоебства, это значит что на нем использовали медленный алгоритм и его можно переписать быстрее.

>увеличением количества машин.


Закон мура не работает в паралеллизме, так как оверхед на синхронизацию и передачу состояний между машинами съедает весь прирост.

>быстрый алгоритм на Хаскеле/Окамле/etc можно написать намного быстрее и проще чем на Си.


Что там сложного-то? Берешь и пишешь пару циклов и проход парой указателей.
286 1624482
>>624475
Долбоеб тут только ты, не понимающий что транслироваться будет с дичайшим оверхедом, что мы и наблюдаем в бенчмарках.
287 1624486
>>624478
Дело не в том что не уступает, а в том, что конкретно в прологе придется писать портянки кода уговаривая пролог посчитать все за приемлимое время. В результате код на прологе выглядит ужасно грязно, с постоянными указаниями как делать перебор в дереве. Ну и зачем это надо, если можно просто на си написать цикл и там явным образом указать, как именно будет проходить перебор.
288 1624489
>>624479
Твои доводы полная чепуха. Ты не напишешь такой же короткий и поддерживаемый код на Си какой можно написать на перечисленных мной языках. Аналогичный алгоритм на Си будет больше, сложнее, чем такой же на Окамле. При этом выигрышь в производельности врядли будет больше чем в 3 раза. Для не сложного вычисления это чепуха, его даже не заметишь. Если вычисление реально сложное, то можно просто увеличить количество машин. Профит. Это будет быстрее, дешевле, проще.
289 1624495
>>624489
Жаль что это беспруфный вскукарек.
1520263989513.png145 Кб, 1500x904
290 1624500
>>624489

> можно просто увеличить количество машин


Это так не работает. Оверхед на синхронизацию быстро съест весь рост.
Типичный график перформанса от многопроцессорности выглядит так.
4 ядра дают меньше х2 прироста над 2 ядрами.
8 ядер дают меньше х7 прироста над 2 ядрами.
16 ядер дают всего х10 прироста над 1 ядром, а не х16.
291 1624505
>>624486

>Ну и зачем это надо, если можно просто на си написать цикл


Цикл это и есть портнянка. В которой через два дня не разберешься. Циклы это вообще антипаттерн в любой парадигме.
292 1624506
>>624436

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



Что это вообще значит? Ты же в компиляции и кодогенерации вообще не шаришь. Причём тут виртуальная машина, нахуй ты её сюда приплёл. Ты хоть понимаешь какие она решает задачи?

Алгоритм это и есть надуманные человеком операции, процессору вообще похуй, он выполняет тот машкод что ему выполнять.
293 1624508
>>624500

>Оверхед на синхронизацию


Какую синхронизацию? Функциональные языки имеют средства для написания параллельного/конкурентного кода без синхронизаций.
294 1624510
>>624482
Ну давай, повесели меня, расскажи откуда возьмётся оверхед.
295 1624513
>>624505
Толсто.
296 1624514
>>624508
На любую, мань. Алсо параллельный код возможен в скольки, в 1% алгоритмов? В остальных будут зависимые от других вычислений данные.
297 1624520
>>624506
При том, что если твой функциональный манякод окажется чуть сложнее f(f(f(f(x)))) от он не схлопнется в одну инструкцию, и компилятору придется эмулировать весь твой маняязык, в котором не существует мутабельных переменных, функций с более чем одним аргументом и так далее, ему придется перекидывать байтики туда-обратно, создавать тысячи временных объектов, и выполнять сотни вызовов на стеке.
298 1624548
>>624479
Чел, в реальности жизни, кроме абсолютных показателей, типа выполнилось за столько-то писесекунд, используются относительные, если юзер своими глазами не замечает разницу, значит разницы нет. Поэтому абсолютно похуй за сколько наносекунд отработает логика твоего бекенда на асме, если 99.99% времени будет потрачено на запрос в базу/кеш, а если не в него, ты всё равно упрёшься в езернет. В виду этого, твои рассказы о оверхеде на синхронизацию как минимум смешны (и это в эпоху микросервисов). То же самое с фронтендом, мобилками и т.д., ты упираешься в браузер, платформу и так далее. Понимаешь, не все заняты автоматизацией сливных бачков на полудохлом МК. За оптимизированный код нужно платить и за оптимизацию без необходимости не берутся. В редких местах, можно написать императивный говнокод, тот же хаскель предоставляет средства написать "настоящий" квиксорт, предоставляет мутабельные массивы, IORefы и прочее говно, но к ним прибегают только в случае крайней необходимости.
Иметь 98% процентов хорошо читаемого и надёжного кода и 2% мутабельной императивной лапши для оптимизации боттлнеков лучше, чем иметь 100% мутабельной императивной лапши, просто ради в выйграше нахуй никому не нужных миллисекунд. А ещё лучше вообще не смешивать и доменную логику писать на высокоуровневом ЯП, а узкие места на том же расте/окамле и подключать их отдельно.
299 1624562
>>624520
Ооо, твой уровень понятен. Ты небось ещё думаешь, что
при работе с иммутабельными данными, будут реально создаваться каждый раз новые структуры? Боюсь тебя огорчить, в сгенерированном коде этого не будет, а будет обычная, так любимая байтоговнарями, мутабельная процедурная дрисня с указателями.

Олсо, ты так и не написал, какое отношение к этому всему имеет виртуальная машина. Почему допустим хаскель код компилируется в нейтив и для выполнения ему никакая вмка не нужна?
300 1624563
>>624548
Функциональный манякод не имеет отношения к хорошо читаемому и надежному.
c++ это и есть высокоуровневый ЯП.
В реальности все видят как все ПИЗДЕЦ тормозит, сайты открываются минуты, скроллятся с лагами, и т.д.
301 1624569
>>624562

>при работе с иммутабельными данными, будут реально создаваться каждый раз новые структуры?


Да, при нетривиальных программах сложнее хеллоу ворлда так и происходит. Что подтверждают бенчмарки где хаскиль медленне даже джавы.

>какое отношение к этому всему имеет виртуальная машина.


Доеб к словам, ты все прекрасно понял.
302 1624572

>Функциональный манякод не имеет отношения к хорошо читаемому и надежному.


Ну это уже совсем ЖЫР пошёл.
Ну да, хорошо читаемый и надёжный это процедурные портянки на говняшной.
303 1624575
304 1624580
>>624569

>Да, при нетривиальных программах сложнее хеллоу ворлда так и происходит.


И тут ты такой с пруфами.

И вот это вот

>Что подтверждают бенчмарки где хаскиль медленне даже джавы.


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

По факту, кто смотрел исходники GHC и генерируемый код, или хотя бы читал документацию, знают что при работе с иммутабельными данными никаких копий не происходит, а происходит переиспользование памяти с обычной передачей указателя.
305 1624582
>>624575
Вытек из треда.
306 1624589
>>624580
Ну и зачем нужны такие ленивые вычисления, если она настолько тормозит? Вместо манягенератора который неизвестно сколько будет отрабатывать, всегда можно написать просто сишный цикл, который четко известно когда и сколько будет работать.
307 1624590
>>624582
Ну теки, держать не буду.
308 1624853
А тем временем, wc на хаскелле сделал по производительности сишную версию *
309 1624879
>>624853
Так и запишем: хаскелль уделал неоптимизированное решение в лоб на сишке.
310 1624881
>>624879
* пришлось параллелить то, что сишка делает в один поток
311 1624892
>>624881
Ну байтодебилы в параллельность так-то не могут особо, только говно на тредах и локах и прочих технологиях 40+летней давности ковырять, стреляя себе в ногу. Но это в целом основное занятие байтослесаря, так что ему не привыкать.
312 1624961
>>624500

> Оверхед на синхронизацию


Ёбаный стыд, иммутабельные объекты это как раз про потокобезопасность
sage 313 1625002
>>624961
Хуябельные, блеать. Оверхед будет из-за постоянного копирования, раз изменять нельзя.
314 1625007
>>624961
Лолблядь, а причем тут это вообще?
Если у тебя сначала считается много k=a⋆b, l=c⋆d, а потом x=k+l, то ты в любом случае будешь ждать первых результатов, вне зависимости от того мутабельные k=a⋆b или иммутабельные k=new(a⋆b).
315 1625010
>>625002
Хуерхед, с темы-то не соскакивай, ты про синхронизацию скулила.
316 1625012
>>625007
В простом примере безусловно, а реальной работе рано или поздно будет невовремя перезаписан объект и вызван дедлок, для борьбы с чем надо либо изначально отказаться от мутабельности, либо городить правила для очередей.
317 1625013
>>625007
И блядь к чему вообще это сказано, если речь про синхронизации.
1520714125625.webm6,9 Мб, webm,
1920x1080, 1:16
318 1625323
>>624572

>хорошо читаемый и надёжный это процедурные портянки на говняшной.


Да. Вот как выглядит простой и надежный код
1-2. инклюды чтобы строки и консолька работали
3-4. разработчики юникода и шиндоус мудаки, поэтому копипаста чтобы utf-16 работало
5. ненужный инклюд забыл убрать
6. конфиг. половинная ширина терминала (подобранная методом проб и ошибок)
7. функция для перевода символа юникода в его смещение относительно буквы А
8. функция добавления символа к строке с учетом текущих тегов.
9. если нет тегов или символ не конвертируемый, добавить как есть
10. если символ в нижнем регистре, то доп.смещение. потому что авторы юникода мудаки
11. автоматически высчитываемое смещение в зависимости от текущих тегов.
12. фикс пропущенных символов. потому что авторы юникода мудаки.
13. добавление к строке суррогатной пары. потому что авторы юникода и шиндоус мудаки.
15-16. глобальные переменные, вынесены туда из мейна для простоты.
17. функция, дописывающая к строке накопленные символы незавершенного тега. есть бага.
18. псевдохешмап, на два валидных и один невалидный тег
19. главная функция
20. копипаста чтобы utf-16 работало, потому что авторы юникоды и шиндоус мулаки.
21. цикл, считывающий строку целиком из консольки и сбрасывающий переменные
22. цикл для всех сивмолов в строке. есть бага.
23. если самый первый символ строки #, то вход в режим заголовка. сам # не добавляется к строке
24. добавление к строке символа в режиме заголовка
26. конечный автомат микропарсера тегов
27. в начальном состоянии, если символ открытия тега, то следующее состояние
28. иначе символ добавляется к строке с учетом текущих тегов
29. в состоянии ожидания буквы тега, если /, то переход в состояние закрывающегося тега
30. в состоянии ожидания буквы тега или закрывающегося тега, запомнить букву тега
31. в случае незавершенного тега, записать сохраненные символы.
32. в состоянии окончания открывающего или закрывающего тега, если тег валиден, то (кроме случая, когда тег не был открыт) увеличить или уменьшить счетчик активных тегов. И сбросить состояние конечного автомата.
33. как 31.
36. завершение последнего незакрытого тега в строке
37. обрезать обработанную строку по полуширине терминала
38. выровнять строку пробелами до полуширины терминала и отделить вертикальной чертой
39. вывести обработанную строку и подготовиться к вводу новой строки, вернув каретку в начало.
40. повторить весь цикл ввода.
1520714125625.webm6,9 Мб, webm,
1920x1080, 1:16
318 1625323
>>624572

>хорошо читаемый и надёжный это процедурные портянки на говняшной.


Да. Вот как выглядит простой и надежный код
1-2. инклюды чтобы строки и консолька работали
3-4. разработчики юникода и шиндоус мудаки, поэтому копипаста чтобы utf-16 работало
5. ненужный инклюд забыл убрать
6. конфиг. половинная ширина терминала (подобранная методом проб и ошибок)
7. функция для перевода символа юникода в его смещение относительно буквы А
8. функция добавления символа к строке с учетом текущих тегов.
9. если нет тегов или символ не конвертируемый, добавить как есть
10. если символ в нижнем регистре, то доп.смещение. потому что авторы юникода мудаки
11. автоматически высчитываемое смещение в зависимости от текущих тегов.
12. фикс пропущенных символов. потому что авторы юникода мудаки.
13. добавление к строке суррогатной пары. потому что авторы юникода и шиндоус мудаки.
15-16. глобальные переменные, вынесены туда из мейна для простоты.
17. функция, дописывающая к строке накопленные символы незавершенного тега. есть бага.
18. псевдохешмап, на два валидных и один невалидный тег
19. главная функция
20. копипаста чтобы utf-16 работало, потому что авторы юникоды и шиндоус мулаки.
21. цикл, считывающий строку целиком из консольки и сбрасывающий переменные
22. цикл для всех сивмолов в строке. есть бага.
23. если самый первый символ строки #, то вход в режим заголовка. сам # не добавляется к строке
24. добавление к строке символа в режиме заголовка
26. конечный автомат микропарсера тегов
27. в начальном состоянии, если символ открытия тега, то следующее состояние
28. иначе символ добавляется к строке с учетом текущих тегов
29. в состоянии ожидания буквы тега, если /, то переход в состояние закрывающегося тега
30. в состоянии ожидания буквы тега или закрывающегося тега, запомнить букву тега
31. в случае незавершенного тега, записать сохраненные символы.
32. в состоянии окончания открывающего или закрывающего тега, если тег валиден, то (кроме случая, когда тег не был открыт) увеличить или уменьшить счетчик активных тегов. И сбросить состояние конечного автомата.
33. как 31.
36. завершение последнего незакрытого тега в строке
37. обрезать обработанную строку по полуширине терминала
38. выровнять строку пробелами до полуширины терминала и отделить вертикальной чертой
39. вывести обработанную строку и подготовиться к вводу новой строки, вернув каретку в начало.
40. повторить весь цикл ввода.
319 1626544
>>624892
Байтодебилам и не надо, у них в один поток быстрее, чем хахаскель в три, лол
320 1626710
>>624563
Императивный манякод не имеет отношения к хорошо читаемому и надёжному
321 1626763
>>626710
Толсто.
322 1626972
>>626763
Толсто это когда как детектив распутываешь программу и зарисовываешь какой стейт в какой момент чтобы ничего не упустить.
323 1626982
>>626972
Жиза, постоянно этим занимаюсь, когда пытаюсь что-нибудь писать на хаскелле.

мимо
324 1627100
>>626982
Толсто, фп как раз и славится отсутствием стейта
325 1627262
>>627100
ФП славятся тем, что неизбежный в реальном приложении стейт
всплывает наверх архитектуры и пробрасывается оттуда потом сверху донизу.
И если ООП прекрасно прячет какой-нибудь локальный кэш под капотом абстракции, то в ФП это выглядит стрёмно и протекает
326 1627271
>>627262
Ты путаешь тёплое с мягким и наворачиваешь фиолетовое
327 1627273
>>627100
Незалдуженная слава. Нет никакой практический разницы между изменением стейта напрямую и рекурсивным вызовом текущей функции с изменённым стейтом. Точно так же можно проебаться и передать неправильный стейт. Вся разница лишь в отсутствии локальных переменных и вынужденности инициализировать и передавать их извне. Абстракции текут повсеместно. Да, с математической точки зрения красиво. Но не забываем, что математика так и не научилась в абстракции, и в каждой теории тебя заставляют дрочить доказательства, даже если это сотню раз было доказано, и всем на это насрать. Как если бы для написания хеллоуворлда пришлось дрочить весь более низкоуровневый код от ядра и драйверов до исходников стандартной либы.
328 1627278
Что аноны думают по поводу ML языков, типо F#/OCaml? Франкенштейны или таки вин? Ну в F# меня слишком пугает совместимость с .NET и связь с MS.
329 1627288
>>627271
ты не писал на Хаскеле ничего, сложнее факториала
330 1627289
>>627273
Нет никакой практической разницы между крестами и машиной Тьюринга.
331 1627290
>>627288
В свою очередь в любом нормальном языке должна быть возможность писать факториал так, как в хаскеле, если её нет то извольте проследовать на парашу выразительности.

мимо
332 1627299
>>627278

>F#


>пугает совместимость с .NET и связь с MS


Так он ни для чего кроме частных вставок for lulz в .NET-based проект не предназначен и планов выстраивать из него полноценный язык никогда не было
333 1627316
334 1627320
>>627289
Нет никакой практической разницы между хаскеллем и машиной Тьюринга. И это значит, что все вскукареки про какие-то "гарантии" - наглая ложь.
335 1627334
>>627288
Ты-то что осилил сложнее факториала?
Как и зачем натягивать парадигмальную разницу в ООП кешах и полностью редуцируемого ФП кода - непонятно
Каким образом ты специфику языка с "пробрасыванием стейта" закидываешь в "архитектуру" непонятно
Для пробрасывания есть свои инструменты и паттерны, те же трансформеры
Если у тебя возникают какие-то проблемы с реализацией в ФП ты или делаешь что-то не так или пытаешься впихуть невпихуемое по определению
336 1627413
>>627273

>математика так и не научилась в абстракции


охуел с этого жира, математика ващет это как раз про абстракции, они там везде
337 1627417
>>627320
Практической нет, а разница в выразительности - огромна.
338 1627456
>>627100
Такой жыр, от того что ты вместо состояния 1, 2, 3... Возвращаешь new(1), new(2), new(3), состояние никуда не денется.
339 1627458
>>627456
Кого ебёт где там состояние в ассемблере крутится? Никого абсолютно кроме асмоёбов.
340 1627486
>>627458
Причем тут ассемблер, довнич? Речь о состоянии в твоей программе.
341 1627512
>>627456
Передается по значению?
342 1627543
>>627486
Состояния в моей программе не существует на том уровне абстракции, в которым я работаю. На моём уровне абстракции существует только редукция.
343 1627592
>>627262
В ФП стейт передаётся явным образом просто как аргумент для тех функций, которые от него зависят. Он специально типизирован и код работающий со стейтом, как и с прочими сайд эффектами, изолирован от чистого кода. В императивной же дрисне сайд-эффектное говно перемешано с остальным кодом, в результате чего его безопасность в разы меньше.
Работа с сайд эффектами в ФП языках построена на его концептуальном базисе (монады в Haskell, линейные типы в Mercury и Clean), а для уменьшения синтаксического шума при работе с ней, обычно есть специальные конструкции типа do нотации, !IO и тд.
344 1627807
Давайте уже игнорировать вскукареки унтерков-байтоёбиков и обсуждать здесь крутые штуки типа Y-комбинатора или монад

Кому-то доводилось использовать в проде зигохистоморфный препроморфизм?
345 1627878
>>627807
поясни за монады, прочитал дохуя туториалов но так нихуя и не понял, в чем их суть? нахуй они нужны? какие виды бывают?
346 1627980
>>627807
Это никому не интересно. Вот у байтоебиков интересно, например есть в процессоре инструкция popcnt, которая считает кол-во единичных битов в слове, которую любят использовать игроделы, но которой нет в старых процессорах. Но это не проблема, так как ее можно заменить на небольшой цикл, а учитывая, что эта инструкция используется для какой-либо фигни, то такая замена на производительности не сильно скажется, допустим там до 5% всего медленнее будет. Остается вопрос, а как же вставить цикл, ведь он длиннее инструкции popcnt. Тут на помощь приходят трамплины. Сами байты инструкции заменяются на байты инструкции вызова подпрограммы, а в ней уже пишется сам цикл. Причем можно сделать так, что это будет происходить автоматически. Ведь у процессора есть прерывание несуществующая инструкция, при этом прерываение получает адрес, по которому инструкция расположена. А значит, можно по аналогии с pagefault подменить все и продолжить программу с того же места.
347 1627981
>>627592
Господи, зумерам засрали мозг евангелисты, теперь они несут баззворды в массы
348 1628020
>>627878
Лучший способ с ними разобраться - начать пытаться использовать.
Если только ты не математик-теоретик.

(далее я поменял : и :: потому что так эргономичнее)

Что это?
Их можно определить разными способами:
- как моноид в категории эндофункторов
- через сопряжённые функторы
- как тройку (m, pure, bind) с набором законов, где m : -> , pure : a -> m a, bind : m a -> (a -> m b) -> m b
- как тройку (m, pure, join) с набором законов, где m : -> , для m определён функтор, pure : a -> m a, join : m (m a) -> m a
- как категорию Клэйсли, где id : a -> m a, (.) : (b -> m c) -> (a -> m b) -> (a -> m c)
наверняка ещё как-то.
Но это всё не очень способствует понимаю.

Как о них можно думать?
Вычисления в некотором контексте или вычисления с эффектом.
Иногда - как о некоем контейнере с композицией порождающих его функций.
Ещё удобно смотреть на типы вида `a -> m b` как на `a —m—> b`, т.е. это не просто функция, а функция с сайдэффектами.

Зачем они нужны программисту?
Они предоставляют единый интерфейс для композиции вычислений с контекстом/эффектами.

Что при помощи них можно делать?
Допустим, у тебя есть тип m с монадкой и две функции `f : a -> m b` и `g : b -> m c`, ты хочешь скомпозить их и применить к некоторому `x : a`. `g (f x)` очевидно не сработает, т.к. типы не совпадают, зато ты можешь сделать `f x >>= g` или `pure x >>= f >>= g` или `(g <<< f) x` или ещё что-нибудь такое.

Как пользоваться?
Обычно в разных ЯП есть сахарок для монадок: в хаскеле do-нотация и monad comprehension, в скале monadic for, в f# - computation expressions, в c# - linq query syntax.
Но разумеется никто не запрещает использовать родные и милые сердцу pure/return, join/flatten, flatMap/SelectMany/>>= и прочее.

Какие бывают монады?
На примере хаскеля.
- `data Maybe t = Nothing | Just t` (оно же Option и Optional) - моделирует частичные функции, контекст опциональности. Например функция деления на целых числах частичная, т.к. не определена для делителя == 0, но её можно превратить в полную с помощью Maybe: `divSafe : Int -> Int -> Maybe Int`
- `data [t] = [] | t :: [t]` (он же List) - моделирует недетерменированные вычисления, т.е. как бы множество разных реальностей с разными результатами вычислений в них.
- `data State s a = State (s -> (a, s))` - моделирует чистое состояние. Со стэйтом у тебя получаются функции `a -> State s b`, что эквивалентно `a -> s -> (b, s)`, что эквивалентно `(a, s) -> (b, s)`, т.е. функция вдобавок к отображению `a -> b` ещё и производит отображение состояния `s -> s`. К этому типу прилагаются функции `get : () -> State s s` и `put : s -> State s ()`, обеспечивая доступ к состоянию на чтение и "запись".
- ST с магией экзистенциальных типов - моделирует мутабельное локальное состояние (т.е. разрушащие операции в памяти в некотором скоупе)
- IO с магией компилятора - моделирует ввод-вывод, по сути даёт возможность строить вычисления, композя их из более простых вычислений (можно думать о `putStr : String -> IO ()` как о функции, которая принимает строку и возвращает вычисление, печатающее строку в консольку. Этим вычислением ты можешь оперировать как обычным значением - передать в функцию, сохранить куда-то, скомпозить с другим вычсилением, выкинуть на мороз, высрать из main чтобы оно запустилось). Представляет из себя State, где состояние содержит весь мир.
и прочие, их бесконечно много.
Другие наиболее полезные - Reader, Writer, Cont, Identity, Free, Codensity.

Ещё их можно композить, но это сложно.
348 1628020
>>627878
Лучший способ с ними разобраться - начать пытаться использовать.
Если только ты не математик-теоретик.

(далее я поменял : и :: потому что так эргономичнее)

Что это?
Их можно определить разными способами:
- как моноид в категории эндофункторов
- через сопряжённые функторы
- как тройку (m, pure, bind) с набором законов, где m : -> , pure : a -> m a, bind : m a -> (a -> m b) -> m b
- как тройку (m, pure, join) с набором законов, где m : -> , для m определён функтор, pure : a -> m a, join : m (m a) -> m a
- как категорию Клэйсли, где id : a -> m a, (.) : (b -> m c) -> (a -> m b) -> (a -> m c)
наверняка ещё как-то.
Но это всё не очень способствует понимаю.

Как о них можно думать?
Вычисления в некотором контексте или вычисления с эффектом.
Иногда - как о некоем контейнере с композицией порождающих его функций.
Ещё удобно смотреть на типы вида `a -> m b` как на `a —m—> b`, т.е. это не просто функция, а функция с сайдэффектами.

Зачем они нужны программисту?
Они предоставляют единый интерфейс для композиции вычислений с контекстом/эффектами.

Что при помощи них можно делать?
Допустим, у тебя есть тип m с монадкой и две функции `f : a -> m b` и `g : b -> m c`, ты хочешь скомпозить их и применить к некоторому `x : a`. `g (f x)` очевидно не сработает, т.к. типы не совпадают, зато ты можешь сделать `f x >>= g` или `pure x >>= f >>= g` или `(g <<< f) x` или ещё что-нибудь такое.

Как пользоваться?
Обычно в разных ЯП есть сахарок для монадок: в хаскеле do-нотация и monad comprehension, в скале monadic for, в f# - computation expressions, в c# - linq query syntax.
Но разумеется никто не запрещает использовать родные и милые сердцу pure/return, join/flatten, flatMap/SelectMany/>>= и прочее.

Какие бывают монады?
На примере хаскеля.
- `data Maybe t = Nothing | Just t` (оно же Option и Optional) - моделирует частичные функции, контекст опциональности. Например функция деления на целых числах частичная, т.к. не определена для делителя == 0, но её можно превратить в полную с помощью Maybe: `divSafe : Int -> Int -> Maybe Int`
- `data [t] = [] | t :: [t]` (он же List) - моделирует недетерменированные вычисления, т.е. как бы множество разных реальностей с разными результатами вычислений в них.
- `data State s a = State (s -> (a, s))` - моделирует чистое состояние. Со стэйтом у тебя получаются функции `a -> State s b`, что эквивалентно `a -> s -> (b, s)`, что эквивалентно `(a, s) -> (b, s)`, т.е. функция вдобавок к отображению `a -> b` ещё и производит отображение состояния `s -> s`. К этому типу прилагаются функции `get : () -> State s s` и `put : s -> State s ()`, обеспечивая доступ к состоянию на чтение и "запись".
- ST с магией экзистенциальных типов - моделирует мутабельное локальное состояние (т.е. разрушащие операции в памяти в некотором скоупе)
- IO с магией компилятора - моделирует ввод-вывод, по сути даёт возможность строить вычисления, композя их из более простых вычислений (можно думать о `putStr : String -> IO ()` как о функции, которая принимает строку и возвращает вычисление, печатающее строку в консольку. Этим вычислением ты можешь оперировать как обычным значением - передать в функцию, сохранить куда-то, скомпозить с другим вычсилением, выкинуть на мороз, высрать из main чтобы оно запустилось). Представляет из себя State, где состояние содержит весь мир.
и прочие, их бесконечно много.
Другие наиболее полезные - Reader, Writer, Cont, Identity, Free, Codensity.

Ещё их можно композить, но это сложно.
349 1628062
>>627981

Есть Джон Кармак, эталонный байтоёб из палаты мер и весов. Топит за как можно более функциональный код (даже в нефункциональных языках). Есть мнение анона-байтоёба: "ряя, зумерки, рряяя, нахуй функциональщину".

Кому мне верить? Ну чисто так за советом обращаюсь.
350 1628076
>>627980
Вот что интересно у байтоебиков https://github.com/utds3lab/pemu
351 1628157
>>627878
Объясняю монады на примере ООП.
Допустим у нас есть объект с полем name
Мы можем обратиться к нему с помощью object.name
Также допустим у нас есть объект (скажем, запись в бд сотрудников), с полем person
Мы можем обратить к нему с помощью dbitem.person.
Но к имени этого человека без монад мы можем обратиться только написав
dbitem.person.name
Мы не можем получить имя напрямую из объекта dbitem, потому что оно "упаковано" в объект person
Но в джаваскрипте мы можем получить первое поле любого объекта, написав.
object.children[0]
Что дает нам единообразный способ доступа к вложенным объектам.
Например мы можем обрабатывать их как-то так
while((o = object.children[0])) process(o)
Можно сказать что речь идет о втором измерении, о "комплексных числах".
У нашего объекта есть поля
obj.field1,
obj.field2,
obj.field3
А монада - это движение вглубь
obj.inner1.inner2.inner3
Почему это важно фп-блядям?
Ну у них то все функции. Допустим у них функция возвращает другую функцию. А они хотят узнать не функцию, а ее значение. Вот мы и попадаем в ситуацию как я в начале описал.
352 1628197
>>628157

>монада-массив


Ясно.

В принципе, любое объяснение по монадкам, начинающееся со слов

>на примере ООП


можно не читать, 100% там будет хуйня, и вот опять.
Это как объяснение простых вещей из школьного курса алгебры для умственных инвалидов. Уж лучше картинки с контейнерами.
353 1628208
>>628157
ты какие-то линзоподобные опердени описываешь, зелёный
354 1628212
>>628197

> >монада-массив


Борщехлеб даже не осилил простейший текст, лол. Но тут же начал напускать туман
355 1628259
>>628157
Анализ уровня фасциниорованного функциональщиной васяна из 9б
356 1628446
>>628259
из 96?
357 1629063
>>628157
Когда прочитал "Функциональное программирование в JS"
358 1634000
Бамп во имя господа нашего Иисуса Христа и Пресвятой Марии Гваделупской.
359 1634019
Из 69
360 1634133
>>624486
>>624465
>>624431
Нихуя ты не на прологе не программировал, раз не знаешь про Engines(позволяющие встраивать собственные механизмы перебора и аггрегации) и предикаты высокого порядка(такие как findall), которые основаны на этих Engines.
361 1634137
>>624058
Зато Пролог дает премиальные фичи. Только в прологе(ну и в лиспе) ты можешь решать уравнения естественным образом:
?- {10 =:= X*2}
X = 5

Только Пролог дает самый высокий уровень абстракций.

Только в Прологе код - это действительно данные. В прологе программа может анализировать свою же структуру! Такое даже лисп не умеет.

Вообще, я считаю, что идеальный язык программирования должен уметь работать со всеми парадигмами.
Начиная с байтлебства, язык должен иметь инструменты для постпоения абстракции более высокого уровня.
362 1634138
>>634137

>?- {10 =:= X*2}


Это конечно круто, когда ты lab1 делаешь, но вообще хуйня без задач.
363 1634145
>>634138

> но вообще хуйня без задач.


Свойства предикатов дают весьма полезные штуки.
Любимый пример с append.
Append делает конкатенацию двух списков. Реализация его очевидна для пролог-программиста:
append([], L, L).
append([H|T], L, [H|R]) :- append(T, L, R).

?- append([1,2],[3,4],X).
X = [1,2,3,4].

Однако! Из-за логической природы пролога, с помощью append можно не только для соединить списки, но и найти первый список по второму и результирующему:

?- append(X,[3,4],[1,2,3,4]).
X = [1,2].

Это просто ахуетельно. И вообще-то порой полезно.

Проблема пролога - недостатки в работе абстрактной машины-считалки.
- Пролог не умеет в детект левой рекурсии - пиои анализатор кода сам.
- Пролог не умеет по умолчанию в детект заведомо-ложных предикатов.
Если предикат никогда не будет верным, то скорее всего с этим предикатом что-то не так.
- Инструменты отладки есть, но ошибки искать ты должен сам - иди трейсь весь стек вызовов, и ищи там ошибку, лол.

Это наболевшие проблемы. Благо, часть из этих проблем можно решить самостоятельно, самоанализом программы самой-себя на наличие ошибок в самой-себе же.
364 1634163
>>634145
И нахуя это где-то вне лаба1? Какие бизнес или научные задачи можно решить на прологе, учитывая что современные программы в обеих сферах оперируют гигабайтами данных, и от комбинаторного взрыва твой пролог охуеет?
365 1634173
>>634163

> И нахуя это где-то вне лаба1?


Транспиляция кода из одного ЯП в другой, да и кодогеерация впринципе.
Построение своего DSL внутри пролога.
Краткие и выразительные решения практических задач.

> современные программы в обеих сферах оперируют гигабайтами данных, и от комбинаторного взрыва твой пролог охуеет?


Пролог не про байты, Пролог - интеллектуальная обертка над байтами.
366 1634178
>>634163
Мейкфайлы это по сути пролог. Соответственно если у тебя что-то мейкфайлоподобное, почему нет
367 1654235
>>614971

> Звучит как просто набор слов.


Реакция гуманитария, когда он пытается читать том по квантовой хромодинамике.
368 1654243
>>654235
Да тут большинство вкатившихся по сути гуманитарии. Для них программирование - это бесконечная лапша из иф-элсе и возможность получать неплохую зарплату на хайпе.
369 1654255
>>607057

>иммутабельность


Что хорошего в иммутабельности, которая значительно ухудшает производительность?
Ну вот к примеру есть у тебя лист из нескольких сотен элементов и тебе нужно заменить один из этих элементов на другой.
В случае с мутабельным листом, ты просто заменяешь этот элемент на другой.
В случае с иммутабельным листом, тебе приходится при помощи не сложных, но странных манипуляций, скопировать лист, заменив в копии листа необходимый элемент на другой.
370 1654264
>>654255
Попробуй объясни это адептам хаскелля, где есть только второй способ. Они тупо ничего не слышат.
371 1654270
>>654255

>значительно ухудшает производительность


Если ты настолько тупой и это не жир: копирование листа - абстракция на уровне языка, на самом деле лист мутируется, ебанный дегенерат
372 1654282
>>654270
Зачем ты споришь с петухом? Этот дегенерат хаскель в глаза не видел, ему бы байтики пердолить и адресную арифметику, оставь его, это пустое.
373 1654286
>>654264
Чепуш, какое мне дело, как там список работает? Это вы там ковыряетесь в кишках, нормальным людям похуй на это, пусть разработчики компилятора ебутся и оптимизируют это хоть на ассемблере, мы находимся ЗА этой абстракцией, нам поебать. Нам главное, что в самой программе не было сайд-эффектов, это помогает быстро писать надежный и простой код, пока ты там вручную вилкой ковыряешь говно в списке.
374 1654289
Вот же раскукарекался.
375 1654421
>>654289
Ну и зачем ты раскукарекался?
376 1654443
Покидайте годноты из Хаскеля. Начну: Pointfree style огонь нахуй.
image.png76 Кб, 619x376
377 1654456
378 1654474
>>654443
это восторг неофита, это пройдёт
379 1654488
>>654474
ну ок, а дальше что?
380 1654509
>>654488
А дальше пхп и жс.
381 1654556
>>654443
типы как объекты, каррированные функции как стрелки, HOFs как экспоненциалы, чистота, ссылочная прозрачность, аппликативность и свободные (при совпадении доменов-кодоменов) композиции, equational theory settings / reasoning как следствие, в терминах ТК, в том числе, начальные алгебры / финальные ко-алгебры как фреймворк для описания индуктивных рекурсивных данных (как выход - результаты, значения) и ко-индуктивных ко-рекурсивных потоков данных (как вход); функторы, монады, Kleisli категории - многие индуктивные [возможно] рекурсивные типы данных которые функторы (начиная с Identity, Maybe и List), также, обычные суммы, произведения и степени, то есть кортежи/записи, объединения/варианты и функции - writer, error и reader/environment, для функций более специального вида - prompt, parser, state и cont, par/conc/async как cont для fork/join/io/done языка; функторы, ко-монады, coKleisli категории - ко-индуктивные ко-рекурсивные типы данных которые функторы (простейшие потоки и деревья, например), те же произведения и степени (суммы?), указатели и изменяемые подструктуры (линзы, как функции в), зипперы; свободные монады вокруг типов данных которые функторы - iteratees (которые сами по себе потоки, то есть финальные коалгебры для соответвующих (строго-позитивных таки) функторов), разные языки (eDSL на ADT) и их интерпретаторы; ко-свободные ко-монады для типов данных которые функторы - ?; (под)категории и стрелки - линзы (категория, тензор, но не вполне стрелка), обычные функции, Kleisli стрелки, coKleisli стрелки, стрелки biKleisli категорий, функции ограниченные типом - списки-в-списки, потоки-в-потоки, деревья-в-деревья, сигналы-в-сигналы и поведения-в-поведения (как оно применяется в FRP) и т.п., автоматы, симуляции, преобразователи, некоторые языки-eDSL-на-ADT, опять же; монадические трансформеры как определённого вида натуральные трансформации для определённого вида функторов над разными монадами - WriterT, ErrorT, ReaderT, StateT, ContT, MaybeT, ListT и т.д., например, ReaderT (ConstEnvironment, MutableScope, Resources) IO - эффекты, injectable read-only / write окружение, список ресурсов пополняемый их захватами по мере выполнения и автоматически освобождаемый в конце; полугруппы, моноиды, сворачиваемые и обходимые типы и т.п. категорные и алгебраические типы и классы как «паттерны» и средства декомпозиции.
381 1654556
>>654443
типы как объекты, каррированные функции как стрелки, HOFs как экспоненциалы, чистота, ссылочная прозрачность, аппликативность и свободные (при совпадении доменов-кодоменов) композиции, equational theory settings / reasoning как следствие, в терминах ТК, в том числе, начальные алгебры / финальные ко-алгебры как фреймворк для описания индуктивных рекурсивных данных (как выход - результаты, значения) и ко-индуктивных ко-рекурсивных потоков данных (как вход); функторы, монады, Kleisli категории - многие индуктивные [возможно] рекурсивные типы данных которые функторы (начиная с Identity, Maybe и List), также, обычные суммы, произведения и степени, то есть кортежи/записи, объединения/варианты и функции - writer, error и reader/environment, для функций более специального вида - prompt, parser, state и cont, par/conc/async как cont для fork/join/io/done языка; функторы, ко-монады, coKleisli категории - ко-индуктивные ко-рекурсивные типы данных которые функторы (простейшие потоки и деревья, например), те же произведения и степени (суммы?), указатели и изменяемые подструктуры (линзы, как функции в), зипперы; свободные монады вокруг типов данных которые функторы - iteratees (которые сами по себе потоки, то есть финальные коалгебры для соответвующих (строго-позитивных таки) функторов), разные языки (eDSL на ADT) и их интерпретаторы; ко-свободные ко-монады для типов данных которые функторы - ?; (под)категории и стрелки - линзы (категория, тензор, но не вполне стрелка), обычные функции, Kleisli стрелки, coKleisli стрелки, стрелки biKleisli категорий, функции ограниченные типом - списки-в-списки, потоки-в-потоки, деревья-в-деревья, сигналы-в-сигналы и поведения-в-поведения (как оно применяется в FRP) и т.п., автоматы, симуляции, преобразователи, некоторые языки-eDSL-на-ADT, опять же; монадические трансформеры как определённого вида натуральные трансформации для определённого вида функторов над разными монадами - WriterT, ErrorT, ReaderT, StateT, ContT, MaybeT, ListT и т.д., например, ReaderT (ConstEnvironment, MutableScope, Resources) IO - эффекты, injectable read-only / write окружение, список ресурсов пополняемый их захватами по мере выполнения и автоматически освобождаемый в конце; полугруппы, моноиды, сворачиваемые и обходимые типы и т.п. категорные и алгебраические типы и классы как «паттерны» и средства декомпозиции.
382 1654557
>>654474
Всё пройдёт.
383 1654677
>>654556
это оглавление из учебника по хаскелю?
384 1654689
>>654677
Это набор костылей, для управления машиной Тьюринга через левую пятку Черча. А внутри unsafe и coerce
385 1654722
>>654689
Хаскель - простой и понятный язык для нормальных людей вроде физиков и математиков, отчищенный от байтосодомии и делающий специально выведенных компьютерных опущенцев-программистов ненужными.
С дальнейшим развитием оптимизирующих компиляторов, байтоспарта закаленных еблей в жопу архитектурой фон Неймана и еблей в рот аппликативным порядком боевых пидарасов-программистов потеряет всякий смысл. Что останется делать после этого жалким недочеловекам, у которых пять лет в шараге вымывали из мозгов все человеческое? Остается только прерывание своего жалкого существования.
386 1654727
В его постах прекрасно всё.
387 1654888
Мертвый язык
388 1667209
>>654888
эти мантры неосилятора
389 1667982
>>654509
Хорошие языки кст.
390 1668581
>>654722
Вот физикам делать нехуй, как монады в трансформеры заворачивать. Python go brrrr
391 1669684
>>668581
ага им нехуй делать писать на языке тумба-юмба: взять копьё; убить мамонта; съесть мясо
очевидно нужен язык с аксиоматической или детонационной семантикой, а не говно с процiдурками для специально обученных иженегров
392 1670811
393 1670854
>>607051 (OP)
https://petr-mitrichev.blogspot.com/
Блог от самого крутого программиста эвер
395 1685449
>>685443

Метапрограммирование

https://en.wikipedia.org/wiki/Metaprogramming
sage 396 1685459
>>685443
говно на палке
397 1685777
Haskell
398 1685842
>>607051 (OP)
Императивное программирование, где пошагово описываешь, как изменять состояние - действительно крутая концепция. Потому что только она работает и только она похожа на реальный мир.

Очевидно, что читать рецепт приготовления салатика в духе "Нарезать X, добавить Y, перемешать, посыпать сверху Z" куда понятнее, чем "Салат - это посыпанное сверху Z перемешивание после добавления Y к нарезанному X".
399 1686957
>>685842
Я уже отвечал где-то на подобный даунский наброс несколько раз. У говноедов даже фантазии не хватает.

Ещё раз, язык тумба-юмба "взять копьё; убить мамонта; съесть мясо" ака императивное говнище, не подходит для описания реальности. Он хорош для тупого пошагового исполнителя, типа кухарки из твоего примера, бездумно хуярящего примитивные инструкции, но для чего-то сложнее, например, описания свойств тех же продуктов, изменения этих свойств в процессе готовки, их влиянии на конечный продукт и прочих знаний, которые используют люди, что составляют потом рецепты для домохозяек-исполнителей, он совершенно не подходит. Мир описывается декларативно формулами и отношениями, потому что только так возможно абстрагирование и общение, и только клинический дебил, с отсутствием минимального абстрактного мышления, не может этого понять и чтобы что-то понимать, ему нужен набор инструкций на бумажке.
400 1686959
>>686957

>обобщение



fix
401 1687224
>>686957
Какое еще "изменение" свойств? У тебя нет никакого изменения.
У тебя есть обрезанная императивщина, ее жалкое подмножество без присваивания с отложенным исполнением, обрезанная для твоей же безопасности, так как ты не в состоянии отслеживать состояние своей собственной программы, подходящая только для решения определенного типа задач: проведения параллельных вычислений, и принимающая от того уродливые формы
402 1687230
>>686957
давай вместо посыла нахуй я предложу тебе предикат

ты
пидр == ИСТИНА

а ты сам как-нибудь пруфы напиши раз такой декларативный дохуя
403 1687384
>>687224

>пук


)
404 1687386
>>687230

>ба-бах



Очередной разрыв императивной макаки. Иди ещё наверни процедурных портянок, боюсь твой мозг что-то не пошаговое воспринимать уже не может.
405 1687597
>>687384
Вот и подошла к свой кульминации эта высоко интеллектуальная полемика)
406 1687611
>>685842
то есть ты сейчас утверждаешь, что математика не нужна? ведь в математике нет императивной дрисни, как же так
407 1687668
>>685842
Хммм, а вот тебе другой пример:
1. «Квадратный корень из икс — это такое число, которое, будучи возведённым в квадрат даёт икс»
2. «нууу эта, кароче берёшь приближение, подставляешь его в уравнение, если не подошло берёшь среднее от приближения и результата и пробуешь опять»

Не всё так однозначно в этой жизни.
408 1689442
>>687668
на дваче

> 1. «Квадратный корень из икс — это такое число, которое, будучи возведённым в квадрат даёт икс»



в реальной жизни https://stackoverflow.com/questions/19965149/integer-square-root-function-in-haskell

> один вариант перебор


> другой


> 2. «нууу эта, кароче берёшь приближение, подставляешь его в уравнение, если не подошло берёшь среднее от приближения и результата и пробуешь опять»

409 1689443
>>689442
для тех кто хочет кукарекнуть что хаскелл не то, предлагаю взять тот самый язык и написать что-то отличающееся от перебора
410 1689531
>>689443
Так речь идёт про понятность для человека или про понятность для машины?
411 1689631
kD8-3YTSG-g.jpg61 Кб, 1080x760
412 1689674
413 1689713
>>689531
что значит понятно человеку? какому человеку? выспался он? покушал? учил ли матан? понимает ли он сам чего хочет?

окей нашли сферического в вакууме, а шо толку с его пониманий, если написанные им декларативные предикаты/программы/любая-другая-хуйня не превращаются в эффективный код на процах?
414 1690697
>>689713

>если написанные им декларативные предикаты/программы/любая-другая-хуйня не превращаются в эффективный код на процах


Предпосылка взята с потолка. А что если в данном месте эффективный код не важен, и его можно выкинуть на мороз, заменив на понятный? Двадцать первый век на дворе.
415 1691183
>>654286
Ну по такой логике зачем использовать алгоритмы, можно просто пузырьком все в массивах сортировать, а эти байтоебы пусть оптимизируют
416 1691207
>>691183
Дай им волю - и они реально будут так делать.
417 1691247
>>620114
А теперь перепиши его на Rust.
418 1691283
>>691183
Ты еблан, разные алгоритмы сортировки делают одно и то же и с одинаковой семантикой и апи, но под капотом одно и то же.
Иммутабельность дает другой апи, другие плюсы и минусы, поэтому пердоли сводящие все программирование только к оптимизации - дегенераты.
Твой аргумент инвалид, пошел отсюда нахуй.
419 1692094
>>691283
если сортировки имеют одинаковый апи и делают одно и то же, зачем нужные разные?
420 1692097
>>690697
одно дело неэффективность когда вместо n операций по 0.1 делаем n операций по 1
другое когда делаем n! операций
комбинаторный взрыв знаешь?
421 1692552
>>692094
так поэтому у тебя в стандартной библиотеке любого языка забита одна сортировка сложности n log(n), обычно - квиксорт с ручной отимизацией последних шагов. ну, это для объектов с произвольным доступом, типа массивов.
422 1692576
>>690697

>А что если в данном месте эффективный код не важен, и его можно выкинуть на мороз, заменив на понятный? Двадцать первый век на дворе.



Найдут очередную уязвимость и дропнут производиительность твоего i7 до уровня core 2 duo из блейзерного 2007, и вот ты уже бибу сосешь.
423 1692621
>>692576
Так это оптимизированный код чаще всего содержит уязвимости, так как он трудно читается, трудно тестируется, плохо подлежит модификации, требует написания большего количества букав, а значит больше шанс обосраться, а если он содержит всякие байтоёбские изъёбы, то уязвимости там будут почти с 100% вероятностью.
424 1692666
ПРОГРАММИСТЫ-ФУНКЦИАНАНЛЬНИКИ
425 1692825
>>692666
удерживают монаду в попе
426 1693017
>>692097
Опять факториал с потолка взят, это раз, если задача решается за пять шагов то факториальный порядок роста похуй, это два.
427 1693021
>>654255
Почти всегда в разработке главное - понятность, поддерживаемость, расширяемость и тестируемость. Иммутабильность это все дает. В случае необходимости можно что-то оптимизировать, написав комментарий об этом.
429 1696859
>>693017

>Опять факториал с потолка взят, это раз, если задача решается за пять шагов то факториальный порядок роста похуй, это два.



ты чё сказть то хотел?
а если не решается за пять шагов с факториальным порядком роста?
430 1699628
>>654456
Это какой-то контртроллинг. Вместо неподдерживаемых маняфункций будем писать нечитаемые маняфабрики абстрактных апельсинов.
Можно уже подход, который будет не отвратителен программисту и при этом экономически целесообразен? нет
431 1699831
>>699628

>контртроллинг


КОНТРА НЕ ПРОЙДЕТ!

>Можно уже подход, который будет не отвратителен программисту


АДА вроде ок.

>и при этом экономически целесообразен?


Слишком толсто. Ты определение "экономической целесообразности" введи хотя-бы.
432 1700919
>>699831

>Ты определение "экономической целесообразности" введи хотя-бы


Цитирую википедию для тебя, дефисный ты наш:

>соотношение полученных результатов производства — продукции и услуг, и затрат труда и средств производства.


В данном случае бизнес не хочет платить за софт, сделанный с использованием трудноподдерживаемых, редких, неэффективных технологий.
433 1700943
>>689442
Господи как же я проорал
434 1701243
>>608290

>continuation-passing style очень нравится



ты именно про него или про first-class continuations?
sage 435 1701247
Ещё в этот тред запости ту пикчу, шизик.
436 1701404
>>701243
Про first-pass continuation style. Если не шаришь то помалкивай
293949212442192929444.png412 Кб, 750x669
437 1701621
>>701247
Не знаю о чем ты, но держи:
438 1701726
>>701621

> prolog > x86


Орнул неистово.
439 1701759
>>701404

>Про first-pass continuation style. Если не шаришь то помалкивай



Есть first class continuations, а есть continuation passing style.
Что такое first-pass continuations - вообще не ебу. Видимо, выдумка рашкована, не умеющего в ангельский.
Не понимаю ,как можно вот прямо супер восхищаться continuation passing style'ом. Это же красивый, конечно, но трючок для промежуточной трансформации в компиляторах нормальных лиспов. Писать самому код таким способом - очень странная затея.
440 1701795
>>696859
Если не решается, и это херит быстродействие программы, то оптимизируй.
https://en.wikipedia.org/wiki/Program_optimization#When_to_optimize
C2hilJ5rQzw.jpg88 Кб, 604x587
441 1701937
Крутая штука для решения НП-задач типа задачи рюкзака. Берем данные, записываем из них ДНК. Копируем их ПЦР бесконечное количество раз. Используем CRISPR и получаем все возможные комбинации. Используем градиентное сито и выбираем вариант на вершине вместительности сундука. Мы не снижаем сложность задачи, но сложность можно переводить из времени в пространство. А пространство бесплатно.
442 1702312
>>701759
Ошибся, там first class continuation pass
443 1734322
Бамп лучшему треду зк
444 1749325
>>654556
Схоронил.
445 1750795
>>701937
Шиза
maxresdefault.jpg127 Кб, 1280x720
447 1755883
>>752277

>Логос

448 1756208
>>620357
Питонист ну совсем незаметен
449 1811368
>>619997

Это реальная функциональность монад? Выходит я писал на монадах еще в детстве, на джаваскрипте
sage 450 1811598
>>811368
мандада-массив
451 1813745
>>811368
Именно так. В нормальных языках и так все в монаде, поэтому никакого особого термина для этого не требуется. Только у каличных функциональщиков понадобидось, потому что они себе навтыкали палок в колеса и не едут без монадо костылей.
>>628157
452 1813792
>>811368

Ты в детстве писался под себя а не на монадах.
453 1823639
>>701726
Что не так с прологом? Язык интеллектулов. Макаки не осилят.
454 1823908
>>654456
Почему выразимость у функциональщиков всегда считается заменимостью? Так-то и на брейнфаке можно написать любую программу. А в хаскеле трахаются с системой типов чтобы заткнуть недостатки функций.
455 1823916
>>823908
Про выразимость не только функциональщики говорят, а вообще все ярые адепты любой технологии. Будь тред хоть про питон, js, раст, кресты, котлин, эрланг, лисп - везде эта "выразительность", потому что из-за синдрома утёнка дальше своего носа никто ничего не видит.
456 1823918
>>823916
Ты перепутал выразительность и выразимость.
457 1823922
>>617777

>Без неё лямбда-исчисление не эквивалентно машине Тьюринга.


И?
458 1823924
>>823918
Признаю, не уверен в терминах. В чём же разница?
459 1823933
>>823924
Выразимость это возможность что-то выразить в неких терминах. Ответ даётся в форме можно или нельзя. К примеру число пи нельзя выразить целыми числами.

Выразительность это субъективная характеристика, позволяющая среди альтернатив выбрать наиболее понятный и информационно ёмкий вариант.
460 1823939
>>823933
Спасибо. То есть, проводя аналогию, выразимость - это тьюринг-полнота (например), а выразительность - количеств фич и синтаксического сахара.
461 1830585
>>607051 (OP)
Самая крутая концепция для меня это то, что надо задрачивать не крутость кода. Не красивые абстракции. А то что по факту этот код делает. То есть сам продукт. Вот это конечная цель, а все эти языки и концепции чисто вторичное - средство и не более того.
462 1830708
>>654282
Пішов ти нахуй, як їбав мікроконтролери так і буду їх їбати!
463 1830724
>>830585
несоответствие треду
464 1830729
>>634163
в прологе оперируют не данными, а скорее "знаниями"
а на вход пролог-машине надо подавать предварительно отфильтрованные, очищенные данные-факты, основной способ борьбы с замедлением обработки, как и в новомодном дата-сайнс
465 1831459
>>607992
А аппаратная сборка мусора, например?
466 1831474
Надеюсь, вы смотрите на даты постов, прежде чем отвечать на них? Полгода прошло как-никак, эти люди давно ушли с двачей и стали нормисами.
467 1835862
>>831474
Рыбная котлета, плиз
468 1836083
>>835862 Че, как там экзистенс?
469 1836131
>>836083
Рассчитан по годовой норме кодоприбыли на разработчика. У нас целый экзистенс-отдел на монадах это вычисляет. Как вообще управляют ит-компаниями без экзистенс-менеджмента?
sage 470 1836192
Для чего нужна шариковая пластиковая мышь? Ведь камень для жидкого стекла расширяет конгруэнтность, для отверстий необходимы пилки, но так, чтобы быстрее, чем то. Вопросительный знак на листке бумаги предлагает учесть. Или над ним? Во всяком случае, лучше, если древесина с клинком ломается. Так же, как и МВП-тред.
471 1836317
>>654286
Спиздани это когда тебе на собесе скажут, что ты решил задачку максимально нерационально и отправляйся назад наслаждаться тарелкой борщика
472 1838049
>>830585
Потому что ты подпивасник, концепции и абстракции двигают науку, если ты думаешь что главное в жизни это клепать круды или запилить какой-то бизнес, то да
473 1838088
>>838049
Вот она, главная проблема. Каждый борщехлёб считает себя учёным-двигателем науки просто из-за того, что у него концепции и абстракции в хачкиле.
474 1838094
>>838088
Кто-то таки двинет науку пока ты максимум двигаешь говно из жопы
475 1838418
>>838049
>>838094
тупой, двигатели науки пишут ридонли портянки на торче/матлабе и им не нужны твои фп-борщи.
476 1838682
>>838418
Ты оказывается еще тупее, Есть такая наука CS
477 1838693
>>838682

> CS


Но хаски не имеет к ней никакого отношения.
478 1838714
>>838693
Все иди нах, ты тупой
479 1838721
>>838714

>этот бах фп-борща

480 1838725
>>838721
Тред о другом, а ты обосрался и пытаешься притянуть за уши сюда хаскель
481 1838906
>>838049

>концепции и абстракции двигают науку


А причем тут средний функциональщик? Он же просто берет готовое у математиков и использует для реализации задачи и не факт, что это выполняет задачу эффективнее Такой же васян-подпивас на поводке у бизнеса.
482 1838967
>>628157
Что за хуйню я прочитал?
Дай я попробую. Представь, что у тебя нет эксепшенов, как будешь возвращать ошибку? Можно возвращать null, но тут возникает проблема с постоянными проверками на нулл на каждом шаге алгоритма (вспоминаем C-лапшу которая постоянно проверяет errno). Что если вместо этого создать класс NullMonad, который будет чейнить операции и выполнять их, если значение не нулл. Например можно будет написать const c = NullMonad.return(client);
const result = c.bind(Client.get_request).bind(Client.process_request).bind(Client.send_response). На каждом этапе наша монада проверяет результат на нулл, и выполняет переданную функцию если результат не нулл. Это просто уменьшает бойлерплейт.
Это один из примеров монад, так называемый OptionMonad.
483 1838979
>>838967

А вот объясни, почему в си и го, возвращаемая явно ошибка - лапша, а option в хаскеле и расте - вершина инженерной мысли? По сути, одно и тоже. Просто пара значений.
484 1838985
>>838979
Потому что система типов продвинутая и гарантирует безопасность, в отличии от нулла и эксепшенов которые хуй знает когда и где выстрелят. А бойлерплейт не проблема, легко абстрагируется монадами.
485 1839011
>>838985

Так я не о говно эксепшонах, а претензии к сильному явному возвращению errno.
Если поколдовать c макросами , то получится тот же option.
486 1839035
>>839011
А смысл? Идея монад, как я понимаю, это писать программу на более высоком уровне абстракций, на С таким просто никто не занимается, т.к. область применения другая.
Да и максимум что ты получишь, это нечитаемую магию на макросах. В хаскеле и окамле, ты сразу в типе функции видишь откуда, что и куда оно идет. Все это проверяется на этапе компиляции, а не в рантайме, тоесть ты не можешь просто забыть макросов навернуть и крашнуть программу на ошибке как в С.
487 1839084
>>839035
потому что в си функции это по сути процедуры, возвращают результат работы через out параметры, а возвращаемое значение чаще всего используеться как флаг успешности, возвращая код успеха или номер ошибки
в фп языках функции это функции именно в математическом смысле чаще всего, возвращаемое значение и есть результат работы функции
естественно, приходиться опганизовывать другие, более сложные подходы к обработке ошибок, это не прихоть а необходимость
к.о.
488 1839171
Читать стоя и плакать. Вообще чего там в России с нанотехнологиями делают, стравили газ какой-то, ядовитый? Последнее время выбегают на просторы энтронета хаксельщики и все как один - неадекватные абсолютно. Оба факта - удивительны сами по себе. То есть и раньше были всякие оспиранты писавшие MoscowML и т.п. в своих НИИ, однако у них вроде никаких илюзий о практическом применении ацких язЫков программирования собственной разработки не было. Напишут один, на нем компилятор другого, на том - третий и так с гранта на грант перебивались. Ну а неадекватный программист это тож диковина - всеж человек только мозгом и работает, кровь притекает, пит.вещества, витамины, все дела поступают, с какого у него крыша съезжает? То есть конечно, может там какая опухль или травма или сифилис, но тогда вопрос - как он продолжает программировать с поврежденным мозгом-то?

https://kunaifusu.livejournal.com/242656.html
489 1839396
>>839171
У вас нет прав на чтение данного форума.
490 1839548
>>839171

> ЖЖ


> 13th-Nov-2007


> SQL.ru


А ведь эту ссылку могли ещё на Тот двач постить, пока я в начальную школу ходил.
491 1908973
>>607051 (OP)
Отступы вместо { }
492 1908975
>>607051 (OP)
{ } вместо уебанских отступов.
493 1908986
>>607051 (OP)
do end вместо убанских отступов и { }
494 1912440
>>908986
Отсутствие уебанской разметки
495 1913931
>>607421
Лол, это типа столько лет goto было под запретом, а теперь решили, что его надо использовать. Но на всякий случай обзовем по другому, а то говнокодерами обзовут.
image.png84 Кб, 300x168
496 1942282
>>607051 (OP)
Ваномас программируя формошлёпинг (программа для замеров пластиковых окон) на с# в конторке вантуз системы зарабатывает 170к. При этом знает меньше любого в этом треде.
497 1942285
Мертвый
498 1942286
Тред
499 1942287
Мёртвой
500 1942288
Хуйни.
501 1946979
>>607051 (OP)
Символьные вычисления
502 1954047
Прототипное наследование
Стрелочные функции
503 1954238
>>942282
А я 440к. Нихуя не делаю почти, кеш на карту сыплется регулярно. Че сказать-то хотел?
504 1957909
>>954047
Вголос
505 1960991
Весь тред наглядная иллюстрация того, к чему приводит отсутствие CS как дисциплины в рашкинских недовузах. И эти люди будут еще иметь наглость называть себя программистами. Пиздец, попиздовал я отсюда.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 12 мая 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски