Этого треда уже нет.
Это копия, сохраненная 22 января 2020 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ПОЧЕМУ О:=Н:=И ТАК ЛЮБЯТ МУТАБЕЛЬНОСТЬ? /holy/ 1539634 В конец треда | Веб
const_cast <Они> (говорят); что современные машины построены как тьюринговые машины состояний, но это очень слабый аргумент, потому что на современном железе работает всё, а иммутабельность дарует мультипоточность из коробки.
К тому же, Лисп упаковывает структуры, а C распаковывает и выравнивает, в итоге структуры в Лиспе весят меньше, как мы узнали в предыдущем треде.

Холиварный, но не совсем бездоказательный, тред продолжается здесь.
Предыдущий ждёт сборки мусора тут: >>1477327 (OP)
2 1539686
>>39634 (OP)
Подписался на тред.
CL-фанбой
3 1539737
>>39634 (OP)
Перекачу сюда, очень интересно узнать:

У меня вопрос не по теме ОП-поста, но связанный с его стилистикой и настроением.

Много ли альт-райтов, NRx или правых акселерационистов в IT-сфере? Молдбага и Ника Ланда кто-нибудь читает?
Screenshot20191206-202216ReadEra.jpg786 Кб, 1200x1920
4 1539746
5 1539819
>>39634 (OP)

>потому что на современном железе работает всё


Лолнет.

>ПОЧЕМУ О:=Н:=И ТАК ЛЮБЯТ МУТАБЕЛЬНОСТЬ?


Потому что синтаксис арифметики построен на школьной математике х= а + б - с*20 тип так всем понятно.
Такой синтаксис в свою очередь вынуждает переиспользовать имена переменных.

Другая причина, это быстрые алгоритмы и структуры данных.
Например хештаблица\словарь. Массив, и так далее.

А вообще, ОП, тебе лечиться нужно.
6 1539830
>>39634 (OP)
Как иммутабельность упростит мне реализацию алгоритма поиска пути (Дейкстры, например)? Предлагайте функциональное решение.
NIfFP9B.jpg299 Кб, 1452x1936
7 1539834
>>1539597

>это где ты вычитал такое? что x86 подгоняли под язык си?



Первый в линейке x86
Intel 8086 (iAPX 86)
https://en.wikipedia.org/wiki/Intel_8086

>Marketed as source compatible, the 8086 was designed to allow assembly language for the 8008, 8080, or 8085 to be automatically converted into equivalent (suboptimal) 8086 source code, with little or no hand-editing


> Instructions directly supporting nested ALGOL-family languages such as Pascal and PL/M were also added


>8086 also introduced some new instructions (not present in the 8080 and 8085) to better support stack-based high-level programming languages such as Pascal and PL/M;


>While perfectly sensible for the assembly programmer, this makes register allocation for compilers more complicated compared to more orthogonal 16-bit and 32-bit processors of the time such as the PDP-11, VAX, 68000, 32016 etc


Под DEC Vax писали на Си.

Второй в линейке x86
80286
https://en.wikipedia.org/wiki/Intel_80286

>The 80286 was designed for multi-user systems with multitasking applications, including communications (such as automated PBXs) and real-time process control


https://en.wikipedia.org/wiki/ORCA/Modula-2
Он был разработан под популярный в то время Modula-2

Третий iAPX432 и первых 32х битный цп
https://en.wikipedia.org/wiki/Intel_iAPX_432

>The iAPX 432 was referred to as a "micromainframe", designed to be programmed entirely in high-level languages


> the iAPX 432 programming model is a stack machine with no visible general-purpose registers. It supports object-oriented programming[5], garbage collection and multitasking as well as more conventional memory management directly in hardware and microcode. Direct support for various data structures is also intended to allow modern operating systems to be implemented using far less program code than for ordinary processors.


>They applied fashionable computer science concepts from universities, particularly capability machines, object-oriented programming, high-level CISC machines, Ada, and densely encoded instructions



Четвёртый - 80386

Имеющий поддержку Си, и якобы "превосходящий" в "эффективности" iAPX_432, на самом деле Си стал очень модным к этому времени. Кроме того я подозреваю, что, тот факт, что ADA использовался(и используется) в военном секторе, разработке просто не дали хода в массы.
Реальную годноту заменили 80386 дерьмом стыдливо переписав историю везде где могли.

>The example code uses the EBP (base pointer) register to establish a call frame, an area on the stack that contains all of the parameters and local variables for the execution of the subroutine.


>A flat memory model is assumed, specifically, that the DS and ES segments address the same region of memory.


http://bitsavers.trailing-edge.com/components/intel/80386/231499-001_80386_System_Software_Writers_Guide_1987.pdf

>Offset-only pointers match the C language's uniform view of the address space.



RISC
https://ethw.org/Milestones:First_RISC_(Reduced_Instruction-Set_Computing)_Microprocessor_1980-1982
Professors David Patterson and Carlo Sequin of the University of California at Berkeley observed that compilers for high-level computer languages, such as C, rarely utilized the added instructions. They thought that overall performance could be improved by optimizing the combination of processor function and memory on a single chip. Better overall performance at a much lower cost might be achieved by simplifying the processor, thereby allowing more chip area to be devoted to memory. Thus the goal was defined as a RISC, or reduced instruction set computer.
NIfFP9B.jpg299 Кб, 1452x1936
7 1539834
>>1539597

>это где ты вычитал такое? что x86 подгоняли под язык си?



Первый в линейке x86
Intel 8086 (iAPX 86)
https://en.wikipedia.org/wiki/Intel_8086

>Marketed as source compatible, the 8086 was designed to allow assembly language for the 8008, 8080, or 8085 to be automatically converted into equivalent (suboptimal) 8086 source code, with little or no hand-editing


> Instructions directly supporting nested ALGOL-family languages such as Pascal and PL/M were also added


>8086 also introduced some new instructions (not present in the 8080 and 8085) to better support stack-based high-level programming languages such as Pascal and PL/M;


>While perfectly sensible for the assembly programmer, this makes register allocation for compilers more complicated compared to more orthogonal 16-bit and 32-bit processors of the time such as the PDP-11, VAX, 68000, 32016 etc


Под DEC Vax писали на Си.

Второй в линейке x86
80286
https://en.wikipedia.org/wiki/Intel_80286

>The 80286 was designed for multi-user systems with multitasking applications, including communications (such as automated PBXs) and real-time process control


https://en.wikipedia.org/wiki/ORCA/Modula-2
Он был разработан под популярный в то время Modula-2

Третий iAPX432 и первых 32х битный цп
https://en.wikipedia.org/wiki/Intel_iAPX_432

>The iAPX 432 was referred to as a "micromainframe", designed to be programmed entirely in high-level languages


> the iAPX 432 programming model is a stack machine with no visible general-purpose registers. It supports object-oriented programming[5], garbage collection and multitasking as well as more conventional memory management directly in hardware and microcode. Direct support for various data structures is also intended to allow modern operating systems to be implemented using far less program code than for ordinary processors.


>They applied fashionable computer science concepts from universities, particularly capability machines, object-oriented programming, high-level CISC machines, Ada, and densely encoded instructions



Четвёртый - 80386

Имеющий поддержку Си, и якобы "превосходящий" в "эффективности" iAPX_432, на самом деле Си стал очень модным к этому времени. Кроме того я подозреваю, что, тот факт, что ADA использовался(и используется) в военном секторе, разработке просто не дали хода в массы.
Реальную годноту заменили 80386 дерьмом стыдливо переписав историю везде где могли.

>The example code uses the EBP (base pointer) register to establish a call frame, an area on the stack that contains all of the parameters and local variables for the execution of the subroutine.


>A flat memory model is assumed, specifically, that the DS and ES segments address the same region of memory.


http://bitsavers.trailing-edge.com/components/intel/80386/231499-001_80386_System_Software_Writers_Guide_1987.pdf

>Offset-only pointers match the C language's uniform view of the address space.



RISC
https://ethw.org/Milestones:First_RISC_(Reduced_Instruction-Set_Computing)_Microprocessor_1980-1982
Professors David Patterson and Carlo Sequin of the University of California at Berkeley observed that compilers for high-level computer languages, such as C, rarely utilized the added instructions. They thought that overall performance could be improved by optimizing the combination of processor function and memory on a single chip. Better overall performance at a much lower cost might be achieved by simplifying the processor, thereby allowing more chip area to be devoted to memory. Thus the goal was defined as a RISC, or reduced instruction set computer.
8 1539854
>>39634 (OP)

>тьюринговые машины


