Следующий язык программирования

от автора

«Однажды вечером Резерфорд зашел в лабораторию. Хотя время было позднее, в лаборатории склонился над приборами один из его многочисленных учеников.
– Что вы делаете так поздно? – спросил Резерфорд.
– Работаю, – последовал ответ.
– А что вы делаете днем?
– Работаю, разумеется, – отвечал ученик.
– И рано утром тоже работаете?
– Да, профессор, и утром работаю, – подтвердил ученик, рассчитывая на похвалу из уст знаменитого ученого.
Резерфорд помрачнел и раздраженно спросил:
– Послушайте, а когда же вы думаете?»

Захотелось прикинуть наиболее вероятное возможное направление развития программирования.

  1. Краткая история языков программирования
  2. Имеющиеся на данный момент потенциальные возможности
  3. Выводы из вышеизложенного

Краткая история языков программирования.

Извиняюсь за избыточный для большинства текст, просто такое изложение мне кажется более наглядным, для дальнейшего объяснения.

К протоязыкам с некоторой натяжкой можно притянуть программирование при помощи обычных электрических переключателей. Но это для меня уже слишком…

Поэтому для собственного душевного спокойствия приму за первый язык — машинный код.
Hello World:

BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21

Который впоследствии привели к хоть немного читаемому виду — ассемблеру.
Hello World:

 CODE SEGMENT ASSUME CS:CODE, DS:CODE ORG 100h START:         mov ah,9         mov dx,OFFSET Msg         int 21h         int 20h         Msg DB 'Hello World',13,10,'$' CODE ENDS END START 

Но ассемблер тоже не очень прост и интуитивно понятен при прочтении.
И после него приходят всевозможные Фортран, Паскаль, С и прочие.
Hello World (Паскаль):

program HelloWorld; begin   write('Hello, World!');  end. 

Думаю тенденция очевидна.

Имеющиеся на данный момент потенциальные возможности.

Распознавание голоса. Например — habrahabr.ru/post/157333/

Текстовые компиляторы (литературное программирование). Например — habrahabr.ru/post/72310/

Машинный перевод. Например — habrahabr.ru/post/155675/

Проверка орфографии. Например — habrahabr.ru/post/50137/

Системы АСУТП. Например — habrahabr.ru/post/139180/

Разумеется не указано сколько-нибудь существенной части возможностей, но их явно достаточно много.

Выводы из вышеизложенного

Из истории языков программирования особенно явно заметно их приближение к обычной человеческой речи.

А в имеющихся возможностях просматривается достаточно серьезная готовность к реализации чего-то подобного.
Есть практически всё необходимое, кроме полноценного компилятора. Вплоть до того, что базовую версию того-же Inform7, получается, можно создать прямо сейчас.

Каким-же должен быть данный компилятор?

Как я понимаю, если получить в качестве результата компиляции программу на каком-либо из языков верхнего уровня, например C, то дальнейшая компиляция в машинный код особых проблем доставить не должна.
Скорее наоборот в качестве бонуса будет обеспечена кроссплатформенность.

И тут вроде как 2 пути:

  1. Исходить из человеческой речи, подбирая к ней команды
  2. Исходить из языка программирования, подбирая к нему человеческие фразы.

Вариант отталкиваться от человеческой речи безусловно интереснее.

В определении части речи может очень помочь что-то подобное — habrahabr.ru/post/152799/
И это — habrahabr.ru/post/148124/

Существительное — имя или часть имени переменной
Прилагательное — имя или часть имени переменной
Числительное — константа, как вариант имя или часть имени переменной, возможен warning с уточнением у программиста
Местоимение — имя или часть имени переменной
Глагол — команда (в некоторых случаях возможно условие)
Союз, наречие, предлог, частица, междометие — имя им легион и каждое может быть как условием, так и переменной и командой и чем угодно.

Причем потребуют решения очевидно:

  • Возможность переменных из нескольких слов (входная дверь, окно в детской, температура на улице и прочее)
  • Какие-то финты ушами потребуются для математики и графики, которые на данный момент максимально не похожи на человеческую речь.
  • Похожие проблемы с аббревиатурами, именами собственными (Дживахарлал Неру) и адресами интернет сайтов
  • Прочее

И хотя для реализации нет задачи добиться понимания компьютером человека, а есть лишь задача перевести слова в действия — все равно этот вариант по видимому сложнее.

Чем вариант отталкиваться от команд компилятора.

Тут кажется уже проще.
Занести в базу весь имеющийся набор команд и каждой команде присвоить один или несколько голосовых аналогов (синонимов). Все, что отсутствует в базе — считать переменными, константами или мусором.

Но этот путь далек от совершенства.
Придется запоминать имеющийся набор фраз, соответствующих командам и втолковывать в микрофон только их. Соответственно фатальный контроль речи, выдержать который смогут не все.

Хотя возможно расширение функционала, в сторону слияния с натуральными языками. Но не думаю, что удастся настолько поднять функционал.

И наконец, компромиссный вариант — движение в обоих направлениях одновременно.

И у первого и у второго вариантов конечная цель, это некий набор правил, по которому речь становится программой. Таблица соответствий человеческих фраз, слов и их синонимов — командам или последовательностям команд компьютера.
Соответственно вполне можно допустить, что при развитии обоих направлений — рано или поздно они сойдутся в одну цельную систему.

Хотя тут куча нюансов. Например, если что-то подобное действительно будет реализовано — программистам с дефектами речи придется непросто.

Отечественным программистам потребуется отдельная запись соответствующая мату, и не приводящая к попыткам ее запрограммировать. А то так и Терминатора можно случайно получить…

Но с другой стороны по мне так одна только возможность программировать, отлаживать и запускать программы по телефону, гуляя по улице, или дожидаясь заказа в кафе — уже стоит того. Также нравятся то, что можно будет дистанционно одним звонком выключить дома плиту, закрыть краны, перед приходом зимой включить чайник и нагреть комнату до 28С.
Хотя для тех у кого жена возвращается с работы раньше — это уже не так актуально.

«Известно и другое суеверие того времени: Человек Книги. На некоей полке в некоем шестиграннике (полагали люди) стоит книга, содержащая суть и краткое изложение всех остальных: некий библиотекарь прочел ее и стал подобен Богу. В языке этих мест можно заметить следы культа этого работника отдаленных времен. Многие предпринимали паломничество с целью найти Его. В течение века шли безрезультатные поиски.»
Х.Л. Борхес «Вавилонская библиотека»

А вообще есть в этом что-то забавное — например возможность использовать кассетный магнитофон для хранения куска кода. Ну сначала его от Синклера отключить, а потом хранить. На кассетах TDK и BASF.

ссылка на оригинал статьи http://habrahabr.ru/post/158087/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *