Можно ли считать язык программирования языком? [закрыто]

Может показаться, что этот вопрос отвечает сам на себя, но я призываю вас рассмотреть возможности и влияние, которое это может оказать на общество.

Мне, как системному инженеру, программирование ближе, чем мой «родной» язык — английский.

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

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

Это скорее «забавный» вопрос, но он имеет некоторые потенциально изменяющие жизнь возможности. Не пора ли нам рассматривать цифровые языки как настоящие языки?

Язык

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

«исследование того, как дети изучают язык»

система коммуникации, используемая конкретным сообществом или страной.

"книга переведена на двадцать пять языков"

Я понимаю, почему это забавный и интересный вопрос, но, похоже, это зависит от того, что вы подразумеваете под языком, и ответы сразу же зависят от того, как это определяется.
Обновлю пост определением языка, чтобы внести ясность. Предполагалось использовать словарные определения термина (сохраняя его простоту). До сих пор я видел несколько действительно хороших ответов на этот вопрос, что затрудняет «голосование» за правильный. Я предполагаю, что это неотъемлемая опасность публикации в философской системе;)
Если(вы.понимаете(это)) то languages.add(этот.язык программирования)
Это действительно проблема определения, но есть подходящие. См. формальный язык и/или иерархию Хомского в Википедии.
Язык программирования — это всего лишь односторонние команды, процессор не отвечает. И нам нужно добавлять комментарии, иметь документы поверх языка программирования, чтобы другой человек мог его понять. Родной язык – это тот, с которым вы родились .
ИМХО, это вопрос лингвистики - жизнеспособный ответ может касаться того, моделируют ли компьютерные языки концепцию генеративной грамматики, предложенную Хомским (или какое-либо другое предложенное определение/основную особенность естественного языка); но это проблема лингвистов, а не философов.
Если язык создается полным спектром семантики, а не только перформативной семантикой и синтаксисом, то это вопрос философии, просто глупый, и ответ должен быть «нет». Компьютерные языки — это математические структуры, а не хранилища значений.
Как вы говорите «дерево» на ассемблере? Мне кажется, что сравнение неудачно на первом этапе.
Мне жаль так говорить. Мне лично даже вопросов не надо . Мы, люди, веками создавали машины , и если рассматривать язык программирования как чистое устройство или части машин , то тогда сам вопрос отпадет.
Я хотел бы сказать, что это вовсе не лингвистический вопрос, а скорее проблема того, как поступать с вводом или выводом данных . Если мы видим ПК и т. д., машину или зеркало самих себя, тогда язык программирования может быть в категории лингвистики, если мы рассматриваем их как устройства ввода-вывода .
Это не по теме. Что угодно можно считать чем угодно. При этом я думаю о концепции коммуникации, а также о концепции алгоритма. На первый взгляд я думаю, что язык программирования предназначен для построения алгоритмов, а естественный язык — для обеспечения коммуникации.
Я согласен, если этот вопрос не по теме или нет. Но ответ довольно прост. Чтобы язык программирования стал «Языком», машина, которая имеет дело с языком программирования, должна думать сама по себе. По той причине , что до сих пор язык принадлежит людям. Таким образом, машина должна действовать как люди, используя язык программирования.
@KentaroTomono Я должен не согласиться, язык программирования предназначен для того, чтобы люди могли общаться о конкретных проблемах машины / системы , что делает его языком.
@iphigenie --- Я чувствую, что вам следует серьезно пересмотреть свое мнение, поскольку это не основано на «мнении», а просто рассматривает доказательства каждой стороны и логически определяет, к чему относится эта концепция.
@JamesKingsbery --- Я чувствую, что вам следует решительно пересмотреть свое мнение, поскольку это не основано на «мнении», а просто рассматривает доказательства каждой стороны и логически определяет, к чему относится эта концепция.
@Keelan --- Я чувствую, что вам следует серьезно пересмотреть свое мнение, поскольку это не основано на «мнении», а просто рассматривает доказательства каждой стороны и логически определяет, к чему относится эта концепция.
@HunanRostomyan --- Я чувствую, что вам следует серьезно пересмотреть свое мнение, поскольку это не основано на «мнении», а просто рассматривает доказательства каждой стороны и логически определяет, к чему относится эта концепция.
@Dave --- Я чувствую, что вам следует серьезно пересмотреть свое мнение, поскольку это не основано на «мнении», а просто рассматривает доказательства каждой стороны и логически определяет, к чему относится эта концепция.
Это вопрос мнения, потому что, взглянув на доказательства с каждой стороны, нет другого способа принять решение между двумя позициями, кроме как на основе собственного мнения о том, что считается «языком».
@JamesKingsbery - Разве не так со всем, особенно в философии или теологии. Пока что-то не обсуждается. Вторично твое утверждение, какие "доказательства". Он был открыт всего несколько дней, когда вы закрылись, так что вы не могли просмотреть все улики. Далее, популярность этого вопроса показывает, что я не единственный, кто размышлял над этим вопросом.
@JamesKingsbery - Кроме того, не отвечая на мой собственный вопрос, этот документ указывает на то, что ДА, ВИРДЖИНИЯ -- ЕСТЬ ОПРЕДЕЛЕННЫЙ ОТВЕТ --- byte-notes.com/generation-programming-languages

