Мой ответ на самом деле является лишь разработкой Жиля, которую я не читал до того, как написал свой. Может быть, это все же полезно.
Позвольте мне начать мою попытку ответить на ваш вопрос с разграничения между двумя измерениями работы языков программирования, которые совершенно по-разному относятся к теории языка программирования в целом и исчислению процессов в частности.
Последнее обычно происходит в промышленности с целью предоставления языков программирования в качестве продукта. В качестве примеров можно привести команды, разрабатывающие Java в Oracle и C # в Microsoft. Напротив, чистые исследования не привязаны к продуктам. Его цель состоит в том, чтобы понимать языки программирования как объекты внутреннего интереса и исследовать математические структуры, лежащие в основе всех языков программирования.
Из-за расходящихся целей различные аспекты теории языка программирования актуальны как в чистых исследованиях, так и в исследованиях и разработках, ориентированных на продукт. Приведенная ниже картина может дать представление о том, что и где важно.
В этот момент можно спросить, почему эти два измерения так различны и как они, тем не менее, связаны.
Ключевым моментом является то, что исследования и разработки на языке программирования имеют несколько аспектов: техническое, социальное и экономическое. Практически по определению промышленность заинтересована в экономической выгоде языков программирования. Microsoft и др. Не разрабатывают языки по доброй воле, а потому, что считают, что языки программирования дают им экономическое преимущество. И они глубоко исследовали, почему некоторые языки программирования преуспевают, а другие, кажущиеся схожими или с более продвинутыми функциями, не могут. И они обнаружили, что нет единой причины. Языки программирования и их окружение являются сложными, поэтому существуют причины для принятия или игнорирования какого-либо конкретного языка. Но самым большим фактором успеха языка программирования является предпочтительное присоединение программистов к языкам, которые уже широко используются: чем больше людей использует язык, тем больше библиотек, инструментов, учебных материалов и тем более продуктивным программист можно использовать этот язык. Это также называется эффектом сети. Другой причиной является высокая стоимость переключения языков для отдельных лиц и организаций: освоение языка, особенно для неопытного программиста, и когда семантическая дистанция до знакомых языков велика, является серьезной, требующей много времени. Учитывая эти факты, можно спросить, почему новые языки становятся популярными вообще? Почему компании вообще разрабатывают новые языки? Почему бы нам просто не остаться с Java или Cobol? Я думаю, что есть несколько ключевых причин, по которым язык может быть успешным,
Открывается новая область программирования, которая не имеет смещений. Основным примером является сеть с сопутствующим ей ростом Javascript.
Языковая липкость. Под этим я подразумеваю высокую цену смены языка. Но иногда программисты переходят в разные области, беря с собой язык программирования и добиваясь успеха со старым языком в новой области.
Язык подталкивает крупная компания с серьезной финансовой огневой мощью. Такая поддержка снижает риск усыновления, потому что ранние усыновители могут быть достаточно уверены в том, что язык все еще будет поддерживаться через несколько лет. Хорошим примером этого является C #.
Язык может прийти с убедительными инструментами и экосистемой. Здесь также C # и его .Net и экосистема Visual Studio могут быть упомянуты в качестве примера.
Старые языки приобретают новые функции. На ум приходит Java, которая на каждой итерации получает больше хороших идей из традиции функционального программирования.
Наконец, новый язык может иметь внутренние технические преимущества, например быть более выразительным, иметь более приятный синтаксис, печатать системы, которые улавливают больше ошибок, и т. Д.
Учитывая этот фон, не должно вызывать удивления то, что существует некоторое различие между чисто исследованиями языка программирования и разработкой коммерческого языка программирования. В то время как оба стремятся сделать разработку и развитие программного обеспечения более эффективными, особенно для крупномасштабного программного обеспечения, работа над языком промышленного программирования должна быть более заинтересована в содействии быстрому принятию, чтобы достичь критической массы и получить сетевой эффект. Это приводит к исследованию того, что волнует работающих программистов. И это, как правило, такие вещи, как доступность библиотеки, скорость компиляции, качество скомпилированного кода, переносимость и так далее. Исчисление процессов в том виде, в котором мы их практикуем сегодня, мало что дает программистам, работающим над основными проектами (хотя я верю, что это изменится в будущем).
Чистое исследование языка программирования совсем другое. Он работает с упрощенными моделями языков программирования: -calculus - это огромное упрощение функционального программирования. Точно так же -калькулус - это огромное упрощение параллельного программирования. Эти огромные упрощения являются ключом к успешному исследованию. Они позволяют нам сосредоточиться на основных вычислительных механизмах (например,π βλπβсокращение для функционального программирования, разрешение / унификация для логического программирования, передача имени для параллельных вычислений). Чтобы понять, может ли такой язык, как Scala, иметь полный вывод типов, нам не нужно беспокоиться о JVM. Действительно, размышления о JVM отвлекают от лучшего понимания вывода типов. Вот почему абстракция вычислений в крошечные базовые исчисления является жизненно важной и мощной.
Таким образом, вы можете рассматривать исследование языка программирования как огромную песочницу, где люди играют с игрушками, и если они находят что-то интересное, играя с конкретной игрушкой, и тщательно исследуют игрушку, то эта интересная игрушка начинает свой долгий путь к общепринятому промышленному признанию. , Я говорю «длинный путь», потому что особенности языка, впервые изобретенные исследователем языка программирования, обычно проходят десятилетия, прежде чем становятся широко признанными. Например, сборка мусора была задумана в 1950-х годах и стала широко доступна с Java в 1990-х годах. Сопоставление с образцом восходит к 1970 году и широко используется только со времен Scala.
Исчисление процесса - особенно интересная игрушка. Но это слишком ново для тщательного изучения. Это займет еще одно десятилетие чистых исследований. То, что в настоящее время идет в исследовании теории процессов, - это взять одну большую историю успеха в изучении языка программирования, теории (последовательных) типов и развить теорию типов для параллелизма передачи сообщений. По словам Хиндли-Милнера, системы типизации с умеренной выразительностью для последовательного программирования теперь хорошо поняты, повсеместны и приняты работающими программистами. Мы хотели бы иметь умеренно выразительные типы для параллельного программирования. Исследования по этому вопросу начались в 1980-х годах такими пионерами, как Милнер, Сангиорги, Тернер, Кобаяши, Хонда и другие, часто основанными, явно или неявно, на идее линейности, которая исходит из линейной логики. В последние несколько лет наблюдается значительный рост активности, и я ожидаю, что эта восходящая траектория продолжится в обозримом будущем. Я также ожидаю, что эта работа начнёт просачиваться в исследования и разработки, ориентированные на продукт, отчасти по той прагматической причине, по которой молодые исследователи, прошедшие обучение по исчислению процессов, пойдут работать в промышленные лаборатории НИОКР, а также из-за эволюции ЦП и компьютерной архитектуры. из последовательных форм вычислений.
Таким образом, я бы не беспокоился, что вы не найдете передовую теорию языков программирования, такую как исчисление процессов, полезной в вашей собственной работе по созданию языков. Это просто потому, что передовая теория не учитывает проблемы современных языков программирования. Это о будущих языках. «Реальному миру» понадобится время, чтобы наверстать упущенное. Знания, которые вы используете для создания языков на сегодняшний день, являются теорией языка программирования прошлого. Я призываю вас больше узнать об исчислении процессов, потому что это одна из самых интересных областей теоретической информатики.