То, что вы ищете, иногда называют живой системой, инкрементной системой или самоподдерживающейся системой (S³).
На самом деле это не свойство языка программирования, это набор среды разработки,Единственное, что имеет отношение к языку программирования, - это то, что некоторые языки программирования сообщества категорически против самой идеи жизнедеятельности, и поэтому эти сообщества, как правило, не производят живых инструментов,в то время как другие сообщества не могут представить себе жизнь без живой системы, поэтому они, как правило, производят ее.
Например, почти все среды Smalltalk и многие среды Lisp живы, хотя я не знаю ни одной живой среды C или C ++,Раньше существовала живая среда Java, называемая IBM Visual Age for Java (которая на самом деле была написана в Smalltalk подразделением IBM Smalltalk и основана на IBM Visual for Smalltalk, так что в этом нет ничего удивительного), но когда она была переписана на Javaкак Visual Age для Java Micro Edition (который вы, вероятно, лучше знаете под его нынешним названием Eclipse), он потерял свою жизнеспособность.
Вы спрашиваете о «одновременном кодировании и одновременном выполнении».Ну, в живой системе они даже не «бок о бок», они на самом деле одно и то же: нет различия между кодированием и выполнением, нет различия между IDE и приложением, нет различия между компиляциейвремя и время выполнения.
То, как вы часто разрабатываете программное обеспечение в Smalltalk, заключается в том, что вы просто записываете то, что хотите, и запускаете его:
aCalculator ← Calculator new.
aCalculator compute: '1 + 1'.
(КСТАТИ: просто запустите "означает запись этого небольшого фрагмента кода в любую текстовую область в любом месте экрана, выделите его и нажмите «Выполнить».)
[Примечание: стрелка влево - это назначение (представьте =
)стрелка вверх return
.Оригинальные системы Smalltalk имели их на клавиатуре, современные системы обычно используют вместо них :=
и ^
.Кроме того, пробел является отправкой сообщения («точка» в Java), а точка завершает предложение (;
) в большинстве языков.Аргументы методов передаются внутри сообщения непосредственно после двоеточия, а не в скобках.]
Конечно, это не работает, потому что класс Calculator
еще не существует.Итак, появляется отладчик (я уже упоминал, что между запуском и отладкой нет различий?), И один из вариантов, который он предлагает, - создать этот класс.Вы не перезапускаете программу, она просто продолжает работать.Теперь вы получаете ошибку new , потому что метод compute:
не существует.Опять же, отладчик предлагает создать метод для вас, и вы можете прямо ввести код прямо здесь: (Я упоминал, что нет никакого различия между отладчиком и редактором?)
compute: aString
↑ 2.
Система уже заполненаимя метода для вас и выбрал (несколько) разумное имя для параметра метода.Вам нужно всего лишь набрать вторую строку.
(Кстати: если этот рабочий процесс звучит для вас знакомо, он должен. Кент Бек основал объектную модель и модель выполнения своих двух платформ тестирования (SUnit и JUnit), так кака также практики тест-ориентированной разработки и цикла Red-Green-Refactor именно на этом рабочем процессе.)
Обратите внимание, что ни разу в этом процессе мы не останавливали и не перезапускали запущенную программу. Мы всегда редактировали исходный код работающей системы изнутри системы во время ее работы. Фактически, вы не можете остановить программу Smalltalk или систему Smalltalk! Даже если вы выключите систему Smalltalk, она фактически сериализует все состояние системы (каждый класс, каждый объект, каждую переменную, каждый поток, каждое окно, даже положение указателя мыши) на диск и когда вы запустите его снова, вы точно , где вы остановились. Система никогда не останавливалась, она была просто заморожена. (Если вы знакомы с VMWare, Parallels, VirtualBox или чем-то в этом роде, это все равно что сделать снимок виртуальной машины. Или подумать о спящем режиме или приостановке работы вашего компьютера.)
Фактически, если вы скачаете версию Squeak сегодня, вероятно, там есть объекты, которые буквально работают в течение 30 лет. (Это еще одно различие между Smalltalk и другими системами. Smalltalkers считают, что, как и вина, объекты становятся лучше с возрастом. Это резко контрастирует, например, с PHP или Ruby on Rails, где объекты выбрасываются в значительной степени после каждый веб-запрос.)
Один из самых известных примеров этого живого редактирования взят из ключевой «Apple Demo», когда Стив Джобс, Джеф Раскин и другие члены команды Lisa посетили Xerox PARC в 1979 году, чтобы получить демонстрацию системы Smalltalk:
Одной из лучших частей демонстрации было то, что Стив Джобс сказал, что ему не нравится прокрутка в стиле blt
, которую мы использовали, и спросил, делаем ли мы холодную плавную непрерывную работу. Менее чем за минуту Дэн [Ингаллс] нашел используемые методы, внес (относительно крупные) изменения, и прокрутка теперь стала непрерывной! Это шокировало посетителей, особенно программистов, так как они никогда раньше не видели действительно мощную инкрементальную систему. & Mdash; Ранняя история Smalltalk от Алана Кея, HOPL-II, & copy; 1993 ACM
О, да, вы все правильно прочитали: Дэн Ингаллс переписал видеодрайвер в работающей системе, изнутри действующей системы, даже не перезагружая систему и даже не останавливая приложение. Менее чем за 60 секунд. (Я упоминал, что нет никакого различия между языком программирования и операционной системой?)
Одно из лучших объяснений свойств живости можно найти в видео Self; Фильм (Self - производная от Smalltalk). Кроме того, взгляните на Lively Kernel Дэна Ингаллса (одного из первоначальных дизайнеров Smalltalk), который в основном является портом идей Smalltalk для JavaScript, работающего внутри сети. стр.
Как я писал выше, это действительно особенность среды, а не языка. Таким образом, хотя я использовал Smalltalk здесь в качестве примера, вы могли бы реализовать живую систему для любого языка. Я уже упоминал Лисп как язык, для которого существует множество оживленных сред, и я привел пример для JavaScript. Системы APL и Forth также имеют тенденцию быть живыми. Factor - хороший пример живой системы. Самым экстремальным примером может быть операционная система реального времени VxWorks, которая содержит полуживую систему для C (!), Которая использовалась для диагностики и исправления проблемы инверсии приоритетов, приводящей к ложным сбросам системы на ровере Sojourner на другой чертовой планете!