Ответы (9)

Коммуникация

Сравните свой вопрос:

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

и http://en.wikipedia.org/wiki/Language :

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

Ключевым моментом в общепринятом понятии «язык» является коммуникация. Таким образом, вы не можете сказать, что не имеет значения, говорит ли общество вокруг вас на одном языке или нет.

Императив против информационного

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

В естественных языках информация очень важна. Обмен информацией – одна из основных функций языка.

Другие языки программирования, такие как пролог или функциональные языки, могут лучше подходить для передачи информации, однако в этих языках сложно работать с неопределенностью (например, «Может идти дождь»).

Не недооценивайте свою способность говорить на естественном языке

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

Разве это не верно для любого языка - нужна интерпретация. Например, в английском языке мы соединяем символы вместе, а затем придаем им значение. При общении с этими высказываниями они то и интерпретируются, и более склонны к неверному истолкованию объединенного значения или отдельного термина. Использование языка, основанного на перемещении адресов памяти, может быть намного дольше, но передаваемое значение является точным, что, я считаю, является одним из основных определяющих факторов языка. Кроме того, я думал написать Q на ASM, но это сайт только на английском языке ^^
@SanuelJackson есть разница между количеством интерпретаций, необходимых для понимания «Король жив» и « 10010011». Во-первых, нам нужно знать только значение слов. Второй может иметь разное значение в разных местах памяти, под разными программами. Мне тоже еще очень интересно увидеть перевод "Король жив" в ассемблере.
@Keelan - то же самое можно сказать и о «Короле жив». Вы должны знать, что эти точные слова означают в их точном контексте. Он имеет ту же информацию, что и «034 084 104 101 032 107 105 110 103 032 108 105 118 101 115 034».
@Davor, тебе нужно знать, что означают слова, но контекст не имеет значения. Только по значению слов вы можете понять значение слов в контексте. В машинном коде «слова» не имеют значения вне их контекста.
@ Килан - опять же, это буквально бессмысленно. Нет никакой разницы в «естественных» словах или бинарных словах. Я даже не понимаю, как ты себе это представляешь возможным. Оба являются просто символами, которые передают некоторый смысл.
@Davor Обычно говорят, что слово «король» имеет значение, но 1001не имеет одного значения. Вот почему мы можем делать словари для английского языка, но не для битовых строк.
Контекст Davor чрезвычайно важен во всей языковой обработке, будь то компьютерные языки или «естественный язык». Существуют огромные различия между ними в том, как контекст оценивается и применяется. Когда люди (или другие существа) общаются с помощью естественных лингвистических процессов, существует огромное количество подразумеваемого контекста, который несет в себе большую неопределенность. Существует множество способов прочтения утверждения, и во многих случаях подразумевается несколько значений. Часто присутствуют значения, изначально не рассчитанные говорящим, но действительные. Компьютерные языки стремятся к ясности и недвусмысленности.
Продолжая пример с королем, вы могли бы сказать «король жив» и иметь в виду тысячу разных королей в тысяче разных замков. Человек, которого вы слушаете, может даже вообразить себе совершенно другого короля, чем тот, о котором вы говорили. Является ли это «эффективной коммуникацией» или нет, не очевидно, и часто неизвестно в течение длительного времени - если вообще когда-либо. С компьютером символы означают именно то, что они должны означать, когда они должны это означать, иначе они считаются мусором/неуместными. На человеческом языке это было бы похоже на то, что все разделяют один POV.
@Sanuel Jackson Я был бы рад увидеть одно основное предложение, переведенное с английского на ассемблер. До сих пор вы не привели ни одного примера в поддержку своего утверждения о том, что вопрос мог быть написан на ASM.
Хотя различия между двумя парадигмами (естественным и «машинным» языком) все еще довольно велики, здесь представлена ​​интересная статья о попытках интерпретировать естественный язык в логической структуре. Я считаю, что это вполне возможно, как представлено в статье, но это просто подчеркивает (IMO) различия в НАЗНАЧЕНИИ таких языков. Для меня не главный вопрос, неразличимы ли они в крайних случаях: web.stanford.edu/class/linguist236/materials/…

Я думаю, что это педантичная разница между «человеческим языком» и «компьютерным языком». В настоящее время, вероятно, нет различий в большинстве юридических определений, касающихся прав на перевод, но это было бы быстрым решением, если бы кто-то захотел оспорить это. Законы обычно содержат раздел «определения», в котором они определяют слова, которые они используют. Определения, которые они используют, не обязательно должны быть общеупотребительными, это просто использование, которое они намереваются использовать в этом законе. Они очень быстро изменили определение, чтобы оно означало «человеческий язык» (тщательно составленное, чтобы быть точным и закрыть проблему).

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

Это интересно и лаконично. Подумайте, если бы мы считали компьютеры населением. В сценарии «человек-компьютер» программисты общаются на одном или нескольких диалектах или языках, которые компьютер может понять или интерпретировать. Как вы думаете, можно ли рассматривать это как своего рода колонию? Программисты также часто общаются друг с другом, используя компьютерный код (ассемблер, vb и т. д.), и вне работы, когда они это делают, люди смотрят на это с блестящими глазами, поскольку некодеры не понимают языка.
Вы несколько раз упомянули, что используете ASM для общения. Мне любопытно, как это работает, когда вы делаете это со своими сверстниками. Вы про АСМ? Вы используете его, чтобы дополнить английский? Будете ли вы вести полноценный разговор, используя только ASM? Если да, то приведите пример - было бы здорово
; кстати, это не считается.
Без проблем. В разговоре обычно ограничиваются обсуждением того, как что-то сделать в программе, где основная часть разговора (как вы могли догадаться) состоит в перемещении регистров. В этих разговорах обычно очень мало английского языка, ограниченного такими фразами, как «открой это» и «посмотри на это», за которыми следуют вставки на указанном языке, если информация более обширна — например, ее чтение займет 3 часа. . Общение, хотя и не всегда вербальное, по-прежнему в основном происходит на языке, который мы обычно используем.

Термин «родной язык» не имеет стандартного юридического определения. В США он имеет установленное законом определение для федеральных образовательных целей (связанных с финансированием) как «язык, обычно используемый таким лицом; или, в случае ребенка или подростка, язык, обычно используемый родителями ребенка или молодежь". Комфорт значения не имеет. Поскольку вы не говорите на ассемблере (на каком-либо диалекте), это не ваш родной язык, и люди не говорят ни на одном языке программирования, остальные ваши вопросы неактуальны.

