Существует ли понятный человеку язык программирования?[закрыто]

StackOverflow https://stackoverflow.com/questions/202750

  •  03-07-2019
  •  | 
  •  

Вопрос

Я имею в виду, существует ли закодированный язык с кодированием в человеческом стиле?Например:

Create an object called MyVar and initialize it to 10;
Take MyVar and call MyMethod() with parameters. . .

Я знаю, что это не так уж полезно, но создать такую грамматику может быть интересно.

Это было полезно?

Решение

КОБОЛЬ это очень похоже на это.

SET MYVAR TO 10.
EXECUTE MYMETHOD with 10, MYVAR.

Еще один пример из Википедии:

ADD YEARS TO AGE.
MULTIPLY PRICE BY QUANTITY GIVING COST.
SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.

Однако, как ни странно, несмотря на то, что его дизайн должен быть читаемым как английский, большинство программистов полностью опровергли это причудливыми соглашениями об именовании:

SET VAR_00_MYVAR_PIC99 TO 10.
EXECUTE PROC_10_MYMETHOD with 10, VAR_00_MYVAR_PIC99.

Другие советы

Как насчет ЛОЛКОД?

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

Сама простота!

Информировать 7

Inform 7 - это, пожалуй, тот язык, который, на мой взгляд, наиболее подходящим образом разработан в стиле человеческого языка.Это довольно специфичное приложение для написания приключенческих игр.

Он основан на семантике, основанной на правилах, где вы пишете множество правил, описывающих взаимосвязь между объектами и их местоположение.Например, приведенный ниже раздел представляет собой программу Inform 7:

"Hello Deductible" by "I.F. Author"

The story headline is "An Interactive Example".

The Living Room is a room. "A comfortably furnished living room."
The Kitchen is north of the Living Room.
The Front Door is south of the Living Room.
The Front Door is a door. The Front Door is closed and locked.

The insurance salesman is a man in the Living Room. The description is "An insurance salesman in a tacky polyester suit. He seems eager to speak to you." Understand "man" as the insurance salesman.

A briefcase is carried by the insurance salesman. The description is "A slightly worn, black briefcase."  Understand "case" as the briefcase.

The insurance paperwork is in the briefcase. The description is "Page after page of small legalese." Understand "papers" or "documents" or "forms" as the paperwork.

Instead of listening to the insurance salesman: 
    say "The salesman bores you with a discussion of life  insurance policies.  From his briefcase he pulls some paperwork which he hands to you.";
    move the insurance paperwork to the player.

Пример, приведенный из Википедии

AppleScript довольно близок к этому, хотя это, очевидно, зависит от платформы.

Вот скрипт для открытия iTunes и воспроизведения списка воспроизведения

tell application "iTunes"
    activate
    play playlist "Party Shuffle"
end tell

Источник: Примеры AppleScript

Проекты, продвигающие программирование на "естественном языке", по сути своей обречены на провал.

- Эдсгер В.Дейкстра, Как мы можем сказать правду, которая может причинить боль?

Это была "следующая большая вещь" примерно в начале 1980-х, и я провел большую часть своих первых двух лет в качестве программиста, работая на "ЕСТЕСТВЕННОМ", который предположительно был лучшим из нового урожая 4GLS (языков четвертого поколения), которые были разработаны, чтобы сделать доступ к данным (в данном случае к базе данных ADABAS) доступным для чтения человеком.

Конечно, он не сделал абсолютно ничего подобного.Все, что мы получили в итоге, - это подробный, плохо структурированный код.Оба эти продукта все еще существуют, но вы никогда о них не слышали, что в некотором роде доказывает, в каком тупике это было.

На самом деле в тот период, по-видимому, существовало общее желание выйти за рамки "программирования" и попасть в некий рай искусственного интеллекта, вдохновленный 2001 годом.Oracle действительно увлекалась генерацией кода, и я с некоторым интересом вспоминаю продукт под названием "the last one", который продавался менеджерам как продукт, который автоматически генерировал любую программу, которую вы хотели, и сокращал весь ваш персонал-программистов.Похоже, не оправдал ожиданий ;-)

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

