Разделение человеческих языков происходит от (дарвинистской?) Эволюции в изолированных сообществах. Разделение языков программирования происходит от изменений в технических потребностях, технической идеологии, от изменений в техническом и теоретическом понимании, от изменений в наших технических возможностях для реализации. Я думаю, это несколько более осознанный процесс.
Могут ли компьютерные языки больше походить на естественные языки? Вероятно, немного, до определенного момента. Я полагаю, что большая часть сложности естественного языка является результатом множества параллельных явлений эволюции, которые не имеют оснований для получения последовательного результата в любой момент времени, даже если существует вероятность того, что старые несоответствия, вероятно, постепенно устраняются, а появляются новые. , Я не эксперт в диахронической лингвистике. Но хотим ли мы такого рода сложности в языках программирования.
Вопрос двусмысленности является важным, но не так, как утверждают большинство людей. Язык - это средство общения, и его необходимо анализировать в контексте этого общения (человек-человек, человек-машина, как между местами, так и между временами ... сказать немного упрощенно). Важно не то, можете ли вы делать только однозначные утверждения на языке, а всегда ли вы можете быть уверены, что общение будет однозначным в заданном контексте. Есть один хорошо известный и широко используемый язык программирования, который позволяет писать неоднозначные программы (ну, это так, но я не смотрел последние версии некоторое время). В этом случае компилятор достаточно умен, чтобы обнаружить неоднозначность и запросить разъяснения, которые можно включить в программу, чтобы устранить неоднозначность. Обратите внимание, что обнаружение неоднозначности не означает, что только один из возможных вариантов имеет значение, все они имеют значение. Вопрос заключается в том, может ли один из взаимодействующих объектов обнаружить неоднозначность, чтобы отправитель мог ее прояснить. Люди плохи в этом, но компьютеры могут быть довольно хорошими.
Формализмы и языки программирования могут иметь более богатый и гибкий синтаксис. Я считаю, что главная причина, по которой они этого не делают, - это простой консерватизм. Используемые синтаксические инструменты все еще очень часто являются инструментами, разработанными тридцать лет назад или более, чтобы соответствовать ограничениям компьютеров того времени. Эффективность синтаксического анализа больше не является такой критической проблемой при компиляции, и более мощные методы действительно существуют.
Интересно, что наиболее широко используемая основа для синтаксиса языков программирования исходит из исследования естественных языков: контекстно-свободной грамматики. Большая часть технических исследований переместилась в теоретическую / техническую информатику в шестидесятых, чтобы быть немного переоткрытой в начале восьмидесятых людьми на естественном языке (я упрощаю). С тех пор был достигнут значительный прогресс в области синтаксиса на естественных языках, в то время как информатика, по-видимому, в значительной степени застряла на старых синтаксических инструментах. Маятник естественного языка теперь снова качается в сторону статистических методов, но алгебраические подходы к синтаксису не забыты. Скорее всего, хорошие подходы будут исходить из комбинации алгебраических и статистических методов.
Мне кажется, что критической областью является семантика и переход между синтаксисом и семантикой. Это все еще очень трудно формализовать для естественного языка, в то время как у нас есть много точных методов в случае языков программирования и формальных систем. Так как игра далека от естественных языков, трудно сказать, какое влияние она может оказать на языки программирования в будущем.
Другое дело, что многие дизайнеры языка программирования пытаются что-то доказать или применять техническую идеологию. Таким образом, они получают чрезвычайно предписывающий дизайн, чтобы пользователи не отходили от своих намеченных парадигм. Это, к сожалению, крайне непродуктивно для творчества. Самый креативный язык, который когда-либо разрабатывался, был одним из самых первых: Lisp (1958). Свобода и гибкость, которые она позволяла, были источником значительного творчества. Цена заключалась в том, что это требовало самодисциплины и понимания. Но Лисп был действительно метаязыком, языком для создания языков.
Теперь, с другой стороны, программы на самом деле являются доказательством их спецификации, рассматриваемой как математическое утверждение (ну, я снова упрощаю). Некоторые люди (я не помню ссылок, извините) играли с доказателями теорем, чтобы получить доказательства, которые выглядели бы так, как будто они были написаны математиком на естественном языке. Поэтому я думаю, что идея иметь программы, которые выглядят так, как будто они написаны на естественном языке, может быть не совсем абсурдной.
Тем не менее, вы можете заметить, что даже когда неформально написано математиком, математический дискурс выглядит совсем не так, как обычный разговор или книга по истории. Это связано со значительной разницей в рассматриваемой вселенной дискурса, о семантических доменах, о которых идет речь. Таким образом, хотя вы можете представить языки программирования, которые больше похожи на естественные языки, существует естественное ограничение, которое является областью дискурса и его собственными желаемыми свойствами. Скорее всего, он останется по сути поверхностным, то есть в основном синтаксическим. Математик может говорить о формальных системах и о политике. Надеюсь, эти две беседы не будут выглядеть одинаково. Компьютеры не могут (пока?) Говорить о политике или понимать ее. День, когда они это сделают, больше не будет программировать.
Оглядываясь назад в историю, языки высокого уровня с самого начала (FORTRAN) были попыткой приблизиться к более естественной форме для выражения вычислительных задач, но эти задачи были поняты как математические или логические (Fortran 1957, Algol 1958, Lisp 1958). ) или более ориентированный на бизнес (Cobol 1959). В течение 10 лет люди беспокоились о языках, которые были бы ближе, лучше адаптировались к рассматриваемой проблеме, и было проведено значительное исследование так называемых extensible
languages
, охватывающих как синтаксис, так и семантику. Одним из основных путей более естественного выражения проблем было появление object
orientation
(иногда под другими именами). Несмотря на то, что всегда трудно определить родительство, оно, вероятно, возникло из работы по искусственному интеллекту, в основном на Лиспе, и из языка.Simula
67
(Семья Алгол), которая была предназначена для более естественного выражения реальных проблем, которые должны быть смоделированы на компьютере. Все это кажется исторически последовательным.