Предполагая, что кто-то изобретает разумные компьютеры, которые считаются юридически эквивалентными людям, тогда возможно, что двоичные коды операций (не языки программирования более высокого уровня, которые являются устройствами с человеческим интерфейсом) могут быть юридически признаны «родным языком» таких объектов. . Или можно считать, что все компьютеры должны быть запрограммированы на понимание английского языка. Поскольку компьютеры так или иначе не используют язык, вы не можете предсказать, каким будет юридический результат.

Когда я с другими программистами, мы чаще общаемся на этих языках, чем на английском. Если бы не кодер слушал, он мог бы понять несколько английских терминов, поскольку они смешаны, но в целом разговор прошел бы без понимания. Для носителей одного языка характерно смешивать термины из другого языка (например, когда-нибудь слушали китайские радиостанции).
Это не отрицает возможности/вероятности того, что при испытании в суде язык может провалиться, однако известно, что даже клингонские и древние «мертвые» языки разрешены в качестве языка, даже если они далеки от передачи какого-либо смысла. окончательно. При этом языки программирования будут передавать одну и ту же интерпретацию от компьютера к компьютеру и от опытного программиста к опытному кодировщику.
Есть простой способ увидеть, что Ассемблер на самом деле не является языком. Назовите мне ассемблерное выражение, которое переводится как «Все львы — млекопитающие», «Я верю, что все львы — млекопитающие» и «Я отрицаю, что все львы — млекопитающие». Эти предложения могут быть переданы на клингонском, а также на любом известном древнем мертвом языке (то есть не на этрусском).
@ user6726 - вы знаете, что миллионы слов из разных языков не имеют эквивалентного перевода на другие языки? Ваш аргумент прямо смешной.
@Davor, дело не в том, что есть небольшой пробел, а в том, что ассемблер в принципе не способен выразить такие предложения. В естественном языке есть простое средство заполнить пробел — позаимствовать слово для нового понятия. Это ничего не значит применительно к ассемблеру.

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

Взгляните на этот комментарий, который вы сделали к другому ответу:

частный список _Languages ​​= новый список();
общедоступные языки списка { получить { return _Languages; } установить { _Languages ​​= значение; } };
Языки.Добавить("C#");
Языки.Добавить("АСМ");
Языки.Добавить("Английский");

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

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

Также обратите внимание, что ваш пример синтаксически неверен на С#. Даже если предположить, что переменные объявлены вне метода, содержащего три других оператора, точка с запятой после объявления get/set все равно вызовет ошибку.

Хороший глаз, извините, точка с запятой пошла счастливой ;)

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

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

Более фундаментальная проблема заключается в том, что термин «язык» в «языке программирования» имеет очень строгую коннотацию, которая почти полностью не связана с явлением, изучаемым лингвистами. Кроме того, термин «естественный» в «естественном языке» проблематичен с философской точки зрения и далек от консенсуса. Можно легко доказать, что человеческий язык в своем проявлении полностью искусственен.

Что не проходит тест Тьюринга, так это определение того, разумен компьютер или нет, это не имеет значения при использовании языка для надежной передачи информации. Обычным для разработчиков является «говорить» или иным образом передавать информацию на общем языке, который они выбрали для общения — C++, ASM и т. д. Для тех, кто слушает, это будет больше похоже на передачу на иностранной радиостанции, где только несколько слов здесь и там можно было понять. Я чувствую, что даже если для передачи значения может потребоваться больше времени, конечный результат будет более точным, чем языки, такие как английский и т. д.
Интересно, что ваш комментарий заставил меня задуматься о попытке психотерапевта понять язык психотического пациента.
Если лингвисты используют термин «естественный язык», то это, кажется, естественным образом приводит к вопросу о том, какие языки не являются естественными; будет ли одним из примеров эсперанто или они думали о чем-то совершенно другом?
Часть о тесте Тьюринга не имеет абсолютно никакого смысла.
И я ожидаю, что вы объясните мне, почему именно так, чтобы это имело смысл. Бремя осмысления лежит на всех нас.

