Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #55, ИЮНЬ 2005 г.

Языки будущего

Крис Касперски ака мыщъх

Спецвыпуск: Хакер, номер #055, стр. 055-052-1


(freeBSD@smtp.ru)

Пробуем понять, какими будут языки программирования в будущем

"Каждое утро Сэр Генри просыпается, разряжает оба ствола своего дробовика в потолок и кричит: "Я не знаю, чего я хочу, но я хочу этого немедля!"

(к/ф Sir Henry at Rawlinson's End)

Какими будут языки программирования через несколько лет?? Имея за плечами почти пятидесятилетний опыт, мы можем дать вполне объективный прогноз. Языки эволюционируют намного медленнее программного обеспечения, создаваемого с их помощью, и на радикальное изменение ситуации рассчитывать не приходится, если только не…

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

В общем, возникала письменность.

Правда, работать с машинным кодом было ужасно неудобно. И вовсе не потому, что восьмеричные коды команд с трудом удерживались в голове (настоящие программисты помнили их все). Машинный код всячески препятствовал модификации программы. Команды загрузки данных, условные и безусловные переходы требовали "жесткого" (hard coded) адреса, связывавшего программиста по рукам и ногам. Если требовалось вставить несколько инструкций в середину программы, приходилось корректировать ссылки на все последующие адреса или цеплять так называемую "соплю" - дописывать несколько команд в конец программы, делать на них jump, а затем возврат на предыдущее место выполнения. Многие программы на 90% состояли из "соплей", и разобраться с ними было очень непросто. Появление ассемблера решило эту проблему, хотя и наткнулось на принятие в штыки старым поколением программистов.

Забытые идеи

Ассемблер существенно упрощал программирование за счет меньшей свободы и эффективности исполнения программ. К примеру, самомодифицирующийся код на ассемблере невозможен, то есть возможен, конечно, но отнюдь не языковыми средствами. Самомодификация на ассемблере - грязный хак, а в машинном коде это было нормой. Ассемблер в некоторой степени абстрагировался от конкретной архитектуры, однако программы по-прежнему страдали непереносимостью, а их разработка требовала большого самообладания. Вот так, например, выглядела программа Hello, world!, написанная на ассемблере для PDP-10:

Содержание  Вперед на стр. 055-052-2