Форум программистов, компьютерный форум, киберфорум
Наши страницы
CoderHuligan
Войти
Регистрация
Восстановить пароль
Рейтинг: 1.00. Голосов: 1.

Плоский код, как возвращение к Машине Тьюринга

Запись от CoderHuligan размещена 09.11.2018 в 17:51
Обновил(-а) CoderHuligan 10.11.2018 в 14:51

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

Машина имеет бесконечную ленту разделённую на ячейки. Считывающая головка ходит по этой ленте и считывает определённые символы, которые представляют из себя так называемый алфавит.
Машина имеет конечное число СОСТОЯНИЙ, конечное число СИМВОЛОВ АЛФАВИТА и конечное число ПЕРЕХОДОВ из одного состояния в другое.
Повторюсь, что доказано возможность реализации любого алгоритма на этой машине.

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

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

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

Революционная ломка? Да. Революция успешно состоялась, так и не введя ещё одного столпа тьюринг-машины - СОСТОЯНИЕ.

Что же было предоставлено в замен? То, о чём многие люди до сих пор ломают голову, и не могут понять зачем это всё было нужно и что это вообще такое.
.
Все прекрасно понимают отчего программы стали такими пухлыми и глючными булками, но боятся об этом говорить. "Революционный держите шаг..", "Все как один умрём в борьбе за это..". Это война, а на войне, как говорится как на войне. На войне все меры хороши..

На смену переходу и состоянию пришли обьекты. А знаете почему пришли обьекты? Я вам по секрету скажу, но только вы никому об этом не говорите.. Они пришли потому, что вскоре выяснилась вся несостоятельность структурной парадигмы.. Люди поняли что мало-мальски сложную вещь создать в этом стиле ЧРЕЗВЫЧАЙНО сложно, а часто просто НЕВОЗМОЖНО. Поняли, но никому об этом не сказали.. Пришлось изобрести обьекты, которые, как говорилось уменьшат сложность создания ПО, и намного.. Увы: история повторяется, ибо невозможно бесконечно наращивать один слой кода над другим без того, что когда-нибудь эта башня не рухнет под собственным весом. И вот башня дала крён.

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

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

Что такое плоский код? Это лента с ячейками. Никаких стеков нет и в помине, а значит рекурсия неограничена его глубиной. Код упрощается. Повторно используемые блоки кода - "функции" это просто области на той же ленте, на которые происходит переход, при этом адрес возврата запоминается машиной. Конечный алфавит системы это конечное число команд машины. Можно вводить свои собственные наборы алфавитов. Программный код делится на шаги программы - состояния. Это абстрактные понятия, которые полностью определяются природой решаемой задачи. Переходы из одного состояния в другое необходимая вещь и может быть автоматизирована. Программисту достаточно указать переходы в состояния, а машина всё сделает сама. Можно даже придумать графический язык, на основе формального описания алгоритма в терминах состояний.
Пока всё.
Размещено в Без категории
Просмотров 575 Комментарии 20
Всего комментариев 20
Комментарии
  1. Старый комментарий
    Аватар для Avazart
    Далее: Плохой код и алкогольное состояние, не пропустите.
    Запись от Avazart размещена 09.11.2018 в 20:49 Avazart вне форума
  2. Старый комментарий
    Аватар для CoderHuligan
    Далее будут конкретные примеры.
    Запись от CoderHuligan размещена 10.11.2018 в 07:16 CoderHuligan вне форума
  3. Старый комментарий
    Аватар для Usaga
    Фотографии алкогольного опьянения?
    Запись от Usaga размещена 11.11.2018 в 05:44 Usaga вне форума
  4. Старый комментарий
    Аватар для CoderHuligan
    Не надо скатываться до тупого троллизма.
    Запись от CoderHuligan размещена 11.11.2018 в 09:26 CoderHuligan вне форума
    Обновил(-а) CoderHuligan 11.11.2018 в 09:31
  5. Старый комментарий
    Аватар для Usaga
    Никто и не троллит. С нетерпением ждём примеры новой парадигмы от автора include в switch.
    Запись от Usaga размещена 11.11.2018 в 09:33 Usaga вне форума
  6. Старый комментарий
    Аватар для Avazart
    Блог сплошной "тупой троллизм".
    А стёб это святое.
    К тому же другие увидят что над автором стебутся и не станут зря тратить свое время на напрасные попытки переубедить ...
    Запись от Avazart размещена 11.11.2018 в 15:35 Avazart вне форума
    Обновил(-а) Avazart 11.11.2018 в 17:39
  7. Старый комментарий
    Аватар для CoderHuligan
    Когда стёб превращается в повторение пройденного, тогда это превращается в троллизм, и поэтому автор блога вынужден будет модерировать некоторые комментарии, которые не несут никакой смысловой нагрузки, а только направлены на осмеяние оппонента. Осмеяние или по вашему стёб, это детская позиция. Маленький мальчик спрашивает взрослого математика: дядя, а какая польза от вашей математики? Лучше, дядя подари мне конфетку.. Самое страшное, чтобы дяде обьяснить ребёнку пользу математики придётся подождать лет 20, пока ребёнок от арифметики не придёт к алгебре а потом и к высшей математике, правда если к тому времени у него появится интерес к дальнейшему обучению. Увы, ребёнку не обьяснишь пользу той или иной вещи, в силу неразвитости его сознания. Ребёнок может только стебаться.
    Запись от CoderHuligan размещена 12.11.2018 в 09:49 CoderHuligan вне форума
    Обновил(-а) CoderHuligan 12.11.2018 в 09:50
  8. Старый комментарий
    Аватар для CoderHuligan
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Никто и не троллит. С нетерпением ждём примеры новой парадигмы от автора include в switch.
    Это скорее не новая парадигма, а хорошо забытая старая. Просто хочется показать всю несостоятельность структурной парадигмы, которая до сих пор в тренде.
    Запись от CoderHuligan размещена 12.11.2018 в 10:07 CoderHuligan вне форума
  9. Старый комментарий
    Аватар для Usaga
    Цитата:
    Это скорее не новая парадигма, а хорошо забытая старая. Просто хочется показать всю несостоятельность структурной парадигмы, которая до сих пор в тренде.
    А вы уверены, что понимаете в чём её несостоятельность? Что эта самая несостоятельность вообще есть? Ведь в таком случае получается, что вы умнее всего остального мира, что конечно же, не так.
    Запись от Usaga размещена 12.11.2018 в 10:50 Usaga вне форума
  10. Старый комментарий
    Аватар для CoderHuligan
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    А вы уверены, что понимаете в чём её несостоятельность? Что эта самая несостоятельность вообще есть? Ведь в таком случае получается, что вы умнее всего остального мира, что конечно же, не так.
    Во первых, я абсолютно уверен, что знаю в чём несостоятельность. Во-вторых, я не один это знаю. Те кто исповедует автоматную парадигму это прекрасно знают. То, что этих людей по пальцам пересчитать, не должно вас удивлять, ведь главное качество а не количество. Большинство почти всегда ошибается, и только со временем понимает насколько были правы те, кто говорил от имени меньшинства. Большинство жертвы обучения и пропаганды. Также присутствуют чисто психологические проблемы: боязнь не быть как все и пр.
    Я же не теоретик, и все мои заявления основаны на моём опыте кодинга. Есть вещи, которые невозможно реализовать в чисто структурном стиле. Только при помощи костылей. То есть нельзя без костылей реализовать точный алгоритм решения задачи без того, чтобы не плодить дополнительные сущности, которые никакого отношения к решаемому алгоритму не имеют: это костыли, фиговый листок, которым прикрывают непрезентабельное место.
    А так как реализовывать алгоритмы в таком стиле сложно, то решили вообще отказаться от реализации алгоритмов и предложили всё строить по обьектному принципу, который сам по себе против алгоритма. То есть зашли в полный тупик, так как программирование без алгоритмизации невозможно. А то, чем занимаются многие это просто имитация, строительство из готовых кубиков по готовым шаблонам(паттернам, как это назвали).
    Ну, ну..
    Запись от CoderHuligan размещена 12.11.2018 в 15:18 CoderHuligan вне форума
    Обновил(-а) CoderHuligan 12.11.2018 в 15:23
  11. Старый комментарий
    Аватар для Usaga
    Цитата:
    то решили вообще отказаться от реализации алгоритмов и предложили всё строить по обьектному принципу,
    Что, простите?

    Цитата:
    А то, чем занимаются многие это просто имитация, строительство из готовых кубиков по готовым шаблонам(паттернам, как это назвали).
    Не совсем понял. По-вашему, разработку нужно всегда начинать с нуля, переизобретая всё подряд просто потому, что вам кажется, что это правильно?
    Запись от Usaga размещена 12.11.2018 в 16:49 Usaga вне форума
  12. Старый комментарий
    Аватар для CoderHuligan
    Цитата:
    Что, простите?
    Но это всё у Буча. Алгоритмы заменяются обьектной декомпозицией. Ваши "алгоритмы" это перетасовка сообщений. Вы это называете алгоритмом, но это не алгоритм, это рассылка сообщений.
    Цитата:
    По-вашему, разработку нужно всегда начинать с нуля
    Не всегда. Однако если эти кубики были созданы на слабом растворе, то и бетон будет непрочным.
    Интересней создавать как раз кубики, чем готовые панели. Из кубиков получаются красивые не шаблонные строения, а из панельных домов только хрущёвки..
    Запись от CoderHuligan размещена 12.11.2018 в 17:15 CoderHuligan вне форума
  13. Старый комментарий
    Аватар для Usaga
    Цитата:
    Но это всё у Буча. Алгоритмы заменяются обьектной декомпозицией. Ваши "алгоритмы" это перетасовка сообщений. Вы это называете алгоритмом, но это не алгоритм, это рассылка сообщений.
    Что за бред сивой кобылы? Декомпозиция на объекты - изменение структуры программы. Алгоритм - процесс обработки данных. Это не взаимозаменяемые вещи. Как красное и громкое. Вы вообще хоть чуть-чуть понимаете какой бред несёте?

    Цитата:
    Не всегда. Однако если эти кубики были созданы на слабом растворе, то и бетон будет непрочным.
    Интересней создавать как раз кубики, чем готовые панели. Из кубиков получаются красивые не шаблонные строения, а из панельных домов только хрущёвки..
    Пространные рассуждения ниочём. Абстрактные кубики в вакууме. Давайте на примере из вашей практики. Вы, начиная новое веб-приложение, начинаете с написания веб-браузера и базовой библиотеки с функциями вида String.Split()?
    Запись от Usaga размещена 13.11.2018 в 06:24 Usaga вне форума
  14. Старый комментарий
    Аватар для CoderHuligan
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Декомпозиция на объекты - изменение структуры программы. Алгоритм - процесс обработки данных. Это не взаимозаменяемые вещи.
    Дык в том то и дело, что у вас обьекты это не просто данные, а и их обработчики. Это уже не чистые данные. Алгоритмы реализуются методами, чистыми методами. А взаимодействие обьектов это не алгоритм, ибо тут данные не обрабатываются в чистом виде, а происходит передача управления от одного обьекта другому. Передача управления это делегирование ответственностей, а не опять же чистый алгоритм, ибо тут данные отсутствуют как класс..

    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Вы, начиная новое веб-приложение, начинаете с написания веб-браузера и базовой библиотеки с функциями вида String.Split()?
    Конечно нет. Просто в вебе я не пользуюсь готовыми фреймворками.
    Запись от CoderHuligan размещена 13.11.2018 в 06:57 CoderHuligan вне форума
  15. Старый комментарий
    Аватар для Usaga
    Цитата:
    Дык в том то и дело, что у вас обьекты это не просто данные, а и их обработчики. Это уже не чистые данные. Алгоритмы реализуются методами, чистыми методами. А взаимодействие обьектов это не алгоритм, ибо тут данные не обрабатываются в чистом виде, а происходит передача управления от одного обьекта другому. Передача управления это делегирование ответственностей, а не опять же чистый алгоритм, ибо тут данные отсутствуют как класс..
    Очередная порция чуши подъехала. Объект может быть и просто мешком с данными (POCO) и чисто сервисом и смесью первых двух. Разницы между "алгоритмом" в виде функции и тем же самым алгоритмом в виде метода класса нет от слова совсем. Откуда какую "чистоту" вы вытащили на свет божий?

    Цитата:
    Просто в вебе я не пользуюсь готовыми фреймворками.
    Почему? Ваше время ничего не стоит? А всё, за что вы берётесь переписывать лично, вы делаете во много крат лучше других? Как include в switch?
    Запись от Usaga размещена 13.11.2018 в 07:18 Usaga вне форума
  16. Старый комментарий
    Аватар для CoderHuligan
    [QUOTE=Usaga;bt19420] Откуда какую "чистоту" вы вытащили на свет божий?
    Оттуда, что обьект перестанет быть обьектом если из него вытащить все методу или все данные. Это уже не ООП. А почему вытаскивают? потому, что иначе не получится что-то реализовать. Чистый ООП не прокатывает на практике.
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Почему? Ваше время ничего не стоит? А всё, за что вы берётесь переписывать лично, вы делаете во много крат лучше других? Как include в switch?
    Мне хватает чистого PHP.
    Запись от CoderHuligan размещена 13.11.2018 в 07:27 CoderHuligan вне форума
  17. Старый комментарий
    Аватар для Usaga
    Цитата:
    Оттуда, что обьект перестанет быть обьектом если из него вытащить все методу или все данные. Это уже не ООП. А почему вытаскивают? потому, что иначе не получится что-то реализовать. Чистый ООП не прокатывает на практике.
    Зачем из объекта вытаскивать данные и "методу"? И где такое применяется и зачем?

    Цитата:
    Мне хватает чистого PHP.
    Хватает или что-то по-сложнее осилить не в состоянии? Кстати, в PHP тоже есть поддержка ООП.
    Запись от Usaga размещена 13.11.2018 в 07:48 Usaga вне форума
  18. Старый комментарий
    Аватар для CoderHuligan
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Зачем из объекта вытаскивать данные и "методу"? И где такое применяется и зачем?
    Не вы ли сами давеча написали: "Объект может быть и просто мешком с данными (POCO) и чисто сервисом и смесью первых двух. "
    ??
    Запись от CoderHuligan размещена 13.11.2018 в 10:02 CoderHuligan вне форума
  19. Старый комментарий
    Аватар для CoderHuligan
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Хватает или что-то по-сложнее осилить не в состоянии? Кстати, в PHP тоже есть поддержка ООП.
    Что-то посложнее всё на ООП, а меня от него просто тошнит, и не потому, что неосилянт, а потому, что не могу иначе.
    Запись от CoderHuligan размещена 13.11.2018 в 10:04 CoderHuligan вне форума
  20. Старый комментарий
    Аватар для Usaga
    Цитата:
    Не вы ли сами давеча написали: "Объект может быть и просто мешком с данными (POCO) и чисто сервисом и смесью первых двух.
    Я. Только где связь?

    Цитата:
    Что-то посложнее всё на ООП, а меня от него просто тошнит, и не потому, что неосилянт, а потому, что не могу иначе.
    Это и есть "неосилянт".
    Запись от Usaga размещена 13.11.2018 в 10:39 Usaga вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru