LINUX.ORG.RU

Продолжения и продвинутая управляющая логика

 ,


0

0

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

>>> Подробности

★★★

Проверено: Shaman007 ()

что-то я не впечатлился статьёй -- называть обработку исключений и т.п. "продвинутой логикой" ...

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

>что-то я не впечатлился статьёй -- называть обработку исключений и т.п. "продвинутой логикой" ...

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

Laz ★★★★★
()

Будто в универ вернулся. ИМХО бредовая статья: goto и исключения (а также break и continue) - вещи всё же разные: 2-е не нарушает структуру программы. Кроме того, что значит "продвинутая управляющая логика"?! У С, Пролога и Лиспа совершенно разная парадигма и логика программирования: как можно их сравнивать?! Где здесь "продвинутость" вообще?! По моему это просто повседневность обычного программиста.

GladAlex ★★★★★
()

Ну хоть что-то о надежном программировании.

Надоели уже программисты, лабающие проги, которые валятся от первого же исключения. Особенно среди питонщиков таких много...

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

>goto и исключения (а также break и continue) - вещи всё же разные: 2-е не нарушает структуру программы.

И дальше что? Бывает такая структура, что лучше бы ее вовсе не было.

>Кроме того, что значит "продвинутая управляющая логика"?!

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

AVL2 ★★★★★
()

> IBM_dW *** (*) (28.10.2008 12:09:50)

Пора уже привыкнуть не ходить по ссылкам при созерцании оного.

kir4
()

Блин, мой комментарий стерся!!! Он висел в течении часа потом изчез!!!

Глюки сервера, "модератор"? Что произошло?

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

Я видимо плохо сказал про IBM, поэтому автор стер.

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

>> Блин, мой комментарий стерся!!! Он висел в течении часа потом изчез!!! >> Глюки сервера, "модератор"? Что произошло?

Изыди, Анонимус!

anonymous
()

Статью надо удалить - примеры на джаве. А это изначально - бред!!!!!!

anonymous
()
Ответ на: комментарий от kir4

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

пора бы научиться думать за себя

anonymous
()
Ответ на: комментарий от AVL2

Надоели уже программисты, лабающие проги, которые валятся от первого же исключения. Особенно среди троллей таких много...

ты ошибся там.

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

>Статью надо удалить - примеры на джаве. А это изначально - бред!!!!!!

Примеры на схеме - дальше первой страницы прочитать надо было.

r ★★★★★
()

Судя по комментариям, статья на удивление неплохая :)

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

Не статья, а тихий ужас. Одни принципы объясняются на примерах одного языка, другие - другого. Видимо цель статьи не объяснить что-то, а загнуть пальцы: мол я и Java знаю и Prolog и Lisp и Python и Schema. Что до самих принципах, то над словами "продвинутая логика" я ржал долго.

anonymous
()
Ответ на: комментарий от AVL2

> Как доклад на пять минут в начале пары сойдет. Не более.

Мне даже страшно спросить, в каком вузе за пару объясняют 90/5 = 18 таких статей...

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

> Что до самих принципах, то над словами "продвинутая логика" я ржал долго.

Если в оригинале было advanced flowcontrol, то что смешного?

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

>что значит "продвинутая управляющая логика"?

Это и значит. У императивщиков ничего кроме маршрутизации по предикату нет. Ну и ООП внесла несколько вещей типа перегрузки, да в некоторых языках есть генерики.

Вот например в схеме continuation'ы и или в хаскеле цепочки комбинаторов (монады, стрелки) - пример "управляющей логики".

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

>Продвинутая логика не нужна. Для всех случаев хватит обычной булевой.

Ааааа, быдлокодеришка детектед.

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

"Джонатан Бартлет (Jonathan Bartlett) является автором книги "Программирование с нуля" - введения в программирование на языке ассемблера для Linux. Он является ведущим разработчиком в New Media Worx и занимается Web-приложениями (видео, киосками), а также настольными приложениями для клиентов. Вы можете связаться с ним по адресу johnnyb@eskimo.com."

Врядли такому человеку требуется "загибать пальцы".

Christmas_tree_Toys
()
Ответ на: комментарий от sv75

В вузе не объясняют 18 статей, как беременная женщина не рожает девятерых за девять месяцев.

Вопрос в глубине вопроса. Статьи в центре IBM какие-то ужасно неконкретные и неглубокие одновременно. Такое ощущение, что их пишут люди с дислексией...

AVL2 ★★★★★
()

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

Кроме того, "встроенные в язык" конструкции должны упрощать понимание того, что в программе происходит, а не усложнять. Из приведенных в статье примеров следует, скорее, обратное.

В общем, статью следовало бы назвать "(очень) Краткий обзор экзотических управляющих конструкций в разных языках"

anonymous
()
Ответ на: комментарий от annoynymous

>Такое ощущение, что статья переведена с одного инопланетного языка на другой.

made with alien technology ;)

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

