| Логика, сугубо говоря, это не обязательно прерогатива компьютеров и языков программирования. Логика мышления требуется во многих сферах жизнедеятельности человека. Создав компьютер, язык программирования человек создавал уже как набор элементарных операций, которые могли бы описать ход его естественного мышления, ибо любая программа по сути таковой и является - отражением нашего мышления, представлений о том, или ином, задачи, решение которой мы возлагаем на компьютер.
Ни одно из базовых "постулатов" логики: сравнение (И), совпадение (ИЛИ), исключение (ИСКЛЮЧАЕЩЕЕ ИЛИ) не исключает, что любое из этих действий может производиться над любым множеством объектов. Исключение составляет только суждение (отрицание суждения, НЕ).
Вы пригласили в ресторан четырех друзей с условием, что каждый из них должен быть одет в смокинг. Если все четверо предстанут пред вами одновременно, вам будет достаточно одного взгляда, чтобы понять, выполнено ваше условие или нет. Но если приглашенных будет сотни, то окинуть взглядом сразу всех будет не возможно - вы будете проверять каждого в отдельности. При этом если уже первый из них не будет в смокинге, то дальнейшую проверку вы уже производить не будете - условие уже не выполнено.
Если трое друзей в ресторане будут держать над вашей чашечкой кофе три ложечки, предлагая добавить в него коньяк, то вы оцените ситуацию сразу - любая из ложечек с коньяком будет отличаться от пустых соседних. Вы без долгих проверок поймете, что таки насладитесь незабываемым кофе. Но если такое предложение последует от десятка друзей, вы будете вынуждены проверять каждую ложечку в отдельности, и поймете уже после первой, же попавшейся ложечки с коньяком, что кофе будет незабываемым. Да большего "ИЛИ" и не надо, вредно для здоровья.
Мы мыслим образно, и все такие логические задачи решаем сразу, хотя при этом в нашем мозгу, возможно, решается миллионы элементарных задач. Но имея возможность решить логическую задачу за "один проход", параллельно, мы, тем не менее, можем решать ее и последовательно, изучая каждый объект в отдельности на предмет выполнения условий. Но когда условия позволяют решить задачу сразу, параллельно, мы этого делать не станем, мы не будем тратить время на неоправданные действия, и это тоже следствие нашей логики.
Если я увижу запись выражения:
echo true & true & true & true;
то мне даже Денвер запускать не нужно, я и без интерпретатора буду знать, что получу в результате 1. Я оценю всю запись сразу, даже не читая ее слева на право, идентичность всех ее операндов легко читается визуально, сразу всех. А вот интерпретатору придется «попотеть».
Процессор мыслит плоско последовательно, выполняя каждую операцию под воздействием тактовых импульсов, при этом для выполнения команд требуются от одного до нескольких тактов. В любом случае, процессор будет выполнять логические операции последовательно, независимо от того, над каким числом входных данных это действие производится. Но ведь сам процессор, на элементарном уровне, действует более эффективно. Получив команду, он ее дешифрирует, подключая, таким образом, блок микропрограммного управления, который, в свою очередь, соединит необходимые узлы шиной, решив поставленную логическую задачу. При этом уже сам этот процесс может требовать сравнение n-данных согласно условию, и это сравнение будет происходить сразу над всеми данными.
Когда-то этого было вполне достаточно. Иерархия процессора, взаимодействие всех узлов его архитектуры можно было считать идеальным. Время показало, что нет. Узкие места такого подхода не позволяют решать все возрастающие по объему задачи, поэтому идея параллельных процессоров, это естественный ход событий. Но и у этого решения есть предел.
Не стоит сомневаться в том, что появятся другие процессоры (а может быть и не процессоры, может быть, это будет называться как-то иначе), которые будут мыслить образно, также как это делает мозг человека. Тогда нынешние процессоры может, и будут выполнять в такой иерархии роль элементарных кирпичиков, не более, а может они, и вообще прекратят свое существование. При этом главный мозг такой иерархии сможет сравнивать множество объектов сразу, не последовательно, и гораздо большее число объектов, чем которым может оперировать человек.
Возможно, что человечество узнает о новом измерении пространства, и тогда выражение И первый И второй И третий И… будет дополнено новыми условиями, но именно дополнено, а не подвергнуто сомнению, ибо само это выражение вполне логично.
Процесс же оптимизации логических (и не только) выражений, это естественный процесс, позволяющий исключить лишние узлы или действия в итоге. Если говорить относительно программного решения условия, причем на действующих в настоящее время процессорных архитектурах, то можно говорить, лишь о том, что в итоге условие может быть выполнено последовательно. Но если речь идет об аппаратном уровне решения условия, то в данном случае эффективнее действовать иначе, обрабатывая сразу все входные данные.
Утверждение, что поставленное условие может решаться только так и не иначе, опираясь представлением только одной области его применения, крайне пагубно для понимания базовых знаний теми, кто только начинает их изучать. Следствие такого непонимания можно наблюдать часто, когда забегают далеко вперед, ища там ответа. Когда не могут из явного описания функций выбрать нужную. А нужно всего лишь «разложить по полочкам» естественный ход собственного мышления, из которого явно будет вытекать «это самое описание» этих самых необходимых функций. Оптимизация же, это последующий процесс. Только так и никак иначе: в глобальном плане – сверху вниз, от общего к частному; в частностях – снизу вверх, от широких возможностей базовых основ, до их минимизации. | |