сферическое говно в вакууме
все современные компы - реализации машины/архитектуры фон неймана, сам термин software подразумевает мутабельность
9 1539865
>>39634 (OP)

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


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

Нуб проглатывает эту ловшку - ведь действительно простейшие программы, да еще с бэкграундом в виде школьной математики, написать проще. А дальше работает синдром утенка. Нуба заманивают в ФП, обещая ему золотые горы, а потом говорят: ну знаешь, мутабельность на самом деле нужна, мы ради нее микропроцессор придумали, поэтому вот тебе переусложненный воркфлоу по написанию мутабельных программ в иммутабельной среде.
10 1539928
>>39819
В математике нет никакой мутабельности.
11 1539937
>>39865
А ты сам себе не противоречишь? Вычисления в процессоре произодятся в регистрах общего назначения => мутабельность переменных => иммуабельность тебует более высокого уровня абстакции от архитектуры

Мимино
12 1539938
>>39937

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


иммутабельность требует абстракции
Пиздес
13 1539940
>>39634 (OP)

> К тому же, Лисп упаковывает структуры, а C распаковывает и выравнивает, в итоге структуры в Лиспе весят меньше, как мы узнали в предыдущем треде.


И ты это плюсом к производительности считаешь, что ли?
Вот потому мы и любим то, в чём разбираемся (а вы - нет).
14 1539948
>>39940
Где там хоть слово про производительность? Вот поэтому мы разбираемся в том, о чём прочитали (а вы — нет).
15 1539949
>>39634 (OP)
Дегенераты отвечают перефорсом. The Thread.
16 1539954
>>39634 (OP)
Почему же автораспараллеливающийся код на лиспах-хаскелях работает медленнее, чем однопоточный код на няшной?
sage 17 1539955
>>39634 (OP)

>Лисп


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



Мда
18 1539957
>>39928
В математике нет вычислений.
19 1539959
>>39957
Но в математике действительно нет мутабельности. Где она там? Переменные? Они для каждого случая генерируют новое значение, а не изменяют начальное. Формулы? Там чистая иммутабельность — суёшь на вход свои данные, получаешь сгенерированные формулой данные на выходе. Никакого стейта, чистейшая функциональщина.
20 1539966
>>39948
Хорошо, а к чему это будет плюсом? Ну-ка, расскажи.
21 1539967
>>39865
Два чая.
22 1539975
>>39959
Ты больной.
23 1539978
>>39865
Причём тут машины? Машина не шлюха, чтоб ее ублажать.
Важен код сам по себе, его читаемость, предсказуемость и понятность для человека. Бизнес-правила по своей природе декларативны и языком отношений описываются более ясно, чем языком тумба-юмба: «взять копье; убить мамонта: съесть мясо». Прогрессом как раз является язык, позволяющий выражать высокоуровневые понятия обобщенным языком. Естественно компиляторы таких языков получаются намного сложнее и даже после всех оптимизаций код зачастую получается медленнее кода на говняшной. Тем не менее, это направление которое очевидно нужно развивать, а не продолжать ковырять говно ложкой на процедурной параше ещё и гордится этим.
24 1539983
>>39955
Шаришь.
Про Scheme, конечно, не слышал?
25 1539986
>>39983
Я пишу на схеме, в ней есть мутабельность во все поля.
26 1539987
>>39966
Кроме того, что они очевидным образом занимают меньше места? Упакованные структуры хороши при передаче данных побитовым методом, а практически любые данные передаются таким методом.
27 1539991
>>39737
Примеры кода?

уябывай
28 1539995
>>39834
К чему вся эта портянка текста??
Кого волнует подо что подгоняли 8086??
И блятть истории других музейных процов - тоже унесите нахуй отсюда
29 1539998
>>39983
Под лиспом обычно подразумевают общелисп.
Схемки и др.рекеты слишком тонкие, поэтому подходят только для лабок, ну а кложа - не тру.
30 1540012
>>39987

> они очевидным образом занимают меньше места


> 2019


> очень много памяти, но медленной


> отсутствие выравнивания - плюс.


Ну ёб же вашу мать, граждане - мы же не двадцатый век обсуждаем, когда было наоборот.

> Упакованные структуры хороши при передаче данных побитовым методом


Это вообще что-то непонятное. Что за передача побитовым методом, куда?
31 1540016
>>40012
И нет, я не говорю, что функциональщина плохо (интерфейсы без побочных эффектов банально легче читать), но вы ж реальных плюсов за лесом не видите, набрасываясь на то, в чём не разбираетесь.
32 1540018
>>40016

> функциональщина плохо


функциональщина плоха
фикс
33 1540019
>>39634 (OP)
Иммутабельность и ФП это конечно заебись, но тут за них адвокатируют в основном безмозглые жопаскрипт-говноеды на волне хайпа, которые с этими концепциями знакомы только понаслышке ведь на функциональном языке они никогда в жизни не писали и думают, что ФП - это когда объектов нет и функции передаются в функции. Поэтому если здесь кто-то начинает брызгая слюной озвучивать, что мутабельность это корень всех бед, что ООП говно и прочие не требующие мыслительной активности религиозные догмы, можно не разбираясь записывать его в жс-мартышки и ссать на ебало.
34 1540020
>>39937

>Вычисления в процессоре произодятся в регистрах общего назначения => мутабельность переменных => иммуабельность тебует более высокого уровня абстакции от архитектуры


Запуск досбокса тоже требует более выского уровня абстракции.
Ты путаешь уровни абстракции и уровень технологий.
35 1540021
>>40019
Поддержу изо всех сил.
36 1540026
>>39987

> при передаче данных побитовым методом, а практически любые данные передаются таким методом.


Ох йобт
Как многого я не знаю
37 1540030
>>40019
А чо сразу жсмартышки жсмартышки? В жс пару ситуаций где иммутабильность нужна/полезна. Первое объекты типа Date (в самом жс он мутабельный) чтобы себе яица не отстрелить. Второе говно типа редакса. Там иммутабельность тоже по практическим соображениям нужна - если не поменять объект стейта то реакт внутрь не заглянет и нахуй пошлет не перересует интерфейс.

жсмартышка
38 1540044
>>39986
Смотря в какой. В том же Racket изкоробки без дополнительных изъёбов хуй тебе, а не set-car! и set-cdr!.
39 1540046
>>39998

>кложа - не тру.


Почему? Раньше у кложахейтеров был аргумент про стектрейсы, которые в крайнем релизе починили. Что теперь не так?
Screenshot20191207-010852~01.jpg82 Кб, 946x1184
40 1540081
А потом удивляемся тому что новый софт тормозит как ебаная сука.

ФП = лютые тормоза

Адепты этого говна всегда отвечают что современные компиляторы умеют оптимизировать это всё так чтобы не лагало. Но это пиздёж, на практике мы видим что это не так.
41 1540095
>>40081
Разумеется, в области автоматизации сливных бачков байтоебам нету равных.
42 1540112
>>40044
В ракете из коробки есть мутабельные пары и списки.
Кроме того всё что через дефайн декларированно может быть мутировпнно функцией (set! var val)
43 1540135
>>40081

> ФП = лютые тормоза


Ох йобт
Спасиб, а то, я не знал
44 1540148
>>39991

>уябывай


Нет.
45 1540209
>>40095
Автор очередного чатика на электроне порвался, спешите видеть.
46 1540215
>>39634 (OP)
Предлагаю ещё ввести сверхмутабельность - когда окружение настолько нестабильно, что данные меняются сами собой.
47 1540343
>>40081

>Но это пиздёж, на практике мы видим что это не так.


Где видим, в твоём манямирке? Пруфы или пиздобол.
48 1540466
>>39995

>К чему вся эта портянка текста??


>Кого волнует подо что подгоняли 8086??


Анонов, которые задавали ответы. Я принёс вопросы. Продолжение обсуждения из предыдущего треда.
Твоя в чем проблема, обиженный?
49 1540473
>>39634 (OP)
лисп написан на сишке
/thread
50 1540516
>>40473
А ты ваще батина сперма, а не человек.
51 1540540
>>40473
я думаю, что те реализации лиспа, что содержат в себе оптимизирующие компиляторы в машкод целевой платформы, пишут бутстрапом скорей всего
52 1540551
>>39998
в dr racket так то jit компилер есть, помимо интерактивного режима.. алгоритм сборки мусора современный.. машкод генерится под x86-64, под arm..
те он может выполняться как си-шарп или явка..
но, в отличие от этих мейнстрим языков, у тебя будет и интерактивный режим, repl, который позволит вести быструю разработку и отладку, делать интроспекцию и рефлексию прямо на лету, на выполняемом экземпляре программы..
53 1540574
>>40551