>Вот например в схеме continuation'ы и или в хаскеле цепочки комбинаторов (монады, стрелки) - пример "управляющей логики".

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

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

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

если ты про комбинаторы - google://parser combinators

r ★★★★★
()

Подумалось, что при клупе было бы неплохо открыть собственный раздел новостей и пусть IBM_dW постит свои новости туда. Шоман их там будет подтверждать, а клубцы - обсуждать. Главное - всем профит: IBM_dW не будет получать негативных комментов от анонимусов и Шоман сможет продолжать подтверждать новости, при этом не выходя за пределы клуба, что бы не нарушать данное ЛОРу обещание. Пусть замкнётся круг.

anonymous
()
Ответ на: комментарий от r

>если ты про комбинаторы - google://parser combinators

нет, я про стрелки, arrows. с комбинаторами у меня как раз проблем никаких, Parsec я каждый день использую :)

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

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

xap4o
()
Ответ на: комментарий от anonymous

> Подумалось, что при клупе было бы неплохо открыть собственный раздел новостей и пусть IBM_dW постит свои новости туда. Шоман их там будет подтверждать, а клубцы - обсуждать. Главное - всем профит: IBM_dW не будет получать негативных комментов от анонимусов и Шоман сможет продолжать подтверждать новости, при этом не выходя за пределы клуба, что бы не нарушать данное ЛОРу обещание. Пусть замкнётся круг.

Вот на этом камменте меня конкретно заклинило. Раз 30 перечитал, прежде чем создал видимость понимания.

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

> Примеры на разный языках? Какой ужас, зачем же их столько знать если и одного-то много..

Действительно зачем? Либо ты знаешь 1-2 языка профессионально, либо больше, но на пионерском уровне. Пионеров нонче пруд-пруди, предпочитаю быть и работать с профессионалами.

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

>> Примеры на разный языках? Какой ужас, зачем же их столько знать если и одного-то много..

>Действительно зачем? Либо ты знаешь 1-2 языка профессионально, либо больше, но на пионерском уровне. Пионеров нонче пруд-пруди, предпочитаю быть и работать с профессионалами.

На профессиональном уровне - да, согласен, 1-2. Но иметь представление об основных фичах на базовом уровне стоит о 5-6 языках, причем разных - декларативных, функциональных, логических.. Неплохой (с моей точки зрения) набор для изучения: Си, Питон, Пролог, Эрланг, Лисп.
Да, ты не будешь использовать бОльшую чатсь этих языков. Но их знание сделает тебя лучшим программистом (вне зависимости от языка, на котором ты пишешь).

xap4o
()

Continuations фактически можно реализовать на любом языке в котором есть многопоточность. Так что если язык не поддерживает continuations напрямую, частично эту проблему можно решить если есть поддержка многопоточности.

anonymous
()

статья объясняет что такое continuations в схеме, причем так чтоб было всем ясно :) так что это пиар схемы.

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

anonymous
()
Ответ на: комментарий от xap4o

> На профессиональном уровне - да, согласен, 1-2. Но иметь представление об основных фичах на базовом уровне стоит о 5-6 языках, причем разных - декларативных, функциональных, логических.. Неплохой (с моей точки зрения) набор для изучения: Си, Питон, Пролог, Эрланг, Лисп.

Я не вчера родился и пишу программы уже лет 18. Например Пролог, и Лисп - это проблемно-ориентированные языки и тратить время на их изучение я не советую никому, кто не связан с конкретными предметными областями. Эрланг - это вообще экзотика. Примечательно, что в числе указанных вами нет ни Perl ни PHP, ни Java, то есть того на чём сегодня пишет абсолютное большинство и что максимально востребовано сегодня, а значит вы сильно оторваны от жизни. Python в данном случае хорошая альтернатива Perl, но всё-таки именно Perl предпочтительней знать системщику.

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

Лучшим программистом делает не знание языков, а знание методик программирования, умение проектировать программы, знание средств разработки и управления проектами. А вы говорите о кодировании, что к программированию имеет лишь косвенное отношение. Так что для начала рекомендовал бы поглубже узнать предмет, о котором вы собрались меня учить!

anonymous
()
Ответ на: комментарий от AVL2

> Статьи в центре IBM какие-то ужасно неконкретные и неглубокие одновременно. Такое ощущение, что их пишут люди с дислексией...

Нет, они просто не ожидают что это кто-то будет читать. Вот смотрите: статья про некие "Продолжения" - на пол-статьи даются определения каких-то исключений, локальных выходов, генераторов на пятоне и т.д. И только прочитав треть статьи, мы вдруг узнаём, что, оказывается "call-with-current-continuation — это функция языка программирования Scheme". Ну и на хрена я тратил время на пролезание через весь этот неразборчивый поток высказываний, если оказывается, что тема про какую-то фичу схемы? Подобный подход демонстрирует неуважение к читателям, показывает, что статья размещена для галочки: "мы помогли сообществу". А кто это будет читать, как и с какой пользой для себя - на это наплевать.

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

