В комментариях к статье о разрядности и точности машинных вычислений совершенно неожиданно возникла небольшая дискуссия, которая к собственно вычислениям имела не самое прямое отношение. Она была гораздо шире вопросов систем счисления, математической логики, схемотехники. Можно сказать, что она затрагивала и философские вопросы, и мировоззренческие. Прошло уже две недели, была опубликована и другая статья, казалось бы, вопрос остался в прошлом... Почему же я вспомнил о нем?
Прошлая неделя выдалась довольно напряженной. Пришлось работать, что называется, "в полевых условиях" на жаре. И это был отнюдь не огород, где можно в самую жару "пофилонить в тени". После окончания работ и возврата в более цивилизованные условия мы с коллегами не смогли отказать себе в удовольствии облиться ледяной водой из колодца и полакомиться арбузами, которые пару дней ждали нас в холодильнике. Как выяснилось немного позже, мой иммунитет совсем не тот, что был в молодости...
Пролежав несколько дней с высокой температурой и отказывающейся работать головой поймал себя на мысли, что в голове сама собой сформировалась "каша" из смеси философии, математики, информатики. Причем "на уровне бреда", но с явным философским уклоном. Поскольку голова пока так и не заработала и я пока не могу мыслить строго и логически... Давайте о логике и поговорим...
Это не статья-возражение. Это статья немного показывающая мою точку зрения на вопрос. Статья-рассуждение. Я ни с кем не спорю, никому не возражаю. Просто рассказываю о том, к чему привел жизненный и профессиональный опыт. Этакое "бормотание старичка на завалинке"...
Где собака зарыта и откуда ветер дует?
Итак, в чем же суть вопроса, который мы сегодня кратко рассмотрим. Точнее, о котором поговорим. Начиналось все с вполне технических моментов, но довольно быстро дошло да очень глубоких вопросов. Я приведу несколько цитат (цитирую НЕ себя!), которые заставляют серьезно задуматься.
Развитие вычислительной техники достигло пика к концу 60х, к концу 70х явно обозначился спад развития и ведущую роль заняла технология. Все свелось к тому, что повысим количество операций в секунду и будет нам счастье. Последующие усовершенствования архитектуры, по сути это латание заплаток, на тот примитив, который стал мейнстримом.
.......
классическая логика это рудимент раннего средневековья. Как если бы сейчас существовали запреты в математике - числа могут быть только целые и только положительные. Снятие ограничений в классике расширяет возможности вычислений и приближает к натуральной логике, по которой все в природе происходит.
......
то, что стало "классической" это далеко от античности и именно кривая интерпретация античности авторами (переписчиками) раннего средневековья. Попытки возражать "абсолюту", наблюдались еще тогда, заканчивались они всегда одним и тем же. Тот же Луллий в итоге ушел жить в келийку. Узурпированная схоластами форма логики, обрела религиозную основу, возражение которой приравнивалось к еретичеству. Так длилось веками. Позже тоже было не мало боданий по этому поводу, там и Декарт и Лейбниц, но безрезультатно. В 19м, большой любитель библиотек и мунускриптов, привезенных из Индии тестем, Д Булль, как бы создал алгебру, которая вполне вписывалась в концепцию. Смельчаков в открытую критиковать недостатки не находилось
.....
Логика, это не природное явление, это модель. Бинарная одна из возможных, никак не единственная и весьма далекая от натуральной. Создавалась она не для вычислений, а для ведения дискуссий, и оказалась очень востребованной среди теологов и философов, поскольку позволяла, сохраняя внешнюю строгость получать желаемый результат при подобранных нужным образом входных данных. Модель эта легко расширяется посредством снятия правил - ограничений. Отказ от закона исключения третьего, позволяет нам разделить понятия инверсии и отрицания и получить состояние "нет ответа", что в жизни мы встречаем везде и всюду. Не на каждый вопрос можно ответить.
Это состояние дополняет модель параметром "время".
Снятие ограничения "закон тождества", позволяет работать непосредственно в логической модели с переменными.
Точно так же как и с числами, логическая модель может содержать отрицательные значения, комлексные и гиперкомплексные составляющие
.......
По поводу цифр, нот и алфавита, они работают в рамках модели, вне ограничений этих моделей (а в реальном мире их нет) мы сталкиваемся с проблемами неточностей
Это действительно очень серьезные и глубокие мысли, которые тоже появились не на пустом месте. Это результат серьезных размышлений. И это та самая философская составляющая, которая обычно исключается из информатики. Эти вопросы затрагиваются в математике, которая, как и всегда, стремится описать все. Но из информатики, по вполне объективным причинам, это исключается.
Объективные причины лежат не только в области математики, но и в области сугубо практической, в области электроники, схемотехники. И мы действительно не можем это игнорировать, если хотим не просто пофилософствовать и помечтать, а поговорить о практической реализации рассуждений.
Как видите, дискуссия поднимает очень не простой, комплексный, вопрос. И это вопрос напрямую завязан на не менее сложное и комплексное творение человека - вычислительную машину. А здесь автоматически затрагивается и вполне математический вопрос вычислимости.
Дискуссии на некоторые из связанных с этими вопросами тем идут даже не десятилетия, а века. В них принимали участие многие выдающиеся ученые. Появились и канули в лету целые научные течения. Написаны горы книг и монографий. Что же можем мы, довольно обычные люди, сюда добавить? Ничего, давайте будем честными. Но мы можем посмотреть на эти изящные конструкции, на эти сияющие горы знаний и хотя бы попытаться немного понять их.
Уточняем и расширяем
Итак, действительно ли вычислительная техника достигла пика своего развития в начале второй половины прошлого века? Или это случилось гораздо раньше? Или нет никакой стагнации, а продолжается бурное развитие? Этот вопрос отнюдь не оторван от вопроса о логике и философии. Но рассматривать его нужно более широко.
Дело в том, что вычислительная машина, вычислительное устройство, это лишь инструмент. И использовать этот инструмент можно по разному. Обратите внимание, что я не уточнил, что вычислительная машина электронная. И скоро будет понятно, почему так. Применение вычислительной машины опирается не только на математику. Так было в самом начале, для этого все вычислительные устройства и создавались. Но потом...
А потом появились идеи использования вычислений не только для математики. Появилась кибернетика. Кибернетика предлагала распространить математическую и информационную модель на описание совсем не математических сущностей. Например, на организацию производства и даже общества. Использование информационного подхода для управления, причем не отдельно взятым механизмом. Возможность математического описания некой системы, причем не обязательно технической или научной, и использование автоматических методов управления, причем не жестко заданных, а адаптивных, была и притягательной и пугающей. В СССР путь кибернетики был весьма не простым. Не будем углубляться в идеологические составляющие, на эту тему написано много и многими.
Сегодня чаще говорят об информатике, информационных технологиях. Это не тождественно кибернетике. Это, на мой взгляд, более объемлющее. И это именно то, что позволяет использовать вычислительные машины, математику, информационный подход в целом для практически любых областей человеческой деятельности. Кого сегодня удивишь электрическим чайником выходящим в интернет или холодильником самостоятельно заказывающим заканчивающиеся продукты? Кого сегодня удивляет возможность скомандовать голосом что-то вроде "Алиса, пригласи родственников на мой день рождения"?
Мы учились пользоваться инструмент которого раньше у человечества не было, информационным инструментом, вычислительной машиной. Расширение ее возможностей позволяло находить все новые области применения. А это, в свою очередь, стимулировало развитие самого инструмента.
И это нельзя разделять. По сути это единая сущность. И говорить сегодня мы будем именно о совокупности машины, методов, применений. Об информационных технологиях в которые и превратилась та самая вычислительная техника.
Логика и Философия
Логика возникла как часть философских учений еще во времена античности. Как человек мыслит? Как принимает решения? Как пытается познать окружающий мир? Есть ли пределы познания? Может ли истина быть абсолютной? Это те вопросы, на которых возникала философская логика.
Из полностью абстрактных умозаключений первых философов-логиков постепенно рождались и первые практические применения. Логика, как описание процесса мышления, становилась учением и сама начала использоваться при изучении и обучении. Строительство античных цивилизаций требовало установления законов, которые должны быть просты и понятны всем. Применение этих законов должно быть прозрачным, что бы ни у кого не возникало подозрений, что решение неправомерно и основано на подтасовке фактов. Во всяком случае, теоретически. Так логика из чисто философской стала превращаться в прикладную.
Философия вместе с религией формировали мировоззрение общества и его мораль. А логика становилась тем, что позволяет добавить устойчивости и прозрачности. Четкости. Римские законы были едины во всей империи. Основанные на четких правилах и логике они могли быть применены разными людьми в разных точках огромной римской империи.
Логика осталась частью философии, но стала и частью науки управления. И частью юриспруденции. При этом было несколько разных направлений развития логики, а не только логика Аристотеля, которая сегодня считается классической. Но об это позже.
В средние века логика, как часть философии, не смогла избежать влияния религий, как и все прочие науки. Да и вся цивилизация. Религии были разными, но это немногое меняло. Времена были такими. Я не буду рассуждать, хорошо это или плохо. Это просто факт. И логика стала не только наукой, но и инструментом осуществления власти.
В античные времена существовали различные философские школы. И логика, как часть философии, тоже не была единой. Аристотель и Платон относятся к классическому периоду философии. Считается, что именно в этот период разрозненные представления стали объединяться в системы. Так получилось, что классической логикой стала считаться предложенная Аристотелем система. Причины этого нам сегодня не важны. Это просто исторический факт.
Классическая логика, философская логика Аристотеля, оказалась весьма удачной. Она определяла четкие правила "доказательных рассуждений". То есть, от длинных и запутанных философских сентенций переходили к формальным и четким определениям и правилам. Более того, Аристотель использовал практически математический подход. В частности, он использовал переменные, что было в те времена самым передовым подходом.
Не смотря на то, что логика Аристотеля стала каноном и получила очень широкое распространение альтернативные логические учения не исчезли. И классическая логика подвергалась весьма ожесточенной критике. Причем нельзя сказать, что эта критика не имела оснований. Разные области знаний требовали разных возможностей от логики. Например, силлогизмы (а они были у Аристотеля) были вполне подходящим инструментом для юристов, но совершенно не годились математикам.
Требовалась возможность индукции - выведения общих законов из частных случаев. Требовалась абдукция - вывод одних частных случаев из других частных случаев. Требовались и толкования, когда по набору правил и исключений делались выводы для новых конкретных случаев. Индукция, дедукция, абдукция, рефлексия... Причем классическое описание классической же логики не проходит проверку рефлексией.
Реальный мир оказывается сложнее. А на различные альтернативные варианты логики действительно оказывали влияние и религиозные аспекты. Увы, логика и философия часто нагружается идеологическим смыслом. Так же, как история. Но давайте оставим идеологию в стороне.
Наконец, на логику обратила внимание математика. Не только как на инструмент, которым математика уже пользовалась при построении своих доказательств, но как на нечто, достойное быть описанным на языке математики. Поскольку произошло это в Европе, где были популярны учения Аристотеля, в основу логики формальной, логики математической, легла логика Аристотеля. Та самая, в которой действует принцип "исключенного третьего". Хотя сам Аристотель не заявлял об этом столь категорично.
Математическая логика очищена от каких-либо идеологических философских составляющих. Это математика в чистом виде. Но математика это лишь средство описания логики, язык, на котором записываются понятия логики. Математическая логика это записанное языком математики одно из направлений логики. Сама логика не перестала быть частью философии, частью мировоззрения.
Об этом, и не только этом, я уже писал в статье
Математическая логика прошло долгий и тернистый путь. Классическая логика сегодня это раздел современной логики и включает в себя классическую логику высказываний и логику предикатов, опирающихся на принцип двузначности, в соответствии с которым всякое высказывание является или истинным, или ложным.
Для нас важно то, что логика пытается описать мышление человека. Причем вне зависимости от того, какое именно направление логики, включая неклассические, вы предпочитаете.
Существуют ли вычислительные машины без логики?
Что такое электронная вычислительная машина? Это электрическая вычислительная машина! Но первые машины, точнее, устройства, были вовсе не электронными а электромеханическими. Еще раньше были механические вычислительные устройства, на канале есть пара небольших рассказов о них
Уже во времена античности люди начали создавать поразительные вычислительные устройства. Наиболее известным вычислительным устройством античности является, пожалуй, антикитерский механизм. Он был найден в очень плохом состоянии, но ученым удалось с ним разобраться.
Механические устройства становились электрическими. Интегратор Томсона и анализатор Буша имеют электрический аналог в виде заряда конденсатора через реостат. Это не электроника, это электротехника. Не все, но многие математические понятия можно представить электрическими аналогами и электрическими цепями.
А появление электроники сделало использование электрических аналогов удобным уже с практической точки зрения. Аналоговые вычислительные машины и стали тем самым электронным, овеществленным, представлением математики. Аналоговым машинам на канале посвящен цикл статей (незаконченный). Они собраны в подборку, вы можете зайти на страницу канала
и найти эти статьи. Почитайте, они довольно интересны.
АВМ это именно вычислительные машины. Уравнения и системы уравнений в них представлены на уровне схемотехники. Основной их элемент - интегратор на базе операционного усилителя. В этих машинах нет логических элементов. Они не основаны на математической логике. Это математика в чистом виде воплощенная в электронике.
АВМ нельзя считать универсальными машинами. Они требовали специальной подготовки от использующих их специалистов. Специализированные АВМ использовались в реальных устройствах и системах, а не в лабораториях. Они не исчезли бесследно, но сегодня очень немногие могут столкнуть с ними в реальности.
Так что машины не основанные на логике и не использующие ее действительно существуют. Они хороши для математических и инженерных вычислений, даже в наши дни. Но они очень плохо подходят для не связанных с математикой. АВМ не получится использовать для моделирования процессов мышления и познания мира. Для этого нужна логика, которой в АВМ нет.
Конечно существовали и гибридные машины, в которых сочетались аналоговые методы вычислений с цифровыми методами ввода и вывода. Гибридные машины позволяли решать более широкий круг задач, но не смогли сделать АВМ действительно универсальными.
Механические и релейные автоматы
Во времена античности создавались не только вычислительные устройства, но и устройства автоматические. Достаточно вспомнить механические театры Герона Александрийского. Можно представить, какого уровня мы бы сегодня достигли, если бы в средние века многие изобретения не оказались забыты.
Однако, промышленная революция привела к бурному развитию техники и технологий. Автоматические механические устройства (станки и механизмы) получили новый импульс развития. Механизмы становятся действительно сложными. Согласованные движения множества элементов таких механизмов завораживают.
Если работу паровой машины, не важно, в виде паровоза или машины откачивающей воду из шахты, сложно назвать полноценным автоматом, ее движения сложны но цикличны, то станок Жаккарда вполне может составить конкуренцию механическим театрам Герона. Жаккард не просто выполняет циклические механические действия, этими действиями можно управлять. И на выходе станка получается сложный узор на ткани. Это гениальное изобретение, сложное механическое устройство. Но его алгоритм работы довольно прост. Положение нитей определяется отверстиями на бумажных картах с отверстиями.
Комбинация механических элементов позволяет создавать механизмы с довольно сложными алгоритмами работы. Описание отдельных узлов таких механизмов производится на языке математики. Например, профили кулачков или траектории движения отдельных элементов. Но математическая логика практически не используется. Она просто не нужна.
Начало эры электричества приводит к замене некоторых механических узлов электрическими. И это не только замена парового двигателя на электрический. Для станка может быть достаточным просто учитывать состояние отдельных контактов, которые управляются различными событиями. Например, нажата кнопка "Пуск", бревно лежит на пилораме, защитное ограждение опущено, педаль нажата. При выполнении этих условий пилорама начнет работу. Это очень простой пример, но довольно наглядный.
Кроме обычных переключателей (контактов), которые управляются людьми или какими либо событиями (бревно лежит) появились и электромагнитные реле. И это весьма важный элемент. Реле, шаговый искатель это по сути тоже реле, но более хитрое, это управляемый переключатель который позволяет управлять выходными переменными, состоянием контактов, изменяя состояние входной переменной, током через катушку реле.
Состояние контактов может быть только замкнутым или разомкнутым. Следовательно, точная величина тока через катушку нам не важна. Важно лишь, достаточно ли этого тока для изменения состояния контактов реле. Можно выделить два типа контактов:
- Нормально разомкнутые. Разомкнуты при отсутствии тока через катушку реле. Замыкаются при протекании тока через катушку.
- Нормально замкнутые. Замкнуты при отсутствии тока через катушку реле. Размыкаются при протекании тока через катушку.
Я не буду отдельно выделять переключающие контакты. Их можно представить как объединение нормально разомкнутого и нормально замкнутого контактов.
Комбинируя переключатели, включая управляемые, в виде электромагнитных реле, мы можем строить достаточно сложные схемы автоматики. Например
А теперь давайте посмотрим внимательнее. Ток через катушку течет или не течет. Контакты замкнули или разомкнуты. Да, это можно изобразить схемотехнически. Но это можно записать и математически, используя математическую логику. Как нам перейти от параметров состояния реле к логическим понятиям? Довольно просто.
Достаточно определить состояния реле как ответы на такие простые вопросы:
- Ток через катушку реле течет? Ответ "да" означает, что реле включено. Ответ "нет" означает, что реле выключено.
- Контакты замкнуты? Ответ "да" означает, что контакты замкнуты. Ответ "нет" означает, что контакты разомкнуты.
А теперь перейдем от вопросов к утверждениям:
- Ток через катушку реле течет. Если это утверждение истинно, то реле включено. Если ложно, то реле выключено.
- Контакты реле замкнуты. Если это утверждение истинно, то контакты замкнуты. Если ложно, то разомкнуты.
И у нас появились логические состояния ИСТИНА и ЛОЖЬ! У нас появилась логика. И мы не только можем описывать состояние релейной схемы уравнениями математической логики, но и преобразовывать схемы используя математику. Нам доступны не только логические операции И (последовательное соединение контактов) и ИЛИ (параллельное соединение контактов), но и операции следования (ток течет следовательно контакты замкнуты). И даже условные операции (если ток течет, то контакты замкнуты).
Наше релейное устройство является еще и устройством логическим. Однако, очень важно понимать, что логика не определяет работу устройства релейной автоматики, а позволяет ее описать. Точно так же, как математика описывает другие процессы и явления реального мира. Наше релейное устройство не обрело способность мыслить. Оно просто имитирует простейшие процессы принятия решения, которые можно описать математической логикой.
Релейные схемы могут реализовывать не только комбинационный логические устройства, но и последовательностные схемы. И даже конечные автоматы. На реле можно строить и триггеры, и счетчики, и вычислительные узлы цифровых устройств.
Арифмометр можно представить набором электромагнитных реле и/или шаговых искателей. А это вычислительное устройство. Автоматику управления лифтом, которая является конечным автоматом, тоже можно реализовать на реле. И это делалось на практике.
Лифт это не просто автомат, а автомат с состояниями. Да, двигатель, который приводит кабину в движение, просто включается и выключается. И может менять направление вращения, пусть и с помощью редуктора. Но кабина должна не просто двигаться и останавливаться, но останавливаться в строго определенных положениях - только на этажах.
Вот эти этажи и являются "состояниями" автомата лифта. Текущее состояние, этаж, на котором кабина сейчас находится (стоит) влияет на работу автомата. Направление вращение двигателя определяется не только нажатой кнопкой выбранного этажа, куда нам нужно попасть, но и текущим этажом, откуда мы начинаем свое путешествие. Во время движения кабина проходит через различные этажи-состояния, но не останавливается, пока не достигнет нужного этажа.
Работу конечного автомата можно описать графом или таблицей состояний и переходов. Конечные автоматы очень широко используются в технике, далеко не только вычислительной. Лифт это не вычислительная машина, но использует концепцию конечного автомата. Конечные автоматы широко используются в программировании. Я даже рискну утверждать, что любая программа для ЭВМ является конечным автоматом.
Но конечные автоматы это еще и математика - дискретная математика. А есть еще и комбинаторная логика, которая тоже является частью дискретной математики. То есть, работа лифта может быть описана математически! Для некоторых читателей это может выглядеть неожиданно, но это именно так.
Набор электромагнитных реле, даже без электроники, может являться (может, но не обязан) конечным автоматом и физическим воплощением математических понятий и формул.
Цифровая вычислительная машина это конечный автомат
Это может показаться не просто странным, но им нелепым. И даже ошибочным. Но это именно так. Цифровая (логическая) вычислительная машина это конечный автомат начальным состоянием которого является состояние непосредственно перед выполнением очередной машинной команды, а конечным состоянием состояние непосредственно после выполнения машинной команды.
Промежуточные состояния соответствуют различным этапам выборки и выполнения команды. Это формирование адресов операндов, их выборка, выполнение арифметических операций, изменение состояния переменных в памяти машины (включая операции переходов).
Переходы между начальным состоянием,промежуточными состояниями, конечным состоянием, осуществляются на основании кода операции, режимов адресации операндов, типа памяти операндов, внешних (по отношению к команде) состояний машины (флаги состояния процессора).
При всей сложности современных процессоров ЭВМ (цифровых), при всех современных методах построения процессоров (включая конвейеры), включая многоядерные, и многопроцессорных ЭВМ, эти машины остаются конечными автоматами и комбинациями конечных автоматов. И это вовсе не парадокс.
Вот тут и возникает вопрос, который я уже озвучивал ранее. И не стоит ли считать, что развитие ЭВМ достигло пика не в 60-е - 70-е годы, а гораздо раньше? Еще на заре своего появления. Ведь ЭВМ как были конечными автоматами, так и остались ими.
Да, это крайне провокационный вопрос. И я сразу могу сказать, что даже сама постановка вопроса некорректна. Но позволю себе еще немного подразнить читателей :)
Какой была, такой ты и осталась
Да, это я о вычислительных машинах. Продолжаю провокации :) Но не буду слишком этим увлекаться, обещаю.
Итак, ЭВМ (процессор, и не только) это конечный автомат. Очень сложный, с огромным количеством состояний, но конечный автомат. И мы уже знаем, что конечный автомат можно построить на электромагнитных реле. Более того, действительно можно построить АЛУ используя только реле. Это будет очень медленное АЛУ потребляющее слишком большую мощность. И даже целую ЭВМ можно построить на реле и шаговых искателях. Дополнительных компонентов потребуется не много, диоды и конденсаторы.
ЭВМ на реле слишком медленная и потребляет слишком большую мощность. Но ведь реле это управляемые переключатели. А значит, мы можем их заменить переключателями электронными. И действительно заменили. Сначала электронными лампами, потом биполярными транзисторами, наконец полевыми транзисторами. Контакты могут быть замкнуты или разомкнуты, а лампы и транзисторы открытыми или закрытыми.
Но не все так просто. В реле контакты и катушка электрически не связаны (но связаны механически). А в лампах и транзисторах все электроды связаны между собой. Поэтому пришлось изменять и схемотехнику. А вот логическая составляющая, которая описывает работу таких устройств, осталась той же самой.
Что же получается, у нас было технологическое развитие вычислительной техники но логика осталась той же самой? Да, именно так. Значит, ЭВМ все таки развивались и после своего появления. Но почему мы должны считать развитием замену технологии управляемых переключателей, но не должны считать развитием увеличение быстродействия, которое тоже потребовало существенного развития технологий. И почему мы не должны считать развитием введением конвейеров с предсказанием переходов? А многопроцессорные машины, которые потребовали введения синхронизации и параллельного программирования?
Я согласен, что просто увеличение разрядности процессоров трудно считать развитием. Это скорее результат развития технологий позволивших значительно нарастить количество элементов на кристалле не превратив при этом процессор в "электронный кипятильник". Следствие, а не причина. Но в остальном...
Когда речь заходит о развитии мне всегда хочется задать вопрос о том, что будет считаться базовым, начальным уровнем. Каков набор критериев? Вот и в случае оценки развития вычислительной техники нам нужно определиться с критериями. Если мы будем считать критерием базовый элемент, управляемый переключатель, то развитие прекратилось почти сразу после появления ЭВМ. Когда от табулятора Холлерита
перешли к более совершенным табуляторам
и первым релейным (реально существовавшим!) вычислительным машинам
Кстати, обратите внимание на этот релейный компьютер. С ним связаны работы Кода Шеннона.
Если мы будем считать критерием технологию построения управляемого переключателя, то развитие можно считать прекратившимся после замены реле не лампы, а позже на транзисторы. Причем тип транзисторов не столь важен, главное, что это переход на полупроводниковые приборы. А можно считать концом развития переход на интегральные микросхемы.
Но будет ли это правильным? Я очень в этом сомневаюсь! Неверно вычленять какой то один критерий из целого!
Разделение информации и ее представления
Собственно вычислительная машина, в нашем сегодняшнем представлении, была описана Аланом Тьюрингом в 1936 году. Она сегодня гораздо более известна, чем машина предложенная Эмилем Постом в том же самом году. Просто работа Тьюринга была опубликована немного ранее, чем работа Поста. Эти машины довольно похожи, хоть и разрабатывались независимо. И обе машины были абстрактными, а не реальными. Обе машины были чисто математическими.
Важнейшим шагом к сегодняшнему применению ЭВМ стали работы Клода Шеннона в той самой Bell Lab. Знаковой считается работа "Математическая теория связи" опубликованная в 1948 году. В этой статье Шеннон разделил семантические и технические аспекты, что было действительно революционным. Он разделил собственно информацию и ее представление.
Шеннон выделил сообщение имеющее некоторое значение, причем собственно значение не важно. Важно лишь то, что сообщение предаваемое по каналу связи выбирается из некоторого множества возможных сообщений. И система связи должна быть спроектирована так, что бы обеспечить передачу любого возможного сообщения.
Если множество передаваемых сообщений конечно, то число сообщений или некоторую монотонную функцию от этого числа можно рассматривать как меру информации, создаваемой выбором сообщения из этого множества. Это может показаться запутанным и далеким от темы сегодняшней статьи, но все довольно просто и имеет прямое отношение к информатике.
Предположим, что нам надо передавать текстовые сообщения. Количество возможных фраз и предложений практически бесконечно. Количество слов в естественных языках огромно. Но количество букв значительно меньше. И мы можем считать сообщением отдельную букву. Причем каждая буква имеет собственное значение зависящее от контекста. Это может быть буква слова в предложении, буква в имени переменной, или что то еще. В латинице 26 букв, в кириллице 33.
Вот это количество и есть мера информации. Сообщение это одна буква из множества, причем все они равновероятны. Но мерой может быть и некая однозначная и непрерывная (монотонная) функция от количества сообщений. Шеннон соглашается с Хартли, что наиболее целесообразно выбрать логарифмическую функцию. Причем основание логарифмов Шеннон выбрал равным двум. И это взято не с потолка. Шеннон воспользовался количеством возможных состояний контактов реле. Вы же помните, что машина на последней иллюстрации была релейная? И я предупреждал, что это важно.
Единицы измерения при использовании основания 2 Шеннон назвал двоичными единицами. Или битами (на самом деле, это слово предложил Тьюки). Реле с одним контактом в точности соответствует одному биту. N таких реле могут представлять два в степени N различных состояний. Для 26 букв латиницы достаточно 5 бит (реле) которые могут хранить 32 различных состояния. Для 33 букв кириллицы уже требуется 6 бит. Избыточность для кириллицы будет значительно выше, чем для латиницы.
Обратите внимание, что Шеннон не говорил о системах счисления и представления чисел. Он рассматривал лишь представление набора сообщений, состояний. При этом Шеннон рассматривал и другие основания логарифмов. В том числе, десять. И тоже ссылался на колеса арифмометра, каждое из которых может представлять 10 различных сообщений/состояний соответствующих десятичным цифрам. Для представления 10 состояний требуется примерно 3.3 бита.
"Математическая теория связи" очень интересна, но Шеннон в ней большей частью использовал математику для анализа работы каналов связи. Это нам сегодня, в рамках данной статьи, не нужно. Но вот такое разделение информации и ее представления нам важно. Шеннон заявил, что собственно содержание сообщения, его семантика, не важно. Важно лишь количество возможных сообщений. И поток бит в канале связи может соответствовать тексту, изображению, музыке, мыслям человека, и так далее. То есть любой информации.
Если точнее, то поток единиц информации, не обязательно бит. Если наша система построена не на реле, не на переключателях имеющих лишь два состояния, то единица информации может быть тритом (три состояния), как в Сетуни. Или десятичной единицей информации (можно назвать, например, десятитом).
Но фокус в том, что это применимо не только к каналам связи, не только к передаче информации, но и к ее обработке! Причем мы действительно можем обрабатывать любое количество сообщений вне зависимости от того, представлена она битами, тритами или придуманными нами десятитами при обработке. Нам достаточно выделить необходимое количество единиц информации для представления полного множества наших сообщений. Или семантических состояний.
Но важно понимать, что если речь идет не о передаче, а об обработке, информации нам требуется еще и определить правила этой обработки. Если наши сообщения являются цифрами чисел, то правила обработки будут включать в себя арифметические операции. И наше устройство будет вычислительным. Если наши сообщения являются музыкальными нотами, то арифметические операции к ним уже не применимы. Мы не можем просто сложить или умножить две ноты. Но мы можем из нескольких нот собрать аккорд. Если наши сообщения являются цветами спектра, то мы можем их складывать, но по определенным правилам, причем с учетом того, излучаемый это цвет или цвет покрытия от которого излучение отражается (да, RGB и CMYK, как пример). А вот умножать и делит цвета мы не можем. И наше устройство уже будет не вычислительным.
Меняются правила, но не представление информации. Для набора бит в памяти машины мы можем определять правила обработки различными машинными командами. И наша машина становится не вычислительной, а универсальной. Не электроника определяет содержание, смысл, информации, а человек. С помощью программы. Мы продолжаем, по привычке, называть наши машины ЭВМ или компьютерами, но это универсальные машины!
Альтернативные логики
Классическая математическая логика отнюдь не является единственно возможной. Альтернативные варианты, или неклассические логики, действительно существуют. Их довольно много и я не ставлю целью даже просто все их перечислить.
Пожалуй, в первую очередь нужно упомянуть пресловутый принцип "исключенного третьего". Сам Аристотель данный принцип не считал универсальным и отмечал, что на суждения о будущем, об объектах, недоступных человеческому восприятию, о неустойчивых, переходных состояниях, о несуществующих объектах и т. д. он не распространяется. Но вокруг этого принципа было сломано немало копий.
Ян Лукасевич предложил трехзначную логику. В этой логике существует состояние "НЕ ИЗВЕСТНО" наряду с состояниями "ИСТИНА" и "ЛОЖЬ". Теоретически, многозначная логика (не обязательно трехзначная) может позволить более адекватно выявлять логическую структуру, что создаст возможность построить общую теорию и формализованным языком, логическими средствами точнее имитировать естественный язык. Действительно, реальный мир совсем не такой категоричный и детерминированный, как это описывает классическая логика.
Среди многозначных логик стоит упомянуть и топологическую логику. В топологической логике высказывания упорядочены по степеням истины. Имеют место два двухместных отношения "равноистинно" и "менее истинно". В терминах этой логики невозможно выразить точное место одного высказывания, а возможно только выразить относительное место двух предложений в ряду истинности. Достоинством топологической логики считают прежде всего то, что она некоторым образом соответствует понятию относительной и абсолютной истины в смысле степеней приближения к абсолютной истине.
Модальная логика исследует логические связи модальных высказываний. Модальность толкуется как некоторая оценка суждения, или высказывания. Модальная оценка выражается через такие понятия, как: "необходимо", "доказуемо", "возможно", "обязательно", "опровержимо", "разрешено" и т.д. Таким образом, модальное суждение – это характеристика суждения в зависимости от свойства устанавливаемой им достоверности.
Модальная логика является результатом стремления расширить выразительные возможности логики. В системе двузначной логики фиксируется, что субъект суждения обладает некоторым свойством. В рамках модальных логических систем уточняется специфика связи между субъектом и свойством (является ли связь необходимой или случайной, всегда ли субъект обладает данным свойством, хорошо это или плохо, поддается ли обоснованию (доказательству) принадлежность свойства к субъекту и т.д.). Модальная логика делится на несколько направлений: логика знаний, логика убеждений, логика оценок и норм, и т.д.
Релевантная логика (логика следования) озабочена проблемами, которые возникают в классической логике из-за некорректного (слишком широкого) описания логического следования, не согласующегося с интуитивным представлением о следовании одного высказывания из другого. Релевантная логика стремится отдельно выделить и
систематизировать только те принципы логики, которые уместны (релевантны), исключая при этом саму возможность парадокса материальной импликации.
Логика причинности является разделом современной логики, который концентрируется на изучении структур и отношений высказываний о причинных связях. Это те отношения, которые рассматриваются в качестве сравнительной модальности: "есть причина", "есть следствие", "предопределено", "детерминировано".
Логика изменений это раздел неклассической логики, который исследует логические связи суждений, которые описывают процесс изменения и становления объектов. При этом о характере конкретных объектов логика изменения ничего не утверждает, она посвящена созданию некоторого языка, который оформляется по законам синтаксиса и семантики и который в силу своего совершенства в состоянии конструировать строгие формулировки об изменении предметов и явлений.
Нечеткая логика основана на "расплывчатых множествах". В освоении новых областей знания вскоре очередь дошла и до "гуманистических систем", содержанием которых являются способности суждения и знание человека. В отличие от механических систем, эти системы плохо поддаются определению, численного описания они в принципе не допускают. Как создать высокоорганизованный искусственный язык или определенную систему общения человека с компьютером на соответствующем языке так, чтобы в каком-нибудь блоке вычислительной машины он принимал доступную для него "жесткую" форму классической логики?
Лотфи Заде нашел выход из этого положения в применении лингвистического подхода, согласно которому в качестве значения переменных допускаются не только числа, но и слова, и словесные сочетания. Такие переменные составляют основу нечеткой логики и приближенных способов рассуждений, которые могут оказаться более созвучными сложности и неточности гуманистических систем. На основании нечеткой логики было образовано понятие "расплывчатого множества" - определенного множество элементов, объединяемое некоторым свойством, степень проявления которого среди конкретных элементов подобного множества может быть разной и переход от "принадлежности к множеству"» и "непринадлежности к множеству" является непрерывным.
Для чего неклассические логики нужны? Вспомним, что логика это часть философии и исследовала мышление человека. Классическая логика, логика Аристотеля, была очень удачной (потому и получила такое распространение), но не могла полностью ответить на все вопросы, описать все ситуации. Заполнить недостающее и пытаются логики неклассические.
Некогда сугубо философские или математические, сегодня неклассические логики вызывают повышенный интерес. Причина в том, что сегодня активно развивается направление искусственного интеллекта. Это не философский вопрос прошлых лет "может ли машина мыслить", это практическое направление. Но не стоит смешивать искусственный интеллект и машинный разум.
Еще раз о системах счисления
Очень коротко, поскольку о них даже на канале написано достаточно много
В обычной жизни нам привычна десятичная система счисления. Но ЭВМ используют двоичную. Причина проста и мы ее сегодня уже рассматривали. Это два состояния электромагнитного реле и работы Клода Шеннона. Именно двоичная логика оказалась наиболее просто реализуемой в первых ЭВМ. А Шеннон показал, что достаточно обеспечить выделение необходимого количества единиц информации для представления всех возможных состояний. И двоичные машины смогли наиболее просто (и дешево, что важно) покрыть все потребности.
Это не означает, что машины работающие в других системах счисления не существовали. Я часто упоминаю Сетунь, троичную машину. Интерес к ней был большой, но увы... Можно считать, что виновато решение о копировании ЭВМ фирм IBM и DEC, которое погубило многие линейки советских ЭВМ. Можно считать, что проблема крылась в проблемах совместимости и отсутствии решений позволяющих применят машины не только для вычислений. Можно сослаться на массу других причин. Но троичные машины остались в прошлом не только у нас, но и в других странах. Пожалуй, Сетунь была единственной. Значит, причины все таки объективные.
Существовали (существуют) и десятичные машины. Такие машины сложнее двоичных, но удобнее для инженерных и научных расчетов. И их сложно считать универсальными, поскольку логика, не вычисления, а именно логика, остается двоичной. И ее сложнее реализовывать на недвоичной машине.
Есть ли смысл в недвоичных машинах и машинах на неклассической логике?
Вопрос далеко не так прост, как кажется. Все зависит от того, какая задача стоит. Строить универсальные недвоичные машины вряд ли стоит. С этим можно спорить, но это мое мнение.
Универсальная ЭВМ, двоичная и на классической логике, по прежнему покрывает подавляющее большинство возникающих на практике потребностей. Она может иметь самую разную архитектуру. Разрядность, на самом деле, даже не вторична. За счет универсальности такие машины получили огромное распространение. Зачастую проще и дешевле использовать простую ЭВМ (микроконтроллер), чем строить схему на обычной дискретной логике. Массовость позволяет сделать такие машины (процессоры, микроконтроллеры) дешевыми, что важно для конечного потребителя. Даже в СССР деньги имели большое значение.
Сложнее ответить на счет специализированных машин. А такие машины тоже нужны, пусть и далеко не массово. Если требуется выполнять только математические расчеты, а сама ЭВМ встраивается в специализированное устройство, многое определяется тем, нужно ли взаимодействовать с человеком. Если нужно, то может иметь смысл построить десятичную машину. Если взаимодействия не требуется, особого смысла в десятичной машине нет. Вполне подойдет и двоичная. Она еще и дешевле.
В некоторых случаях, когда вычисления нужно проводить очень быстро, а особая точность не требуется, может оказаться оправданным использовать даже АВМ. И так на практике делается. Где и как, оставлю очень далеко за скобками.
Но тут кроется еще одна тонкость. Даже десятичные машины часто строятся на двоичной базе. Просто уже на аппаратном уровне под одну цифру отводится 4 двоичных разряда и схемотехнически реализуется арифметика с таким представлением чисел. Причина в том, что работа с множеством уровней напряжений гораздо сложнее, чем использование 4 бит. И тут еще вмешивается неумолимая физика. Об этом чуть позже.
А что на счет машин на неклассических логиках? Во первых, такие машины будут плохо подходить для вычислительных задач. Во многих случаях. Да, десятичную машину можно использовать для работы в многозначной логике. Правда при этом базис скорее всего останется классическим, просто несколько бит будут хранить все возможные логические состояния.
С моей точки зрения, наиболее интересна нечеткая логика. Если говорить о системах искусственного интеллекта, то построенные на нечеткой логике машины могут существенно поддержать программные решения на аппаратном уровне. Это облегчит работу программистов, но что можно сказать о работе электронщиков? Прежде всего, как именно будут представлены понятия нечеткой логики в таких машинах? Если в глубине такие машины останутся двоичными, а все сведется к ровню, условно, микропрограммной поддержки... Можно ли будет такие машины называть неклассическими на самом деле?
Если подвести краткий итог, то могу сказать, что исследования машин на неклассических логиках, особенно, на нечеткой, весьма интересно и может оказаться перспективным. Но такие машины не будут универсальными. А значит, будут дорогими, по крайней мере, на первых порах. Если дойдут до практического применения.
Есть ли полностью неклассические машины?
Да, есть. Такие машины существовали и в виде абстрактных моделей в лабораториях ученых, и в виде реальных прототипов (гораздо реже). Такие машины часто пытались реализовать определенную концепцию, например, поддержку объектно-ориентированных программ или матричных операций в линейной алгебре.
Но самое большое разнообразие было в направлении "машины баз данных". Впрочем, сюда же относятся и машины поиска и сортировки. То есть, машины ориентированные на работу с данными, а не с числами. Такие машины были ориентированы не только на реляционную может данных, которая сегодня наиболее распространена. Исследовались и машины работающие с сетевой моделью данных. Машины с теговой памятью. Машины обработки полнотекстовых данных.
Большинство таких машин не только не вышли из стен лабораторий, но даже не добрались до этапа математического моделирования.
Непреклонная физика
Практическая реализация недвоичных машин и машин на неклассической логике связана с еще одной тонкостью. Дело в том, что значение переменной в машинах можно представить либо уровнями тока, либо уровнями напряжения. Представление в виде тока сталкивается с проблемой выделения тепла при протекании электрического тока по проводнику. Поэтому используются уровни напряжения.
Использование полевых транзисторов позволяет практически исключать протекание тока и выделение тепла в статическом состоянии. Увы, в динамическом режиме приходится перезаряжать емкости затворов и элементов схем. Во время переходных процессов транзисторы оказываются в активном режиме, хоть и кратковременно. Поэтому при работе даже современные процессоры нагреваются весьма ощутимо. И чем выше частота переключения, тем выше выделение тепла.
И это весьма актуальная проблема. Кристаллы современных микросхем содержат очень большое количество транзисторов. Поэтому надо максимально избегать активного режима, когда на транзисторе выделяется много тепла. Отсюда и ключевой режим - открыт/закрыт. А это полностью аналогично контактам реле. Значит - двоичная логика и двоичная система счисления.
Использование нескольких уровней напряжения для представления множества значений требует нескольких же источников, на которые будут коммутироваться ключами выходы логических элементов. На каждый уровень два ключа, так как ток может быть и втекающим, и вытекающим. Мы не можем использовать двухтактный выходной каскад и обратные связи, как это сделано в ОУ, например. Так как это сразу приведет к активному режиму работы и повышенному выделению тепла.
Вспомните ЭСЛ логику (серии 100 и 500, например). В ЭСЛ логике использовался активный режим работы транзисторов. Такая логика была очень быстрой, но очень горячей. Поэтому только ключевой режим. А это означает, что мы должны привести многоуровневую переменную к работе с двоичными ключами.
Возможно мы когда нибудь научимся представлять информацию не уровнями напряжения, а как то по другому. Тогда недвоичные, истинно недвоичные, машины станут реальностью. Как и машины на неклассических логиках. А пока это технологическое и физическое ограничение...
Немашинный аспект
Давайте оставим в стороне вычислительные машины. Да и логику. Давайте немного поговорим о том, как мы используем машины. Не о том, что сегодня машины используются везде и всюду, а о программной стороне медали. О языках программирования и парадигмах.
Первые языки программирования высокого уровня, которые отошли от уровня машинных команд, были ориентированы на вычисления. Это иногда отражалось даже в названиях. Fotran это FORmula TRANslation. Язык для записи формул в виде программ. PL/I это просто Programing Language - язык программирования.
Не только вычисления, но и условные переходы, процедуры и подпрограммы, ввод-вывод... Вот то, с чем тогда работали программисты. Но задачи все таки решались больше вычислительные.
Позже стали появляться специализированные языки ориентированные на прикладное применение. Например, язык COBOL для финансовых вычислений. Этот язык был довольно близок к табуляторам, по своей сути. Определение структуры данных ориентированный на таблицы (как колонки данных в табуляторах), форматы представления чисел.
Артефактом выглядит язык APL, поистине марсианский язык рассчитанный на математиков. Он не обрел популярность, так как был слишком уж специализированным и требовал специальных клавиатуры и дисплея.
Язык Snobol был ориентирован на обработку строк и текстовых данных.
Процедурное программирование, первые вопросы связанные с параллельными вычислениями, многозадачностью, синхронизацией, многопользовательскими системами. Попытки построения не только баз данных, но и баз знаний. Сфера применения ЭВМ расширялась, ставились все более сложные задачи, иногда очень далекие от вычислений. И программы становились все более сложными.
На смену процедурному стало приходить модульное программирование. Модуль содержал связанные процедуры, не все из которых были доступны извне модуля. Появляется понятие интерфейса модуля.
Вычислительные машины остаются фактически теми же, только более мощными, технологический прогресс не стоит на месте. А вот в применении машин прогресс значительный. Концептуальная революция, можно сказать.
Модульное программирование сменяется объектно-ориентированным подходом. Объект это самостоятельная высокоуровневая сущность, которая обладает собственными свойствами и способна взаимодействовать.
Функциональное программирование.
Сложность задач требует поддержки от машины все более высокоуровневых подходов и понятий. Не всегда такая поддержка выполняется на аппаратном уровне. Часто это комплекс аппаратных решений и программной поддержки. Прикладные программисты просто пользуются готовыми решениями.
Но без аппаратной поддержки у нас не было бы сегодня таких мощных систем обработки графики. Это ведь не только за счет высоких тактовых частот и разрядности достигается. Но сложные аппаратные средства требуют и сложных методов работы с ними. Поэтому появляются и соответствующие библиотеки поддержки. И соответствующие языковые средства, которые облегчают работу программистов.
Заключение
Что то я разошелся... Просто тема чрезвычайно большая и многогранная. Я даже кратко не смог обозреть самые самые базовые моменты. А рассказать хочется еще о многом. Но все таки пора остановится.
Нет, развитие вычислительной техники, информатики, во всем комплексе, отнюдь не остановилось! Даже на уровне электроники, хотя и можно увидеть некоторое замедление. Развитие не сводится к росту тактовых частот и разрядности. Разрядность я вообще не учитываю.
Да, в некотором смысле мы приближаемся к "насыщению". В отдельных решениях, но в не в общем и целом. Есть огромное поле деятельности, например, в области человеко-машинных интерфейсов.
Ограничивает ли нас двоичная машина и классическая логика. В чем то ограничивает. Но мы же помним, что даже для двоичной машины нет проблем в обработке абсолютно любой информации. И мы можем реализовать систему неклассической логики на программном уровне. Или на микропрограммном, что будет трудно отличимо от действительно неклассической машины.
Вопрос лишь в том, что нам это даст с практической точки зрения? Исследования велись и ведутся. Но важен только академический, но и практический, интерес. Сколько было "революционных и прорывных" решений и разработок, которые канули в лету...
Вы считаете, что я не прав? Но ведь сегодня можно построить модель неклассической системы. Попробуйте... Возможно, вы станете человеком, который откроет новую эру в развитии информационных технологий...