Category: история

Category was added automatically. Read all entries about "история".

RB35. Об Учителе. Памяти И.В.Поттосина






Предыдущие заметки:
  • RB34 (03.12.2007) “Роса”: перенацеливаемая отечественная ОС нового поколения
  • RB33 (27.11.2007) Лебединая песнь Digital
  • RB32 (22.11.2007) Ортогональная система языков в проекте "Роса"
  • RB31 (22.11.2007) Публичный старт проекта "Роса"
  • Оглавление


    Памяти Игоря Васильевича Поттосина
    К 75-летию со дня рождения

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

    Игорь Васильевич всегда старался оставаться в тени. Был блестящим организатором науки, правой рукой Андрея Петровича Ершова, при этом мудро и обстоятельно делал своё дело, не гонясь за званиями, наградами, научным и общественным признанием. После смерти Ершова (1988) Игорь Васильевич взвалил на себя нелёгкую ношу продолжения духа и традиций сибирской школы программирования. Стал директором Института систем информатики им. Ершова (ИСИ СО РАН) — преемника знаменитого Отдела программирования ВЦ СО АН СССР, который они с Ершовым и формировали в конце 1950-х годов.

    Впервые мне довелось познакомиться с Игорем Васильевичем в студенческие годы, когда учился на 4-м курсе Московского авиационного института (МАИ). В мае 1986 г. на базе ВЦ СО АН СССР проводился семинар «Язык программирования Модула-2 и инструментальные средства на его основе» (PDF). Поттосин, во многом разделявший взгляды Никлауса Вирта на продуманность и лаконичность выражения идей, давно положил глаз на новое творение маэстро языков программирования. В дальнейшем именно этот язык стал одним из любимых у Поттосина. Два ученика Игоря Васильевича — Дмитрий Кузнецов и Алексей Недоря — стали программистским ядром проекта Кронос: 32-разрядного отечественного персонального компьютера, ориентированного на Модулу-2. Он зародился в 1984 г. в одной из комнат общежития Новосибирского университета (НГУ). Тот проект дал жизнь и новой отечественной операционной системе Excelsior (внешне напоминает UNIX System V, реализована на Модуле-2), и настоящей фабрике по производству высококачественных компиляторов, которая теперь находится в ведении новосибирской компании Excelsior, где собралось немало кроносоведов и кроносолюбов, продолжающих славные традиции романтических 1980-х.

    Именно Модула-2 стала для меня той путеводной звездой, которая и привела к Поттосину. В 1983 г. в Московском Доме книги, что на Новом Арбате, мне посчастливилось приобрести серебристую книгу на английском языке. То был бестселлер проф. Вирта Programming in Modula-2. И программирование, и технический английский я начинал осваивать именно по этой книге. Затем в поисках доступных трансляторов и библиотек постепенно вышел на отечественную Рабочую группу по Модуле-2 (детище Дмитрия Михайловича Сагателяна из Института общей физики АН СССР). А через неё и попал в Новосибирск.

    Следующая встреча с Игорем Васильевичем произошла также в новосибирском Академгородке два года спустя (1988). Я представлял на Всесоюзной научной конференции «Методы трансляции и конструирования программ» тему направления, которое стало моей дипломной работой — «Методология разработки сложных программных систем», где обобщался опыт работы с Адой и Модулой-2 применительно к использованию мультипроцессных систем, опирающихся на верификацию формальных моделей (сети Петри). Честно говоря, было удивительно наблюдать отеческое внимание такого мэтра по отношению к рядовому дипломнику из Москвы. Он знакомил с Академгородком, ВЦ СО АН СССР, библиотекой Ершова.

    На фоне бесконечной московской суеты здесь был совсем иной мир. Это трудно передать словами. Просто другая планета. Библиотека произвела сильное впечатление, хотя в те дни уже не было того информационного голода, который во многом с 1960-х годов пытался компенсировать А. П. Ершов, привозя из каждой зарубежной поездки журналы, книги, препринты, оттиски статей, документацию — всё, что можно было собрать и увезти. Библиотека Ершова, для работы в которой, как я потом узнал, специалисты приезжали с разных концов страны, была уникальным многотысячным собранием, во многом определявшим высокий уровень развития отечественных школ программирования. И хотя с начала 1980-х на протяжении многих лет я буквально дневал и ночевал в ГПНТБ (Государственная научно-техническая библиотека СССР в Москве), библиотека Ершова заметно выделялась своим фондом, качеством комплектации.

    В 1989 г. Игорь Васильевич занялся подготовкой сборника «Язык Модула-2. Его реализация и использование» (PDF, 18 Мбайт), в который отобрал две работы, написанные мной и моими коллегами по научно-исследовательской работе в МАИ. С его подачи я заинтересовался Модулой-3, после чего вышел на прямые контакты с Биллом Калсовым (Bill Kalsow) и его коллегами в DEC Systems Research Center, поскольку тогда мы начали в МАИ работать над переносом компилятора Модула-3 в MS-DOS с реализацией его на Модуле-2. Затем наступил чёрный период безвременья (1991–1994 гг.), когда научные контакты было трудно поддерживать. Ниточки рвались одна за другой. Нужно было попросту выживать.

    В 1994 г. на базе Международного инженерного университета, пообещавшего финансирование по линии UNESCO и UNIDO, я затеял издание научно-популярного альманаха «Технология программирования» (см. сокращённую PDF-версию; с.1-7, 171-200; 30 Мбайт). Его концепция — стать своеобразным аналогом Scientific American в сфере программирования. Ежеквартальное 200-полосное издание с компакт-диском, где основное внимание уделялось фундаментальным, мировоззренческим вопросам с выделением конкретики в специальные приложения — журналы в журнале. Первый номер увидел свет в мае 1995 г. (за несколько дней до официального анонса Java). Подобного издания не было не только у нас в стране, но и в мире. Предварительные консультации показали, что и наши, и зарубежные учёные очень хорошо восприняли идею и согласились её поддержать. Было очевидно, что противостоять конъюнктуре и развивать это направление в печатном органе можно только при определённой финансовой его независимости. В противном случае всё опять сведётся к бесконечному размусоливанию нюансов API-вызовов, а также рассмотрению костылей популярных языков и систем программирования.

    Игорь Васильевич одним из первых крайне заинтересовался как самой идеей, так и её воплощением. Между нами активизировалась переписка (благо тогда уже электронная почта была вполне доступна). Он прислал мне для публикации обзорный материал «Российские исследования по языкам программирования и трансляции» (PDF). Но в те дни нашим планам не суждено было сбыться. Даже несмотря на то, что финансирование прекратилось не начавшись, мы в последующие годы обсуждали разные моменты, касающиеся идеи журнала и той позитивной атмосферы, которую он может вокруг себя создать. Игорь Васильевич был убеждён — подобное издание в печатном виде у нас будет тяжело пробить, нужны другие ходы. И хотя мы оба тяготели к бумажной форме издания, перспективы виделись именно в Интернете. Но ни аудитория, ни сама Web-среда не были к этому готовы. Пришлось идею отложить до лучших времён.

    С 1996 г. я стал обозревателем, а потом и научным редактором ComputerWeek-Moscow. То был ведущий компьютерный еженедельник страны. Довелось вновь приехать в Новосибирск и встретиться с Игорем Васильевичем — во время визита в Новосибирск Никлауса Вирта (1996) и на Международной конференции памяти А. П. Ершова (PSI). Он приехал встречать в аэропорт Толмачево, а потом мы долго бродили по Акадегородку, где он сдержанно улыбался моим восторгам в отношении IDL и с горечью говорил о непростой ситуации в Академгородке — страну покидали талантливые люди и в воздухе витала атмосфера безысходного запустения. Во время нашей последней встречи в Академгородке он подарил мне редкое издание «А. П. Ершов. Избранные труды», в создании которого и сыграл ведущую роль. Игорь Васильевич был духовно очень сильным человеком, потрясающим оптимистом, но я убеждён, что его внезапный уход из жизни во многом связан именно с той гнетущей атмосферой тотального разрушения культуры, науки и образования, которая окутала всю страну.

    В середине 1997 г. Микаэль Франц, ученик Вирта, позвал к себе в Калифорнию (University of California, Irvine), защищаться и ковать славу мобильного кода. Но ехать в Штаты желания не было. Научная карьера не интересовала, а заниматься любимым делом можно было и дома.

    Осенью 1997 г. Игорь Васильевич переслал мне очень интересное письмо Никлауса Вирта, которое во многом повлияло на мое мировосприятие. Но сначала поясню ситуацию. В июньском номере журнала IEEE Computer (1997) вышла необычная статья под названием «The Feel of Java». Это, кстати, ведущее издание профессиональной ассоциации IEEE Computer Society. Приведу цитату.

    Java — это настоящий язык-трудяга. Это не результат чьей-то диссертации, это язык для работы. Java покажется очень знакомым самым разным программистам, поскольку мы предпочитаем делать проверенные вещи. <...> Итак, что же такое Java? Java ощущаешь как игривый и гибкий язык. Вы можете создавать с его помощью такие вещи, которые сами являются гибкими. Java ощущаешь как детерминированный язык. Если вам хочется, чтобы он что-то сделал, просто попросите его об этом. В нём не видится ничего опасного: вы можете спокойно попробовать что-то сделать, и если окажетесь неправы, то быстро получите сообщение об ошибке. Java ощущаешь как очень богатый язык. Мы постарались снабдить его большой библиотекой классов. Поэтому не откладывайте дело в долгий ящик, а садитесь за компьютер и пишите свой код.

    Не складывается ли впечатление, что перед нами выдержка из рекламного объявления? А ведь эти слова принадлежат Джеймсу Гослингу, не только автору Java, но и человеку, который защитил диссертацию в известном университете Карнеги-Меллон, связанную с проектом Andrew Windows System, и который в те годы стал вице-президентом компании Sun Microsystems.

    «Представьте себе, — не в силах сдержать возмущение, комментирует приведённую цитату Вирт, — что эти слова были написаны в 1960-е годы, и замените слово «Java» на слово «Алгол». Автора сочли бы человеком психически ненормальным, слова его большей частью чужды науке и не имеют с ней ничего общего. Сегодня никто даже не возмущается, нет никакой реакции от «научного» сообщества. Как же низко могла пасть «информатика»? И это делается с молчаливого одобрения такой уважаемой организации, как IEEE Computer Society?» В итоге на свет появилась статья «Java: гадание на кофейной гуще» (PDF, 1998).

    Сам по себе чей-то научный авторитет (каковым обладал Вирт) не был для Поттосина безусловным критерием истины. Помнится, он довольно горячо выражал своё несогласие с позицией знаменитого Петера Наура по роли интуции в программировании. «Интуиция в разработке программного обеспечения» (PDF, 1985). (Эту статью я готовил для второго номера «Технологии программирования».) По его аргументации и убеждённости было видно, что он глубоко прорабатывал данный вопрос.

    Запомнились встречи с Поттосиным в Москве в конце 1990-х. Игорь Васильевич по обыкновению приглашал в гостиницы, где останавливался проездом или по московским делам. Обсуждали различные темы, даже не имеющие отношения к программированию, но в разговорах рано или поздно речь заходила о научно-популярном издании для программистов. Он был удивительно целеустремлённый человек, который с невероятной мягкостью и деликатностью настойчиво продвигал важные вещи. «Мне нравится эта идея», — не раз говорил он. И было ясно, что он имел в виду — «не вздумайте её хоронить»!

    Большое турне Вирта осенью 2005 г., в организации которого мне довелось участвовать с подачи проф. Юрга Гуткнехта (ETH Zurich) и Д. М. Сагателяна, вдохнуло новую жизнь в старый замысел. Но очень остро высветило и тот гигантский разрыв между спросом и предложением — «промывкой мозгов» молодого поколения и действительно фундаментальными вещами, лежащими вне сиюминутной конъюнктуры.

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

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

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

    Руслан Богатырёв
    Москва
    21.02.2008

    RB30-1. В.Ф.Турчин, теория метасистемных переходов и метасистемное программирование

    Продолжение заметки см. RB30-2.
    Окончание заметки см. RB30-3.

    В предыдущей заметке я постарался вкратце изложить свой субъективный срез книги Джорджа Пойа применительно к идее Эдгара Дейкстры об аналогии между схемами решения задач в математике и программировании. Ассоциация, предложенная Дейкстрой, видится весьма полезной: процесс мышления в обоих случаях имеет больше сходства, чем различий и даёт важный ключ к пониманию разных аспектов сложности процесса программирования. Подобные аналогии отмечал в своей статье "Программирование — вторая грамотность" (1981) и А.П.Ершов: "Законы программирования смыкаются с математическим образованием, образуя единый, но ещё не построенный фундамент воспитания операционного и комбинаторного мышления, способности к абстракции, рассуждению и действию".

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

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

    В своей работе "Научная фантастика и научная реальность в информатике" (EWD952, 1986) Эдгар Дейкстра писал: “Она (информатика – прим. Р.Б.) обладает всей остротой чистой математики, будучи более формальной, чем многие другие отрасли математики. Она не может избежать такой формальности, поскольку любой язык программирования, будучи интерпретируемым механически, представляет своего рода формальную систему. В то же время она обладает всей прелестью прикладной математики, поскольку огромная мощность современных компьютеров даёт такие возможности для создания хаоса, что её методы необходимы, если мы не намерены угодить в ловушку сложности, которую сами же и создали. Научиться не попадать в собственноручно созданную ловушку сложности, сохранять вещи достаточно простыми и научиться эффективно мыслить о своих разработках — вот центральная задача информатики”.

    Продолжим теперь знакомство с другими важными материалами, имеющими отношение к анализу основ такой интеллектуальной сферы, как программирование.

    Как известно, академик А.П.Ершов выделял три ветви программирования: теоретическое, системное и прикладное. Где же между ними проходят границы? Если оставить в стороне теоретическое программирование (как фундаментальную науку) и обратиться к двум остальным, можно заметить, что к сфере системного программирования принято причислять то, что связано с инфраструктурным программным обеспечением. Оно в большей степени абстрагируется от прикладных задач и концентрируется на их отображении (трансляции) на ту или иную компьютерную платформу. Другими словами, выступает в роли посредника между компьютером и прикладной программой. Операционные системы (ОС), системы программирования (языки), системы управления базами данных (СУБД) — вот три кита системного программирования.

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

    Система является более высокоразвитой формой программного обеспечения, нежели программа. В сфере прикладного программирования с формированием постепенной зрелости процесса разработки ПО и богатого спектра приложений потребность в системах становится всё выше. При этом нет чётко выраженного направления в программировании, которое бы занималось вопросом создания программных систем. Вне зависимости от того, к какой сфере они относятся — системного программирования или прикладного. Опять же на интуитивном уровне понятно, что как только мы переходим от программы к системе, есть много общего (единого) в программировании систем: как тех, что ближе к железу, так и тех, что ближе к прикладным задачам. Как и в области строительства, одной архитектурой здесь дело не ограничивается. Важны и другие, инженерные элементы. (Хотя бы то, из какого "материала" такая архитектура выполнена.) UNIX — это прежде всего архитектура. Язык, казалось бы, играет здесь вторичную роль. Но попробуйте заменить Си на Модулу-2 и вы увидите существенную разницу. При той же архитектуре. Попробуйте заменить фрагменты на Си на реализацию тех или иных формализмов (конечных автоматов, сетей Петри и т.п.). Архитектура та же. А "материал" и инженерные коммуникации несколько иные. Значит, "сопромат" и в программировании — не последнее дело…

    С системами обычно связывают понятие управления. Не будем сейчас вдаваться в дискуссию относительно систем, в которых нет управления. К этому мы ещё вернемся. А пока обратим свой взгляд на уже проработанные направления, имеющие отношение к вопросам синтеза и анализа систем вообще. Тектология А.А.Богданова, праксеология Е.Е.Слуцкого и Т.Котарбиньского, общая теория систем Л.Берталанфи, кибернетика Н.Винера и У.Р.Эшби, системология Г.Н.Поварова… Всё это заслуживает отдельного обсуждения.

    Особняком в этом ряду стоит кибернетика. Она сначала стремительно ворвалась в нашу жизнь, а потом столь же стремительно была предана забвению. Очень уж мы склонны к крайностям. Впрочем, и в годы её расцвета скепсис был немалый, причем даже со стороны тех, кто её развитием реально и занимался. В своей книге "Беседы о программировании" (1963) советский математик и один из первых отечественных программистов Александр Семёнович Кронрод не без чувства юмора (хотя и весьма серьёзно) писал о кибернетике так: "Как должна развиваться наука-кибернетика? Плодотворно. Для этого надо: (1) Чтобы программированием занимались программисты, (2) Механизмами в живом организме занимались физиологи, биофизики, биохимики и т.д., (3) Специалисты по социальным дисциплинам изучали законы, управляющие обществом, (4) Лингвисты и филологи занимались своим делом, (5) Врачи лечили и с этой конечной целью изучали болезни и больных, а также и здоровых, (6) Шофёры водили автомобили (автобусы, самосвалы и т.д.) и (7) Никто без нужды не болтал попусту. А когда врачам нужны теория вероятностей, математическая статистика, дифференциальные уравнения или работа на электронных машинах – им необходимо всемерно помогать в этом деле. И иногда – учить и даже подталкивать, потому что человек часто просто не знает о возможностях чужой науки. И делать это надо профессионально. А наука-кибернетика здесь ни при чём. И автор даже подозревает, что она и ни в каком деле ни при чём. Потому что он лично не слышал ни о каком достижении этой науки-кибернетики. И полагает, что, кроме названия, у науки-кибернетики больше ничего и нет".

    Другой известный советский математик, академик А.Н.Колмогоров высказывал несколько иной взгляд. В 1959 г. в предисловии к книге английского кибернетика У.Р.Эшби он писал: “Сейчас уже поздно спорить о степени удачи Винера, когда он в своей известной книге в 1948 г. выбрал для новой науки название “кибернетика”. Это название достаточно установилось и воспринимается как новый термин, мало связанный со своей греческой этимологией. Кибернетика занимается изучением систем любой природы, способных воспринимать, хранить и перерабатывать информацию и использовать её для управления и регулирования. При этом кибернетика широко пользуется математическим методом и стремится к получению конкретных специальных результатов, позволяющих как анализировать такого рода системы (восстанавливать их устройство на основании опыта обращения с ними), так и синтезировать их (рассчитывать схемы систем, способных осуществлять заданные действия). Благодаря этому своему конкретному характеру кибернетика ни в какой мере не сводится к философскому обсуждению природы “целесообразности” в машинах и философскому анализу изучаемого ею круга явлений”.

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

    После изучения ряда позабытых работ у меня возникла идея выделить особое направление в программировании, которое затрагивало бы (объединяло в определённом аспекте) теоретическое, системное и прикладное программирование в контексте синтеза и анализа программных систем. Термин "метасистемное программирование" подсказала книга Валентина Фёдоровича Турчина "Феномен науки. Кибернетический подход" (1970). О том, как метасистемное программирование соотносится с кибернетикой, мы ещё успеем поговорить. Сейчас же давайте сосредоточимся на сути подхода В.Ф.Турчина.

    На мой взгляд, книга Турчина не менее важна, не менее фундаментальна, нежели ранее представленная книга Джорджа Пойа. Очень рекомендую внимательно её изучить (перечитать, возможно, не один раз). Здесь же дам свой субъективный срез по этой книге применительно к термину "метасистемное программирование".

    В.Ф.Турчин. "Феномен науки: Кибернетический подход к эволюции". — http://www.europrog.ru/book/psvt1993r.pdf (1,6 Мбайт). В HTML оригинал здесь: http://www.refal.net/turchin/phenomenon/

    Биографическая справка. Валентин Фёдорович Турчин родился в 1931 г. в г.Подольске Московской области в семье профессора агрохимии. Физик, математик, программист, философ. (Ровно такая же последовательность, такая же широта интересов была в биографии Эдгара Дейкстры.) Окончил в 1952 г. физический факультет МГУ. С 1953 по 1964 гг. работал в подмосковном Обнинске в Физико-энергетическом институте, где изучал рассеяние медленных нейтронов в жидкостях и твёрдых телах и где защитил кандидатскую диссертацию (1957). В 1964 г. оставляет физику, переходит в Институт прикладной математики им. М.В.Келдыша АН СССР и посвящает свою деятельность информатике. В 1966 г. была опубликована его первая работа по метаязыку Рефал, построенному Турчиным на основе рекурсивных функций: “Метаязык для формального описания алгоритмических языков — Цифровая вычислительная техника и программирование” (Москва, 1966). Турчин заложил основы метавычислений, предложив качественно новый метод преобразования и оптимизации программ — суперкомпиляцию.
    В  1967 г. Турчин подписал первое письмо в защиту А.Гинзбурга. В 1968 г. в Самиздате появляется брошюра «Инерция страха». В 1970 г. им подготовлена к печати книга «Феномен науки» (опубликована на английском языке в 1977 г.). В 1973 г. он выступил с открытым письмом в защиту А.Сахарова. После этого перед Турчиным закрываются все возможности научной работы. В 1977 г. он вынужден покинуть СССР и эмигрировать в США. Работал в Институте математических наук им. Куранта в Нью-Йоркском университете (Courant Institute for Mathematical Sciences). С 1979 по 1999 гг. был профессором компьютерных наук в The City College of New York. В 1991 г. совместно с Cliff Joslyn (Los Alamos National Laboratory) и Francis Heylighen (Free University of Brussels) основал проект Principia Cybernetica Project — энциклопедия идей по кибернетической эволюции человечества, концепция Всемирного мозга на основе самоорганизации модулей знаний в Интернете. В 1998 г. стал сооснователем компании SuperCompilers.


    Важное уточнение. В.Ф.Турчин был принят в Институт прикладной математики им. М.В.Келдыша АН СССР с большими проблемами, которые были вызваны ведением им диссидентской деятельности. Как отметил мне в личной переписке Михаил Михайлович Горбунов-Посадов, за неё его и уволили с предыдущей работы. Никто брать его не хотел (да и не мог). Но Михаил Романович Шура-Бура, опираясь на поддержку М.В.Келдыша, взял Турчина в Институт, правда, под честное слово, что диссидентством здесь он заниматься не будет. И Турчин достаточно долго держался. Возможно, именно этим мы обязаны появлению Рефала. Но в конце концов Турчин не выдержал, пришёл к Михаилу Романовичу и заявил, что молчать больше не в силах и, согласно их уговору, увольняется. -- [Благодарю М.М.Горбунова-Посадова за это уточнение].

    Избранные публикации:


    В.Ф.Турчин в своей книге “Феномен науки” сквозь призму кибернетики рассматривает эволюцию различных систем и вводит термин "метасистемный переход". Вот как он его определяет: "Когда некоторое число систем интегрируются в единое целое с возникновением нового уровня управления, мы говорим, что имеет место метасистемный переход. Новая система есть метасистема по отношению к старым. Метасистемный переход является по определению творческим актом. Он не может совершиться под воздействием одних лишь внутренних факторов интегрируемой системы, но всегда требует вмешательства извне, “сверху”.

    Это очень лаконичное разъяснение. Чтобы в нём разобраться поглубже, имеет смысл немного погрузиться в контекст восприятия. Для этого воспользуюсь приёмом избирательного цитирования.

    Во введении к своей книге В.Ф.Турчин разъясняет истоки её замысла: "Принципы, столь общие, что они применимы как к развитию науки, так и к биологической эволюции, требуют для своего выражения столь же общих понятий. Такие понятия даёт кибернетика — наука о связях, управлении и организации в объектах любой природы. В кибернетических понятиях с равным успехом описываются явления физико-химические, биологические, социальные. Именно развитие кибернетики и особенно её успехи в описании и моделировании целенаправленного поведения и распознавания понятий сделали возможным написание этой книги. Поэтому более точно её предмет можно определить так: кибернетический подход к науке как к изучаемому явлению. Идейным стержнем книги является понятие о метасистемном переходе, т.е. переходе от кибернетической системы к метасистеме, включающей в себя множество систем типа исходной, организованных и управляемых определённым образом. Сначала это понятие было положено автором в основу анализа развития знаковых систем, используемых наукой. Затем, однако, оказалось, что исследование под этим углом зрения всей эволюции жизни на Земле позволяет воссоздать связную и подчинённую единым закономерностям картину или, лучше сказать, киноленту, которая начинается с первых живых клеток и кончается современными научными теориями и системой промышленного производства. Эта кинолента указывает, в частности, место феномена науки в ряду других явлений мира и раскрывает его значение на фоне общей картины эволюции Вселенной. Так возник замысел настоящей книги".

    Книга Турчина написана с философским уклоном. При этом читается очень легко. Но после ознакомительного прочтения в ней стоит выделить разные аспекты и перечитать сквозь их призму. Сейчас мы остановимся на "метасистемном программировании", точнее, на его базовых понятиях — метасистемах и метасистемных переходах.

    Слово В.Ф.Турчину: "Важное место в книге отводится проблемам теории познания и логики; они трактуются, конечно, с кибернетических позиций. Кибернетика сейчас ведет наступление на традиционную философскую гносеологию, давая новую, естественно-научную интерпретацию одним её понятиям и отвергая другие как несостоятельные. Некоторые философы противятся этому наступлению, считая его посягательством на свою территорию. Они обвиняют кибернетиков в “огрублении” и “упрощении” истины, в игнорировании “принципиального различия” между формами движения материи (и это несмотря на тезис о единстве мира!). Но философ, которому чуждо землевладельческое отношение к различным областям знания, должен приветствовать атаки кибернетиков. В своё время развитие физики и астрономии уничтожило натурфилософию, избавив философов от необходимости говорить приблизительно о том, о чём ученые могут говорить точно. Очевидно, развитие кибернетики сделает то же с философской гносеологией или — скажем более осторожно — со значительной её частью. Этому надо только радоваться. У философов всегда будет достаточно своих забот: наука избавляет их от одних, но доставляет другие".


    Системы, подсистемы, состояния

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

    Турчин пишет: "Сам термин «кибернетика« ввел, как известно, Норберт Винер, определив его описательно как учение о связях и управлении в живом организме и машине. Чтобы более точно дать определение кибернетики, как и всякой научной дисциплины, мы должны ввести её основные понятия. Собственно говоря, ввести основные понятия — это и значит уже определить данную науку, ибо остаётся только добавить: описание мира с помощью этой вот системы понятий и есть данная конкретная наука. В основе кибернетики лежит прежде всего понятие системы как некоторого материального объекта, состоящего из других объектов, называемых подсистемами данной системы. Подсистема некоторой системы, в свою очередь, может рассматриваться как система, состоящая из подсистем. Поэтому, если быть точным, смысл введённого нами понятия заключается не в термине «система» самом по себе, т.е. не в приписывании некоторому объекту свойства «быть системой», что довольно бессодержательно, ибо каждый объект может считаться системой, а в связи между терминами «система» и «подсистема», отражающей определённое отношение объектов. Второе важнейшее понятие кибернетики — понятие состояния системы (подсистемы). Подобно тому как понятие системы непосредственно опирается на нашу пространственную интуицию, понятие состояния непосредственно опирается на нашу интуицию времени, и его невозможно определить иначе, как сославшись на опыт. Когда мы видим, что объект в чём-то изменился, мы говорим, что он перешёл в другое состояние. Как и понятие системы, понятие состояния является скрытым отношением — отношением между двумя моментами времени. Если бы мир был неподвижным, понятие состояния не могло бы возникнуть, и в тех дисциплинах, где мир рассматривается статически, например, в геометрии, понятие состояния отсутствует. Кибернетика изучает организацию систем в пространстве и времени, т.е. то, каким образом связаны подсистемы в систему и как влияет изменение состояния одних подсистем на состояние других подсистем. Основной упор делается, конечно, на организацию во времени, которая в случае, когда она целенаправленна, называется управлением. Причины связи между состояниями системы и вытекающие отсюда особенности её поведения во времени часто называют заимствованным из физики термином динамика системы. Этот термин в применении к кибернетике неудачен, так как, говоря о динамике системы, мы склонны рассматривать её как нечто целое, в то время как в кибернетике главным является исследование воздействия друг на друга подсистем, образующих данную систему. Поэтому мы предпочитаем говорить об организации во времени, употребляя термин "динамическое описание" только тогда, когда его нужно противопоставить статическому описанию, учитывающему лишь пространственные отношения между подсистемами. Кибернетическое описание может иметь различный уровень детализации. Одну и ту же систему можно описывать либо в общих чертах, разбив её на несколько крупных подсистем, «блоков», либо более детально, описав строение и внутренние связи каждого блока. Но так или иначе кибернетическое описание всегда имеет какой-то конечный уровень, глубже которого оно не распространяется. Подсистемы этого уровня рассматриваются как элементарные, не разложимые на составные части. Реальная физическая природа элементарных подсистем кибернетика не интересует, ему важно только, как они связаны между собой. Два физических объекта могут радикально отличаться друг от друга по своей природе, но если на каком-то уровне кибернетического описания они организованы из подсистем одинаково (с учетом динамического аспекта!), то с точки зрения кибернетики их можно считать — на данном уровне описания — тождественными. Поэтому одни и те же кибернетические соображения могут быть применимы к таким разным объектам, как радиотехническая схема, программа для вычислительной машины или нервная система животного".


    Нервная сеть

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

    Турчин начинает с нервной сети, с понятий рецепторов и эффекторов: "Общая схема нервной системы «кибернетического животного» в его взаимодействии с внешней средой представлена на рисунке


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


    Что такое понятие

    Пойдём дальше. От рецепторов и эффекторов — к единичным и абстрактным понятиям.

    Турчин пишет: "Множество ситуаций в кибернетике называют понятием. Чтобы лучше уяснить, как кибернетическое понимание слова «понятие» связано с его обычным пониманием, допустим, что рецепторы рассматриваемой нами нервной сети — это светочувствительные нервные окончания сетчатки глаза или же вообще какие-то светочувствительные точки на экране, подающем информацию в нервную сеть. Рецепторы возбуждаются тогда, когда соответствующий участок экрана освещён (точнее, когда его освещённость больше некоторой пороговой величины), и остаются в состоянии покоя — в противном случае. Если на месте каждого возбужденного рецептора представить себе светлую точку, а на месте каждого невозбужденного — тёмную, то получится картина, которая отличается от изображения, падающего на экран, лишь своей дискретностью (т.е. тем, что она распадается на отдельные точки) и отсутствием полутонов. Будем считать, что точек (рецепторов) на экране достаточно много, а изображения, которые могут оказаться на экране, — их мы будем называть «картинками» — предельно контрастны, т.е. состоят лишь из белого и чёрного цвета. Тогда каждая ситуация соответствует определенной картинке.



    Согласно традиционной (аристотелевской) логике, когда мы думаем или говорим о какой-то определённой картинке (например, о той, которая находится в левом верхнем углу на рис. 2.1), то мы имеем дело с единичным понятием. Кроме единичных понятий, есть ещё общие, или абстрактные, понятия. Например, мы можем думать о пятне вообще — не о каком-либо конкретном пятне (допустим, из числа изображённых в верхнем ряду на рис.2.1), а о пятне как таковом. Точно так же мы можем обладать абстрактным понятием прямой линии, контура, четырёхугольника, квадрата и т. д. Однако что значит «обладать абстрактным понятием»? Как можно проверить, обладает ли кто-то данным абстрактным понятием, например понятием «пятно»? Очевидно, только одним способом: предложить испытуемому серию картинок и попросить, чтобы он о каждой из них сказал, пятно это или нет. Если окажется, что он называет пятном только те и все те картинки, на которых «изображено пятно» (это уже с точки зрения испытующего), то, значит, понятием пятна он обладает. Иначе говоря, мы должны проверить его способность распознавать принадлежность любой предъявленной картинки к множеству картинок, которые мы описываем словом «пятно». Итак, абстрактное понятие в обычном смысле слова — во всяком случае когда речь идёт о чувственно воспринимаемых образах — совпадает с введённым нами кибернетическим понятием понятия как множества ситуаций".


    Классификаторы

    Как распознаются ситуации? Это важный момент.

    Слово В.Ф.Турчину: "Нервную сеть, решающую задачу распознавания, мы назовём распознавателем, а состояние эффектора на его выходе будем называть просто состоянием распознавателя. Отправляясь от понятия распознавателя, мы введём несколько более общее понятие классификатора. Распознаватель делит множество всех мыслимых ситуаций на два непересекающихся подмножества: A и не A. Можно представить себе деление полного множества ситуаций на произвольное число n пересекающихся подмножеств. Такие подмножества называют обычно классами. Теперь вообразим некую подсистему C, имеющую n возможных состояний и связанную нервной сетью с рецепторами таким образом, что, когда ситуация принадлежит к i-му классу (i-му понятию), подсистема C приходит в i-е состояние. Такую подсистему вместе с нервной сетью мы будем называть классификатором по множеству n понятий (классов), а, говоря о состоянии классификатора, подразумевать состояние подсистемы C (выходной подсистемы). Распознаватель — это, очевидно, классификатор с числом состояний n = 2. В системе, организованной по двоичному принципу подобно нервной системе, подсистема C с n состояниями будет, конечно, состоять из какого-то числа элементарных подсистем с двумя состояниями, которые можно рассматривать как выходные подсистемы (эффекторы) распознавателей. Состояние классификатора, следовательно, будет описываться указанием состояний ряда распознавателей. Однако эти распознаватели могут быть тесно связаны между собой как по структуре сети, так и по выполняемой функции в нервной системе, и в этом случае их следует рассматривать в совокупности как один классификатор. Если не накладывать никаких ограничений на число состояний, то понятие «классификатор» фактически теряет смысл. Действительно, всякая нервная сеть сопоставляет каждому входному состоянию одно определённое выходное состояние; следовательно, каждому выходному состоянию соответствует множество входных состояний, и эти множества не пересекаются. Таким образом, всякое кибернетическое устройство с входом и выходом можно формально рассматривать как классификатор. Придавая этому понятию более узкий смысл, мы будем считать, что число выходных состояний классификатора гораздо меньше, чем число входных состояний, так что классификатор действительно «классифицирует» входные состояния (ситуации) по относительно небольшому числу больших классов".

    RB10. От Oberon к Bluebottle

    Система Oberon в паре с языком Оберон очень напоминают связку UNIX и Си. Несмотря на то что приверженцы Оберона нередко открещиваются от Си, между этими языками прослеживается немало общего. Немаловажный нюанс: языки Си и Оберон роднит тот факт, что они создавались не вообще, не ради абстрактных целей облагодетельствования человечества в решении любых задач (вроде C++), а формировались в рамках реализации конкретных практических проектов, где их роль была едва ли не центральной. В тех проектах они и оттачивались: языки были инструментом реализации проектов, а не ярмаркой-продажей богатого функционала и не военным парадом мощи различных идей программирования. Ранние версии Си (без препроцессора, без union и типа перечисления, без long и unsigned) и Оберона (мини-Модула, явное разделение модуля на интерфейс и реализацию) потом доводились до ума в ходе адаптации их в соответствующих проектах реализации ОС UNIX и ОС Oberon.

    Как известно, ОС UNIX создавалась в AT&T Bell Labs Кеном Томпсоном на языке B. Ему помогали еще 5 человек, среди которых был и Деннис Ритчи. К 1971 г. Деннис Ритчи спроектировал Си и реализовал первый его компилятор на DEC PDP-11. Летом 1973 г. ядро UNIX было переписано на Си. За период 1971-1973 гг. язык Си был доработан так, чтобы по максимуму использоваться для реализации UNIX: в частности, именно тогда появился препроцессор и была реализована стандартная библиотека языка, во многом благодаря которой (и благодаря интересу к UNIX) он быстро стал завоевывать мир (чего не скажешь об Обероне). Однако более-менее язык вызрел только к 1978 г., когда и появилась книга Кернигана и Ритчи "The C Programming Language" (K&R). Эталонное описание Оберона, где фиксировался язык, появилось летом 1988 г. На появление первой эталонной версии языка у Си ушло 7 лет (1971-1978), у Оберона 3 года (1985-1988).

    Выполнил ли Си тогда свою задачу как язык системного программирования для реализации переносимой ОС UNIX? Вне всякого сомнения. Более того, Си был и поныне остаётся стандартом де-факто в качестве промежуточного языка (высокоуровневый ассемблер) для переноса софта на разные архитектуры. Генерация Си-кода вместо машинного для компиляторов с новых языков — самый быстрый путь дать им путёвку в жизнь и опробовать новые идеи на разных архитектурах. ОС Oberon строилась на отличных от UNIX принципах (прежде всего, на идеях модульности и динамической расширяемости). При этом она сохраняла моноязыковость ОС. Разумеется, строилась не на пустом месте (работы Xerox PARC и опыт OC Medos на Modula-2/Lilith).

    В разработке проекта Oberon (1985-1993) основными забойщиками были проф. Никлаус Вирт (Niklaus Wirth) и проф. Ю.Гуткнехт (Juerg Gutknecht). Если первый занимался преимущественно языком Оберон, компилятором и ядром (базовыми модулями), то второй был архитектором системы Oberon. Гуткнехт в конце 1960-х годов работал в группе по программированию систем реального времени известной швейцарской авиакомпании Swissair. Потом поступил в ETH Zurich на факультет математики, после окончания учебы ушёл работать в IBM. Гуткнехт не вошел в состав группы по разработке Lilith и Modula-2; он влился в команду Вирта лишь в 1981 г. В 1985 г. они с Виртом отправились в длительную командировку за океан — в Пало-Альто (Xerox PARC). Там шло ознакомление с работами американцев над системой Cedar. Та поездка дала импульс к появлению проекта Oberon, работы над которым начались в сентябре-октябре 1985 г.

    Развёрнутая информация о проекте Oberon (о принципах, заложенных при проектировании системы и языка) представлена в книге Вирта и Гуткнехта “Project Oberon — The Design of an Operating System and Compiler” (2005), которую авторы распространяют свободно.

    Как и в случае с компьютером Lilith и ОС Medos, система Oberon создавалась для своей аппаратной архитектуры (Ceres, на базе процессоров National Semiconductor серии 32x32), где она претерпела существенные изменения в трёх разных вариантах для Ceres-1 (1985), Ceres-2 (1988), Ceres-3 (1990). В общем-то Вирт не собирался осуществлять перенос системы Oberon на другие архитектуры, что автоматически подразумевало открытие её остальному миру. Но, как вспоминает Микаэль Франц (Michael Franz), ученики-аспиранты убедили мэтра в необходимости этого шага. В период 1991-1993 гг. появились версии для Mac OS (Motorola 68020), SunOS (SPARC), IBM AIX (RIOS, RS/6000), DEC Ultrix (MIPS R2000), SGI IRIX (MIPS), HP-UX (PA-RISC), Windows и MS-DOS (Intel). Был осуществлён перенос на Atari, Amiga, на NextStep (Motorola 68xx0), на OpenVMS (Digital Alpha AXP). Перенос на Linux и Sun Solaris x86 (Intel) произошёл несколько позже — в 1999 г.

    В 1991 г. началось размежевание версий — классическая Oberon V4 и новая Oberon System 3. Движущей силой второй ветви стал Юрг Гуткнехт. В 1994 г. была готова первая версия Native Oberon — реализации системы Oberon на голой машине на платформе Intel x86. То была отправная точка зарождения Bluebottle. Native Oberon помещалась на одной дискете 1,44 Мбайт, где была ОС, компилятор языка Оберон и сетевые средства (TCP/IP и др.) с поддержкой WWW (FTP, Telnet, HTTP). Как и другие варианты системы, Native Oberon свободно поставлялась в исходных текстах. Вёл Native Oberon Питер Мюллер (Pieter Muller). В 1995 г. в пару к нему был придан Патрик Реали (Patrik Reali), который занимался доводкой компилятора.

    Летом 1998 г. Юрг Гуткнехт приезжал в Москву, где в АНХ (Академия народного хозяйства при Правительстве РФ) выступал с докладом по Oberon System 3 (я занимался организацией этого визита, как и ряда последующих). После России он направился на полгода в Редмонд, в Microsoft Research для работ над .NET. Именно тогда у него возникли идеи нового проекта: создание версии Оберона с активными объектами (Active Oberon) и переработка системы Oberon. Юрг Гуткнехт и Евгений Зуев (эксперт по Аде и C++, перешёл из МГУ в ETH Zurich в 2000 г.) в дальнейшем принимали активное участие в сотрудничестве с Microsoft Research в рамках проекта Project 7/7+ (разработка компиляторов для CLR, Common Language Runtime) в период проектирования и реализации платформы Microsoft .NET (1999-2002). В ходе разработки (по предложению Microsoft) компилятора Oberon for .NET и постоянных контактов с сотрудниками Microsoft Research (среди которых есть и выпускники ETH) ими был накоплен богатый опыт работы с новой языковой платформой.

    Если до середины 1990-х годов Вирт был достаточно консервативен в отношении активных контактов с ведущими компаниями, то нехорошая история с Sun (на грани плагиата при раскрутке Java) его, по всей видимости, подтолкнула выйти из режима самоизоляции и принять активное ухаживание со стороны Microsoft. В Microsoft Research уехали некоторые ученики Вирта. Microsoft начала финансировать ряд исследовательских работ (Oberon for .NET, Active Oberon, Active C#, Zonnon и др.) и взяла на себя заботу об участии представителей ETH Zurich в ведущих международных конференциях и семинарах. Делала это небескорыстно. Влияние систем Oberon и Bluebottle на систему Singularity, разработанную в Microsoft Research, просматривается невооружённым глазом. Zonnon стал одним из основных пунктов сотрудничества, поскольку в этом языке, выросшем из Active Oberon, воплотились новые идеи, которые напрямую отображаются в .NET. См. "От Паскаля к языку Zonnon" (2003). Гуткнехт планирует осуществить перенос Bluebottle с Active Oberon на Zonnon, но только по достижении зрелости языка и компилятора.

    Есть и другие заметные следы того, что Oberon не почила в Бозе. В рамках направления Mobile Web (ответ на наступление Google) сейчас идёт работа над проектом реинкарнации-переноса ОС Oberon в среду браузеров под JavaScript через реализацию Oberon Script (компилятор языка Оберон на JavaScript, 1080 строк исходного текста). Это дерзкая инициатива ученика Вирта — Ральфа Соммерера (Ralph Sommerer), который с 1998 г. работает в европейском отделении Microsoft Research в Кембридже. См. блог Ральфа Соммерера.

    Теперь мы подходим к самой системе Bluebottle. Работы над ней велись в две стадии. Сначала разрабатывалось ядро (микроядро) AOS (Active Object System), которое одновременно является и исполняющей системой языка Active Oberon. Затем уже поверх него разрабатывались сервисный и прикладной уровни. Bluebottle стал обвязкой ядра AOS. Впервые в публичном доступе Bluebottle появилась 1 января 2003 г. Знакомство отечественной аудитории с Bluebottle прошло в июне 2003 г. на конференции Microsoft Academic Days в подмосковном Виноградово, а затем на закрытом семинаре в EPAM Systems.

    Стоит заметить, что Bluebottle — не только и не столько исследовательский проект. Публично открытая часть – это “конверсия” реальных коммерческих проектов, которые в настоящее время ведут Юрг Гуткнехт и его коллеги, в частности, с японскими компаниями. Но эта тема закрыта NDA-соглашениями о неразглашении.