Лингвисты профессионально подготовлены для работы с языками; ни один из них, насколько я знаю, не имеет дело с ассемблером или даже с такими компьютерными языками, как C++ или Java; на каждом языке, который они изучают, говорят или говорили; оно могло иметь письменную форму; это может быть сложный придворный язык, креольский или пиджин.

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

Человеческие языки имеют высокий уровень неоднозначности, что по сравнению с компьютерными языками считается проблематичным; и это до тех пор, пока вы хотите программировать на естественном языке или если вы фетишизируете точность; но довольно быстро стало понятно, что сильно усеченный и видоизмененный язык более эффективен; на базовом уровне язык Тьюринга; на уровне чипа машинный код; затем языки более высокого уровня, такие как COBOL, Smalltalk или Java; это можно назвать языковым стеком.

Двусмысленность важна в человеческих языках, потому что мир таков: что такое стул? Что-то, на чем можно сидеть; поэтому бревно, а также кресло или скамья; а может быть, и пол, если удобно сидеть со скрещенными ногами; и не было бы невыносимо громоздко называть каждый оттенок красного другим именем, потому что это был другой оттенок ? И могла бы работать такая метафора, как «его гранитное лицо», если бы гранит мог относиться только к определенному виду магматической породы? А лица только к людям или даже к млекопитающим?

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

Очень хороший ответ, и вы правы в том, что (если делать разделение) «человеческий» язык более неоднозначен и, следовательно, подвержен ошибкам или неправильному толкованию. Чтобы компьютерный язык работал как система связи, определения (например, предопределенные константы) должны быть на месте. Неоднозначность «гранитного» лица, это скорее творчество и сатира, чем точное описание. Хотя сборка может быть большим преувеличением в отношении того, что может быть возможно для эффективного общения, так что старые формы «человеческого» языка, такие как старый английский, используют очень ограниченный алфавит.
@jackson: всегда пожалуйста; хотя я думаю, что вы, возможно, неправильно поняли мои намерения, сосредоточившись на двусмысленности как на одном маркере того, что разделяет эти два понятия языков. Естественный язык просто не работает как компьютерный язык из-за двусмысленности; как вы сказали, это вносит ошибки; но двусмысленность естественна для естественных языков и используется там по-разному; один из предложенных мной способов — построение метафор; хотя мой конкретный пример может показаться сатирическим, я помню, что где-то читал, что это рассматривается как фундаментальная особенность естественных языков.
В том, как он интерпретирует окружающий нас мир: рассмотрим этимологию слова « язык » ; оно происходит от латинского lingue , что означает язык ; не является ли это формой метафоры в широком понимании? Вероятно, для этого есть более специфический лингвистический термин; но к сожалению я этого не знаю.
От себя лично, будучи подростком, я когда-то вел дневник в ASCII-коде, потому что это стало для меня естественным вследствие ручного кодирования ассемблера для процессора 6502 :)

Я откажусь, с оговоркой.

Как и естественные языки, языки программирования описываются грамматиками. Однако в случае языка программирования грамматика должна быть ограничена таким образом, чтобы позволить машине прочитать любую произвольную программу и определить (совершенно прозаически, детерминистически) либо 1) что она недействительна высказывание на языке, или 2) что оно действительно и имеет ясное и недвусмысленное значение на языке.

Это означает, что на практике языки программирования менее выразительны , чем естественные языки, и по своей конструкции не допускают нюансов значений, которые используют естественные языки для передачи юмора, иронии или двусмысленности (среди прочего). Есть концепции, которые можно передать с помощью естественных языков, которые нельзя сопоставить с эквивалентной программой/оператором в современных языках программирования.

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

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

Редактировать

