Сохранен 27
https://2ch.hk/pr/res/534169.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Что не так в текущих языках программирования

 Аноним 23/08/15 Вск 22:20:11 #1 №534169 
14403576118140.png
Обсуждаем недостатки текущих языков программирования.

Неявное использование GOTO
Классическая процедурная парадигма базируется на принципе: сверху-вниз.

GOTO - оператор, позволяющий передать управление в любой участок кода. Например так
10: Написать Привет
20: Goto 10

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

Роль GOTO выполняют такие операторы как switch, break, continue, различные лупы и даже элементарный вызов функции это GOTO > NameFunction.

Таким образом, мы получаем макаронный код якобы без единого GOTO.

Низкоуровневый IF
Все мы помним развилки, которые довольно наглядно демонстрируют на всех кафедрах, связанных с программированием. Знаменитая вилка является ключевым элементом всех языков. Без условия нет управления и не может быть принятие решений, по крайней мере понятных обычному человеку.

Но есть одно НО. Шли годы, а if оставался ifом. Что в нём не так, а то, что это до сих пор низкоуровневый костыль.

Уже давно появились устоявшиеся схемы
А. Одно условие - один вариант действий
Б. Одно условие - множество вариантов действий
В. Несколько условий - один вариант действий
Г. Несколько условий - множество вариантов действий

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

Это даже сложно описать, ещё сложнее использовать if в современной жизни, потому что он устарел. Даже простая связка с goto делает его более удобным switch, более приспособленным к современности.

Самый же простой вариант if это просто вызов goto из одной функции в другую. Например func1() => func2()
Аноним 23/08/15 Вск 22:39:51 #2 №534188 
>>534169 (OP)
Слишком толсто
Аноним 23/08/15 Вск 22:40:18 #3 №534189 
14403588188360.jpg
Выучи хаскель и успокойся.
Аноним 23/08/15 Вск 22:41:08 #4 №534191 
14403588682840.jpg
Выучи хаскель и успокойся.
Аноним 23/08/15 Вск 23:17:20 #5 №534230 
>>534169 (OP)
>Роль GOTO выполняют такие операторы как switch, break, continue, различные лупы и даже элементарный вызов функции это GOTO > NameFunction.
Ну не совсем.
«switch» это безымянная функция, например.
«break» это возврат из безымянной функции, например.
>Но есть одно НО. Шли годы, а if оставался ifом.
У кого как.
«if» это безымянная функция, например.
Аноним 23/08/15 Вск 23:30:58 #6 №534239 
>>534230
тащемта
Аноним 24/08/15 Пнд 00:43:51 #7 №534266 
>>534169 (OP)
Ты забыл еще упомянуть очень распространенный случай неявного GOTO когда по умолчанию (точнее если в строке отсутсвуют специальные операторы) после (к примеру) 7 строки всегда выполняется 8 строка, после 12 выполняется 13 и так дальше.
Аноним 24/08/15 Пнд 02:28:50 #8 №534271 
>>534169 (OP)
goto плохо оптимизируется, точнее в ряде случае ведет себя вообще как volatile-подобная инструкция.

