Система STEPS: двадцять тисяч рядків коду, які змінять програмування, операційні системи і інтернет

  1. Двадцяти тисяч рядків вистачить на все
  2. You may say I'm a dreamer
  3. Сила думки і ніякого шахрайства
  4. нескінченний експеримент

У програмістів є заповітна мрія: взяти і переробити заново все - операційну систему, мови програмування, бібліотеки і додатки. Скасувати непотрібне дублювання функцій і написати все красиво і по-новому - словом, зробити все як треба, а не як вийшло в результаті багатьох років нагромадження різних стилів і технологій. При цьому всі зазвичай розуміють, що мріям ніколи не збутися і що нікому не під силу заново виконати такий обсяг роботи. Над сміливцями прийнято сміятися, а їх спроби - обзивати винахід колеса. Але коли за роботу береться людина, яка вже одного разу винайшов чималу частину технологій, які ми асоціюємо з персональними комп'ютерами, всі жарти стають недоречними.

Але коли за роботу береться людина, яка вже одного разу винайшов чималу частину технологій, які ми асоціюємо з персональними комп'ютерами, всі жарти стають недоречними

Алан Кей - жива легенда комп'ютерної індустрії. В середині шістдесятих він працював з Айвеном Сазерлендом, який створив перший графічний редактор і систему автоматизованого проектування, а в 1970 році приєднався до дослідницької лабораторії Xerox PARC, де придумав об'єктно-орієнтоване програмування, створивши мову Smalltalk, і перший комп'ютер з віконним графічним інтерфейсом. Пізніше його робота надихне Стіва Джобса і команду, яка зробила Macintosh, а прототип Macintosh переконає Білла Гейтса в тому, що MS-DOS терміново потребує графічної оболонці з віконним інтерфейсом, відомої нам як Windows.

Після PARC Кей працював в самих різних дослідницьких центрах: Atari, Apple, Disney і HP, а також в Каліфорнійському університеті в Лос-Анджелесі і Кіотському університеті. Видимим результатом його досліджень стали Squeak - більш сучасна і дружня версія Smalltalk, а також Etoys - варіант Squeak для дітей (на його основі був створений більш відомий сьогодні Scratch). У 2005 році Кей заснував дослідницький інститут Viewpoints , Який фінансується Національним науковим фондом США, а також низкою великих компаній: Intel, Motorola, HP і Nokia. Те, чим Кей і десяток співробітників Viewpoints зайняті зараз, може ще перевернути наш погляд на програмування.

Двадцяти тисяч рядків вистачить на все

Початкове пропозиція Кея, представлене Національному науковому фонду США, звучало не просто сміливо, а майже фантастично. Кей пообіцяв створити середовище (ми не будемо називати її операційною системою, так як Кей наполягає на тому, що це не ОС в звичному розумінні), яка дозволить функціонувати сучасного комп'ютера і буде включати в себе графічний користувальницький інтерфейс і набір прикладних програм. Головна відмінність цього середовища від усіх вже існуючих рішень: довжина коду цієї системи не буде перевищувати двадцяти тисяч рядків.

Сказати, що двадцять тисяч рядків - це небагато, значить не сказати нічого. Якщо вірити "Вікіпедії", то вихідні коди Windows NT 3.1 займали 4-5 мільйонів рядків коду, ядро ​​Linux 2.6.0 - 5,2 мільйона, а сучасні ОС з набором стандартних програм можуть містити сотні мільйонів рядків коду.

Ось кадр з презентації Кея, який показує, скільки буде займати код ОС і основних додатків, якщо надрукувати його у вигляді книг.

Обсяг можна порівняти з Емпайр стейт білдінг і дорівнює приблизно 17,5 тисячам книг. "Хто з вас прочитав сімнадцять тисяч книг? - запитує Кей присутніх на лекції. - А хто з вас прочитав хоча б одну? "Обсягу однієї книги, тобто приблизно двадцяти тисяч рядків, на його думку досить для того, щоб створити систему, що нагадує за функціями ті ОС і додатки, з якими ми зараз працюємо. Просто будувати потрібно вміло.

Сучасний софт Кей порівнює з єгипетськими пірамідами. Їх будівельники ще нічого толком не знали про архітектуру і споруджували конструкції, які майже повністю складалися з матеріалу і практично не мали вільного простору всередині. З винаходом колон і арок стало можливо зводити куди більш витончені і практичні споруди. Чи не можна винайти аналог арок для написання програм?

