LINUX.ORG.RU
ФорумTalks

Стопами Дейкстры

 ,


3

3

В свое время Дейкстра запретил оператор goto и это очень положительно сказалось на культуре программирования. Вспомните классический Бейсик где управляющих конструкций было фактически две - условный переход и безусловный переход, а все циклы работали через метки. Помимо приведения циклов в божеский вид отказ от обязательного использования меток имел и другие последствия, опять же сугубо положительные - появилась возможность нормально использовать локальные переменные, стали использоваться исключения и т.д.
А ведь до нашего времени дожил еще атавизм, убивающий всю читабельность - цикл for. Самое смешное, что в современных языках он не нужен и даже вреден. Цикл for плохо распараллеливается. Вложенные циклы очень сильно снижают читабельность кода, при том что делают что-то тривиальное - например складывают массивы.
Господа, если язык в 21м веке требует для сложения двух матриц писать цикл, а не складывать их тупо как два числа - a+b, то язык говно. Уже больше 30 лет по планете шагает ООП, оно же позволяет переопределять операторы и делать продвинутые типы данных даже если язык изначально говно. Вспоминаем Вирта - «программы = алгоритмы + структуры данных».Отказ от for научил бы лиц, называющих себя программистами, что структуры данных это не только скалярные переменные и, в лучшем случае, списки и строки.
Когда нужен именно цикл, периодическое выполнение команды, то есть итераторы и их аналоги (вроде функции apply в R), опять же, for не нужен. Да, может найтись 1% случаев, когда применение for оправдано, но ведь и goto до сих пор используют там, где это действительно нужно.

★★☆☆☆
Ответ на: комментарий от atrus

Забавно, что у бейсика куда больше общего с ассемблерами

Ну а чего ждать от языка, интерпретатор которого занимает 8 килобайт?

DNA_Seq ★★☆☆☆
() автор топика

Уже больше 30 лет по планете шагает ООП

и considered harmful :)

slackwarrior ★★★★★
()
Ответ на: комментарий от Deleted

ну почему же... подбираешь циклы с нужным кол-вом итераций — и норм :)

slackwarrior ★★★★★
()

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

Какой-то современный вариант оскопления.

Solace ★★
()
Ответ на: комментарий от Stanson

если взять нейросеть с 2 входами и 1 выходом, и обучить её что при входном паттерне 1;1 на выходе должен быть 0, а во всех остальных случаях 1, то мы получим элементарный логический элемент И-НЕ.

т.е. (list zip list) map --- это нейросеть? :)

Rastafarra ★★★★
()
Ответ на: комментарий от Northsoft

И более стопицот других алгоритмов.

Вы все еще реализуете общеизвестные алгоритмы ручками?

DNA_Seq ★★☆☆☆
() автор топика
Ответ на: комментарий от Rastafarra

т.е. (list zip list) map --- это нейросеть? :)

Если сможешь это обучить какому-то другому произвольному поведению - то да. :)

Основное свойство нейросети - способность обучаться. Твой пример необучаем в принципе.

Stanson ★★★★★
()
Ответ на: комментарий от slackwarrior

Встраиваемые системы и даже просто системный софт это дай бог 1% всего существующего кода.

DNA_Seq ★★☆☆☆
() автор топика
Ответ на: комментарий от Stanson

или несколько циклов, если компилятор/интепретатор умеет в параллельность

Вот именно, в несколько при необходимости.

Хочется без циклов, goto, и прочих совершенно необходимых для обеспечения работы обычной архитектуры вещей - возьми себе, например, нейросеточки и играйся с ними.

Где я подобное утверждал? Я говорил о двух целях - повысить читабельность кода, вложенные циклы нечитабельны по определению. И использовать более абстрактные типы данных - списки, словари, очереди и тд.

DNA_Seq ★★☆☆☆
() автор топика
Последнее исправление: DNA_Seq (всего исправлений: 1)

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

nerfur ★★★
()
Ответ на: комментарий от Nervous

Под капотом все сводится к jmp, нескольким вариантам условных переходов и бейсик-подобному переходу к процедуре.

DNA_Seq ★★☆☆☆
() автор топика
Ответ на: комментарий от DNA_Seq

Встраиваемые системы и даже просто системный софт это дай бог 1% всего существующего кода.

Это только если впасть в маразм и считать каждую накорябанную и накопипащенную веб-макаками вебню уникальным кодом. Да и то не факт, на самом деле.

Stanson ★★★★★
()
Ответ на: комментарий от DNA_Seq

И? Это отменяет факт, что ты заигнорил построение фразы, на которую отвечал, и ухватился за знакомые слова «десктоп» и «суперкомпутир»? Или то что эти встраиваемые системы и системный кот могут быть важнее твоего десктопа и суперкомпутира считающего погоду на Марсе, на случай, когда Маск туда начнет яблони завозить?

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 2)
Ответ на: комментарий от Stanson

если впасть в маразм и считать каждую накорябанную и накопипащенную веб-макаками вебню уникальным кодом

Еще неизвестно, где больше макак и копипаста - в вебе или эмбеде.

tailgunner ★★★★★
()
Ответ на: комментарий от Stanson

В одной своей коммерческой софтине использую (пока в виде R&D) нейросеть для расчёта состава красок по спектру образца. Нейросеть обучена по образцам спектров отдельных пигментов из которых делают краски. В 99% случаев результат (рецепт краски и соответствие его спектра спектру образца) весьма удовлетворителен, и часто лучше результатов других методов.

Основное свойство нейросети - способность обучаться. Твой пример необучаем в принципе.

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

Rastafarra ★★★★
()
Ответ на: комментарий от DNA_Seq

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

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

В общем не надо думать, что ваш любимый ПСюк или смартфон это и есть всё ПО.

ixrws ★★★
()
Ответ на: комментарий от DNA_Seq

Конечно. Тебя ж не учат живой речи с ее неправильностями :) Ты не услышишь от препода «ain't no» и «kinda» — и первый же живой заказчик с местечковым прононсом спустит твое изучение в унитаз :)

slackwarrior ★★★★★
()
Ответ на: комментарий от ixrws

Писать эмбадед как веб-сервис глупо, но не менее глупо писать веб-сервисы как будто это эмбадед. Эмбадед в последние годы тоже,к стати, разжирел. В соседней комнате, например, стоит девайс под управлением windows embedded с восьмиядерным процессором и 32 гигами оперативки.
Ну а по поводу количества кода - до 2006го года рекорд по числу написанных строк кода удерживал Кобол.

DNA_Seq ★★☆☆☆
() автор топика
Ответ на: комментарий от slackwarrior

Конечно. Тебя ж не учат живой речи с ее неправильностями :) Ты не услышишь от препода «ain't no» и «kinda»

Шозабред. В любом нормальном курсе есть ain't no, kinda, gonna, betcha, watcha и еще куча всего.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Не бред, а жиза :) Корпоративные курсы «индийского, ирландского, реднекского и вхатевер английского» именно поэтому вводят, что люди учились на «нормальных» курсах, где всего этого не было или считалось некомильфо.

slackwarrior ★★★★★
()
Ответ на: комментарий от DNA_Seq

Эмбадед в последние годы тоже,к стати, разжирел.

Как что-то оправдывающее :)

slackwarrior ★★★★★
()
Ответ на: комментарий от DNA_Seq

Где я подобное утверждал? Я говорил о двух целях - повысить читабельность кода, вложенные циклы нечитабельны по определению. И использовать более абстрактные типы данных - списки, словари, очереди и тд.

Архитектура компьютеров на которых это всё будет работать не позволяет реализовать это всё без циклов и переходов. И никаких абстрактных типов данных она тоже не разумеет. Так что это всё будет просто самообман, ценой тормозов итогового продукта. Например, map не прервёшь досрочно, в нём нету break/goto, и он в любом случае будет тупо и бессмысленно крутить в цикле этот миллион объектов который ему скромят, вместо того, чтобы вывалиться в самом начале по какому-то условию.

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

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

Есть и другие альтернативные архитектуры, всякие там клеточные автоматы и прочая шняга.

В общем, если не нравится for/goto/while/if-then-else и перекладывание байтиков - тебе туда, подальше от обычных компов.

Stanson ★★★★★
()
Ответ на: комментарий от Rastafarra

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

