Первые дела компьютерной революции

Dec 01, 2009 01:00

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

1. Интерактивное программирование: научиться не только "сплетать" и "оценивать", но и проделывать все это в обратном направлении -- чтобы получить возможность понимать, что именно происходит в программе в исходных терминах, а не в терминах "произошло деление на ноль где-то в пятом килобайте инструкций байт-кода".

Похоже, что "моделирование" -- это просто способ указать на декларативность кода программы.

Похоже, что "метамоделирование" -- это просто способ работы с онтологиями предметной области.

Моделирование тем самым сводится к неимперативному программированию с повышенным вниманием к онтологиям -- вопросу о бытии и существовании, соотношению программного-модельного и реального.

Вопрос о выразительности (краткости записи) и масштабируемости (применимость для самых разных типов объектов) определений самих DSL становится ключевым. Языковые верстаки (универсальные IDE, универсальные моделеры) выходят на первый план.

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

Рефлексивность -- это тут же, программа сама себя должна уметь читать и писать.

Кстати, я сделал трансляцию в ЖЖ блога Jonathan Edwards http://alarmingdevelopment.org/ -- alarmingdevelop. Он пишет правильные вещи типа "Java is the new Cobol".

Ключевое слово: "намерение", краткость его выражения, и как от машины добиться его выполнения.

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

SOA, всякие "процессные" BPMN 2.0, семантические вебы и ISO 15926 как раз в эту точку, но этого совершенно недостаточно. Агенты -- тоже сюда, и это магистральное направление.

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

3. Аппаратная архитектура должна стать другой. Весь вопрос в том, что пока еще непонятно, что именно должна поддержать аппаратная архитектура (до тех пор, пока не решатся проблемы 1. и 2.). До этих пор совершенно все равно, будет там Фон Нейман или Гарвард, и сколько ядер у GPGPU -- если не знаешь, куда плыть, любой ветер не будет тебе попутным. Кстати, моя гипотеза по поводу аппаратуры: будет много-много разных спецпроцессоров для разных типов обработки, соединенных сверхширокими каналами. Как в мозге.
Previous post Next post
Up