Может показаться, что этот вопрос отвечает сам на себя, но я призываю вас рассмотреть возможности и влияние, которое это может оказать на общество.
Мне, как системному инженеру, программирование ближе, чем мой «родной» язык — английский.
Насколько я понимаю, ваш родной язык — это тот, с которым вам удобнее всего, даже если общество вокруг вас не говорит на нем. Означает ли это, что я должен помещать Ассемблер в документы, запрашивая мой основной язык, а затем английский как дополнительный язык?
Как вы думаете, как это повлияет на страны, где есть право на переводчиков в ходе судебных разбирательств?
Это скорее «забавный» вопрос, но он имеет некоторые потенциально изменяющие жизнь возможности. Не пора ли нам рассматривать цифровые языки как настоящие языки?
Язык
метод человеческого общения, устного или письменного, состоящий из использования слов структурированным и конвенциональным образом.
«исследование того, как дети изучают язык»
система коммуникации, используемая конкретным сообществом или страной.
"книга переведена на двадцать пять языков"
Сравните свой вопрос:
Насколько я понимаю, ваш родной язык — это тот, с которым вам удобнее всего, даже если общество вокруг вас не говорит на нем.
и http://en.wikipedia.org/wiki/Language :
Язык — это способность осваивать и использовать сложные системы коммуникации, особенно способность человека делать это, а язык — это любой конкретный пример такой системы.
Ключевым моментом в общепринятом понятии «язык» является коммуникация. Таким образом, вы не можете сказать, что не имеет значения, говорит ли общество вокруг вас на одном языке или нет.
Семья языков, которую вы использовали в качестве примера, ассемблер, является императивным языком: он дает инструкции процессору. Он не способен хранить информацию даже в очень простой форме пропозициональной логики. Правда, вы можете устанавливать или сбрасывать биты в зависимости от истинности утверждения, но тогда язык все равно не передает информацию: нужна интерпретация.
В естественных языках информация очень важна. Обмен информацией – одна из основных функций языка.
Другие языки программирования, такие как пролог или функциональные языки, могут лучше подходить для передачи информации, однако в этих языках сложно работать с неопределенностью (например, «Может идти дождь»).
Вы говорите, что с таким же успехом можете использовать ассемблер как родной язык. Пожалуйста, рассмотрите на мгновение написание вашего вышеуказанного вопроса в Ассемблер. Тогда подумайте еще раз о том, что ассемблер мог быть вашим родным языком.
10010011
». Во-первых, нам нужно знать только значение слов. Второй может иметь разное значение в разных местах памяти, под разными программами. Мне тоже еще очень интересно увидеть перевод "Король жив" в ассемблере.1001
не имеет одного значения. Вот почему мы можем делать словари для английского языка, но не для битовых строк.Я думаю, что это педантичная разница между «человеческим языком» и «компьютерным языком». В настоящее время, вероятно, нет различий в большинстве юридических определений, касающихся прав на перевод, но это было бы быстрым решением, если бы кто-то захотел оспорить это. Законы обычно содержат раздел «определения», в котором они определяют слова, которые они используют. Определения, которые они используют, не обязательно должны быть общеупотребительными, это просто использование, которое они намереваются использовать в этом законе. Они очень быстро изменили определение, чтобы оно означало «человеческий язык» (тщательно составленное, чтобы быть точным и закрыть проблему).
Однако, если вам нужно собрать колонию системных инженеров-единомышленников для использования компьютерного языка в повседневном общении, вам, возможно, придется начать обучать переводчика :)
Термин «родной язык» не имеет стандартного юридического определения. В США он имеет установленное законом определение для федеральных образовательных целей (связанных с финансированием) как «язык, обычно используемый таким лицом; или, в случае ребенка или подростка, язык, обычно используемый родителями ребенка или молодежь". Комфорт значения не имеет. Поскольку вы не говорите на ассемблере (на каком-либо диалекте), это не ваш родной язык, и люди не говорят ни на одном языке программирования, остальные ваши вопросы неактуальны.
Предполагая, что кто-то изобретает разумные компьютеры, которые считаются юридически эквивалентными людям, тогда возможно, что двоичные коды операций (не языки программирования более высокого уровня, которые являются устройствами с человеческим интерфейсом) могут быть юридически признаны «родным языком» таких объектов. . Или можно считать, что все компьютеры должны быть запрограммированы на понимание английского языка. Поскольку компьютеры так или иначе не используют язык, вы не можете предсказать, каким будет юридический результат.
Я бы сказал, что в том смысле, что он содержит явный способ общения. Однако для того, чтобы вы могли по-настоящему говорить на языке программирования, ваше сообщение (из-за отсутствия лучшего термина) должно быть интерпретировано без использования какого-либо другого существующего языка.
Взгляните на этот комментарий, который вы сделали к другому ответу:
частный список _Languages = новый список();
общедоступные языки списка { получить { return _Languages; } установить { _Languages = значение; } };
Языки.Добавить("C#");
Языки.Добавить("АСМ");
Языки.Добавить("Английский");
Используя это в качестве примера, я бы сказал, что вы на самом деле не общаетесь через язык программирования. То, что вы делаете, — это общение на запутанной форме английского языка с использованием языка программирования. Причина, по которой я говорю это, заключается в использовании таких строк, как «английский». Единственная причина, по которой это работает для общения, потому что она уже определена на другом подразумеваемом языке.
Хотя я точно не знаю, как вы используете ассемблер для общения со своими коллегами, я чувствую, что вы, по сути, используете его для шифрования сообщения на английском языке, которое затем может быть расшифровано кем-то другим, кто понимает ассемблер.
Также обратите внимание, что ваш пример синтаксически неверен на С#. Даже если предположить, что переменные объявлены вне метода, содержащего три других оператора, точка с запятой после объявления get/set все равно вызовет ошибку.
Учтите, что язык программирования в том виде, в каком они используются сегодня, — это язык с операционной семантикой, а естественный язык — это язык, с помощью которого, скажем, вы могли бы настроить тест Тьюринга. Вы видите, к чему это идет: возможность их взаимозаменяемого использования была бы конкретным опровержением теста Тьюринга.
Тем не менее, Пьер Леви утверждает , что можно создать язык, с помощью которого вы могли бы выражать как значение, так и вычисление (что отличается от использования его для этих двух целей попеременно или одновременно). В случае успеха это может изменить правила игры — и на самом деле так и задумано.
Более фундаментальная проблема заключается в том, что термин «язык» в «языке программирования» имеет очень строгую коннотацию, которая почти полностью не связана с явлением, изучаемым лингвистами. Кроме того, термин «естественный» в «естественном языке» проблематичен с философской точки зрения и далек от консенсуса. Можно легко доказать, что человеческий язык в своем проявлении полностью искусственен.
Лингвисты профессионально подготовлены для работы с языками; ни один из них, насколько я знаю, не имеет дело с ассемблером или даже с такими компьютерными языками, как C++ или Java; на каждом языке, который они изучают, говорят или говорили; оно могло иметь письменную форму; это может быть сложный придворный язык, креольский или пиджин.
Компьютерный язык должен быть точным и точным, чтобы он вообще функционировал; он может справляться с двусмысленностью, т. е. с перегрузкой или изменением контекста по объему; но они переинтерпретированы, чтобы сделать их точными.
Человеческие языки имеют высокий уровень неоднозначности, что по сравнению с компьютерными языками считается проблематичным; и это до тех пор, пока вы хотите программировать на естественном языке или если вы фетишизируете точность; но довольно быстро стало понятно, что сильно усеченный и видоизмененный язык более эффективен; на базовом уровне язык Тьюринга; на уровне чипа машинный код; затем языки более высокого уровня, такие как COBOL, Smalltalk или Java; это можно назвать языковым стеком.
Двусмысленность важна в человеческих языках, потому что мир таков: что такое стул? Что-то, на чем можно сидеть; поэтому бревно, а также кресло или скамья; а может быть, и пол, если удобно сидеть со скрещенными ногами; и не было бы невыносимо громоздко называть каждый оттенок красного другим именем, потому что это был другой оттенок ? И могла бы работать такая метафора, как «его гранитное лицо», если бы гранит мог относиться только к определенному виду магматической породы? А лица только к людям или даже к млекопитающим?
Так что нет; компьютерные языки ближе к таким вещам, как архитектурные планы домов или зданий (просто так получилось, что они написаны последовательно — и, что интересно, можно услышать об «архитектуре аппаратного обеспечения и архитекторах программного обеспечения»), чем настоящие языки — мертвые или живые, креольский или государственный.
Я откажусь, с оговоркой.
Как и естественные языки, языки программирования описываются грамматиками. Однако в случае языка программирования грамматика должна быть ограничена таким образом, чтобы позволить машине прочитать любую произвольную программу и определить (совершенно прозаически, детерминистически) либо 1) что она недействительна высказывание на языке, или 2) что оно действительно и имеет ясное и недвусмысленное значение на языке.
Это означает, что на практике языки программирования менее выразительны , чем естественные языки, и по своей конструкции не допускают нюансов значений, которые используют естественные языки для передачи юмора, иронии или двусмысленности (среди прочего). Есть концепции, которые можно передать с помощью естественных языков, которые нельзя сопоставить с эквивалентной программой/оператором в современных языках программирования.
Так что на этом основании я бы сказал нет, язык программирования не эквивалентен естественному языку, потому что он недостаточно выразителен или гибок, чтобы передать все, что может естественный язык.
Предупреждение, однако, заключается в том, что если у вас есть язык программирования, грамматика которого эквивалентна (или является надмножеством) грамматики, связанной с естественным языком, таким как английский, тогда этот язык программирования также может считаться естественным языком. То же самое применимо, если кто-то создает язык программирования, синтаксис которого является естественным языком (т. е. он может вводить программы в виде произвольной английской прозы). На самом деле, однако, я не думаю, что что-либо из этого произойдет в ближайшее время.
Редактировать
И вот хорошее обсуждение того, как грамматика, связанная с естественным языком, оценивается в формальном/программном смысле:
https://stackoverflow.com/questions/4197751/is-there-a-formal-grammar-for-english-language
Слова «неоднозначный» и «огромный» используются совершенно справедливо.
Я бы сказал нет - если бы я подошел к кому-то, кто понимает 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
Джеймс Кингсбери
Крэнг Прайм
Тайсер
Николай Гроссерр
the_lotus
Дэйв
пользователь9166
Квентин Руян
пользователь13955
пользователь13955
Ронни Ройстон
пользователь13955
Николай Гроссерр
Крэнг Прайм
Крэнг Прайм
Крэнг Прайм
Крэнг Прайм
Крэнг Прайм
Джеймс Кингсбери
Крэнг Прайм
Крэнг Прайм