>но, в отличие от этих мейнстрим языков, у тебя


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

А на вопросы по типу - как использовать ХМЛ либу(потому что документация настолько дерьмо), "комьюнити" будет предлагать написать свой собственный DSL для парсинга ХМЛ.

>в dr racket так то jit компилер есть


Джит компилятор в IDE? Ты че несешь?

Алсо, ракет переводят на ChezScheme, так что это теперь костыльная обертка поверх чужой виртуальной машины.
54 1540576
>>39634 (OP)

> иммутабельность дарует мультипоточность


жирно
55 1540609
>>40112

> В ракете из коробки есть мутабельные пары и списки.


Ну да, с (require rnrs/mutable-pairs-6) и с mcons/set-mcar/set-mcdr вместо cons/set-car/set-cdr, что я и назвал изъёбами.
56 1540617
>>40574

>А на вопросы по типу - как использовать ХМЛ либу


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

> Про тайпед ракет лучше не начинать говорить, говно полное, SBCL на голову лучше.


Полностью согласен, CL вообще так-то говнище сраное примерно на уровне современного мейнстрима, но racket ещё хуже.
57 1540633
>>40609

>Ну да, с (require rnrs/mutable-pairs-6)


Наркоман сраный https://docs.racket-lang.org/reference/mpairs.html
Никаких require ненужно.
Еще раз, из коробки.
58 1540635
>>40617

>Справедливости ради, в ракете можно использовать либу Олега


Да, знаю про нее, вроде норм. (я уже запарсер руками с регекспом и такой-то матерью)
Я к тому, что обещанные "батарейки" в ракете из говна сделаны...

> примерно на уровне современного мейнстрима


Есть какие-то соображение на счёт того на чем можно вообще работать с комфортном.
Julia может? Но там какая-то проприетарщина имеет место быть...
Раст?
Я пытался уйти на лисп с сисярпа, и мне постоянно не хватает каки-х то банальных удобств.
59 1540667
>>40635
Всегда чего-то не будет. Сисярп заталкивается мелкомягкими, половина мира на винде сидит, если не больше. Да и сахар в других языках обычно другой и совсем не так на зубах хрустит, как ты привык, и у либ имена какие-то странные, а функций не хватает.
Так что сам решай, чего ты хочешь. Например, раст очень приятный, сам знаю, но пока ты не переучишься с классов — где ты делаешь объект по типу другого объекта — на трейты — где ты выделяешь одинаковое поведение у объектов и реализуешь его для всех, — ты будешь плеваться и топать ногами. А пока не научишься писать макросы, будешь тихо ненавидеть такие места, где отличаются одна-две детали, но реализовывать их надо по-разному и копипастой. А пока будешь учить макросы, будешь громко ненавидеть тех, кто сделал макросы такими сложными.
60 1540671
>>40667

>Например, раст очень приятный


Ок, я к нему начал приглядываться сразу как разрабы Racket объявили что хотят ИЗМЕНИТЬ ОСНОВНОЙ СИНТАКСИС в Racket 2, чтобы были на питон похоже, а то студенты жалуются...
Лисп нравился давно, но со времён моей юности, он не на шаг не продвинулся.
Например в тот же стандарт схемы влепили зачем-то сраный тров катч с выворачиванием потока выполнения, это когда в языке первоклассный континюации то...
И чар у них отличается от того что стриг хранит - это совсем шиза.
61 1540679
>>40671

>И чар у них отличается от того что стриг хранит


Ты про Раст? ASCII чар — это просто u8, и его можно записывать буквами: let a = b'A';
Тип "char" имеет длину в четыре байта из-за юникода, а строка из N знаков имеет длину меньше чем 4xN из-за того, что в расте строки в utf-8 кодировке, так что строка только из ASCII знаков будет иметь длину 1хN. Всё логично, в общем-то, чтобы потом разрабы не ебались с переводом строк из ASCII-only в Unicode при переводе, но непривычно сперва, это да.
62 1540685
>>40679

>Ты про Раст?


Про racket
63 1540687
>>40679
Да чет нелогично нехрена.
В чем логика использовать для чара другой тип данных?
Если строка это не список\массив чаров, то в чем сакральный смысл чара как явления?
Ну, в данном случае строка это список, навигация по которому сплошной ад.

Вот чет врасте то-же херню ссобачили.

>в общем-то, чтобы потом разрабы не ебались с переводом строк из ASCII-only в Unicode при переводе


Я даже не знаю их имен (не понимаю что за перевод такой и что за проблема)

Строка это последовательность символов, точка.
А массив байтов в котором символы как-то закодированы, это массив байтов, это не строка.
Короче наплодили сущностей на ровном месте.
Я видел в расте мутируемую строку или что-то такое, ну и как этот чудо раст определит что я хочу 5тый символ в строке поменять?
Будет идти по списку и считать?
А потом будет подвигать все оставшиеся байтики в зависимсоти от того меньше новый символ байтиков занимает или больше чем старый?

Это реальная шиза.
64 1540715
>>40473

> лисп написан на сишке


Нет
65 1540725
>>40687

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


Ты utf-8 хоть раз видел? Нихуя там двигать не надо, просто вставить байты между нужными тебе знаками. Но найти нужный знак по индексу не выйдет, если ты не знаешь с какого байта он начинается. И такая фигня крайне редко требуется, а когда требуется, просто превращает строку в итератор по чарам или в массив чаров и с ним работаешь. А если у тебя в строке только ASCII, то и превращать нихуя не надо и по индексу можно вставлять.

>не понимаю что за перевод такой


Обычный перевод с английского на любой другой язык. Как ты переведёшь "qwe" на русский, если у тебя в чаре вмещается всего 256 знаков? Будешь подключать новую либу и менять везде строки на строки из этой либы? А как ты теперь эту строку изменять будешь, если у тебя вся логика завязана на то, что чар занимает один байт?

>В чем логика использовать для чара другой тип данных?


Чар занимает четыре байта места. Строка в utf-8 виде крайне редко занимает 4xN байтов. Просто экономия места. А если у тебя вся работа завязана на вставку чаров и строк в середину другой строки, то никто не мешает тебе сделать свою строку, которая будет массивом чаров. Но я уже говорил, что такая херня требуется крайне редко, а массив чаров занимает намного больше места, чем те же чары в строке; память сегодня дешёвая, конечно, но не бесплатная же, а раст вроде как системным программированием занимается.
66 1540730
>>40687

> В чем логика использовать для чара другой тип данных?


Шел 2019-ый год
Еще не все понимали что такое юникод
67 1540731
>>40466
Кому интересны истории музейных процов, которые ни одной осью уже не поддерживаются?
68 1540797
>>40635

>Я пытался уйти на лисп с сисярпа


Лавсан, ты?
69 1540878
>>40730
Да я сам в шоке.

>>40725

>Нихуя там двигать не надо, просто вставить байты между нужными тебе знаками.


Utf-8 имеет переменную длину символа.
Как я просто блядь вставлю 2х байтный символ на место однобайтного или наоборот?

>>40725

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


>Ты utf-8 хоть раз видел? Нихуя там двигать не надо, просто вставить байты между нужными тебе знаками. Но найти нужный знак по индексу не выйдет, если ты не знаешь с какого байта он начинается. И такая фигня крайне редко требуется, а когда требуется, просто превращает строку в итератор по чарам или в массив чаров и с ним работаешь. А если у тебя в строке только ASCII, то и превращать нихуя не надо и по индексу можно вставлять.



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


Что ты несешь.

>Как ты переведёшь "qwe" на русский,


Специальной либой, онлайн сервисом?

>если у тебя в чаре вмещается всего 256 знаков?


Ты ебанутый? Сам же писал что чар 4х байтный. Это юникод называется.

>Будешь подключать новую либу и менять везде строки на строки из этой либы?


Я не понимаю проблемы, ты ерунду порешь.

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


Каким же нужно быть дегенаротом, чтобы тип "текстовый символ" делать однобайтным?
Зачем мне себе такие проблемы создавать

>Чар занимает четыре байта места.


И?

>Строка в utf-8 виде крайне редко занимает 4xN байтов.


Допустим.

>Просто экономия места.


Какова длинна обычной текстовой строки в средней программе по твоему?
И что на счёт ресурсов на парсинг этого дерьма?

>А если у тебя вся работа завязана на вставку чаров и строк в середину другой строки, то никто не мешает тебе сделать свою строку



>никто не мешает тебе сделать свою строку


Опять шизофреники.
В ракете предлагали свой ЯП писать для парсинга ХМЛ, в Расте предлагают свой стринг изобретать.
Убогие.

