Если вы знаете несколько компьютерных языков и немного истории, у вас, вероятно, есть некоторые идеи о том, как они связаны друг с другом. Если неформальные идеи не совсем то, что вам нужно, как насчет полной таксономии, полученной так, как если бы языки были видами?
С самого начала я должен сказать, что большинство выводов этого исследования согласуются с вашими предубеждениями о том, как языки сочетаются друг с другом — или должны сочетаться.
Серджи Вальверде и Рикард Соль, работающие в Институте Санта-Фе, использовали методы вычислительной эволюционной теории и классифицировали языки в клады, чтобы сформировать филогенетическую сеть или эволюционное дерево. Цель исследования-выяснить, похожа ли культурная эволюция на биологическую эволюцию, но конкретные результаты о языках программирования по-прежнему интересны нам, программистам.
Источником данных были обширные страницы Википедии на компьютерных языках, в общей сложности 347 различных языков, если быть точным. Используя временной порядок, можно сказать, какой язык повлиял на какой — более поздние языки не могли повлиять на более ранние языки. Это создает направленную сеть, но не филогенетическое дерево. Мера того, какие языки повлияли на то, что было создано на основе топологии сети, и с ее помощью вы можете преобразовать сеть в дерево.
Сеть языков, которая использовалась для создания филогенетического дерева
Дерево, которое приводит к этому, кажется разумным в том смысле, что клады соответствуют разумным группам языков, основанным на их характеристиках — объектно-ориентированных, функциональных и так далее.
Клад Фортрана
Это также показывает, что эволюция «бурная», и в 1980-х годах наблюдается большая фаза роста, соответствующая появлению домашнего микрокомпьютера.
Еще одна интересная находка:
Графики влияния описывают очень интересную ситуацию: вместо того, чтобы наблюдать связи, связывающие языки, близкие во времени, пучки связей обнаруживают очень большие временные окна, соединяющие современные и старые языки.
… существуют группы близких по времени языков, свойства которых используются для создания новых кластеров языков в далеком будущем.
Отношения между языками разных эпох
Наконец, по-видимому, есть доказательства того, что языки программирования развиваются во многом подобно естественным языкам и биологическим системам в том, что они демонстрируют прерывистое равновесие. По сути, вещи остаются неизменными в течение длительных промежутков времени, а затем внезапно возникает большая активность, когда новые объекты создаются гораздо быстрее:
Как и в случае с древом жизни, технологические деревья сильно несбалансированы, что в значительной степени является следствием ускоренных событий диверсификации, связанных с инновациями. Эта закономерность также была обнаружена в структуре диверсификации человеческих языков, которая также демонстрировала сильные дисбалансы. Было предложено, чтобы асимметрии свидетельствовали о прерывистом равновесии. В нашей системе мы определяем эти сдвиги как основные инновации, связанные с новыми формами инженерных языков программирования. Дисбаланс дерева, но также и расслоения, наблюдаемые в горизонтальных взаимодействиях переноса, согласуются с такими всплесками быстрых модификаций.
Так что на самом деле то, как мы думаем о языке программирования неофициально, похоже, соответствует этому шаблону. Любой программист скажет вам, что, похоже, долгое время доминируют одни и те же языки, а затем внезапно появляется что-то новое и становится настолько популярным, что это порождает тесно связанные языки и технологии.
Клэйд шепелявых