Зараз програміст при всьому бажанні не здатний вільно орієнтуватися в мільйонах рядків коду. Зате якщо вмістити всю систему в обсяг книги і розділити на логічні частини по 100-1000 рядків, це дасть можливість легко розуміти логіку її будови і вносити зміни. Проблеми на кшталт багів, які протягом багатьох років переслідують великі проекти, просто підуть в минуле.

You may say I'm a dreamer

Головне питання: чи можливо таке в принципі? За п'ять років роботи команда Кея довела, що відповідь на це питання може бути позитивним. Систему методів, які дозволять це зробити, автори називають STEPS. Це рекурсивний акронім, розшифровується як STEPS Toward Expressive Programming Systems - "Кроки до виразних системам програмування".

Керуючись принципами STEPS, в інституті Кея створили прототип системи. Він називається Frank, а якщо повністю - "Франкенштейн". Таке ім'я вибрано не дарма: система складена з шматочків, кожен з яких ще може бути замінений або переписаний заново.

Ось як виглядає "Франкенштейн" з точки зору користувача.

Що може робити користувач Frank? Все той же, що ми зазвичай робимо за комп'ютером: створюємо і редагуємо текстові документи, графіку, відео, презентації та електронні таблиці, а також обмінюємося ними через мережу. Вся різниця в тому, що дослідники спробували повністю позбулися дублювання функцій різними програмами і максимально скоротити вихідний код.

Frank - це не операційна система, в якій працюють додатки, а скоріше, подібність Smalltalk або Squeak - великі додатки, яке можна розширювати і доповнювати, поки воно не стане робити все, що нам потрібно. Замість додатків, в яких реалізовані власний інтерфейс і функції, тут присутні компоненти, що мають складні взаємозв'язки.

У Frank є єдине поняття "документ", в який можуть бути включені і на місці змінені будь-які об'єкти, будь то зображення, таблиці або створені користувачем скрипти. Презентація, наприклад, - це документ, який включає в себе сценарій переходу вперед і назад по сторінках (або, якщо завгодно, кадрам), а не файл, для відкриття якого потрібна спеціальна програма. Така програма просто не потрібна, тому що інтерфейс для роботи з зображеннями і текстом ідентичний тому, що використовується для підготовки інших документів.

Те ж і з електронною поштою: листом у Frank вважається будь-який документ, який був переданий по Мережі. Список листів - це результат пошуку документів, отриманих від інших користувачів.

Ще одна цінна якість системи Кея - універсальна скасування. Тут може бути скасовано дійсно будь-яка дія, а не як в сьогоднішніх програмах - лише деякі, та й то не завжди. Для цього використовується механізм "світів": кожен раз, коли ми щось змінюємо, система може запам'ятати, ніж нинішній "світ" відрізняється від попереднього, і в разі потреби повернути все, як було.

Найцікавіше те, як Кей пропонує переробити веб. У Frank немає браузера, зате є підтримка протоколу TCP / IP (його код займає 160 рядків, і це, за словами Кея, не межа стислості). Замість веб-сторінок пропонується використовувати ті ж самі документи, додавши в них об'єкт нового типу - гіперпосилання.

Великі кола на цій схемі - комп'ютери, пов'язані мережею, червоні шестикутники - об'єкти. Їх зв'язку не змінюються в залежності від того, локальні вони або видалені

Оскільки код, що міститься в документах, по суті, працює у віртуальній машині, це робить їх завантаження ззовні не менш безпечною, ніж виконання JavaScript браузером. Виходить, що об'єкти-сторінки просто завантажуються через Мережу в міру необхідності. До речі, робити такі "сайти" набагато простіше, ніж звичайні: можна користуватися вже наявними в системі засобами - тими ж самими, за допомогою яких редагуються текстові документи, презентації і все інше.

Сила думки і ніякого шахрайства

Зовнішня сторона Frank цікава вже бодай як приклад уніфікованої середовища, в якій немає ні поділу на додатки, ні традиційної файлової системи. Але справжня чорна програмістки магія прихована всередині.

Скільки займають різні частини STEPS?

TCP / IP 160 рядків Алгоритм згладжування на Nile 45 рядків Весь код Gezira на Nile 457 рядків Парсер Nile на OMeta 130 рядків, що в камері Nile AST в Сі на OMeta 1110 рядків

Як Frank вмістився в двадцять тисяч рядків коду? Відповідь криється за двома термінами: метапрограмування і предметно-орієнтовані мови (DSL). Головна ідея полягає в тому, щоб створювати мови під конкретні завдання і, хитромудро комбінуючи їх, писати елегантні і короткі програми. Ця ідея не нова: на ній заснований мову Forth, і вона використовується в написанні програм на мові Lisp, яким Кей свого часу надихався при створенні Smalltalk. Більш сучасний приклад - фреймворк Ruby on Rails, застосовуваний в якості DSL для розробки бекенда веб-додатків. Але STEPS - це щось значно більше, ніж одну мову, - це набір методів і мов, за допомогою яких можна створювати складні системи, використовуючи мінімум коду.