>а массив чаров занимает намного больше места


Сколько в абсолютных значениях?

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


Если ввели тип строки, то он должен работать как строка.
А если массив байт, то нефиг его строкой обзывать.
69 1540878
>>40730
Да я сам в шоке.

>>40725

>Нихуя там двигать не надо, просто вставить байты между нужными тебе знаками.


Utf-8 имеет переменную длину символа.
Как я просто блядь вставлю 2х байтный символ на место однобайтного или наоборот?

>>40725

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


>Ты utf-8 хоть раз видел? Нихуя там двигать не надо, просто вставить байты между нужными тебе знаками. Но найти нужный знак по индексу не выйдет, если ты не знаешь с какого байта он начинается. И такая фигня крайне редко требуется, а когда требуется, просто превращает строку в итератор по чарам или в массив чаров и с ним работаешь. А если у тебя в строке только ASCII, то и превращать нихуя не надо и по индексу можно вставлять.



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


Что ты несешь.

>Как ты переведёшь "qwe" на русский,


Специальной либой, онлайн сервисом?

>если у тебя в чаре вмещается всего 256 знаков?


Ты ебанутый? Сам же писал что чар 4х байтный. Это юникод называется.

>Будешь подключать новую либу и менять везде строки на строки из этой либы?


Я не понимаю проблемы, ты ерунду порешь.

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


Каким же нужно быть дегенаротом, чтобы тип "текстовый символ" делать однобайтным?
Зачем мне себе такие проблемы создавать

>Чар занимает четыре байта места.


И?

>Строка в utf-8 виде крайне редко занимает 4xN байтов.


Допустим.

>Просто экономия места.


Какова длинна обычной текстовой строки в средней программе по твоему?
И что на счёт ресурсов на парсинг этого дерьма?

>А если у тебя вся работа завязана на вставку чаров и строк в середину другой строки, то никто не мешает тебе сделать свою строку



>никто не мешает тебе сделать свою строку


Опять шизофреники.
В ракете предлагали свой ЯП писать для парсинга ХМЛ, в Расте предлагают свой стринг изобретать.
Убогие.

>а массив чаров занимает намного больше места


Сколько в абсолютных значениях?

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


Если ввели тип строки, то он должен работать как строка.
А если массив байт, то нефиг его строкой обзывать.
70 1540892
>>40730
Это показатель того, кто сидит на пидаРасте.
71 1540896
>>40878

>Если ввели тип строки, то он должен работать как строка.


>А если массив байт, то нефиг его строкой обзывать.


Ты сам себе противоречишь. Ты как раз хочешь массив байтов или чаров, а у нас в расте строки.

>И что на счёт ресурсов на парсинг этого дерьма?


Всяким парсерам охуенно, они сразу читают String как utf-8, никакого парсинга из массива в строку.
72 1540942
>>40896

>Ты сам себе противоречишь. Ты как раз хочешь массив байтов или чаров, а у нас в расте строки.


Я хочу строки, у вас массив байтов в ебнутой обертке.
Или строки в РАСТений списками сделаны? Охуеть тогда экономия памяти конечно.

>Всяким парсерам охуенно, они сразу читают String как utf-8, никакого парсинга из массива в строку


Это так не работает. Или я отстал от жизни.
Ну хоть пример покажи парсинга хмл читаемого из стрима.
73 1541161
>>40942

> Ну хоть пример покажи парсинга хмл читаемого из стрима.


Чувак, я не понимаю что ты вцепился в ебаный XML
Но похоже, что ты про SAX и DOM понятия не имеешь
74 1541172
>>41161

>Чувак, я не понимаю что ты вцепился в ебаный XML


Для примера.
Подойдёт любой текстовый протокол. Например HTTP.
Хочу посмотреть как ваши строки не строки в расте упрощают парсинг.
75 1541597
>>41172
Да ты не маневрируй!

> Ну хоть пример покажи парсинга хмл читаемого из стрима.


Тыык: про XML SAX парсеры ты не знаешь

> строки не строки


Что ты называешь строкой? Что ты называешь char-ом?
Ты до сих пор не понял, почему символ может быть не одним байтом?
76 1541601
>>40942

>Я хочу строки, у вас массив байтов в ебнутой обертке.


Нет типа строки который бы хорошо подошел для всех случаев.
Кому-то нужно экономить место (utf8), кому-то обрабатывать посимвольно максимально удобным образом (utf32).
77 1541610
>>40715

>не принес пруфов для своего высера


Да
78 1541652
>>41597
Я тебя конкретный код прошу показать. Ты серьёзно считаешь что я хмл парсером не умею пользоваться? А себя на основании блядь знания о SAX возомнил неебатся каким экспертом?

>Да ты не маневрируй!


Маневрируешь тут только ты.
Хватит нести хуйню.
Тебя попросили показать конкретный код демонстрирующий преимущество стрингов не использующих чар в кач базового типа в парсинге.
79 1541663
>>41601
Тип строки нужен для обработки посимвольно максимально блядь удобным образом.
Когда нужно экономить каждый байтик ты просто задаёшь байтики константы через сахарок, или без.

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

Ну ладно у раста есть оправдание(слабое) что тип мы как сишка ну чтобы с дерьмолегаси совместимость.
А у ракета какое? Бомбит в общем.

Люди которые это делают оторваны от реальности.

Когда речь идёт о строках байтики никому не нужны.
80 1541672
>>41652
Блжад
Малчек, ты в курсе сколько строковых типов придумано за историю программирования?
О каком конкретно строковом типе ты говоришь?
В каком языке, какой технологии?
81 1541695
>>41663

>В любой момент можешь написать Vec<char>, никаких проблем нет, элементарное действие.


>"РРЯ! Вы раки, нахуя вы стринги делаете utf-8! Вы что, долбаёбы, не сможете написать логику кодировки сами? Это же просто, это же не ебаный вектор с чарами, в котором хуй пойми что одного размера! Это же просто куча побитовых операций, определение длины символа, а не что-то сложное, как унифицированный insert() для вектора! Это же можно в любой момент написать за день, никаких проблем, это же не что-то сложное, как Vec<char>, где надо написать АЖ ДЖВА СЛОВА! Хрть-фу на вас, опущенцы!"

82 1541696
>>41672
Ты совсем туту?
Речь шла о расте. Ты выше заявил что строки в нём построены не на чарах а на массиве байт в utf8 кодировке, и что это заебись как удобно для парсинга.

Я предлагаю тебе продемонстрировать это удобство.
83 1541705
>>41696
Любая работа с текстовыми файлами в utf-8. Если тебе надо поменять в файле все "Hello!" на "Hello, world!", то ты просто читаешь файл сразу как строку или несколько строк, находишь в этой строке совпадение с "Hello!" последовательностью байтов, вычисляешь стартовый байт для "!" знака и вставляешь туда ", world" последовательность байтов. Всё. А в твоём случае надо как минимум один раз превратить utf-8 строку в Vec<char>, потом там искать последовательность из чаров, потом обратно в utf-8 перегонять получившийся текст.
84 1541706
>>41601

>Кому-то нужно экономить место (utf8), кому-то обрабатывать посимвольно максимально удобным образом (utf32).


>


насколько я понимаю, проблема раста в том что он НЕ оставляет выбора, внутреннее представление строки в нем всегда utf8
это странно для языка, претендующего на универсальность

второе, опять же очень странное решение выбирать utf8, когда язык претендует на то чтобы быть самым быстрым на планете, лол
utf8 явно для этого не подходит, так как кодирует символы переменной длиной, что очевидным образом замедляет работу с такими строками, по сравнению с представлениями юникода в которых фиксированная длина символа
flhzuvu32vm31.jpg42 Кб, 500x498
85 1541707
>>41695
Чет не понял почему ты порвался. Чтобы использовать тип данных "строка" с представлением в utf8 нужно реализовать сложную кодировку.
Или ты о том что делать пользователю библиотеки когда он хочет текст сохранить? Ну не знаю, что-то вроде stringToBaytiky("idi nahuy", tip.utf8) ?
У вас там мозги совсем растом покрылись?
86 1541708
>>41706
>>41695
Строки в расте сделаны именно для работы с utf-8 строками. Если тебе нужен ебаный массив чаров, то ты и напиши Vec<char>, блеать. Можешь даже выебнуться и написать
use MyString as Vec<char>;
87 1541709
>>41707

>нужно реализовать сложную кодировку.