Ну не всё так радужно, но суть ты понял. То, что занимается анализом спектра можно обучить, например, рулить гуйнёй, или переводить с мандаринского на латынь. Разумеется в рамках количества входных и выходных параметров. Вопрос только в организации обучающих паттернов, чтобы они стали съедобны для данной конкретной реализации «серого ящика» - нейросетки. На самом деле, для получения более адекватных результатов или увеличения скорости и качества обучения может потребоваться изменение параметров нейросети - заменить, например, сигмоид на какую-нибудь другую функцию, или изменить размер скрытого слоя.

Но в общем и целом, да, спектроанализатор можно переквалифицировать в переводчики.

Stanson ★★★★★
()
Ответ на: комментарий от tailgunner

Сообщение удалено tailgunner по причине 5.1 Нецензурные выражения (-7)

Воу-воу... Стандарты полемики хвостогуни :) Особенно ему обидно, что он не обосновал свое утверждение про «бред» :)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

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

tailgunner ★★★★★
()
Ответ на: комментарий от DNA_Seq

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

К тормозам программы перекладывание байтиков вручную не приводит (если не использовать современный процессор как 8-битный 80-х годов). Просто на разработку программы уходит больше времени, так как надо сначала осмыслить задачу, потом подобрать подходящие алгоритмы, потом написать код и проверить, всё ли так, при необходимости исправить, дополнить и т.д. Это ещё упрощённая цепочка.

Quasar ★★★★★
()
Ответ на: комментарий от tailgunner

Повторяю для вахтеров: большинство людей учили «нормативному английскому», потому что ain't no и прочие «эбониксы» — просторечия и говора (и редкий препод это не подчеркнет), но живые люди как раз на «правильном английском» почему-то не говорят :) И я лично видел ситуации коммуникационного конфуза (и на реальные курсы «индийского английского» ходить не пришлось — но курсы-то были, для «углубленно интересующихся» как бэ), прекрасно понимая, что сказал собеседник в отличие от посетителей «нормальных курсов».

slackwarrior ★★★★★
()
Ответ на: комментарий от tailgunner

Не, удалить то сообщение решил лично ты — и это была твоя обидка на слово на букву «з» :)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

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

Quasar ★★★★★
()
Ответ на: комментарий от tailgunner

Еще неизвестно, где больше макак и копипаста - в вебе или эмбеде.

Пока что в вебе, однозначно. Ибо в вебе искусственно занижен порог вхождения посредством использования всяких новомодных язычков. Но это только пока, вон, уже даже в ESP8266 node.js запилили, да и питонизация всяких однокристалок не дремлет. Про варианты бейсика с мимикрией под синтаксис разынх недоязычков типа той «жабы» что в микропроцессорах на кредитках я вообще молчу. Так что скоро и в эмбеддед весь этот трэшак полезет по полной программе.

Stanson ★★★★★
()
Ответ на: комментарий от Quasar

Я не против, если на тех суперкомпутерах не параллелят при помощи прагм openMP :) Я против обобщений «раз много высокоуровневого, то нужное 1% долой»

slackwarrior ★★★★★
()
Ответ на: комментарий от DNA_Seq

DNA_Seq> Встраиваемые системы и даже просто системный софт это дай бог 1% всего существующего кода.

Это софт чуть ли ни для каждой железяки сегодня.

Quasar ★★★★★
()
Ответ на: комментарий от DNA_Seq

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

infine
()

Рановато ты начал, но дурь знатная, одобряю. Смотри только, чтобы до 9го хватило.

redgremlin ★★★★★
()
Ответ на: комментарий от tailgunner

tailgunner> Еще неизвестно, где больше макак и копипаста - в вебе или эмбеде.

Пока в вебе. Но тенденция в сторону embedded активно смещается из-за пиара манагерского IoT.

Quasar ★★★★★
()
Ответ на: комментарий от slackwarrior

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

Quasar ★★★★★
()
Ответ на: комментарий от slackwarrior

Повторяю для вахтеров: большинство людей учили «нормативному английскому»,

Повторяю для шлангов: помимо «нормативного», в любом приличном курсе дают просторечные и сокращенные варианты выражений - типа ain't и gonna.

просторечия и говора (и редкий препод это не подчеркнет)

Совсем недавно ты врал, что:

slackwarrior> Ты не услышишь от препода «ain't no» и «kinda»

