Алан Кей, автор SmallTalk, работает над экспериментальной системой STEPS – средой, которая способна заменить собой операционную систему и прикладные программы, при этом объём кода этой среды не должен превышать 20 000 (двадцать тысяч!) строк кода. Возможно, многие об этом уже слышали . Это одна из попыток воплощения мечты любого программиста: написать всё заново и красиво. Но возможно ли это?
Опять 640K
Если знаменитые 640K разделить на 20 тысяч строк кода, то получается по 32 байта на строку – это очень похоже на правду. Похоже, Алан Кей дежит в уме именно этот ориентир, просто стесняется произнести вслух: «640K хватит всем».
Билл Гейтс об этом догадался ещё 3 десятка лет назад. Деньги его испортили потом, а поначалу он был правильным пацаном: его BASIC занимал всего 4К. Со временем он догадался приспособить закон Мура к размеру ПО и размеру своих доходов, и ему стало не до краткости.
В юности родители Билла даже водили его к психиатру, видя одержимость их отпрыска программированием. Но со временем Билл перестал программировать, потому что стал боссом. «Раньше я любил лето. Но когда вырос, то понял, что лето может быть круглый год, лишь бы были деньги. Теперь я люблю деньги».
Было бы наивно думать, что раздутый код пишется только Редмонде. Даже Линус сокрушается, глядя на своё творение: «Ядро раздутое и огромное». С каждым новым релизом ядро Linux теряет порядка 2% производительности. И это неизбежно, считает могучий финн.
Давайте подумаем, можно объём ПО сократить, причём значительно? Возьмём, к примеру, любой текстовый редактор. Для реализации заявленной функциональности автор применяет, например, некий алгоритм поиска. Но в коде установленного на компьютере браузера тоже есть поиск, и, возможно, с таким же алгоритмом. Он же есть и в офисном пакете, и в играх, и в ОС, поверх которой всё это работает. Было бы логично этот поиск реализовать единожды, а дальше только им пользоваться. При глубоком анализе можно выявить массу повторяющихся вещей.
Грамотная, ювелирная декомпозиция способна творить чудеса, главное – это увидеть повторяющиеся фрагменты, выделять их в отдельные абстракции и затем упрощать. У Алана Кея это получается: код, реализующий протокол TCP/IP, занимает 160 строк. Не один он такой умный. Ховик Меликян приводит пример , когда программа из 80000 строк кода на Си++ и 55000 строк кода на VB заменялась 10 строками на шелл-скрипте.
Но возможно ли двадцатью тысячами строк кода заменить всё? Можно, но только если отказаться от многих стандартов. Например, веб-страницы, с точки зрения авторов STEPS, нужно заменить документами, используя гиперссылки. Т.е. «неправильные пчелы и неправильный мед» (http, html, css и проч.) заменяются на правильные. И так почти во всём.
Что там за такой волшебный код?
И что из себя будет представлять этот код? Хорошо, если бы он не был «помехами в телеграфной линии». Роберт Себеста о таком коде пишет: «Даниель Мак-Кракен однажды отметил, что чтение и анализ программы из четырёх строк, написанных на языке APL, заняли у него четыре часа».
В этой системе есть высокоуровневые языки OMeta и Nile, синтаксис которых смахивает на С и Python соответственно. Программы на них в конечном итоге транслируются в программы на низкоуровневом языке Nothing. Вот пример на OMeta: синтаксис калькулятора:
С виду – ничего волшебного, легко читается и понимается.
Почему это невозможно даже теоретически.
Чтобы помочь задумкам Алана Кея по завоеванию мирового господства, нам придётся приучить себя к аскетизму. Возьмём, к примеру, текстовый редактор. На дворе 21 век, но проверки орфографии в нём быть не должно. Почему? Да потому что она не впишется в эти 20 тысяч. Естественные языки сложны. Если для анализа текста на каком-то языке вдруг каким-то чудом хватит ста строк кода, то надо учесть, что число языков, вообще-то, измеряется тысячами. Но даже если число языков приравнять к числу государств, то эти сто строк надо умножить ещё на двести. Получаются те самые 20 тысяч…
А драйвера? Если одному типу устройств хватит тех же 100 строк, то типов устройств куда больше, чем число языков и государств. Если изготовители устройств решат помочь Кею и будут хранить драйвера в самих устройствах, то «раздутое ПО» просто сменит место своего хранения.
Даже если предположить, что 20 % кода покроет 80 % потребностей пользователей, то окажется, что у каждого 20% неудовлетворённых потребностей окажутся разными. Кому-то будет нужен Фотошоп, кому-то – Автокад, а кому-то – и вовсе Дип Фриц. И так во многом.
Причины, по которым STEPS не «взлетит».
1) В разработку ПО по всему миру вложены триллионы долларов, большая часть из которых – вовсе не компаниями, с которыми потенциально конкурирует STEPS. Под неё нет даже компиляторов самых распространённых языков, поэтому пока нет даже намёка на возможность переноса наработанного.
2) Нет потребности в таком кратком коде. Ради экономии памяти? Память стоит копейки, её объём даже на простейших устройствах превышает те самые 640К. Может, программы будут выполняться быстрее? Да нет, все программы в этой системе сначала транслируются в программы на низкоуровневом языке Nothing, и только затем исполняются. По оценке самого Кея, его код примерно на 30% медленнее традиционного.
Это самые очевидные причины. Так что разработки Алана Кея и его команды не смогут вытеснить современные ОС, браузеры, офисные приложения.
А если STEPS вдруг станет популярной?
1) Тогда крупнейшие налогоплательщики типа Microsoft, Apple, Google, Adobe и прочих убедительно докажут домохозяйкам и правительствам, почему подходы Кея ошибочны. И вообще, они нарушают массу патентов. Под STEPS нет привычных приложений. Данные на компьютерах не защищены, безопасность не обеспечивается.
2) Против 20 тысяч строк кода, которые потрясут мир, выступит даже великий и ужасный Линус! Ибо чем ему заниматься? Перетаскиванием диванов?
Даже у тайно симпатизирующих найдутся причины противиться такой перспективе.
3) Вирусописатели обнаружат, что система STEPS чрезвычайно к ним дружелюбна. А там и антивирусные компании подтянутся. Google популярно объяснит, что хранить данные на компьютере уже совсем не комильфо: пусть данные хранятся в облаке, а «корпорация добра» напишет для нас свои 20 тысяч строк кода.
Это далеко не всё…
Чем тогда станет STEPS?
Она останется голубой мечтой поэта. Сном изнеможённого рутинным трудом программиста. Напоминанием о том, что в этом мире есть вечные ценности: краткость, ясность и красота кода. Пропагандой силы мысли. Образцом для подражания. И, конечно, полигоном для экспериментов.
Автор: yomayo