И раст реализует её в std::string::String. А нам предлагают пойти на хуй с этой реализацией и пользоваться массивом чаров, потому что, видите ли, "не строка-с, батенька".
0zvT4ID.jpg127 Кб, 960x933
88 1541710
>>41705
1. Пример кода на расте демонстрирующий преимущество растрвских строк для подобного редактирования файла будет или нет? Из твоего описания совершенно непонятно в чем преимущество конкретной реализации строк в расте. Какой мне толк от них если я вручную должен всерано нужные байтики находить?

2. Ты на полном серьёзе предлагаешь изменять ТЕКСТОВЫЙ ФАЙЛ ПРЯМО НА ДИСКЕ ПО КУСОЧКАМ ?
Ты понимаешь вообще что современные ФС имеют блоки от 4к и cow во все поля?
4g4622w7cuh31.jpg45 Кб, 750x867
89 1541718
>>41705
>>41710
Ок, я ступил, замена последовательности байтиков.
Ты можешь сделать именно это, заменить байтики. Если тебя ТАК волнуют байтики.
Зачем тебе вообще тип "строка" в данном случае?
Преимущество показывай.
90 1541722
>>41718
Записывать строки как "пошёл на хуй", а не [byte; N]? Кроме скорости работы ещё и удобство в использовании.
91 1541726
>>41708
С utf8 не работают, в нем хранят и передают.
Даже в сишке блядь wchar.
А тебя, как и других раст трансвеститов, лечить нужно.
92 1541730
>>41722
1. Чтобы так их ЗАПИСЫВАТЬ ненужно делать базовый тип стринг на основе блядь ютф8.
ToUtf8("sukabluat") уже мозгов не хватает сделать?
Растенианцы не осилили текстовые константы?

2. А если у меня данные не в ютф8? Я их хоть сконвертировать в этом чудорасте смогу?
93 1541735
>>41730
Если тебе надо сделать utf-8 строку из utf-16, то в std либе есть from_utf16(). А любая utf-32 строка — это как раз массив растовых char'ов. А если у тебя какая-то другая кодировка, или тебе работать надо не с utf-8 или utf-32 строками, то иди на хуй искать или писать либу для этой кодировки, потому что подавляющему большинству людей такая кодировка не нужна.
94 1541789
>>41708
ты заебал тупить
в utf8 хранить удобно, тк компактное представление
а "работать" с ним нихуя не удобно и медленно, сука

типичная задача: заменить все вхождения одного символа на другой, и тут, опа - заменяемый символ в 1 байт, а заменитель - в 2 байта
и получается что приходится для такого случая полностью перетряхивать строку, делать реаллок, и полную перезапись
в то время в двубайтовом представлении ты просто проходишь по строке заменяя вхождения

вторая типичная задача: заменить n-ный символ
в двубайтовой кодировке (или любой другой с фиксированной длиной символа) ты просто делаешь смещение, что очень быстро и заменяешь
а в utf8 тебе придется пробегать по всей строке чтобы вычислить позицию n-го символа, а потом уже заменять

я вообще не умею кодить в расте, но если у них там внутреннее представление юникода в utf8, то это пиздец
95 1541837
>>41789
Если у тебя строка в utf-16, то возьми либу для utf-16 строк, заебал. Мне пока что хватало utf-8 формата, utf-16 обычно китайцы используют.

А если тебе надо работать с массивом чаров некоторого размера, то делаешь себе нужные типы:
use Str32 as Vec<char>;
use Usc2 as Vec<u16>;

Ещё раз, если ты тупой: работа со строками — это работа со строками: всякие слепливания одной строки из нескольких, поиск слов в строке и удаление или добавление слов или строк, разделение одной строки на несколько, удаление пробелов оттуда, где они не нужны. Для всего этого как бы похуй, как представлена строка, потому что ты просто с определённой последовательностью байтов работаешь. Но строки занимают места меньше, чем массив чаров.
А если тебе надо заменить один элемент в массиве на другой, то ты и работай с массивом, блядь. Что непонятного?

>заменить n-ный символ


>в двубайтовой кодировке (или любой другой с фиксированной длиной символа)


Ну, если у тебя строка уже готова в таком виде, то хули и нет. А если тебе на вход поступает utf-8 строка, в которой надо заменить один символ, а потом вернуть эту же строку в utf-8 формате, то один раз найти N-й символ и заменить его в utf-8 виде выйдет намного быстрее, чем ту же utf-8 строку переделать в массив чаров, потом в нём заменить N-й элемент, а потом обратно запихивать этот массив в utf-8 кодировку.

И если ты захочешь ещё раз пиздануть про скорость замены одного элемента массива на другой, то сперва принеси приложение, которое таким постоянно занимается в контексте строк. Потому что хуй ты такое найдёшь, 90% приложений (не для китайского языка, разумеется) хватает иммутабельных строк, которые можно склеить, а другим 9% хватает изменяемых строк в виде сжатого в utf-8 массива байтов. Строки делают вовсе не для работы с чарами в них.
96 1541852
>>41837

>Для всего этого как бы похуй, как представлена строка


нет, не похуй
операции со строками медленней в utf8
две чашки чая.webm760 Кб, webm,
640x480, 0:02
97 1541864
98 1541867
>>41837
Ты аутист сраный.
Еще раз, с UTF8 НЕ РАБОТАЮТ.
Это кодировка для хранения и передачи, НЕ ДЛЯ ОБРАБОТКИ.

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

Кроме процессорного времени это еще и память жрет, внезаптно.
Тебе нужно каждый раз всю строку переписывать при любом изменении.
99 1541940
>>41867
Анон, какой ты терпеливый, этому >>41852 дебилу очевидные вещи объяснять
1.88 МегаБайт.jpg35 Кб, 550x412
100 1541966
>>41837

>А если тебе на вход поступает utf-8 строка, в которой надо заменить один символ, а потом вернуть эту же строку в utf-8 формате, то один раз найти N-й символ и заменить его в utf-8 виде выйдет намного быстрее, чем ту же utf-8 строку переделать в массив чаров, потом в нём заменить N-й элемент, а потом обратно запихивать этот массив в utf-8 кодировку.



Одним единственном редким случаем не встречающимся на практике оправдывать дизайн такой важной вещи как стринги?

>И если ты захочешь ещё раз пиздануть


Вот это интеллектуал прорвался так сказать.

>то сперва принеси приложение, которое таким постоянно занимается в контексте строк


Редактор например комментария в котором ты свой высер на двач простишь?

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

Ну поведай мне, борщегений программирования, каким образом в этой utf8 строке реализуется удаление пробелов С КОНЦА строки?
101 1542009
>>41966

>Одним единственном редким случаем не встречающимся на практике оправдывать дизайн такой важной вещи как стринги?


Стринги чаще хранятся, чем меняются. И тут utf-8 хорош. Так что дизайн оправдан.
102 1542027
>>41966

> каким образом в этой utf8 строке реализуется удаление пробелов С КОНЦА строки?


> в строке удаление



Йобанный ты Рип-Ван-Винкль!
За такую хуйню уже лет 30 как пиздят ногами!
В любом языке!
wtf.gif409 Кб, 498x410
103 1542029
>>42009

>Стринги чаще хранятся, чем меняются.

104 1542030
>>42009

>Стринги чаще хранятся, чем меняются. И тут utf-8 хорош.


блядь, ты троллишь тупостью, да?
окей, пусть не меняются, и что?
чтобы в utf8 получить доступ к n-му символу, надо, блядь, пробежаться по всей строке с начала
а это значит что целый, блядь, класс строковых алгоритмов начинает работать дохуя медленно
в то время как в представлениях юникода с фиксированным размером символа, нужно взять лишь смещение
никто не говорит о том, чтобы в языке (либо в самом языке, либо в его стандартной библиотеке) не было средств работы с utf8, но внутреннее представление юникода лучше выбирать с фиксированным размером символа
105 1542059
>>42030
Так у нас есть char тип, хуле. Но читаешь-то ты из utf-8 типа чаще всего, потому что всё хранится в этом виде. Вот если тебе нужно работать с чарами, так и делаешь из строки Vec<char>, а потом творишь всё что надо с этим массивом, пока отправлять куда-то не придётся, в чём проблема?
Скажи мне, в чём различие между операциями над массивом из чаров, из u16 или из u8 и твоей строкой с фиксированным размером символов? Если ты читаешь usc-2 строку, так и читай её прямо в Vec<u16>. А если utf-32, то в Vec<char>. Вот прямо на пальцах мне объясни, каких действий с вектором тебе не хватает, чтобы работать с ним как со строкой из фиксированной длины символов?

>чтобы в utf8 получить доступ к n-му символу, надо, блядь, пробежаться по всей строке с начала


Чтобы превратить utf-8 строку в массив char типа, тоже надо по всей utf-8 строке пробежаться.