Возможно, через 50 лет все могло бы измениться, но на нынешнем этапе игрового кодирования требуется определенная ясность мышления и реализации, которая лучше всего достигается с помощью специального синтаксиса, разработанного для этих целей, а не какого-либо приближения к естественному языку, который неясен и двусмысленен.Ближайшим приближением, возможно, является физика, где суть предмета заключается в используемой математике (например, в языке программирования для физики), а не в подробных формулировках.

ДОБАВЛЕНО

Я забыл, что помимо COBOL был еще PL / 1, которому когда-то приписывали то, что он позволил НАСА отправить человека на Луну. Он был таким же подробным, как COBOL, и еще больше старался быть "удобочитаемым для менеджера".Вот почему сейчас о нем тоже никто толком не слышал :-)

Шеф-повар!Любой может правильно прочитать рецепты?Узрите привет, мир!

Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes

Method.
Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. 
Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. 
Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. 
Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. 
Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. 
Pour contents of the mixing bowl into the baking dish.

Извините, если это несерьезный ответ, но это просто потрясающе.:-)

Все языки "читаемы человеком".:) Как еще кто-то мог бы это создать?При этом языки, поддерживающие DSL, могут быть невероятно интуитивно понятными, такими как Бу.

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

Идеальный язык программирования должен иметь максимально прозрачный синтаксис и выделять концепции, лежащие в основе программы.Очевидно, что существует компромисс между быстрой обучаемостью и минимальным, но малопонятным синтаксисом (подумайте о Perl или даже K).

Создав набор правил, можно выполнять логическое программирование в Пролог вот так.Вы можете создать грамматику (или загрузить ее) для определенного домена, создать базу знаний и затем запросить ее.После определения вашей грамматики вы могли бы сделать что-то вроде:

bob is a parent of tim.
mary is a parent of bob.

?- X is a grandparent of tim.
X = mary

?- jim is a parent of bob.
false

Я вижу, что Язык программирования Шекспира еще предстоит упомянуть.

Эти программы закодированы так, чтобы выглядеть как пьесы Шекспира, отдельные персонажи в пьесе являются переменными, которые могут содержать числа, а различные фразы в пьесе манипулируют персонажами и числом, которое они содержат.Например, "Высказывай свое мнение" приказывает персонажу вывести свое значение.

Эпплскрипт:

tell application "Finder"
 set the percent_free to ¬
 (((the free space of the startup disk) / (the capacity of the startup disk)) * 100) div 1
end tell
if the percent_free is less than 10 then
 tell application (path to frontmost application as text)
 display dialog "The startup disk has only " & the percent_free & ¬
 " percent of its capacity available." & return & return & ¬
 "Should this script continue?" with icon 1
 end tell
end if

Я умею читать С.Это означает, что он доступен для чтения человеком (потому что я человек).Это просто слишком кратко для обычного человека.Общая концепция языков программирования заключается в максимизации информации о том, как компьютер должен работать в заданной строке.

Вот почему Ruby так популярен;это максимизирует функциональность при минимальном объеме текста.Английский (или любой другой естественный язык) - довольно неточный, малоинформативный / символьный язык.

В целом, это:(i) сделано ранее и (ii) заведомо более слабая идея.

На самом деле это горячая тема.

Для начала - что доступно для чтения человеком?

Читатель с китайского языка не может читать по-русски, и наоборот.Если вы сузите свой домен, например, до китайских фармацевтов, пишущих описание, вы могли бы разработать язык вокруг этого.И это было бы читаемый человеком.

Например, язык подпадал бы под понятие Языки, специфичные для конкретной предметной области.

SQL

SELECT name, address FROM customers WHERE region = 'Europe'

ДА.Это называется КОБОЛЬ, и люди, как правило, терпеть этого не могут.

Информировать 7 это самая успешная подобная система, которую я когда-либо видел.Он имеет два преимущества перед более грубыми системами, перечисленными в других ответах здесь:это для области, особенно подходящей для естественного языка (интерактивная художественная литература), и в ней проводится более тщательный анализ входного кода, основанный на знаниях компьютерной лингвистики, а не просто на обычной грамматике языка программирования, в которой вместо фигурных скобок используются английские слова и т.д.