И вот хорошее обсуждение того, как грамматика, связанная с естественным языком, оценивается в формальном/программном смысле:

https://stackoverflow.com/questions/4197751/is-there-a-formal-grammar-for-english-language

Слова «неоднозначный» и «огромный» используются совершенно справедливо.

Даже компьютерный язык с синтаксисом естественного языка не сможет принять человеческую семантику . Среди нас есть люди, у которых есть проблемы с человеческой семантикой, люди с глубоким аутизмом и постоянной шизофренией, и мы отмечаем, что они с трудом удерживают свой собственный язык от превращения во что-то, что они даже сами не понимают. Таким образом, любой компьютер, «говорящий» на этом языке, вероятно, потерял бы его понимание, если бы вы не придали ему очень ограниченную семантику. И способность охватить весь спектр семантики — это то, что составляет язык для многих людей.
Тоже хороший ответ. В программировании, если вы хотите зафиксировать эмоции, всегда можно добавить в комментарии эмоцию ascii. Человеческие эмоции передаются не только глаголами, что можно было бы сделать программно, но и тоном голоса, а также выражением лица и другими жестами/сигналами. Выбор языка не исключает возможности продолжать использовать такие подсказки :)
Разве комментарии не будут исключены из рассмотрения (если только содержимое комментариев не написано на том же языке программирования, а не на другом языке, таком как английский или смайлики)? Это скорее похоже на аннотацию одного языка другим, чем на наполнение одного языка качествами другого. В качестве примечания, я думаю, что комментирование кода с помощью комментариев, которые сами написаны в коде, на самом деле звучит очень весело.

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

Это зависит от вашего определения «языка». Вы привели определения. Начнем с первого:

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

Язык программирования имеет структуру и соглашения, а также слова со значениями. Хотя языки программирования, как правило, написаны, не исключено говорить на языке программирования. Основная концепция в этом определении заключается в том, что язык программирования — это «метод общения», а язык программирования, безусловно, является методом общения, хотя основной целью обычно являются компьютеры. Язык программирования также используется для общения с другими программистами о шагах, которые необходимо выполнить для выполнения задач.

Второе определение:

«исследование того, как дети изучают язык»

в данном контексте нелогично. Не существует четкого определения того, что означает «дети» с точки зрения языка программирования.

Наконец,

система коммуникации, используемая конкретным сообществом или страной.

Это определение, безусловно, подходит языку программирования, который используется сообществом программистов для общения с машинами и друг с другом.

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


Определение А:

Язык – это система общения.

Что означает «общение»? Для компьютеров общение вращается вокруг предоставления инструкций, вопросов и ответов. Эти функции на самом деле выполняются разными компьютерными языками, языки программирования преуспевают в выполнении первого, языка запросов данных, такого как запрос SQL или Google Cards, для второго, а ввод данных в компьютер осуществляется с помощью языков данных, таких как XML.

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

Определение Б:

Язык – это структурированная система, используемая для общения.

Что значит «структурировано»? Для этого мы определим «структурированность» как свойство, заключающееся в том, что система имеет согласованные правила для объединения элементов в языке для построения более крупных соединений для выражения произвольно сложных понятий.

Какие структуры имеет язык ассемблера? Язык ассемблера состоит исключительно из императивных операторов с фиксированным набором регистров и адресов памяти. Инструкция типа mov %eax, %edxили int 21hпредписывает процессору выполнять определенные операции.

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

Какие языки программирования могут определять и выражать произвольные глаголы? Процедурные языки — это языки, в которых вы можете определять новые глаголы, комбинируя существующие глаголы. Однако процедурные языки по своей сути все еще императивны, поскольку в них все еще есть только глаголы.

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

Какие языки программирования могут определять и использовать существительные для выражения связной концепции? В объектно-ориентированных языках есть существительные. А объекты могут использоваться как в качестве субъекта, так и объекта. На объектно-ориентированном языке вы можете выражать такие понятия, как:

