Подтвердить что ты не робот

Есть ли читаемый человеком язык программирования?

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

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

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

4b9b3361

Ответ 1

COBOL очень похоже.

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.

Ответ 2

Как насчет LOLCODE?

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

Простота!

Ответ 3

Сообщить 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.

Пример цитируется в Википедии

Ответ 4

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

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

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

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

Ответ 6

Это была "следующая большая вещь" примерно в начале 1980-х годов, и я провел большую часть своих первых двух лет в качестве кодера, работающего в "NATURAL", который был, по-видимому, лучшим из нового урожая 4GL (четвертое поколение языки), которые были предназначены для обеспечения доступа к данным (в данном случае к базе данных ADABAS), читаемых человеком.

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

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

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

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

ADDED

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

Ответ 7

Chef! Кто-нибудь может прочитать рецепты? Вот привет мир!

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.

Извините, если это не серьезный ответ, но это здорово.: -)

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

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

Ответ 11

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

Эти программы кодируются так, чтобы они выглядели как шекспировские пьесы, индивидуальные персонажи в пьесе были переменными, которые могут содержать цифры, а различные фразы в игре управляют символами и числом, которое они удерживают. Например, "Speak your mind" приказывает персонажу выводить его значение.

Ответ 12

Applescript:

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

Ответ 13

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

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

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

Ответ 14

Это действительно горячая тема.

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

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

Такие, как язык, подпадают под зонтик Языки домена.

Ответ 15

SQL

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

Ответ 16

Да. Он назывался COBOL, и люди обычно его ненавидят.

Ответ 17

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

Ответ 18

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

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

Ответ 19

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

Ответ 20

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

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

Ответ 21

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

Ответ 22

VB находится как можно ближе к одному:

Если MyLife.Sucks Then MyLife.End Else MyLife.Continue

Ответ 23

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

-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).

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

(Язык крепко в щеке.)

Ответ 24

DSL могут быть очень естественными. См. этот пример, созданный с помощью MGrammar:

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

Ответ 25

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

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

Ответ 26

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

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

С

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

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

Ответ 27

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

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

wiki/Sanskrit

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

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

Ответ 28

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

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

Ответ 29

GradStudent

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

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

Ответ 30

Cobol было вроде как.