Функциональное программирование – это критика структурного подхода к программированию, не выходящая за его пределы.
Вы критикуете спектакль, находясь на сцене театра. Вы и есть спектакль. У функционального программирования есть три слабых места: 1) Истеричное отрицание простых структурных идей само стало большой идеей. Анти-императивщики, анти-объективщики и все другие «анти-» упороты не меньше своих противников. 2) Философия монадоебства и нигилизма не работает при столкновении с людьми иной парадигмы. Ты не объяснишь хачкелистам или пацанам с района, что ты ПРОСТО ПРОГРАММИРУЕШЬ, нет, они сами тебе всё объяснят. И объясняют, хуле, весь интернет в этих ебаных монадах с эндофункторами. 3) Если замаскировать серьёзный архитектурный шаблон под ебаную шутку, то спектакль заметит только шутку. На этом поприще наибольшего успеха добились Хикке и его друзья. Показательно, что перешагнуть первые два пункта они так и не смогли. Отсюда следует, что наиболее важными вопросами сейчас являются физическая слабость нашей с вами культуры структурного программирования перед лицом иноверцев и отсутствие каких-либо глобальных идей о том, что со всеми нами будет происходить дальше. Если вы увязли в функциональном мышлении и хотите преодолеть его, то вы должны отталкиваться от этих трёх пунктов.
То есть вы должны перестать быть фунциями везде, иметь в голове и на практике какой-то глобальный структурный проект, направленный на улучшение настоящего и обеспечение будущего, а также обязаны уметь маскировать свои истинные планы от врагов, то есть от медиа вроде хабр/тинькофф/мфти и сопутствующих структур. Картинка zipjpeg, как rarjpeg, только zip, ну, вы понели.
>>1689985 (OP) >Если вы увязли в функциональном мышлении и хотите преодолеть его, то вы должны отталкиваться от этих трёх пунктов. И зачем ты всё это написал? Ты функцианальщик, который всеми силами пытается обсуждение поднять?
Всем похуй на это функциональное программирование, кроме десятка наркоманов-хаскелистов. Всем даже обсуждать это лень, эта тема ебёт не больше, чем итоги выборов в Демократической республике Конго.
>>1692342 Пофиксил, получился C#. Это лучший язык эвар, мощный, как плюсы, но безопасный, как джава. На котором можно писать всё, от сайтов и приложений на мобилках до операционных систем. Можно писать сложные основанные на ООП архитектуры, сохраняя высокую абстрактность функционального программирования через LINQ. А какая там стандартная библиотека, это нечто. Воистину язык, на котором написана вселенная. Язык молодых богов.
>>1692371 После котлина шарп смотрится как кусок говна. Не то что я как малолетний долбаеб накидываю на вентилятор, просто реально такое императивное впечатление, как будто его снова дизайнер какой-то маня-мечтатель.
Ну, а еще это фундаментальная проблема и путаница - где кор, где не кор. Открываешь страницу с примером и хер пойми откуда это.
Сравнивать поделку маняфантазирующих хипстеров, и продукт от одной из самых успешных и крупных компаний мира... Ты это серьезно или просто троллить пытаешься? Твой кокотлин обосрется при первой же серьезной задаче, а хипстеры-смузи хлебы заебуться пилить костыли, что кончится как и всегда - хипстеры уйдут пилить очередной язык, который решит все проблемы старых языков, даже не поставив памятника своему котлину, который будет нужен только долбоеба-кабанчикам, которые выбрали его как основной язык их продукта.
>Ну, а еще это фундаментальная проблема и путаница - где кор, где не кор.
Так это решают, как и все проблемы связанные с шарпом. Еще пара месяцев и .NET Core c .NET Framework заменят просто на .NET цифра. Первым будет .NET 5, который уже находится на стадии Preview 3
>>1692474 >Сравнивать поделку маняфантазирующих хипстеров Ты сейчас о тех годах, когда слизали все с джавы и маня дизайнеры (или скорее всего один дизайнер языка) напердолили поверх такого неудобного сахара, что легче сейчас в С++ вкатиться??
Ты бы лучше бежал библиотеки писать на шарпе, а холиварить. Это куда бы больше пользы языку принесло, а то как шаром покати.
>>1692474 >Так это решают Нужно только потерпеть. Понял. Ты наверное из тех кто и джаву 2024 года ждет, когда туда добавят сахар из котлина?
Самое забавное, они играть попенсорс начали тогда, когда шарп стал уже и не нужен. Унылая попытка спасти комьюнити, ориентируясь на то коммьюнити, которое воспринимает МС в штыки. Самый тупой маркетинговый ход, который я видел.
Не нужно, месяц назад только .NET 5 Preview 1 был, а сейчас уже Preview 3. В этом и заключается главный плюс языка, который поддерживается крупным IT гигантом с налаженными процессами разработки. В отличие от твоей жабы, она поддерживает и развивает свой продукт, а не пытается удержаться на рынке за счёт легаси дерьма.
>на то коммьюнити, которое воспринимает МС в штыки >на то коммьюнити
Тебя и твоих одноклассников? Потому что тонны коммитов и помощи со стороны опенсорс комьюнити говорит об обратном.
>>1692709 > В этом и заключается главный плюс языка, который поддерживается крупным IT гигантом с налаженными процессами разработки. Ты не забыл какой хохотач был когда твой ИТ гигант открыл код своего калькулятора?
>>1692752 А судьи кто? Те самые писатели мувисерчеров и тудулистов? Почему другие крупные разработчики молчали? Потому что они понимали, что у них код не лучше. Добро пожаловать в реальность. Можно еще сорсы .NET Core открыть и охуеть от говнокода, который нарушает все эти принципы солид, не следует каким-либо паттернам проектирования, использует не эффективные алгоритмы и т. п. Но вот к чему это, если мы понимаем, что в любом сорс коде творится тоже самое?
>>1692709 Ты так слюной брызжешь потому, что шарп загибается и твоя защитная психологическая реакция (бомбит) сводиться к тому чтобы убедить всех (а точнее себя самого) что все хорошо? Не стоит. Шарп все. Будут там, конечно, еще твое легаси тянуть, но на этом история языка со странным сахаром закончится.
>В отличие от твоей жабы, она поддерживает и развивает свой продукт Это ты про дополнительные отступы и фигурные скобки для неймспейса, или про необходимость javaDoc писать в xml? Не, братюнь, такого развитие нам не надо. Шарп очередной маня-язык с маня-фантазией автора, там полно WTF-решений и ненужного бойлерплейта.
>>1692709 >Тебя и твоих одноклассников? Как же ты быстро скатился до тухлой демагогии.
>Потому что тонны коммитов и помощи со стороны опенсорс комьюнити говорит об обратном. Да, конечно, будет кто-то на этом говне писать, что за черно-белое мышление, даже на коболе или перле еще кто-то пишет. Тут речь именно про большинство. Ты даже не представляешь сколько ресурсов тратилось чтобы это говно студентов накормить и некоторые до сих по едят же, в угоду синдрома утенка.
>NET 5 Preview 1 был, а сейчас уже Preview 3 Ну все, ждем теперь точно. Что ты хочешь с этим релизом для себя увидеть? Кроссразработку окон что-ли? Да хера тебе, а все остальное есть в кор.
А еще подожду когда МС захватит рынок мобильной разработки, и выпустят переиздание IE 6
>Потому что тонны коммитов То-то я смотрю что нехрена никто либ на этом чуде не пишет. Посмотри статистику библиотек с 1000 и более звезд гитхабе и удивишься, что даже меньше чем за 10 лет, на говно Го написали больше топовых библиотек, чем на шарпе. Настолько он ненужен.
>>1692156 Ты какой-то псих. Ходишь с черным просмоленным мешком по ЖЖ и собираешь все функциональное говно, которое видишь. А потом приходишь и домой и ммм... выливаешь это дерьмо в ванную и тебя поглощает единый организм ФП. Для чего ты это делаешь? Ты безработный и у тебя нет личной жизни, поэтому ты тратишь свое драгоценное время на эту суету?
>>1690039 >Всем похуй на это функциональное программирование, Хуй знает, я уже лет 5 пять пишу в продакшн ФП-онли код, меня окружают только ФП-шники, одно время работал в конторе, где весь фронт (30 чел) и бэк (20 чел) был на ФЯ. Вообще забыл про ОО-быдло, я думал оно повымерло уже всё нахуй.
Хотя по местной подмывальне не стоит судить, тут >50% аудитории - вкатуны, что не писали коммерческий код ни разу в жизни. Ещё 30% студентов с laba2.cpp, среди которых есть воннаби хакиры и особо активные шизики, рассказывающие, что "мир императивен" и прочее говно. Ещё есть особо вонючая кучка дененератов, сующихся в каждый тред, рассказывающие охуенные истории про смерть того или иного языка, но вместо технической экспертизы, которую дать они не могут ввиду отсутствия опыта, толкают низкопробный маркетинговый булщит уровня дешёвой журнашлюшки. Ну и оставшиеся - обычное быдло, что когда-то успешно вкатилось на мейнстримовой параше в локальный бадишоп и нихуя за его пределами не видело. То есть да, в такой клоаке про ФП тут почти никто нихуя не знает, и оно никому не нужно, вполне обоснованно не нужно бтв.
Позорище! А ведь когда-то тут сидел Стасик, ФП-элита шурша фраками, попивая марочный коньяк, обсуждала зигохистоморфные препроморфизмы наконец...
Я считаю вы долбоёбы со своими компиляторами, высокоуровневыми языками и виртуальными машинами совсем забыли, что такое регистроёбство и не-проеби-указатель- стека-вство.
>>1696176 Ты жжёшь >где весь фронт (30 чел) Сколько нужно функцианальщиков, чтобы реализовать фронт?
Запустите проект среднего размера на ФП-онли языках, и все выпускники университетов мира надолго будут обеспечены работой.
Глянул ХХ, в 77 только одна контора хантит хасклеров, предлагает от 40 до 80 тр., ещё пара контор ищет кого-нибудь на другой язык, но просит знание чего-нибудь функционального.
Я так и думал, что фунциональщики забиваются в какой-нибудь подвал, забивают на контакты с остальным миром, и сообща в 30 человек реализовывают какую-нибудь веб-морду.
>>1696188 Это ты зря. Если плюсовик не может сказать глядя на код, через регистры будут переданы переменные в функцию реализованную на STL или через стек, то это не плюсовик. Его в жизни на работу не возьмут.
>>1696176 >А ведь когда-то тут сидел Стасик, ФП-элита шурша фраками, попивая марочный коньяк, обсуждала зигохистоморфные препроморфизмы наконец... А потом пришёл пиэм и погнал вас мудаков прод вилкой чистить, чтобы pixel perfect было! "я уже лет 5 пять пишу в продакшн ФП-онли код" - так и скажи, что React-макака
>>1689985 (OP) Напиши powerset для массива на любом императивном ЯП хотя бы в пару строчек. Вот на Haskell: powerset = filterM (\x -> [False, True])
Ты обосрешься, и начнешь распинаться про то, что под всё уже написаны библиотеки. Но в твоей куцой стандартной библиотеке этого нет, и тебе предстоит интересный квест поиска нужного кода на гитхабе/пакмане, а затем прописывание инклюдов, которые занимают больше места, чем реализация этой функции на хацкеле. Это я уже молчу про то, что тащить тяжелую библиотеку ради одной функции считается плохой манерой.
А разгадка проста: ЯП - это инструмент, и задача программиста - правильный выбор инструмента. А ты, макака, будешь писать на чём скажут, восхваляя любое дерьмо в попытках оправдать его поедание.
>>1696448 Ну вот, очередной ФПшники в ответ на правду смог выдать только >пук На работу вас не берут, из /math вас прогоняют фундаменталисты, остается только в ЖЖ срать, искать виноватых и пить портвешок.
>>1696332 > Напиши powerset для массива. И часто тебе приходится это делать при написании прикладных программ? Хаскелль только для задач типа этой или факториальчиков и годится. Большинство реальных задач так не решается, и хаскелль там только хуже сделает. Это как задрачивать матан и диффуры, а потом увидеть, что большинство задач решается только численно, а не красивой формулкой > в пару строчек
>из /math вас прогоняют фундаменталисты Там одна студентота и околоматематические шизики сидят, нахуй туда вообще ходить?
>остается только в ЖЖ срать >ЖЖ Он ещё жив хоть?
>и пить портвешок Не портвешок, а марочный коньяк, одна бутылка которого стоит, как месячный доход владельца галеры, где ты будешь чавкать на своём пыхапе до конца жизни.
>>1696491 В реальности ты просто необразованный тупой ублюдок, которому не достает самореализации. Скорее всего, ты еще и несчастлив в личной жизни и поэтому сбегаешь от реальности в свой ФП манямирок, чтобы избежать необходимости решать проблемы. Ты всего лишь жалкое трусливое чмо как 95% ИТшников.
>>1696491 + судя по тому, как ты напираешь на употребление портвешка, ты не поднялся выше первого уровня потребностей (пить, есть, спать, дрочить) и самоактуализироваться и заниматься творчеством ты не способен. Поэтому ты представляешься мне обычным быдланом и дегенератом как большинство посетителей этой доски. Ты подохнешь шавкой, которой нужно признание такого же тупого быдла, потому что не способен развить свой огрызок личности до третьего уровня потребностей - в творчестве.
>>1696528 Это твоя проекция, так как твой огрызок личности почти не развит, ты можешь строить примитивные суждения только предполагая, как бы ты сам поступил в некой ситуации. Так что ты в своем посте выдал лишь то, что в ИТ очень мучается твое эго, так как ты шавка и выше написания говнокода развиться не способен.
>>1689985 (OP) >Истеричное отрицание простых структурных идей В каких месте структурные идеи в ФП отрицаются? Наоборот, структурность повышается за счёт системы типов и контролем над сайд-эффектами. Напоминаю, что структурное программирование - это был первый шаг к снижению неконтролируемой мутабельности, до этого было принято пердолить глобальные переменные.
>Анти-императивщики Нет никакого "анти-", есть когда удобно и когда нет. В хаскеле do-нотация читается так же, как обычный императивный код, и используется там где нужна. Но очевидно, что она нужна не всегда, а там где идёт работа с IO и стейтом, например. А вот бизнес-правила по своей природе чисто декларативны и писать/читать их в виде отношений удобнее, чем в виде пошаговых инструкций, мутирующих стейт.
>Философия монадоебства и нигилизма Шта?
>И объясняют, хуле, весь интернет в этих ебаных монадах с эндофункторами. По-моему это всё давно не актуально и осталось где-то в 2015. Самое смешное, что новыми баззвордами в 90% случаев тогда сверкали всякие пхп-ники, которые на хаскеле ничего сложнее факториала не писали. Все эти "монады в картинках" и прочие дегенеративные высеры для хабробыдла - как раз их рук дело. Те кто что-то реально писал на хаскеле крутились в весьма закрытой тусовке.
>Если замаскировать серьёзный архитектурный шаблон под ебаную шутку, то спектакль заметит только шутку. На Дальше твои шизоидный пост не читал, ты как будто недавно прочитал высер это долбоёба (а гидебор именно долбоёб) и пытаешь пришить этот к бред ко всему подряд, в данном случае к программированию, то есть занимаешься типичным гуманитарным словоблудием, вместо написания чего-то по существу. Мой совет, читай поменьше ситуиционистов и других долбоёбов типа гидербора, маркузе и т.д. и побольше изучай тему о которой хочешь что-то сказать.
>>1696486 >при написании прикладных программ? Для тебя всё, кроме GUIшек для CRUDов - не прикладное и, соответственно, не нужно? Или ты просто обосрался и не смог даже простую функцию над массивом написать?
Powerset (булеан) - одна из базовых операций над множеством. Основы теории множеств сейчас изучают, кажется, ещё в школьной программе. Более прикладное вычисление сложно представить. Haskell - не для CRUDов, а для прикладных вычислений. Но ты предлагаешь полностью выбросить ФП, и вместо одной компактной строчки писать это в 10 при помощи двойного лупа.
Нравится формочки шлепать - пожалуйста, шлепай. Но оставь продвинутые ЯП для программистов, которые подбирают инструмент под задачу, а не как ты - задачу под инструмент.
Перестань орать "Ненужно!" на всё то, что ты не можешь понять.
>>1696332 Пусть нам известна формула мощности всех подмножеств. Тогда можно сказать, что единица бита в номере некоторого подмножества, это информация, принадлежит ли данный элемент данному подмножеству. Из чего следует решение:
((array) => { const result = [[]];
const arrayPower = Math.pow(2, array.length); for (let index = 1; index < arrayPower; ++index){ const subset = []; for (let i = 0; i < array.length; ++i){ const subsetPower = Math.pow(2, i);
if (index & subsetPower){ subset.push(array); } }
result.push(subset); }
return result; })([1,2,3]) // в консоле браузера
Твоя ебанина с powerset, это надо знать эту функцию. Как она себя ведет. Что выдает. То есть можно сделать и так: >lib.getAllSubsets(array) Разница в том, что если getAllSubsets выполнена в структурном стиле, можно понять как она работает. Поведению powerset придется учиться. Скольким еще функциям нужно учиться, чтобы понимать, что у тебя происходит в программе, в плоть до того самого бита? Ответ очевиден.
>>1696332 > А ты, макака, будешь писать на чём скажут, восхваляя любое дерьмо в попытках оправдать его поедание. Ты тоже, когда съедешь от мамки с борщами и устроишься на работу
>>1692709 Как поддержала так и убьёт. Проблема с мс в том, что всё что они делают служит цели анально вендорлокнуть тебя. Им бы стоило .нет продвигать как стандартную платформу для виндовс программ, думаю Балмер так и задумовал. Вместо этого они считай что убили платформу.
>>1692562 C# вдохновлялся делфями и это видно невооружённым глазом. И это есть круто. Часто вижу заблуждение будто бы шарп жаву копирует. Идёт оно от маркетинга мс нацеленного на менеджеров и жавп макак, чтобы те не пугались.
По тому же принципу многие яп(включая шарп) заявляют что они на Си похожи. Видимо интелект среднего погромиста где-то между картошечкой и хлебушком.
>>1693455 Всё что угодно лучше джавы. Джава была слишком современна для своего времени(изначально создавалась под "интернет вещей") но в 2009 уже безвозвратно устарела. Чего только стоит пердолинг для самых простых вещей вроде подключения библиотеки. И сторонние средства управления проэктом сборкой отладкой. Да ну нахуй. Это такой расжиревший умственно отсталый кобол С++ получается.
>>1698708 Предустановлена конечно же. И даже вместе с компилятором шарпов. Не знаю, какой тебе маркетинг нужен. Ты документацию вообще пробовал открывать? https://docs.microsoft.com/en-us/windows/apps/desktop/ - там на выбор, как правило, либо .NET, либо кресты.
>>1698592 >Скольким еще функциям нужно учиться, чтобы понимать, что у тебя происходит в программе, в плоть до того самого бита? Давай посмотрим. Вот функция: powerset a = filterM (\x -> [False, True]) a
Я упростил для императиво-макак, добавив две буквы a, т.к. каррирование им не знакомо. Идем дальше - filterM принимает функцию для сравнения (True - оставляет, False - выбрасывает) и список (монада). (\x -> [False, True]) это анонимная функция (лямбда), в ней мы берем элемент списка, и создаем список, где этот элемент есть, и где его нет. Т.к. эта анонимная функция применяется к каждому элементу, мы имеем список списков, где в каждом элемент либо выброшен, либо оставлен.
Вообщем, простой пример недетерминированного вычисления. А скомпилируется это, конечно, в простой перебор. Неужели тебе так сложно представить луп, который проходится по первому элементу, создавая два списка - где элемент есть, и где элемента нет; второй проход берет результаты первого, и ещё раз их раздваивает на список, где второй элемент есть, и где его нет; и так каждый последующий проход. Можешь себе это представить в виде разветвлений, которые компьютер создает на каждом этапе - в итоге получится красивое фрактальное дерево.
Алсо, твой пердимонокль на JS у меня почему-то не заработал. Тестировал на лисах. Нужен хром? Или ноду поднять?
>>1698640 По-твоему это читабельнее того однострочника? Алсо проиграл с этих битхаков умножения на 2, которые компилятор шарфика до сих пор не умеет оптимизировать сам (т.к. оптимизация переложена на рантайм, а в рантайме cmp с 2 при каждом умножении слишком дорого).
Я уже не говорю о том, что функция на Haskell - это generic, и будет работать с любыми типами данных в списке (хоть тульпами). Но про производительность я не умолчу: все эти Where и Select - это вызовы в рантайме, а Join на иммутабельных стрингах это вообще O(n^2) ад.
>>1698823 Хотел две строчки, получил две строчки. А для читабельности можно в функцию обернуть.
> битхаков умножения на 2 ващет это битхак возведения двойки в степень
> Я уже не говорю о том, что функция на Haskell - это generic, и будет работать с любыми типами данных в списке В шарпе тоже. Эти две строчки даже в генерик-функцию оборачиваются без изменений.
> все эти Where и Select - это вызовы в рантайме Ну а где же ещё? Или ты планируешь, что список будет всегда один и тот же?
> а Join на иммутабельных стрингах это вообще O(n^2) ад Поэтому чтобы они не был адом, придумали StringBuilder — который, насколько я знаю, используется внутри string.Join хотя я сам лично не проверял
Впрочем, это всё меркнет на фоне I/O внутри Console.WriteLine, который в этой программе, скорее всего, тормозит больше всех.
>>1698823 > читабельнее того однострочника И то, и это - одинаковое нечитаемое говнище. Даже если записывается компактнее, нихуя это читабельнее не становится. Это как регекспы vs строковые функции.
>>1698963 >получил две строчки А почему не в одну? Там ведь можно перенос удалить. А по официальным стайлгайдам там перед каждой лямбдой перенос будет.
>А для читабельности можно в функцию обернуть А, ты из этих, которые насрали говнокода, размазали тоненьким слоем по функциям и думают, что он говнокодом от этого перестал быть.
>Ну а где же ещё? Компайл-тайм, т.к. массив известен заранее. Кресто-, D- и Nim-господа смотрят на тебя неодобрительно. А если серьезно, реализация всей это дрисни в .NET максимально неэффективна, foreach от 2 до 5 раз проигрывает обычному for без указателей, Where и Select делают целые деревья вызовов и являются медленее даже самой наивной их реализации.
>это всё меркнет на фоне I/O внутри Console.WriteLine Нет. Это всё меркнет на фоне подгрузки библиотек .NET для вызова любой из функций.
>>1699042 >одинаковое нечитаемое говнище Для тебя - да. Но я вон на пару постов выше объяснял, как оно работает. Недетерминированные вычисления достаточно понять один раз, зато дальше ты сможешь в пару строчек уделывать простыни соответствующего кода на любом императивном языке.
>>1699058 > достаточно понять один раз И всё равно это требует куда большей квалификации, иначе к каждой строчке придётся писать по 10 строчек комментариев, чтобы понял не только автор, но и все, кто будет читать. Ты вот пытался читать исходники GHC? Сильно понятно, что там происходит?
Императивный код пишут максимально тупо и понятно не от хорошей жизни, а от того, что чем код сложнее, тем сложнее найти тех, кто сможет его потом поддерживать. Да, тупо. Но понятно. Поэтому чистое ФП никогда не взлетит.
>>1699067 >чтобы понял не только автор, но и все, кто будет читать Такие функции пишутся людьми, способными понять недетерминированные вычисления; обычными пользователями только используются. Но даже так в ФЯП есть гарантии чистоты (что функция не вернет сначала одно, потом другое для одних и тех же аргументов), и ошибки в 3 словах допустить сложнее, чем в 33.
>Но понятно Тебе та дрисня понятнее? Код на хацкеле требует понимания чуть более сложных концептов. Но за это ты получаешь кучу ништяков в виде быстрого, краткого и читабельного (при наличии соответствующих знаний) кода. Но, опять же, каждый осиливает то, что может - макаке ты концепты сложнее лупов объяснить не сможешь.
>Неужели тебе так сложно представить луп, который проходится по первому элементу, создавая два списка - где элемент есть, и где элемента нет; Так это не сложно, однако требуется некоторое обучение поведению монад и функции filterM. Обучение стоит дорого. Держать в память головы поведение всех функций еще дороже. Скорее всего даже дороже, чем все что ты можешь написать функционально.
>>1699045 >А почему не в одну? Там ведь можно перенос удалить. Можно и одну, но любители перфокарт будут недовольны — за 80 символов вылезет.
>А, ты из этих, которые насрали говнокода Какая задача, такой и код.
>Компайл-тайм, т.к. массив известен заранее. А компилятор хаскелля на эфире что ли работает, ему процессорное время не нужно, чтобы развернуть эту залупу?
>реализация всей это дрисни в .NET максимально неэффективна Алло, мы говорим об алгоритме со сложностью O(2^n) ну или что-то типа того, кого вообще при этом ебёт эффективность конкретных Select-ов
>Это всё меркнет на фоне подгрузки библиотек .NET Нет, это всё меркнет на фоне времени, которое нужно программисту, чтобы поднять палец, и нажать Run
>>1699645 >1. Ты не понимаешь ООП. Ну-ну. Я уверен, что на шарфике кода больше, чем ты, написал. Правда, не на модных версиях; писал на C# 5.0, сейчас уже 8.0 вышел (я кучу добавлений пропустил вроде паттерн матчинга; но LINQ уебищный, если мне надо будет под .NET функциональщины понаписывать - я лучше F# выберу).
>2. Дрочиш на микрооптемизации, что уже оче плохой знак. Просто потому, что шарперы обычно любят рассказывать, какой у них быстрый ЯП. Они не учитывают, что говнокод будет медленный на любом языке.
>3. Ты не понимаешь зачем вообще нужен рантайм. Для интерпретации байткода CIL.
>>1696332 Справедливости ради, это красивый, но очень неочевидный код, говорю как человек использующий ФП в разных видах уже лет шесть. И это еще хорошо что filterM - известная функция из стандартной библиотеки. Я бы хотел в таких местах видеть комментарий объясняющий принцип работы. Кроме того, подобный код очень редко переживает изменения требований, когда они начинают не настолько хорошо ложиться на уже имеющиеся функции. В этом случае приходится вручную писать что-то вроде >>1698640, что кстати вполне себе ФП-стиль и читается намного лучше императивного решения. Но он тоже не абсолютно очевиден и я бы все равно добавил комментарий. >>1699045 >насрали говнокода, размазали тоненьким слоем по функциям и думают, что он говнокодом от этого перестал быть Вообще-то инкапсуляция говнокода или просто сложного кода вроде этого самого powerset действительно облегчает жизнь в разы. >>1698811 >filterM принимает функцию для сравнения (True - оставляет, False - выбрасывает) >в ней мы берем элемент списка, и создаем список, где этот элемент есть, и где его нет >мы имеем список списков, где в каждом элемент либо выброшен, либо оставлен. Ты уверен что сам понимаешь как это работает? Из твоего объяснения я бы ничего не понял, если бы сам не знал что filterM делает. >А скомпилируется это, конечно, в простой перебор. Какой именно перебор? Там будет битовая арифметика с индексами? Очень сомневаюсь.
>>1700452 Вполне себе пробовал. Для небольших программ всё ещё лучше C# с его уебищным LINQ и тоннами бойлерплейта. Ясно, что для матана и остальных чисто функциональных задач F# будет куда хуже Haskell, но определенные задачи решать можно.
>>1700509 Очевидно, наговнокодить модулей под .NET, потом склеить все вместе в одну программу. F# ощущается приятнее C# - гораздо слаще и меньше бойлерплейта. Как инструмент он лучше, и хоть шарперы и жалуются, что там нельзя байтоёбствовать, unsafe с указателями я видел всего в полутора проектах. Туда, где важна скорость, я .NET тащить точно не буду, так что остаются только всякие utility-модули для шарповских UIшек.
>>1700739 >когда ты на шарпе не можешь производительный код писать Писать-то я могу. Вот только сама по себе транспиляция в байткод, сборщик мусора и линкование с библиотеками .NET не предполагает максимальной скорости. А если придется выкинуть эксепшены, ручками выделять память через stackalloc и отказаться от модных фишек по типу LINQ - то не вижу причин не делать это на чистом C (там хотя бы макросы есть и человеческий interop без тонн бойлерплейта).
C# - не silver bullet, у него есть свои области применения. Не стоит лезть туда, где язык слаб - в time-critical приложения.
>>1700774 > то не вижу причин не делать это на чистом C Чувак, по-моему, ты сильно лурка перечитал. То ты на F# пишешь, то на чистом си. Расскажи хоть про свои проекты кроме laba1 и laba2, где ты использовал что-то из своего манястека, кроме C#.
>>1700789 Сомневаешься в моих знаниях? Проверь их для любого из этих языков: ассемблер x86, C, C#, Nim. Могу и по-хаскелевски чего-то спиздануть, но это скорее хобби, как и всякая экзотика вроде APL.
>где ты использовал что-то из своего манястека Я учился не конкретному ЯП и даже не конкретному стеку, а абстрактному программированию в вакууме. Освоить синтаксис конкретного языка не так сложно, когда ты уже попробовал все парадигмы.
Программирование для меня - средство решения проблем, а ЯП - инструменты.
>>1700859 >Сомневаешься в моих знаниях? Ещё как. > Программирование для меня - средство решения проблем, а ЯП - инструменты. Так я не понял, и где ты использовал что-то кроме шарпа из своего манястека? Какие, так сказать, проблемы уже решил?
>>1700774 >не предполагает максимальной скорости Что такое "максимальная скорость программы"? Как её измерить, и как узнать среднюю и минимальную?
>Не стоит лезть туда, где язык слаб - в time-critical приложения. На шарпе пишут хайлод очень даже успешно. Что у тебя там за блядь тайм критикал приложения такие?
>то не вижу причин не делать это на чистом C (там хотя бы макросы есть и человеческий interop без тонн бойлерплейта) Ты бредишь.
> ручками выделять память через stackalloc Ты шарпа не знаешь. Чтобы писать высокопроизводительные решения ненужно унсейв во все поля. А stackalloc используют чаще для обеспечения постоянства времени аллокации чем какой-то мифической скорости.
> на чистом C Пытаясь создать сложное ПО на С ты закончишь построением костыльных С++, после чего на их основе создашь костыльный рунтайм и сборщик мусора, по типу шарпа, только в миллион раз говнокоже и гаже.
>>1700918 >Что такое "максимальная скорость программы"? Открой benchmarksgame. Видишь его хоть где-то в первой десятке? Или бенчмарки не бенчмарки, а нативщики говна в жопу залили?
>На шарпе пишут хайлод очень даже успешно. Хайлоад на ЯП со сборщиком мусора. Молодец, хорошо пошутил. Давай ещё пасту про "хайлоад на питоне" притащи.
>А stackalloc используют чаще для обеспечения постоянства времени аллокации чем какой-то мифической скорости. По-твоему вызов функции ядра через несколько прокладок абстракций дороже отнятия нужного количества байт от указателя на стек? Ты идиот?
>Пытаясь создать сложное ПО на С По-твоему я буду писать всю программу на C, а не просто вынесу хотспоты в либу, написав остальное на чем-то неспешном вроде твоего C#?
>>1700933 >Открой benchmarksgame. Видишь его хоть где-то в первой десятке? Или бенчмарки не бенчмарки, а нативщики говна в жопу залили? Я тебя спросил, что такое "максимальная скорость приложения", а ты на говно изошелся с какими-то бенчмарк играми. Ты меня напугать "спортивным программированием" хочешь? Еще раз, что такое "максимальная скорость приложения"?
>Хайлоад на ЯП со сборщиком мусора. Молодец, хорошо пошутил. Давай ещё пасту про "хайлоад на питоне" притащи. Ты не разбираешься в вопросе. Не понимаешь зачем нужно правление памятью и как это влияет на производительность.
>По-твоему вызов функции ядра через несколько прокладок абстракций дороже отнятия нужного количества байт от указателя на стек? 1. Я такого не писал. Ты на чей пост вообще отвечаешь? 2. Почему тебя так волнует деалокация? 3. Без абстракций невозможно писать ПО.
>По-твоему я буду писать всю программу на C, а не просто вынесу хотспоты в либу, написав остальное на чем-то неспешном вроде твоего C#? По моему ты молодой и горячий, считаешь что уже всё знаешь. Лет через 5-10 пройдет. Или конечно шиза и графомания.
>>1700959 >Еще раз, что такое "максимальная скорость приложения"? Скорость выполнения, очевидно. Максимальная - у рукописного машинного кода (ассемблер) с многопоточностью по возможности. В реальности почти всегда будет достаточно и C/++/Rust с интринсиками для хотспотов.
>как это влияет на производительность Негативно. Отслеживание числа ссылок (reference count) не бесплатно. Сборщик мусора вообще достаточно дорогая абстракция.
>Почему тебя так волнует деалокация? Потому что если на стеке, то она бесплатна - mov esp, ebp. А на хипе это вызов функции из kernel32 через пару слоев абстракции .NET.
>Без абстракций невозможно писать ПО. Возможно, но не нужно в случае, если тебе не важна скорость. Если скорость таки важна - используешь меньше абстракций (вроде C#) для тех частей, где она важна.
>>1700976 > на хипе это вызов функции из kernel32 через пару слоев абстракции .NET. Проснись, хип обращается к ядру очень редко. Большинство alloc/dealloc выполняются из локального кэша, даже без взятия блокировок.
> Burst does not support : > string as this is a managed type > catch > try/finally (which will come at some point) > foreach as it is requiring try/finally (This should be > supported in a future version) > Storing to static fields except via Shared Static > Any methods related to managed objects (e.g string methods...etc.)
>>1701141 >Без нормальных доков любой проект нечитаемый. Померить бы как-нибудь, читаемость компонентов, написанных на чистом фп и на чистом сп. Например, насколько та или иная библиотека становится популярной. Стабильной. Используемой. Расширяемой. То есть люди, помимо автора, которые что-то с этими компонентами делают, очевидно поняли, как эти компоненты работают.
>>1702656 Если к автору доки для фс библиотеки добавить ещё исследователя читаемости и гугл бота то получим матожидание читаемости любой доки к фп либе равное 3 трём.
>>1702708 Мне бы хотелось что-то вроде: Смотрим функциональные компоненты. Смотрим структурные компоненты.
Смотрим количество различных людей, сделавших форк+коммит по этим компонентам. (форк+коммит значит что человек понял что делает компонент и изменил его в нужную ему сторону). Я смотрел на гитхабе несколько чисто фп проектов, они почти все писались в одно ебало. Рыть/смотреть больше, как-то не особо хочется, может есть какая-то визуализация по этому животрепещущему вопросу.
The original .net garbage collector was written in Common Lisp
Аноним27/05/20 Срд 03:09:58№1704000129
>The original .net garbage collector was written in Common Lisp and automatically translated to C++. All newer versions are then based on the C++ code.
>>1704006 >Язык в мат аппарате которого кроме функции вообще ничего нет >Язык в котором кроме функции есть только атом который можно представить как функцию >И причем тут ФП? Да вот хуй его знает.
>Lisp - ЯП общего назначения Ты путаешь элитарное борщехлебство и функциональное программирование. В первом случае получается троллинг тупостью на двачах. Во втором готовые промышленные решения.
>>1704014 Ты еще про скобочки расскажи. И что special forms, коих много, это никакой не синтаксис, например, а атомы такие, или функции. У Лиспа же "нет синтаксиса" 'лэть. А промышленно чего же не использовать. ЯП общего назначения, гибкий, богатый, с отличными коммерческими реализациями (аж две), стабильным стандартом языка и качественными библиотеками в оных.
>>1704014 >Язык в мат аппарате которого кроме функции вообще ничего нет >Язык в котором кроме функции есть только атом который можно представить как функцию С разморозкой! Там коммон лисп, помойка всех концепций программирования.
>>1704739 Для перебора всех возможных случаев в конечном множестве. Например у нас есть список предпочтений в фильмах. Нам надо перебрать все возможные подмножества этих предпочтений. Чтобы потом разбить множество людей на множества предпочитающих одинаковое. Делал такое. Только использовал библиотеку.
>>1705114 >>1705148 Но ведь если в массиве 32 элемента (всего!), то наборов получится уже больше 4 миллиардов! Их нереально отфильтровать без хаков типа sql-ных индексов. Или такие хаки есть?
>>1706061 Варианты можно генерировать и обрабатывать по одному. Памяти для этого достаточно, грубо говоря, 32 бита, чтобы хранить номер текущего варианта.
>>1706091 Особая форма = встроенный макрос. При вычислении особой формы она "сама решает", вычислять или нет аргументы, и как именно. Перед вычислением обычных функций eval вычисляет им все аргументы.
>>1706061 >то наборов получится уже больше 4 миллиардов! Их нереально отфильтровать Пф. А ты на Цп запусти а не на утюге. Ты представляешь вообще скорости современных ЦП? Там миллиарды герц тактовые частоты и супер оптимизированные инструкции.
100 злых прогеров, противоречащих друг другу в каждом сообщении... А где правда-то? В чём все друг с другом согласны??
Я, например, даже парадигмы друг от друга не отличаю в языках. Это весьма трудно для понимания. Разве функцию нельзя свести к процедуре и наоборот? Всё очень близко друг к другу. Как мне кажется, функциональщина ближе к математике, а процедурщина - к информатике. В таком разрезе языки просто решают либо разные задачи, либо просто удобны людям с разным складом мышления. И о чём тогда спор?
>>1707650 >функциональщина ближе к математике Функциональщина - срез математики и информатики, зачастую с поправками на среднюю архитектуру компьютера.
>процедурщина - к информатике Императивщина - набор инструкций для абстрактной (или реальной) машины. ТруЪ-императивщина - ассемблер/машкод, остальное - абстракции поверх, т.к. большинство ЯП не дают чёткой гарантии исполнения, только результата (а это уже элементы декларативщины).
>>1707650 Никто ни с кем не согласен. Думаешь, сотни языков по десятку подходов в каждом просто так придумали?
И всё же есть сочетания, за знание которых платят бабло прямо сейчас, и если ищешь работу, на них стоит поставить в первую очередь. Через несколько лет эти сочетания будут другие, и несколько лет назад тоже были другими. Наконец, есть и такие, которые, вероятно, не взлетят никогда, в их защиту тут выступает анон, пишущий с сажей. Но это не потому, что он правда так считает, а потому что он очень жирный тролль.
Ну а если учишь язык не для работы, то изучай что угодно, хоть декларативное программирование на коболе.
>>1706372 Вы какие-то странные. 32 элемента множества я взял просто как размер int, если это делать на C. Пусть будет 100 элементов, это тоже очень мало, но полного перебора никто из нас уже не переживет. Тут нужны какие-то способы одним ударом срезать сразу много лишних вариантов без их проверки и показать, как эти способы красиво реализуются в ФП.
>>1689985 (OP) Давайте устроим батл. Пишем программу шашки на языке с вашей любимой парадигмой. Требования: - минимизировать зависимости от жирных фреймворков, в идеале использовать простую библиотечку для рисования графики и обработки ввода - соблюдение правил русских шашек - отображение допустимых ходов - режим игры с человеком и ИИ (ИИ просто делает случайный допустимый ход) - анимация движения (шашки не должны перемещаться скачками) -
>>1707650 СП - программирование без прямой передачи управления. ООП - программирование без косвенной передачи управления. ФП - программирование без присваивания.
СП самая молодая парадигма. Если брать математику, то разработка программ похожа в ней на решение задач в рамках теории множеств. Ты создаешь массивы. Ты создаешь структуры. Ты накладываешь на них ограничения. Ты косвенно передаешь управление с помощью указателей на функции.
ООП появился где-то между. Если брать математику, то разработка программ похожа на решение задач в рамках теории графов. Ты мыслишь объектами и диаграммами, компонентами, твоя задача правильно выбрать узкие места в архитектуре, чтобы приложение было гибким там где надо( используешь интерфейс) и жестким там где не надо. Все что тебе нужно для ООП это представление графа связей различных компонентов приложения, ты уже не мыслишь множествами, ты мыслишь графами.
ФП самая старая из парадигм. Если брать математику, то это похоже на то, что пытается сделать с математикой маняматик Николя Бурбаки. Это попытка уместить в абстракциях реальность. Попытка программировать наиболее общими вещами: функциями. В функциональном программировании ты не решаешь задачу, ты не мыслишь ни графами ни множествами. Ты мыслишь абстракциями. Ты не знаешь что может скрываться за конкретным математическим преобразованием. Ты не сможешь выразить то, что не выражается композицией известных твоей голове функций. Программируя функционально, ты собираешь лего.
>>1709724 ну как обычно, тупо хронология без малейшего погружения в тему
функциональное программирование идёт параллельно процедурной параше, в то время как структурное, затем модульное и наконец ОО программирование - это надстройки над процедурной парашей
я много уёбков повидал, что спорили где раньше появилось оопе в симуле или в смолтоке, но ты со своим алголом прямо бьёшь все рекорды мань, мейнстримовое ООПе, которое используется по сей день появилось с крестов и окончательно закрепилось в обероне джаве, а высеры глубокой старины никого не ебут важно как шло реальное развитие индустрии, а не кто и когда из академических пидарасов раньше пукнул очередным базвордом, поэтому даже этот полушуточный высер https://lurkmore.to/_/118731#mws_RUfeJmg намного точнее передаёт реальных ход развития парадигм, чем твоя энциклопедичная хуита
>>1709759 >ну как обычно, тупо хронология без малейшего погружения в тему Без малейшего погружения, это думать что появление какой-то парадигмы равняется времени, когда оно стало популярно среди разработчиков ПО. >но ты со своим алголом прямо бьёшь все рекорды мань Так это не я. Это Оле Йохан. Ему наверное надо было делать открытие тогда, когда все стали работать в рамках ООП? >важно как шло реальное развитие индустрии, а не кто и когда из академических пидарасов раньше пукнул очередным базвордом >lurkmore.to В голос с информационной цыганщины.
>>1710010 >чтобы доказать Что могут доказать эти сферические кони в вакууме? Чтобы нарисовать треугольник на опенгл, надо 100 строчек кода, а на вулкане - 1000 строк. И что, это доказывает, что вулкан хуже опенгля?
>>1710157 >на опенгл, надо 100 строчек кода, а на вулкане - 1000 строк >И что, это доказывает, что вулкан хуже опенгля? Да, вполне исчерпывающее доказательство, что Vulcan хуже OpenGL для рисования треугольников.
>>1710183 Если стоит задача нарисовать один треугольник, то да, опенгл победил. Но это тот самый конь в вакууме, никому не надо рисовать один треугольник. Надо эффективно использовать возможности современных видеокарт и тут очевидно побеждает вулкан.
>>1710368 >Если стоит задача Так в этом и прикол специальной олимпиады, что есть конкретная задача. А дальше сравниваются инструменты под эту задачу - т.е. языки программирования.
>никому не надо рисовать один треугольник Один треугольник - не надо, а вот условные фигуры из квадратов (тетрис) вполне кто-то может захотеть нарисовать (хотя бы в качестве практики). И сюда нет смысла тащить вулкан, т.к. под эту задачу данный инструмент подходит хуже.
>Надо эффективно использовать возможности современных видеокарт В эффективность железа никто (кроме эмбеддеров) не упирается с начала нулевых. Vulcan - очередная абстракция поверх железа. Упираются только в стоимость разработки - чем ниже уровень, тем она экспоненциально выше; самых нижних уровней игровая индустрия уже лет 20 не достигает никто даже на хотспотах. Кроме разработчиков таких вот абстракций, конечно.