tailgunner ★★★★★
()
Ответ на: комментарий от Stanson

Еще неизвестно, где больше макак и копипаста - в вебе или эмбеде.

Пока что в вебе, однозначно.

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

tailgunner ★★★★★
()
Ответ на: комментарий от DNA_Seq

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

Давай пруф на это ололо-суждение.

Пока я вижу только обратное. Берём, к примеру, ffmpeg и видим: везде перекладывания байтиков и ассемблерные вставки. Считаешь, без этого работать будет быстрее?

EXL ★★★★★
()
Ответ на: комментарий от tailgunner

Нечего возразить — просто удаляй предыдущее сообщение :), я уже понял, что возразить тебе нечего, кроме эмоций типа «бред» — ты теперь просто пытаешься обосновать свой «бред» и использование адм. ресурса в частной беседе (был бы ты белый и пушистый — если не участвовал бы, а токмо «модерировал тут», а тут сам влез — и давай правки в беседу вносить, на формальных основаниях :)

Совсем недавно ты врал, что:

Ты не услышишь от препода «ain't no» и «kinda»

Нет, не врал, это тебе хочется так думать, — преподу задают вопрос те кто в теме, зайдя на огонек типа «установочных занятий», препод говорит что-то вроде «это плохой негодный английский, мы вас плохому учить не будем» (те кто в теме больше к нему не ходят :)). А потом тот же препод под довлением обжегшихся «учеников» организует какие-нибудь «восприятие пиджин инглиша на слух». Преподы меняются — подход один и тот же :)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Нечего возразить — просто удаляй предыдущее сообщение :)

Поплачь еще о нем.

Совсем недавно ты врал, что:
Ты не услышишь от препода «ain't no» и «kinda»

Нет, не врал

Да? Ну как скажешь.

препод говорит что-то вроде «это плохой негодный английский, мы вас плохому учить не будем»

Не юли. Одно дело жаргон гетто, которого вы наслушались в рэпаке, а другое - обычные просторечные обороты ain't no.

те кто в теме больше к нему не ходят :)

Бгг. Вопрос о том, зачем они пришли, такие продвинутые, поднимать бессмысленно.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Не однозначно.

Однозначно. Пока совершенно однозначно.

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

Бгг. Слишком толсто. Вебофреймворки - отличное пособие на предмет того, как ни в коем случае нельзя писать софт. Жирное тормозное говно, которое толкает неокрепшие умы потребителей производить ещё более тормозное и жирное говно с использованием этих фреймворков. Вообще весь этот кромешный звездец с вебдванолем который даже на топовых конфигурациях умудряется торомзить - на 100% заслуга этих ублюдочных фреймворков.

а эмбеддед - царство велосипедов с костылями. Ну и копипаста, да.

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

Stanson ★★★★★
()
Ответ на: комментарий от DNA_Seq

Ох уж эти по определению. Нифига, читаемые при нормальном форматировании и именовании переменных. И О Чудо, те же правила распространяются на другие методы перебора, без правильного форматирования и имён - будет нечитаемо совершенно.

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

Взять какой-нибудь скажем list.Each({ Hello(item) }). Сильно читаемее стало относительно for(ind in list) hello(ind) ?. И это ещё если язык более-менее развитый и умеет неименнованные блоки кода, а если это любой современный широко распространённый язык, к которому заплатами приклеили абстрактные типы, то без слёз вообще ничего не выйдет.

ixrws ★★★
()
Ответ на: комментарий от DNA_Seq

методики изучения иностранных языков

Какие конкретно? Что за вода

Solace ★★
()
Ответ на: комментарий от Stanson

Любой софт - отличное пособие на предмет того, как ни в коем случае нельзя писать софт

/fixed

а эмбеддед - царство велосипедов с костылями. Ну и копипаста, да.

Одно дело, когда велосипедят, костыляют и копипастят мало-мальски образованные люди

Бгг. Слишком толсто.

tailgunner ★★★★★
()
Ответ на: комментарий от Stanson

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

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

ixrws ★★★
()
Ответ на: комментарий от slackwarrior

Тебя ж не учат живой речи с ее неправильностями :)

То-то у нас никто толком языки и не знает в университетах.

Solace ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.