Нарицательные/классовые существительные: «Человек».

class Human {}

Отношение Is-A: «Королевская семья — это человек»:

class Royalty : Human {}

Простые свойства: «Человек может быть живым, а может и не быть».

class Human {
    Boolean alive;
}

Комплекс свойств: «Человек имеет цвет кожи»

class Human {
    Color skin;
}

Поведенческие свойства: «Человек может поговорить с другим человеком на какую-то тему».

class Human {
    void talkTo(Human another, Topic topic);
}

В сочетании с функциями императивного и процедурного языка вы также можете выражать такие понятия, как:

Собственное / конкретное существительное: «Пусть король будет королевской семьей».

king = new Royalty();

Особые свойства: «Пусть наследный принц будет королевской особой с темной кожей».

crown_prince = new Royalty(skin=dark);

Действующие лица и глаголы императива: «Наследный принц, поговорите с королевой о погоде!»

crown_prince.talkTo(queen, weather);

Чего не хватает объектно-ориентированному языку? Одним большим упущением является констатация фактов. Объектно-ориентированный язык должен использовать обходные пути, такие как предложения «Let..be», чтобы констатировать факт, и это неудовлетворительно.

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

Например, мы можем выразить на языке логического программирования:

Констатация факта: «У льва есть молочная железа»

has_mammary_gland(lion).
has_mammary_gland(human).
mammal(X) :- has_mammary_gland(X).

И эти утверждения и правила могут использоваться решателем запросов для вывода решений вопросов:

Да/Нет Вопрос: «Является ли лев млекопитающим?»

?- mammal(lion).
true

WH Вопрос: «Каких млекопитающих вы знаете?»

?- mammal(Animal).
Animal = lion
Animal = human
Вы можете заменить имена классов произвольными строками (Hgyj вместо Human, agkg вместо live). Собственно говоря, программа та же. Как бы вы сказали, что программа действительно о людях, не полагаясь на английский язык? Структуры недостаточно, вам нужна ссылка на реальный мир, которого нет в языках программирования.
@quen_tin: Хороший вопрос. Да, на самом деле не имеет значения, какую строку вы поместите в качестве имен классов (многие компьютерные языки все равно отбросят их); скорее, вы знаете, что класс Hgyj относится к людям реального мира, по структуре и отношениям между определениями классов и методов, которые созданы из встроенных функций в стандартной библиотеке. Например, человек — единственное существо в известном компьютерному миру, которое может враждовать друг с другом. Когда вы предоставляете определение метода для Hgyj.agkg, компьютеру становится ясно, что только люди из реального мира подходят для этого.
@quen_tin: большая разница между компьютерными языками и человеческими языками заключается в том, что компьютерные языки начинаются с довольно пустого словаря, в то время как человеческий язык почти всегда начинается с довольно здоровенного словаря существующих слов, которые медленно программируются в вас одно за другим, когда вы ре маленький ребенок, который едва может говорить. Вот почему вам нужно определять свои собственные слова и понятия с нуля, но не чувствуете необходимости в естественных языках.
@quen_tin: также, чтобы представить это в перспективе, вы должны задать себе тот же вопрос с естественными языками. Откуда вы знаете, что строка «человек» в английском языке относится к определенной группе существ в трехмерном мире? Ваши учителя или родители, вероятно, запрограммировали определение этого слова для вас, когда вы были маленьким. Компьютеры также должны делать то же самое, идентификаторы часто, но не всегда, связаны с понятиями реального мира, но компьютеры счастливы работать с минимальным определением.
дело в том, что мы учим слова, взаимодействуя с миром, и это возможно, потому что у нас одинаковое «железо», но языки программирования не зависят от железа, а компьютеры не являются автономными живыми существами. + мы не учим слова через явные определения.
Вопрос ссылки терминов сложен, но я сомневаюсь, что структуры достаточно, чтобы зафиксировать ссылку.