>внутреннее представление юникода лучше выбирать с фиксированным размером символа


Так чаровый тип же. Или о каком представлении ты говоришь? Ты учитывай, что раст — компилирующийся во всякие .exe системный язык со строгой типизацией, так что там сколько байтов на тип выделишь, столько и будет. Нет никакого внутреннего представления, ты работаешь с тем типом, который САМ выберешь.
Единственное, что можно назвать "внутренним представлением" — это то, как хранятся константные строки (хардкорно записанные в .exe файл, то есть данные, которые СОВЕРШЕННО, НИКАК, ВОТ ВООБЩЕ НИКАК НЕЛЬЗЯ ИЗМЕНИТЬ, ТОЛЬКО ПРОЧИТАТЬ), которые как раз хранятся в utf-8 виде. Но тут и спорить не о чём, если ты не китаец, потому что данные, которые можно только хранить и читать, нет смысла хранить в виде отличном от максимально сжатого.
106 1542063
>>42059

>Но читаешь-то ты из utf-8 типа чаще всего


Читают или из константы или из байтовой стримы.
Иди лечись уже, горе погромист.
107 1542068
>>42059

>Чтобы превратить utf-8 строку в массив char типа, тоже надо по всей utf-8 строке пробежаться.


Fuck off retard.
108 1542079
>>42059

>в чём различие между операциями над массивом из чаров, из u16 или из u8 и твоей строкой с фиксированным размером символов?


ты продолжаешь троллить?
в utf8 чтобы перейти к n-му символу, нужно пройти от начала стоки до этого символа, блядь
в utf16 ты просто делаешь смещение
109 1542081
хотя, все, мне заебало
окей, utf8 - самая пиздатая кодировка на земле, а раст-программисты самые охуенные и скоро все вокруг будет работать на расте
аминь
110 1542091
>>42079
Мы как на разных языках говорим. Тут все из какой-то динамически типизированной параши набежали? Что, с крестов и сишки вообще никого нет?
Массив из чаров растовых — это массив из четырёхбайтовых значений. Массив из u16 — массив из двубайтовых значений, массив из u8 — массив из однобайтовых значений, сраная аския. Всё фиксированного типа.
К тому же, в utf-16 не фиксированная длина символа, только в ucs-2, иди учи матчасть.
sage 111 1542096
я уже блядь не понимаю кто тупой
а фп-зумеры соснули
112 1542149
>>42081
Ты ебанутый - ты об этом знаешь?

Посмотри на ОП-пост - где ты видишь чего-то про раст?

Ну ты вообще ебанутый, а точнее безграмотный шопыздец:
- строки блядь пытаешь эффективно мутировать - это невозможно
- пиздишь про XML, про который все позабыли - и не знаешь про SAX

Хуево тобой быть!
watchmen-7th-cavalry-rorschach.png435 Кб, 825x464
113 1542168
>>39737
Во-первых, как связаны программирование и (((правый))) акселлерационизм?
Во-вторых, Кирилл Нестеров, залогинтесь.
114 1542170
>>39819

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


Мутабельность и скопинг никак не связаны. В вполне функциональном лиспе лексический скоупинг, имена можно переиспользовать хоть до посинения.

>Например хештаблица\словарь. Массив, и так далее.


Словари встроенны во многие ФП по дефолту. Массивы с O(1) доступом к элементу реально нужны не так часто, как это может показаться.
115 1542178
>>40081

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


Новый софт пишут исключительно на хачкеле и кложе, это всем давно известно.
116 1542185
>>42170

>Массивы с O(1) доступом к элементу реально нужны не так часто, как это может показаться.


Если язык настолько кастрирован, что из него убрали циклы, то да, не нужны.
117 1542209
>>42185
Зачем тебе циклы, когда есть хвостовая рекурсия?
118 1542211
>>42209
Чтобы не жрать стэк спейс?
tailrec.png155 Кб, 1502x898
119 1542227
>>42211
Хвостовая рекурсия стэк спейс жрет. Твердо и четко.
https://stackoverflow.com/questions/310974/what-is-tail-call-optimization
120 1542237
>>42227

>Хвостовая рекурсия стэк спейс не жрет.

121 1542238
>>42227
Ну да. Там где цикл хранит одну переменную, твоя рекурсия хранит по одной переменной на каждый вызов рекурсивной функции.
122 1542239
>>42209З
Зачем тебе котлетки, когда есть Карл Маркс.
123 1542267
>>42238
Поясни, я не понял. Компилятор/интерпретатор вызывает функцию и кладет результат на стек, следующий вызов берет результат со стека и кладет новый, и так повторяется n раз. Что я упускаю?
А если серьезно, то полная иммутабельность не нужна за пределами академических языков типа Haskell. Это не отменяет того, что list comprehension, pattern matching, мапы, фолды, фильтры, да даже монады -- это очень крутые штуки и это хорошо, что их добавляют в популярные языки. К тому же, ФП это одна из двух полноценных парадигм программирования, из используемых сейчас, в отличие от современного ООП, которое является костылем к императивной парадигме.
124 1542268
>>42227
Собственно Гвидо все написал на твоем пике.
Хвосторекурсивный код там, где нужен цикл - это пиздец. Это вручную пробрасываемый стейт в виде параметров функции, отказ от структурного программирования, трудности со стектрейсами, и, главное, не понятно, зачем. К ссылочной прозрачности циклы внутри функции все равно отношения не имеют.
Комбинаторы - иногда сокращают код, когда он сводится к таким комбинаторам. Но это опять же вопрос котлеток и коммунизма: я-то могу использовать комбинаторы в своем императивном коде, а могу не использовать.
125 1542282
>>42267
Готу указатели хранить надо на каждый рекурсивный вызов. В императивке сам решаешь, какой стейт сохранить, а какой можно дропнуть. Возьмём тот же фибоначчи. В императивке ты тупо хранишь одну переменную под предыдущее значение. Посчитал следующее, дропнул или перезаписал предыдущее. В хвостовой рекурсии надо всё сохранять. Или я неправ?
126 1542324
>>42282

>Готу указатели хранить надо на каждый рекурсивный вызов.


Так там один и тот же готу на каждый вызов, функция то не меняется. Меняется только результат функции, который дропается на стек и который подбирает следующий вызов. Чи не?
127 1542338
>>42168
Ну Молдбаг айтишник. И первые статьи про NRx в американских медиа были написаны в таком духе, мол, это идеология гиков и кодеров.
128 1542348
>>42338
Ну хуй знает.
На мой взгляд, акселлерационизм это какая-то залупа. Технологии подвержены энтропии, как и все на белом свете, и если их специально не развивать, то они начнут деградировать. Технологическая сингулярность может быть и наступила бы, если бы люди имели идеальную память, к сожалению, это не так. В любой момент можно все забыть и наступит пролапс коллапс цивилизации.
https://www.youtube.com/watch?v=ZSRHeXYDLko
129 1542353
>>41837
Блядь, ну ты мудак ебучий, в раст только аутистов берут? Вот тебе строка: "café façade". Посплитай её по символу é . Обосрамс? Обосрамс.
sage 130 1542543
>>42353

>в раст только аутистов берут


да
131 1542573
>>42267

>современного ООП, которое является костылем к императивной парадигме.


вангую что тебе никогда не приходилось городить кучу макросов вкладывающих одни структуры в другие и состоящих из указателей на функции в чисто сишном проэкте, тк требовалась сэмулировать иерархию интерфейсов, которая в с++ делается обычными классами с наследованием.. или городить те же vtable ручками, тогда как в крестах опять же динамический полиморфизм из коробки.. и прочее..
132 1542577
>>42268
ну да, еще вирт писал о том что в структурных языках нет необходимости использовать хвостовую рекурсию, тк она легко переписывается на циклы (и в последнем случае более наглядна)
с другой стороны, когда рекурсивный алгоритм более сложен (к примеру, типичная задача - фракталы), то использование рекурсивного вызова функций дает более наглядную реализацию алгоритма, чем итеративная реализация на циклах
133 1542578
>>42149

>- строки блядь пытаешь эффективно мутировать - это невозможно


поясните за этот вскрик (я просто с другой стороны окопа: структурное программирование, ооп, etc)
134 1542586
>>42091
дело в том что "Массив из чаров растовых", это, блядь не строка
реализация класса (библиотеки или чего там в твоем языке) строки предполагает реализацию множества специфичных операций для строки (к примеру, те же сравнения, поиск подстроки, возврат подстроки, конкатенацию, числовые преобразования и еще кучу другого, к примеру возможность передачи на обработку в библиотеку регулярных выражений)
а "массив из чаров" остается массивом, с набором операций, типичных для массива, а не для строки
135 1542600
>>42577
Фракталы рекурсивны, но не хвосторекурсивны.
136 1542633
>>42600
я так и написал вообще то
137 1542648
>>42578
Если ты мутируешь строки - ты дебил
Если ты ищешь способ их эффективно мутировать - вдвойне дебил
Доступно?
138 1542683
>>42648
эээ, нет
одни оскорбления