статья называется "continuations ...". вот в ней про continuations и рассказано. а то что continuations есть только в Схеме (хз может еще в лиспе) так это не проблемы Схемы.

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

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

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

Хм, Java я и вправду пропустил, не знаю почему. Как по мне, на примере явы можно хорошо понять ООП.

По поводу Перла: популярность и востребованность Перла идет на спад. Питон же - на пике популярности и продолжает расти. Имхо последний для изучения более предпочтителен. К тому же Питон учить писать читаемый код (не в пример Перлу)

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

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

>значит вы сильно оторваны от жизни

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

> предмет, о котором вы собрались меня учить!

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

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

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

Значит язык - говно! Алгоритмы ДОЛЖНЫ строится вне зависимости от языка, на котором их будут кодировать. Программирование - это как раз искусство построение алгоритмов. А записать алгоритм на конкретном языке - это кодирование! Советую различать, чтобы не выглядеть неловко!

> популярность и востребованность Перла идет на спад. Питон же - на пике популярности и продолжает расти.

Не спорю! Вот только в системных скриптах будет Perl, пока Питон будет столько же толстобезобразным и содержать не нужную в системе объектность. Python всё-таки более подходит для приложений, а скрипты - это Perl и только Perl.

> Я бы не назвал себя оторванным от жизни.

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

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

С того, что вы начинаете авторитетно навязывать своё мнение в тех вопросах, в которых ещё слабо разбираетесь! :)

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

> Например Пролог, и Лисп - это проблемно-ориентированные языки и тратить время на их изучение я не советую никому, кто не связан с конкретными предметными областями.

И на какую ж это предметную облать ориентирован LISP? Вернее, хотелось бы услышать, на какую он не ориентирован?

> Эрланг - это вообще экзотика.

А высоконагруженные высоконадёжные сервера на чём писать? На глобальном и надёжном Пыхпыхе?

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

> Ну и на хрена я тратил время на пролезание через весь этот неразборчивый поток высказываний, если оказывается, что тема про какую-то фичу схемы? Подобный подход демонстрирует неуважение к читателям, показывает, что статья размещена для галочки: "мы помогли сообществу". А кто это будет читать, как и с какой пользой для себя - на это наплевать.

Успокойтесь. Это не для вас написано. Это для тех, кто хочет что-то знать.

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

> И на какую ж это предметную облать ориентирован LISP? Вернее, хотелось бы услышать, на какую он не ориентирован?

А набрать в Википедии слабо? Там всё написано.

> А высоконагруженные высоконадёжные сервера на чём писать? На глобальном и надёжном Пыхпыхе?

На C. Ничего более глобального, надёжного и стандартного не существует! Грамотно написанная программа на С будет работать быстрее и надёжней всего скриптобарахла.

Но давайте всё-таки вернёмся от КОДИРОВАНИЯ к программированию! :)

А знать я как и говорил можно по-разному. Можно знать как написать Hello world на десятков языков, но не иметь представления о том, что алгоритмов сортировки массивов бывает больше одного :) Поэтому нефиг забивать себе голову схемами, если по жизни ими не пользуешься. А объяснять принципы программирования на основе того как это пишется в том или ином языке - форменная дурость!

anonymous
()
Ответ на: комментарий от pitekantrop

> Успокойтесь. Это не для вас написано. Это для тех, кто хочет что-то знать.

Дадад. И при этом им неважно что именно.

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

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

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

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

>> И на какую ж это предметную облать ориентирован LISP? Вернее, хотелось бы услышать, на какую он не ориентирован?

> А набрать в Википедии слабо? Там всё написано.

Не слабо. Так всё-таки, для какой предметной области, "востребованный PHP" подходит, а ЛИСП - нет? Давай цитату из Википедии, если своей головы нет.

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

> Алгоритмы ДОЛЖНЫ строится вне зависимости от языка, на котором их будут кодировать.

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

То, что на том же Прологе делается в десяток строчек, на Си запросто может занять тысячу строк абсолютно непонятного и нечитаемого кода. То, что я делаю на Лиспе, менее широкообразованные программисты на своих Си++ и Жабах не могут делать вообще, принципиально.

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

Задумайтесь, почему тот же Эрик Реймонд рекомендует обязательно изучать Лисп, даже тем, кто никогда им пользоваться не будет. Может поумнеете. Хотя, подозреваю, что говорю с простым троллем.

anonymous
()
Ответ на: комментарий от pitekantrop

> Так всё-таки, для какой предметной области, "востребованный PHP" подходит, а ЛИСП - нет? Давай цитату из Википедии, если своей головы нет.

Своя голова есть, а во вы видимо о Википедии не имеете представления :) Что касается вашего вопроса, то не скажу ничего нового: PHP подходит и используется в веб-программировании. Что характерно, LISP в нём не используется практически совсем. И не надо мне сейчас рассуждать о том, что на LISP'е можно писать всё тоже что и на PHP - я простите не верю, что вы умнее всех остальных, кто пишет на PHP, а не на LISP'е подобные проекты.

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