Perl, утверждают некоторые люди.

print "hello!" and open my $File, '<', $path or die "Couldn't open the file after saying hello!";

Выполните поиск в Google по запросу "программирование на естественном языке", и вы найдете много информации (в том числе, почему это плохая идея).

Важна ясность выражения.

Но ясность мышления гораздо, гораздо важнее.

ГиперТалк и его потомок Эпплскрипт были разработаны так, чтобы быть похожими на английский язык.

VB настолько близок, насколько я могу себе представить:

Если MyLife.Отстой, тогда MyLife.Закончите, иначе MyLife.Продолжить

Конечно, Эрланг.

-module(listsort).
-export([by_length/1]).

 by_length(Lists) ->
    F = fun(A,B) when is_list(A), is_list(B) ->
            length(A) < length(B)
        end,
    qsort(Lists, F).

 qsort([], _)-> [];
 qsort([Pivot|Rest], Smaller) ->
     qsort([ X || X <- Rest, Smaller(X,Pivot)], Smaller)
     ++ [Pivot] ++
     qsort([ Y ||Y <- Rest, not(Smaller(Y, Pivot))], Smaller).

Я человек, это язык программирования, и я могу на нем читать.Я не знаю, что все это означает, но, по-моему, я вижу там много английских слов.

(Прикусывает язык к щеке.)

DSL могут выглядеть очень естественно.Видишь этот пример созданный с помощью Программмар:

test "Searching google for watin"
    goto "http://www.google.se"
    type "watin" into "q"
    click "btnG"
    assert that text "WatiN Home" exists
    assert that element "res" exists
end

КОБОЛЬ был предназначен для чтения менеджерами и содержит "шумовые слова", чтобы сделать его более читабельным.

Самое забавное, что он читается немного как подробный DSL.

Быть более понятной для человека, чем большинство других, было одним из первых преимуществ Ada.В наши дни я нахожу это глупым аргументом, как и любую достаточно сложную задачу в Любой для понимания языка потребуется компетентный практик.Тем не менее, он действительно превосходит все языки с C-синтаксисом.Его доминирующие стили кодирования также могут усилить этот эффект.Например, сравнение циклов в операторе if:Ada:

if Time_To_Loop then
   for i in Some_Array loop
      Some_Array(i) := i;
   end loop;
end if;

C:

if (timeToLoop != 0) {
   for (int i=0;i<SOME_ARRAY_LENGTH;i++) {
      someArray[i] = i;
   }
}

Код на C выглядел бы еще хуже, если бы я использовал венгерскую нотацию, как Microsoft, но я стараюсь быть вежливым.:-)

Интересный вопрос.Ваш вопрос можно прочитать как "Существует ли какой-либо язык программирования, который легко читается людьми?", ИЛИ ЕЩЕ как "Существует ли человеческий язык, который можно использовать для программирования?".Все ответы здесь были сосредоточены на первом, поэтому позвольте мне попытаться ответить на второй.

Вы слышали о санскрите?Это древнеиндийский язык, на котором основаны современные индийские языки, такие как хинди.

wiki/Санскрит

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

Это совершенно анекдотический случай, так что я не ручаюсь за точность этого.Просто хотел поделиться тем, что я знаю об этом.:-)

Я согласен с общим мнением здесь."Читаемый человеком" общее назначение языки программирования в большинстве случаев - плохая идея, но понятные человеку Языки, специфичные для конкретной предметной области, очень полезны.

У REBOL есть отличная система для создания DSL.

Выпускник

В нем есть только одно утверждение: "ты - напиши мне программу, чтобы сделать x"
Он действителен для всех значений X и имеет то преимущество, что x не обязательно определять и его можно изменить после написания программы.

Доступен коммерческий диалект под названием intern:стоимость разработки ниже, но это не гарантирует, что она будет работать

Коболь было что-то в этом роде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top