Было бы интересно, если бы были приведены подробности техник распознования голоса, представлен прототип или еще что-то. А так это напомнает банальную демагогию (точнее поток сознания).
Вы даже не упомянули иерархию Хомского (Chomsky). Видимо, ваш интерес к теме заканчивается статьями с хабра.
Мой интерес в данном случае — направление развития.
А конкретная реализация может варьироваться.
Она ничего толком не решает — на С это будет или на чем то еще.
С использованием каких-то принципов или нет.
Будет использоваться данная иерархия — я не против.
Не будет — тоже собственно ничего страшного.
Или изменяет интерфейс так, что он становится крайне популярен у большинства обычных людей.
Под которых зачастую приходится подстраиваться программистам.
Речь была о передаче куска кода в качестве аргумента в макрос. Были бы анонимные функции — можно было бы передать в качестве куска кода указатель на таковую.
Операторы «запятая» и "?: " половину кусков кода позволяют записать, как выражения — и передать тем самым аргументом. Разве что с циклами так поступить нельзя — но так ли часто это надо, чтобы получить «большую негативную роль» от отсутствия возможности?
По-моему направление развития могут описывать люди, которые работают над этой темой. Иначе это типичная журналистика типа «куда катиться мир». Даже на курсовую не тянет.
Из истории языков программирования особенно явно заметно их приближение к обычной человеческой речи.
извините, мне не очевидно.
Возьмем Scala, или Haskell придуманные относительно недавно. Ну или Go от гугла.
Они ближе к человеской речи чем придуманный в 50е годы Алгол? Или PL/I?
В языках программирования while do означает строго определенные вещи, в естественном языке оно может означать всё что угодно. Если же формализовать естественный язык, то получится еще один SQL.
Если в обычной программе встречается непонятное что-то — обычно следует ошибка компилятора и warning.
Признаться не вижу причин, по которым данная система не сможет уточнить по телефону, что имел в виду программист.
А SQL жив уже лет 30 вроде и ничего для его замены я признаться пока не видел.
Хотя возможно просто не в курсе.
В обычной программе что-то непонятное легко определить, так как язык формальный. В естественном языке же этого не определишь так просто. Законы пытаются писать предельно формальным языком, но все-равно приходится выпускать большие книжки с комментариями и толкованиями законов.
А SQL жив и здоров, но он не является тем естественным языком работы с БД для людей не знакомых с программированием. А задумывался он именно таким.
И в то же время ГОСТы и стандарты меняются реже, как и толкований к ним меньше.
Законы — постоянно пытаются обойти, из-за чего и происходят постоянные уточнения для латания дыр.
Надеюсь…
Сложно. Да.
Но есть же и существенные ограничения функционалом. Можно сказать компьютеру «подумай» — но команды такой представить себе я пока не могу.
Каким задумывался SQL — не знаю. Но признаться не вижу связи между естественным языком и реляционными базами данных.
>>Каким задумывался SQL — не знаю. Но признаться не вижу связи между естественным языком и реляционными базами данных.
А зря… она есть через Пролог. SQL-> Prolog -> Mathematical Predicate Language -> NLP -> Natural Language.
На самом деле релияционная база данны -> предикаты -> язык математической логики -> грамматический разбор естественных языков
Какова цель таких способов/языков программирования? Вы знаете, я, наверное, процентов 60 своего времени (а то и больше) провожу за чтением, переосмыслением и правкой того, что написал. И это нормальный рабочий цикл. А как быть с речью? Как ее править? Вы много людей знаете способных нормально с первого раза выразить свои мысли? Я уже не говорю про нормально с первого раза написать программу :)
Ничего не помешает. Только я глазами читаю гораздо быстрее звучания различимой на слух речи. Плюс, могу пропустить ненужные детали, не вникая. Что называется, «по диагонали». Со звуком это не покатит, увы.
Кроме того, следует понимать, что естественный язык несет в себе отпечаток истории, культуры, менталитета и выражает совсем не то, что нужно выразить при написании программы. Естественность языка программирования такая же утопия, как CASE-средства. Помните прогнозы, что программистов заменят компьютеры, ведомые вооруженными мышками домохозяйками?
Кесарю — кесарево, слесарю — слесарево. Не смешивайте врожденную иррациональность и неоднозначность человеческих языков с математической беспощадностью машин :)
Вполне возможно :)
Я не собирался бить себя ушами по щекам и доказывать что будет именно так и никак иначе.
Однако машины определяющие дорогу на основе кучи всевозможных детекторов вместо глаз — уже есть.
Да. Только по городу.
Но и тут вроде как можно реализовать аналогично.
Требуется набить относительно простой кусок — диктуй.
Встретился кусок сложной дороги — производится передача управления человеку переходи на клавиатуру.
Если бы появился компилятор, способный компилить человеческую речь (записанную в виде текста), то… он бы прямым ходом отправился на помойку. Ну в лучшем случае остался бы игрушкой для гиков.
Потому что:
Тексты надо в чём-то набирать, где-то хранить, как-то структурировать и вести контроль версий.
Как вы планируете рефакторить такую «программу»? Вручную всё переписывать и разбивать на «главы»? А как разбивать на модули? Тоже вручную?
А теперь попробуйте прикрутить к такому юнит-тесты, отладчик и всё это автоматизировать. А как насчёт сгенерировать юнит-тесты автоматически?
А как вообще такое отлаживать? Попробуйте-ка провести трассировку, когда нет ни переменных, ни выраженных процедур/функций. Выезжать на логах? А что вы будете заносить в те логи, если у нас даже нет переменных?
Ну и т.д.
Конечно, все эти проблемы можно попытаться решить. Но, ИМХО, данный путь развития принципиально неверен. Сейчас просто мания какая-то — языки программирования плодятся как грибы после дождя. Даже такая крупная корпорация как Google умудрилась попасть под влияние моды, выдав не меньше двух мёртворождённых языков (Dart, Go).
Развивать нужно не языки, потому как язык сам по себе ничто. Для программирования нужна IDE, а не язык. С крутой IDE можно даже на ассемблере кодить чрезвычайно просто и продуктивно. А почему нет? Если у нас в одном флаконе есть сниппеты на любой вкус, если есть сворачивание/разворачивание кода, подсветка, куча крутого автодополнения, кодоанализатор, продвинутые возможности рефакторинга, идеально построенная система всплывающих подсказок, системы документирования кода, генератор модульной структуры с автоматическим созданием пакета тестов, встроенный отладчик с возможностью править код по живому прямо в работающей программе с динамической рекомпиляцией, построитель разного рода логических диаграмм, мастер форм, специальные генераторы «переходничков» ко всем популярным фреймворкам…
Согласитесь, что в такой IDE даже на asm'е кодить будет гораздо приятнее, чем к примеру вести C++ проект в каком-нибудь унылом Эклипсе, где всё собрано из кое-как подогнанных друг к другу модулей и плагинов, которые очень неохотно работают в связке, а компилятор с линкером и системой контроля версий вообще не являются частью IDE, а ставятся отдельно и требуют постоянной притирки.
Ещё раз: нужно развивать IDE, а не языки. И вот это из всех игроков IT-рынка похоже понимает одна лишь Microsoft. Поэтому C# сейчас на коне. Поэтому и TypeScript будет рулить, тогда как о Dart'е через два года никто и не вспомнит.
Я вижу что сейчас идет активное проталкивание всего, что угодно — в как можно более широкую аудиторию.
Начиная с коробок-автоматов на машинах, и кончая всевозможными АСУТП.
Потому-что это деньги для разработчика.
Чем больше людей сможет на этом программировать, включая бабушку Варю — тем больше денег и тем соответственно лучше.
Коробки-автоматы и АСУТП это средства автоматизации вполне определенных задач. И никакой «как можно более широкой аудитории» не существует. И все «проталкивание» касается только лишь отдельных конкретных решений внутри конкретной рыночной ниши внутри этого круга задач.
А, «бабушка Варя» программирующая с помощью голоса коробку-автомат, это, простите, «больше денег», только для автосервиса.
Поймите, какое-бы естественно-языковое средство вы бы не вручили в руки обезьяне, эффект все равно все упрется «ограничения формализации», и «реализованный программный продукт» никак не сможет быть выше чем «обезьяний уровнь».
Скорее всего, будет что-то вроде: «Джарвис, сделай мне трёхмерную модель...».
Само понятие «язык программирования», на этом уровне скорее всего сотрётся, а наиболее важную роль будет играть окружение. Собственно оно и сейчас играет не последнюю роль (IDE, фрэймворки, библиотеки и так далее).
Хрена лысого! Это будет диалог вроде: — «Компутер, сделай чтобы было все пи$&ато!» / — «А как?» / — «Ну, ты же умный компутер, придумай что нибудь!» ;)
Если не верите, попробуйте спросить любого, кто занимался переговорами с заказчиком, что такое «проблемы с формализацией». Это называется «хочу чего-то сам не знаю чего, но чтоб, все было з@#&ись»!
Как набирается код в Eclipse? Три буквы, две из которых заглавные — ctrl+space, выбор из меню, вправо, опять три буквы +ctrl+space+выбор из меню, вправо, опять три буквы +ctrl+space+выбор из меню, в конец, shift +home, alt+shilt+L, ввести имя переменной, enter. Как это сделать словами и не дольше ли это будет чем руками?
Простите, но очень дилетантский взгляд:
1. Ничего про модели вычислений, которых штук 10 и от которых зависит семантика языков программирования. Тот же ваш Inform 7 очень похож на Пролог с большим количеством синтаксического сахара из-за которого его грамматика похожа на английский.
2. Не учли, что языки и компиляторы во многом со временем не усложнились, а наоборот — упростились. Например, старые компиляторы Фортрана раньше умели сами исправлять часть синтаксических ошибок (иногда даже успешно). Графических языков тоже много изобретали.
3. Распознавание речи к вопросу не имеет ни какого отношения — это всего лишь метод ввода. Туда же проверку офографии — это функциональность IDE, и моя Visual Studio умеет это делать.
4. Ни слова про DSL.
1.Если я правильно понял вопрос — то как я понимаю языки со всеми семантиками и парадигмами, функции или обьекты — решают в общем-то одни и те же задачи. Утрированно — занимаются быстрыми преобразованиями Фурье, апроксимируют и выводят на экран. Различен лишь способ, то есть операторы которые должны выполниться.
Соответственно при возможности записи соответствий голосовым командам — «умножить», «взять интеграл методом трапеций», нарисовать кнопку «Ok» — модели уже по идее не должны оказывать существенного влияния. В одном случае создастся функция, во втором вызовется конструктор обьекта…
2. Графические языки, как я понимаю также выполняют вполне обычные действия. Ladder Diagram например может быть переведен в Structured Text машинными средствами.
3. Мне показалось, что если подобный метод ввода появится, он будет достаточно сложен для того чтобы переписывать его под каждый язык. Проще будет подогнать языки. Хотя возможно ошибаюсь.
Модели — это процедурное, функциональное, логическое, автоматное и так далее программирование. Семантика. Смысловая нагрузка элементов языка.
Речевой ввод — способ ввода и ничего больше. Непосредственно к программированию это отношения не имеет.
Приведу аналогию — книга может быть написана пером на бумаге, напечатана на клавиатуре, прочитана вслух. Но сюжет книги от этого не меняется никак.
Из истории языков программирования особенно явно заметно их приближение к обычной человеческой речи.
Что вы говорите? Разрешите тогда маленькую добавку в к вашей исторической справке: язык COBOL, один из самых первых ЯП высокого уровня, как раз пытался быть максимально близким к человеческой речи (хоть и не устной). И идея была (она до сих пор всплывает примерно с периодичностью раз в десятилетние), что бы «не-програмисты» (в данном случае бизнесмены) могли сами писать программы для своих нужд. Что получилось — мы все прекрасно знаем. Идея неоднократно себя дискредитировала — «не программисты» не могу писать программы вне зависимости от языка, будь это обычный ЯП, графический ЯП, генератор приложений или человеческая речь. У них нету соответствующих навыков. А вот программистам удобнее всего выражать свои программистские мысли на классических формальных языках. «Please forgive my English, my native language is C++» :)
Ага, COBOL inference:
“This reminds us of what I call the COBOL inference — that most technologies that are supposed to eliminate professional programmers do nothing of the sort.”
Статья 2005 года. Мы обречены на периодическое появление «идей» и «средств», которые позволят программировать клеркам и домохозяйкам. Но в настоящее время работа программиста состоит в формализации требований к ПО в виде кода.
Поэтому развитие языков программирования идет в сторону появления новых более мощных абстракций, которые лучше соответствуют базовым способам формализации. А вовсе не в сторону деформализации языков программирования.
Более вероятным мне кажется, что программирование станет неотъемлемой частью технического и естественнонаучного образования, какой является сейчас высшая математика. Как в настоящее время нечего делать в биологии, химии или тем более физике без знания математики, так в скором времени там будет нечего делать без способности программировать.
Следующий язык программирования