про if отчасти правда - но он и не используется особо, в ручном коде - try/catch, в генерируемом - свитчи, процент вручную написанных if'ов не велик.
Аноним 24/08/15 Пнд 08:01:01 #9 №534301 
>>534169 (OP)
>Шли годы, а if оставался ifом.
Работу if-ов уже давно делают виртуальные функции.
Аноним 24/08/15 Пнд 14:05:26 #10 №534459 
>>534301
поясни, пожалуйста
Аноним 24/08/15 Пнд 14:14:58 #11 №534463 
>>534459
Делаешь пандорический захват, лифтишь в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляешь результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.
Аноним 24/08/15 Пнд 20:59:55 #12 №534613 
>>534301
Выбор нужного варианта производится не с помощью if/switch, а непосредсвенно переходом по указателю на функцию. Вот, например:
http://gameprogrammingpatterns.com/state.html
Аноним 25/08/15 Втр 18:38:35 #13 №534912 
>>534613
Много ты знаешь реальных программистов, которые следуют этому паттерну?
Аноним 25/08/15 Втр 18:45:46 #14 №534916 
>>534912
Ни одного. Но если твой вопрос подразумевает "много ли программистов используют этот паттерн", то дохуища. Те же жабаблядки полным составом, например.
Аноним 28/08/15 Птн 22:11:51 #15 №536187 
>>534459
Я думаю, он имел ввиду полиморфизм скорее. Например есть ситуация:
Zalupa, Hooy, Dick extends Penis
Object something;
if (something instanceof Zalupa) {...}
else if (something instanceof Hooy) {...}
else if (something instance of Dick) {...}
Т.е. для разных типов выполняются разные ветви исполнения. А можно так:
void doSome(Zalupa arg){...}
void doSome(Hooy arg) {...}
void doSome(Dick arg) {...}
и в нужно месте просто вызываешь метод для своего объекта:
Object something;
...
doSomething(something);
Аноним 28/08/15 Птн 23:39:43 #16 №536219 
>>536187
И визитор.
Аноним 29/08/15 Суб 02:16:22 #17 №536250 
Давно ждал такого треда. Жалко только что ОП ебанашка.
С++ Никак не завезут модули, нахуй так жить
Javascript Новый стандарт - 2nd system effect как он есть; жаль еще до рефайментов как в руби не додумались
Go блевок в сторону PLT сообщества; доказательство того что быдлокодеры любое говно прожуют
может еще допишу попозже
Аноним 29/08/15 Суб 03:21:44 #18 №536255 

>>534613
Конечные автоматы охуенная вещь
Аноним 29/08/15 Суб 04:25:11 #19 №536260 
>>536255
+1

магазинные аффтоматы тоже
Аноним 29/08/15 Суб 07:50:53 #20 №536276 
> Что не так в текущих языках программирования
Разработка удобного, достаточно общего способа выражать отношения между различными типами сущностей (то, что философы называют «онтологией»), оказывается невероятно сложным делом. Основная разница между той путаницей, которая была десять лет назад, и той, которая есть сейчас, состоит в том, что теперь множество неадекватных онтологических теорий оказалось воплощено в массе соответственно неадекватных языков программирования. Например, львиная доля сложности объектноориентированных языков программирования — и мелких невразумительных различий между современными объектно-ориентированными языками, — сосредоточена в том, как рассматриваются обобщенные операции над взаимосвязанными типами.
Аноним 29/08/15 Суб 09:11:09 #21 №536282 
1. Старые языки - старые. В них нет многих хороших фич, а ввод этих фич довольно стремен из-за обратной совместимости.
2. Новые языки - фичи есть, нет кода, все пользуются старыми. При этом победит обязательно какое-нибудь говно.
Аноним 29/08/15 Суб 21:30:01 #22 №536549 
>>534169 (OP)
Анон с ебучими вложенными коллбэками, это ты?

Вызов функции это не goto. Почему? Потому что можно использовать функции без побочных эффектов. Халявное распараллеливание и кэширование. Вдобавок код намного удобнее проверять.

>не нравится if
Используй cond как в моем любимом лишпе!
cond (условия) (действия)
(условия) (действия)
Аноним 18/09/15 Птн 13:01:49 #23 №545003 
>>536250
Поддержу.
Аноним 18/09/15 Птн 13:03:28 #24 №545004 
>>536276
Родственный тред
https://2ch.hk/pr/res/544557.html
Аноним 18/09/15 Птн 13:04:53 #25 №545005 
>>536276
И еще подобный
https://2ch.hk/pr/res/544846.html
Аноним 18/09/15 Птн 13:07:44 #26 №545008 
Там я тоже пытаюсь разобраться, что в этом говне не так.
Аноним 18/09/15 Птн 13:45:14 #27 №545037 
>>534169 (OP)
>return - оператор, позволяющий передать управление в любой участок кода. Вызываемая функция может делать совсем не то, что мы ожидаем. Функции не нужны.
>int, char, float, double - минимум 4 абсолютно разных оператора "+", хотя на деле встречается гораздо больше вариантов, при этом каждый из них суммирует кучу байт, и в итоге получается сложноперевариваемый ассемблерный код. Сложение не нужно.
Ну ты понел.
comments powered by Disqus