положим, нужна капитализация строки
в чем проблема сделать ее по месту?
не всегда выгодно с точки зрения производительности порождать новую строку
139 1542695
>>42683

> не всегда выгодно с точки зрения производительности порождать новую строку


Всегда блять выгодно дебил ты ебаный!
Исключая гигабайтные размеры
Но если у тебя гигабайтные строки - ты пиздец дебил
Современные процы не любят байтоебства по месту
140 1542721
>>42633
Лезть с рекурсией в разговор о хвостовой рекурсии не очень умно
141 1542732
>>42586
Всё, кроме парсинга чарового массива в число, реализуется методами вектора изичайше. Парсинг чарового массива в число можно просто полностью спиздить из стд либы, изменив в той функции пару строк.
142 1542787
>>42732
о, узнаю мантры расто-фанатиков (с придурками из мозиллы во главе, второй раз убивающими свой браузер)
все, абсолютно все можно переписать!
сделать это легко и просто!
перепишем весь мир, перепишем его заново, юзеры подождут
143 1542790
>>42732
знаешь, реализовать эффективный поиск подстроки (для наиболее общих случаем при помощи КМП или боером-муром или более спец алгоритмы), с оптимизациями, промышленного качества - это совсем не простая задача, на самом то деле, с которой не всякий и хороший программист справится.. в любом случае это потребует затрат времени..
но, ожидается, что класс строки в библиотеке общего назначения, которую ты юзаешь, уже будет иметь эффективную реализацию поиска подстроки и тебе не нужно будет тратить на реализацию его время
144 1542791
>>42787
Что? О чём ты? Я говорю, что все функции, которые ты хочешь применять к строкам в виде чаровых массивов, — можно написать за время от нескольких минут до часа. Какое переписывание? Ты совсем поехал?
145 1542793
>>42695

>Всегда блять выгодно дебил ты ебаный!


как, блядь, выгодно?
вот язык си
вот есть строка, лежит в памяти, мы берем и по месту делаем капитализацию ее
а иначе нам надо попросить памяти, скопировать в нее строку, и уже там делать капитализацию
как это выгодно?
146 1542794
>>42791
напиши мне поиск подстроки КМП алгоритмом с оптимизациями промышленного качества реализацию
ЗА ЧАС
на своем vec<char>
блядина
147 1542801
>>42794
Хватит кормить жирного растошизика. Он очевидно троллит тупостью.
148 1542824
>>42794
Нашёл статью про строки в расте.
https://lise-henry.github.io/articles/optimising_strings.html
Описывается задача замены нек символов на другие.
И это я должен сказать полная ШИЗа.
Оказывается нет никакого uf8 поиска, ты должен вручную итерировать по стрингам получая из них чары.
149 1542826
>>42793

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


А теперь иди читай, как работают современные процы и подсистемы памяти
Побайтное дрочево перестало работать в 80-ых годах
150 1542828
>>42826
Хуйню несешь
151 1542836
152 1542868
>>42826
Копированием всей строки у тебя больше шансов сбросить кеш.
Не говоря уже о выделении памяти.

>Побайтное дрочево


Так мы тут о яп для побайтового дрочева говорим. Проснись.
153 1542879
>>42836
мда
154 1542882
>>42573
Так я не говорю, что ООП говно или нинужно, просто по факту это реально костыль, а не отдельная парадигма. Костыль очень удобный и нужный, но костыль.
Если вкратце, то ИП и ФП это фундаментально разные подходы просто потому, что это две разные модели вычисления, которые изначально вообще не имели ничего общего, пока не был доказан тезис Тьюринга -- Чёрча. ООП не представляет новую модель вычисления, а строится поверх уже существующей ИП парадигмы.
155 1542891
>>42882
с теоретической точки зрения ооп - это один из вариантов как можно представить в языке расширяемую систему пользовательских типов, как задавать отношения между ними
те в cs ооп относится к моделям типизации, а не к модели вычислений, если просто писать
вот
156 1542912
>>42891
С теоретической точки зрения про ООП вообще говорить невозможно, потому что ООП не было формализовано ни в каком виде.
Заебал мелкобуквенный
157 1542917
>>42912

>не было формализовано ни в каком виде


Which part of "The technique of using dynamic polymorphism to call functions without the source code of the caller depending upon the source code of the callee." you don't understand?
158 1542923
>>42912
у ооп есть теоретическое обоснование, тот же "принцип подстановки лисков" и все такое..
другое дело что положения ооп взяты как частный случай из теоретических работ по типизации, по заданию отношений между типами и все такое, так чтож в cs предпочитают работать над более общими системами типов
159 1542927
>>42923
"принцип подстановки лисков" дает определение подтипа в ооп, теоретическое обоснование динамической диспетчеризации (дин полиморфизма) дал джузеппе кастанья в своих работах..
160 1542937
>>42923
>>42927
>>42917
LSP как он сформулирован прекрасно живет и без ООП.

А ООП до сих пор является просто набором практик без четкой формализации.
161 1542951
>>42937

>А ООП до сих пор является просто набором практик без четкой формализации.


Ты описал любое программирование
162 1542952
>>42937
Ты дебил? Я тебе скинул формализацию ООП, его основной определяющий принцип, который позволил людям вздохнуть спокойно и перестать писать на сишке.
163 1542964
>>42891
Ты не можешь в чисто функциональном языке писать императивный код, по-крайней мере без костылей в виде монад.
Ты не можешь в чисто императивном языке (типа Си) писать функциональный код, по-крайней мере сделать это будет очень тяжело.
Но в том ООП, которое используют большинство популярных языков, ты можешь писать императивный код без особых проблем. Просто объявляй все методы public static и ты даунгрейднулся до Си.
Речь то не о том, что тру-ООП не представляет из себя что-то самодостаточное. Речь о том, что ООП в том виде, в котором оно реализовано в плюсах, шарпе, жабе и т.д,, -- это не самодостаточная парадигма, а костыль над императивным программированием. Да, есть тру-ООП языки типа Смолтока и Симулы, ну и много людей сейчас используют Смолток и Симулу?
164 1542967
>>42951
Нет.
Примеры: реляционная алгебра, CSP, Hindley-Milner итд

>>42952
Это хуета "The technique of .." , а не формализация
Глаза промой
165 1542971
>>42967
Хорошо, давай-ка опиши нам формализацию ФП, а мы посмеемся.
166 1542978
>>42964

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


>по-крайней мере без костылей в виде монад.


Так можешь или не можешь? Определись. И заодно дай-ка определение "чисто функционального" языка, а так же расскажи, в какой момент появляется грязь.

>Просто объявляй все методы public static и ты даунгрейднулся до Си.


А Объектно-Ориентированное Программирование-то где будет в этом случае? Пальцем покажи.
167 1542990
>>42978

>Так можешь или не можешь? Определись.


Ну как бы это будет не совсем императивный код, do notation -- это синтаксический сахар для того, чтобы пробрасывать "стейт" через функции, стейта как такового там нет.

>И заодно дай-ка определение "чисто функционального" языка


Вот с википедии:

>In computer science, purely functional programming usually designates a programming paradigm—a style of building the structure and elements of computer programs—that treats all computation as the evaluation of mathematical functions. Purely functional programming may also be defined by forbidding changing-state and mutable data.


Purely functional programming consists in ensuring that functions, inside the functional paradigm, will only depend on their arguments, regardless of any global or local state.

>в какой момент появляется грязь


Когда пропадает referential transparency.

>А Объектно-Ориентированное Программирование-то где будет в этом случае?


В том и смысл, что его не будет.
168 1542999
>>42967

>Примеры: реляционная алгебра, CSP, Hindley-Milner итд


Это не программирование
169 1543004
>>42999
Да. Это формальные системы, на которых строятся языки.

У ООП нет никакой формальной системы.
Это просто хуйня в воздухе "мы так придумали"
170 1543005
>>42990
Ну то есть твои охуительные аргументы заключаются в:
1) На С нельзя писать ФП-код, то есть можно, но лучше не надо
2) В ФП-языках нельзя писать императивный код, то есть можно, но лучше не надо.
3) А вот в ООП языках можно выкинуть объекты и писать как на сишке, но лучше не надо, а значит ООП не самостоятельная парадигма
Че?