Один з найцікавіших компонентів STEPS - це об'єктно-орієнтована мова OMeta ( pdf ). Він призначений для опису синтаксису інших мов. Наприклад, на OMeta можна, можливо в кілька рядків описати синтаксис калькулятора, а потім за допомогою успадкування розширити його і зробити науковий калькулятор. Синтаксис OMeta при цьому описаний на самому OMeta.

Другий важливий мову - це Nile (названий на честь річки Ніл). Автори STEPS називають його "мовою виконуваної математики". Nile дозволяє компактно описувати математичні вирази і зроблений таким чином, щоб максимально полегшити паралельні обчислення. На ньому написана графічна підсистема Frank, звана Gezira. Gezira вміщується в кілька сотень рядків на Nile і вміє виводити растрову і векторну графіку, підтримує згладжування і різні фільтри.

Gezira вміщується в кілька сотень рядків на Nile і вміє виводити растрову і векторну графіку, підтримує згладжування і різні фільтри

Найнижчий рівень у всій цій складній системі - мова Nothing (перекладається з англійської як "Ніщо"), "високорівнева мова з низкоуровневой семантикою". Nothing - це проміжна ланка між усіма мовами в STEPS і машинними кодами. На Nothing НЕ передбачається писати вручну, і потрібен він лише для можливості дивитися, що виходить на виході. Nothing, за словами дослідників, натхненний BCPL, що використовувалися в шістдесяті роки і надихнув авторів Сі. На даний момент код на Nothing можна транслювати в Сі для подальшого переказу в машинні коди або в JavaScript - щоб система виконувалася в браузері. Передбачається, що в майбутньому з Nothing можна буде отримувати машинні коди безпосередньо.

Одна з смислових ланцюгів, на яких тримається STEPS. В даному випадку показаний шлях від Nile до машинних кодах

В як проміжний шар, на якому написаний призначений для користувача інтерфейс, у свій час використовувався NotSqueak - спрощений діалект Squeak. Але в останньому звіті згадок про NotSqueak вже немає, зате з'явився новий об'єктно-орієнтована мова - Maru. Як і OMeta, він написаний сам на себе і може використовуватися як для опису високорівневого подання, так і для зв'язку з низькорівневими функціями. На Maru може бути реалізований парсер граматики, і в 2011 році команда Кея була зайнята перенесенням Nile на Maru.

нескінченний експеримент

На жаль, звіти Кея і його команди ( pdf ) - це не посібник для програмістів-суперменів і не довідник. Воно і зрозуміло - STEPS поки що не готовий, і щороку у Viewpoints ставлять різноманітні експерименти, мета яких - не стільки в створенні закінченої системи, скільки в тому, щоб відточити методи. "Франкенштейн" як цілісна система тут потрібен лише в якості піддослідного тіла.

Якщо подивитися звіти Viewpoints за різні роки, то помітно, що тут знову і знову винаходять мови програмування, роблять їх все більш самодостатніми (поки що подекуди ще залишається код на Сі, але від нього поступово позбавляються) і ставлять сміливі експерименти.

Час від часу команда Кея пробує прокидати містки в реальний світ, створюючи, наприклад, віртуальну машину Squeak для Google Native Client або роблячи метамова Tamacola на основі Tamarin VM, що входить у Flash. Ці методи можуть дозволити всій системі не просто працювати в браузері, але виконуватися швидше, ніж при трансляції в JavaScript.

Швидкість, втім, не є метою Кея: за його оцінкою, в нинішньому вигляді Frank працює приблизно на 30 відсотків повільніше, ніж якби був написаний традиційними методами. Оптимізацією дослідники займаються лише тоді, коли це не шкодить компактності коду.

Зрозуміло, що Frank не стане конкурентом сучасних ОС і навряд чи взагалі буде дороблений до необхідного для цього рівня. Проте ті методи, які розробляє Алан Кей, можуть вплинути на підхід до програмування не менше, аніж свого часу вплинув Smalltalk.

Хто з вас прочитав сімнадцять тисяч книг?
А хто з вас прочитав хоча б одну?
Чи не можна винайти аналог арок для написання програм?
Що може робити користувач Frank?
Скільки займають різні частини STEPS?

Дополнительная информация

rss
Карта