>a style of building the structure and elements of computer programs—that treats all computation as the evaluation of mathematical functions


>The technique of using dynamic polymorphism to call functions without the source code of the caller depending upon the source code of the callee.


В чем разница между этими двумя определениями, и почему одно является "формализацией", а второе внезапно нет?
171 1543008
>>43004

>Да. Это формальные системы, на которых строятся языки.


Это просто источник вдохновения для автора языка. К программированию отношения не имеет.
172 1543011
>>43005
Ладно, я сдаюсь, ООП самостоятельная парадигма. Доволен?
Я говорю не про тру-ООП, а как это выглядит на практике. Скатиться до голой императивщины в жабе намного проще, чем в Си до функциональщины или в Хачкеле до императивщины.

>В чем разница между этими двумя определениями, и почему одно является "формализацией", а второе внезапно нет?


Я вообще не топил за формализацию, ты меня путаешь с другим аноном. Стремление формализовать все на свете -- это психическое расстройство.
173 1543012
>>42990

>Ну как бы это будет не совсем императивный код


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

>Когда пропадает referential transparency.


Это вообще не при чем. В ФП даже локального изменения стейта нет, который ссылочной прозрачности никак не мешает
174 1543014
>>43011

>Скатиться до голой императивщины в жабе намного проще


Наверное потому что жаба - императивный язык?
175 1543018
>>43008
Хуясе просто блять!
Почитай Хоара "Communicating Sequential Processes"
Или гораздо проще - Кодда по реляционной алгебре
Или Horn clauses - основы для логического программирования

Я серьезно говорю, там не так и сложно и не так много.
Это не хачкелевая тягомотина.

Но это нормально проработанные формальные системы.

ООП - не имеет никакой основы.
Какой-то калифорнийский ебанат по обкурке что-то нафантазировал что и сам не понял.
176 1543019
>>43011

>чем в Си до функциональщины или в Хачкеле до императивщины.


...т.к. в Си это морально тяжело обходиться без состояния (ибо как минимум стандартная библиотека не стейтлес ни разу), а Хачкель тебя бьет по рукам, когда ты пытаешься что-то поменять. Хочешь состояний? Пиздуй учить теркат.
Хотя здесь валиден контраргумент, что никто не пишет на чистых функциональных языках, кроме борщехлебов, лол.
>>43012

>В ФП даже локального изменения стейта нет, который ссылочной прозрачности никак не мешает


Мешает, если у тебя функция -- единственный возможный примитив. С другой стороны, на практике таких языков нет (кроме чистой лямбды без всего), так что тут прав скорее ты.
177 1543020
>>43011
Просто ООП настолько вжилось в ландшафт, что люди сейчас не представляют, что такое не-ООП код, и о чем вообще весь этот ООП-дискурс.
Вот так было до ООП: https://github.com/qrush/unix/blob/master/src/c/c10.c
178 1543021
>>43019
Ты заебал теоретик
Нет никаких чистых функциональных языков в природе
Что значит "чистый"??
Без ввода и вывода?
nordic-gamer.jpg47 Кб, 1172x659
179 1543024
>>43021

>Без ввода и вывода?

180 1543025
>>43018

>ООП - не имеет никакой основы.


Блять, тебе уже сказали, основа ООП - это вызов полиморфных функций без сурс-код зависимости на эти функции, либо опровергай и показывай, где такое практиковалось вне ООП, либо иди нахуй.
181 1543027
>>43021
Вот тебе чистая программа на си:
int main() {return 0;}
182 1543039
>>43025
Охуеть. Сделать джамп по пойнтеру, сохраненному в памяти на кусок кода - это неебаться парадигма

>>43027
Ну и где она чистая?
return 0 - отдается ОС
183 1543043
>>43039

>Охуеть. Сделать джамп по пойнтеру, сохраненному в памяти на кусок кода - это неебаться парадигма


Именно так, простой перенос поинтера породил целую нахуй парадигму, задоминировавшую профессию, потому что это оказалось пиздец как удобно и практично. Претензия в чем?
184 1543045
>>43043
ОГО!
Джамп по пойнтеру - оказывается и есть ООП!
Нунихуясебе!
А я и не знал!
185 1543053
>>43045
ОГО!
Иммутабельность - оказывается и есть ФП!
Нунихуясебе!
А я и не знал!
186 1543054
Есть локальный стейт (условный ST) и глобальный (условный IO).
Локальный стейт не мешает никому. Функции, меняющие внутри себя локальные переменные ссылочно прозрачные, в многопоточной среде он никак себя не проявляет, и вообще никаких головных болей не несет.
Глобальный стейт мешает всем, он него один гемор и лучше избавляться.

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

То есть если бы кто-то хотел сделать язык с сылочной прозрачностью, на котором можно было бы программировать, в нем бы были циклы. Но целевой аудитории под такой язык нет. Потому что
1. Грантоедам нужно именно отсутствие локального стейта, для доказывания унылых теорем
2. Практики и так знают, что глобальный стейт - зло, и минимизируют его использование
187 1543060
>>43053
Иммутабельность - это иммутабельность.
Она хороша там где хороша
Хоть в ФП, хоть в голом асме
188 1543064
>>43054

> Но проблема ФП-языков


Нет никаких "ФП-языков вообще", кроме как в твоем воображении
189 1543068
>>43064
Тебе еще рано разговаривать со мной
190 1543069
>>43060
А джампы по поинтеру плохи тем, что...?
191 1543072
>>43043
В том что ты в глаза не видел первые ООП-языки
192 1543076
>>43069
Джамп по пойнтеру - это асм инструкция
Она ничем не плоха и не хороша.
Такая же как операции сложения или обращение к памяти
193 1543081
>>43054
Нет, шизоид, легкодоступного стейта в функциональных языках нет не из-за заговора жидов, а потому что ты хуй проведешь границу между локальным и глобальным. Если 10 из 11 функций программы могут оперировать над куском стейта(например передавая его друг другу), но глобально он технически недоступен, то это локальный стейт или какой?

>хвостовая рекурсия вместо циклов


Рекурсия в современных ФП-языках считается плохой практикой и вместо нее есть дохуя и больше способов пройтись по массиву, которые синтаксически ничем от цикла не отличаются.
194 1543084
>>43081

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


Эта граница называется ссылочной прозрачностью. Если функция не ссылочно прозрачна, она меняет глобальный стейт, иначе - локальный.

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


Осталось придумать, нахуя нужно эмулировать циклы, когда есть циклы
195 1543088
>>43081

> Рекурсия в современных ФП-языках считается плохой практикой


Чо за охуенные новости?
Что за современные ФП-языки??

Рекурсия - это буквально "повторение", как "повторение" может быть плохой практикой, ты ебанулся?
Грамматики человеческих языков рекурсивны, как без рекурсии-то блять??
196 1543109
>>43084
Ну то есть цель одна - ссылочная прозрачность, но в одном языке ты говоришь "По умолчанию в моем языке все ссылочно прозрачно, кроме вот этих специально отведенных мест, которые выделяются и должны считаться исключением, а не правилом", а в другом "По умолчанию в моем языке нет ссылочной прозрачности, но в принципе вы можете ее сделать, если хотите, а если не хотите, то и поебать, меняйте стейт". Какой из них лучше добивается поставленной цели?
>>43088

>Что за современные ФП-языки??


Scala, Erlang/Elixir, Clojure

>как "повторение" может быть плохой практикой


Неинтуитивно, ненаглядно, плохо выражает намерение, заебешься отлавливать ошибки, если алгоритм чуть сложнее школьного вычисления чисел фибоначчи.
197 1543162
>>43088
С рекурсией есть одна проблема, что она жрёт стек, и при большой вложенности его просто может распидорасить. Поэтому при возможности лучше использовать хвостовую рекурсию, если компилятор умеет её оптимизировать, а ещё лучше - стараться её избегать.

Рекурсия вместо простого цикла - часто говно, для этого существует много различных функций высшего порядка, типа map, foldl и пр. Это гораздо проще прочитать.

А в плане выразительности с рекурсией бывает очень даже удобно описывать какой-нибудь обход вложенных данных произвольной глубины и т.п.
198 1543169
>>42971
Друг, она уже описана: http://t3x.org/clc/index.html
199 1543190
>>43162

>для этого существует много различных функций высшего порядка, типа map, foldl и пр.


Прикол в том, что рекурсия это зачастую и есть велосипедирование map, fold или filter.
Тред утонул или удален.
Это копия, сохраненная 22 января 2020 года.

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

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