Что такое язык программирования?

В LinqToSQL разработчик устанавливал все Проверки Обновления к Никогда и когда Вы присоединяете, называют его как так:

 context.entity.Attach(entity, true);

, С другой стороны, Вы могли также захватить объект от дб и изменить его с помощью данных из ОТПРАВЛЕННОГО объекта, затем утверждать что как изменение.

8
задан Gordon Potter 25 August 2009 в 01:59
поделиться

10 ответов

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

Что является полезным определение языка компьютерного программирования и каковы его основные и необходимые компоненты?

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

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

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

Тангенциально связанные, что такого в компьютерных языках, которые позволяют другим языкам существовать?

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

Однако то, что они одинаково «мощные», не означает, что с ними одинаково приятно работать для людей. Вот почему многие люди готовы пожертвовать беспрецедентным микроменеджментом, который вы получаете от написания ассемблерного кода, в обмен на выразительность и мощность, которые вы получаете с языками более высокого уровня, такими как Ruby, Python или C #.

Можно ли написать интерпретатор для Javascript в Javascript? Это требование для полноценного языка? То же самое для Perl, PHP и т. Д.?

Поскольку существует интерпретатор Javascript, написанный на C, из этого следует, что должна быть возможность написать интерпретатор Javascript на Javascript, поскольку оба являются полными по Тьюрингу. Однако, опять же, обратите внимание, что полнота по Тьюрингу ничего не говорит о том, насколько сложно сделать что-то на одном языке по сравнению с другим - только о том, возможно ли это для начала. Ваш Javascript-интерпретатор-внутри-Javascript вполне может быть ужасно неэффективным, потреблять абсурдные объемы памяти, требовать огромной вычислительной мощности и быть ужасно уродливым взломом. Но полнота по Тьюрингу гарантирует, что это возможно!

etc?

Поскольку существует интерпретатор Javascript, написанный на C, из этого следует, что должна быть возможность написать интерпретатор Javascript на Javascript, поскольку оба являются полными по Тьюрингу. Однако, опять же, обратите внимание, что полнота по Тьюрингу ничего не говорит о том, насколько сложно сделать что-то на одном языке по сравнению с другим - только о том, возможно ли это для начала. Ваш Javascript-интерпретатор-внутри-Javascript вполне может быть ужасно неэффективным, потреблять абсурдные объемы памяти, требовать огромной вычислительной мощности и быть ужасно уродливым взломом. Но полнота по Тьюрингу гарантирует, что это возможно!

etc?

Поскольку существует интерпретатор Javascript, написанный на C, из этого следует, что должна быть возможность написать интерпретатор Javascript на Javascript, поскольку оба являются полными по Тьюрингу. Однако, опять же, обратите внимание, что полнота по Тьюрингу ничего не говорит о том, насколько сложно сделать что-то на одном языке по сравнению с другим - только о том, возможно ли это для начала. Ваш Javascript-интерпретатор-внутри-Javascript вполне может быть ужасно неэффективным, потреблять абсурдные объемы памяти, требовать огромной вычислительной мощности и быть ужасно уродливым взломом. Но полнота по Тьюрингу гарантирует, что это возможно!

обратите внимание, что полнота по Тьюрингу ничего не говорит о том, насколько сложно сделать что-то на одном языке по сравнению с другим - только о том, возможно ли это для начала. Ваш Javascript-интерпретатор-внутри-Javascript вполне может быть ужасно неэффективным, потреблять абсурдные объемы памяти, требовать огромной вычислительной мощности и быть ужасно уродливым взломом. Но полнота по Тьюрингу гарантирует, что это возможно!

обратите внимание, что полнота по Тьюрингу ничего не говорит о том, насколько сложно сделать что-то на одном языке по сравнению с другим - только о том, возможно ли это для начала. Ваш Javascript-интерпретатор-внутри-Javascript вполне может быть ужасно неэффективным, потреблять абсурдные объемы памяти, требовать огромной вычислительной мощности и быть ужасно уродливым взломом. Но полнота по Тьюрингу гарантирует, что это возможно!

27
ответ дан 5 December 2019 в 04:33
поделиться

Хотя это не дает прямого ответа на ваш вопрос, мне вспоминается эссе Revenge of the Nerds Пола Грэма об эволюции языков программирования. Это определенно интересное место для начала вашего расследования.

5
ответ дан 5 December 2019 в 04:33
поделиться

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

  • Те, которые работают над тем, от чего машина может делать что-то более выразительное и менее привязанное к машине (ассемблер, Фортран, C, C ++, Java, ...)

  • Те, кто переходят от какой-то математической или теоретической концепции вычислений в информатике к чему-то, что можно реализовать на настоящая машина (Лисп,

4
ответ дан 5 December 2019 в 04:33
поделиться

См. «Программирование, рассматриваемое как деятельность человека». ЕВД 117. http://www.cs.utexas.edu/~EWD/transcriptions/EWD01xx/EWD117.html

См. Также http://www.csee.umbc.edu/331/current/notes /01/01introduction.pdf

3
ответ дан 5 December 2019 в 04:33
поделиться

Человеческое выражение, которое:

  • описывает математические функции
  • заставляет компьютер включать и выключать
2
ответ дан 5 December 2019 в 04:33
поделиться

Многие ИТ-специалисты забывают, что существует 2 типа языков программирования:

  1. Языки программирования: C, Java, Perl, COBAL и т. Д.

  2. Языки программирования оборудования: VHDL, Verilog, System Verilog и т. Д.

2
ответ дан 5 December 2019 в 04:33
поделиться

Интересно.

Я бы сказал, что определяющей особенностью языка программирования является способность принимать решения на основе ввода. Фактически, if и goto . Все остальное - много-много синтаксического сахара. Это идея, которая породила Brainfuck, который на самом деле очень интересно использовать (попробовать).

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

На ум приходят три основных свойства языков:

  1. Как он работает? Скомпилирован ли он на «голое железо» (C), скомпилирован в основном на «голое железо» с некоторым поиском во время выполнения (C ++), запущен на виртуальной машине JIT (Java, .NET), интерпретирован байт-кодом (Perl) или чисто интерпретирован (эээ .. )? Это мало что говорит о самом языке, но говорит о том, насколько переносимым может быть код, какой скорости я могу ожидать (и, следовательно, какие широкие классы задач будут работать хорошо), а иногда и насколько гибким является язык.
  2. Какие парадигмы он поддерживает? Процедурные? Функциональный? Стандартная библиотека построена с использованием классов или функций? Есть отражение? Есть ли в идеале поддержка практически всего, что я хочу делать?
  3. Как я могу представить свои данные? Существуют ли массивы фиксированного размера или нет? Насколько легко использовать строки? Встроены ли структуры или хэши? На что похожа система типов? Есть предметы? Они основаны на классах или на прототипах? Все ли объект или есть примитивы? Могу ли я наследовать от встроенных объектов?

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

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

Да, вы можете написать интерпретатор Javascript в Javascript или интерпретатор Python в Python (см. PyPy) или интерпретатор Python в Javascript. Такие языки называются самообслуживанием. Взгляните на Perl 6; это было целью его основной реализации с самого начала.

В конечном итоге , все просто должно быть переведено в машинный код, не обязательно C. Вы можете написать D, Fortran, Haskell или Lisp, если хотите. C просто оказался старым стандартом. И если вы напишете компилятор для языка Foo, который в конечном итоге может выплевывать машинный код любыми способами, тогда вы можете переписать этот компилятор на Foo и пропустить посредника. Конечно, если ваш язык интерпретируется чисто, это, вероятно, приведет к переполнению стека ...

Такие языки называются самообслуживанием. Взгляните на Perl 6; это было целью его основной реализации с самого начала.

В конечном итоге , все просто должно быть переведено в машинный код, не обязательно C. Вы можете написать D, Fortran, Haskell или Lisp, если хотите. C просто оказался старым стандартом. И если вы напишете компилятор для языка Foo, который в конечном итоге может выплевывать машинный код любыми способами, тогда вы можете переписать этот компилятор на Foo и пропустить посредника. Конечно, если ваш язык интерпретируется чисто, это, вероятно, приведет к переполнению стека ...

Такие языки называются самообслуживанием. Взгляните на Perl 6; это было целью его основной реализации с самого начала.

В конечном итоге , все просто должно быть переведено в машинный код, не обязательно C. Вы можете написать D, Fortran, Haskell или Lisp, если хотите. C просто оказался старым стандартом. И если вы напишете компилятор для языка Foo, который в конечном итоге может выплевывать машинный код любыми способами, тогда вы можете переписать этот компилятор на Foo и пропустить посредника. Конечно, если ваш язык интерпретируется чисто, это, вероятно, приведет к переполнению стека ...

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

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

2
ответ дан 5 December 2019 в 04:33
поделиться

Я заметил нечто подобное. Взгляните на пример кода и на то, что он делает, когда я добавляю несколько настраиваемых заголовков HTTP. Сначала идет код JavaScript, а затем дамп Fiddler (только пользовательские заголовки) из IE8, Safari4 и Firefox3. Обратите внимание, что Firefox учитывает регистр, IE преобразует регистр в нижний регистр, а Safari преобразует его в правильный регистр.

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

function doXHR() {
  var request = new XMLHttpRequest();
  request.open('GET', '/header/header.txt');
  request.setRequestHeader('x-lowercase', 'X-lowercase');
  request.setRequestHeader('x-Propercase', 'X-Propercase');
  request.setRequestHeader('x-CamelCase', 'X-CamelCase');
  request.setRequestHeader('x-UPPERCASE', 'X-UPPERCASE');
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      console.log('Received XMLHttpRequest callback: \n' + request.responseText);
    }
  };
  request.send("");
}

User-Agent: Mozilla /4.0 (совместимый; MSIE 8.0; Windows NT 6.0; Trident / 4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)

x-lowercase: X-lowercase
x-camelcase: X-CamelCase
x-uppercase: X-UPPERCASE
x-propercase: X-Propercase

Пользователь -Агент: Mozilla / 5.0 (Windows; U; Windows NT 6.0; Мое любимое определение: язык программирования - это средство выражения вычислений

  • Точно
  • На высоком уровне
  • В способах, которыми мы можем рассуждать о них

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

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

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

Выражение вычислений на высоком уровне - вот что такое языки программирования. Важная причина того, что существует так много разных языков программирования, заключается в том, что существует так много различных высокоуровневых способов мышления о проблемах. Часто, если вам нужно решить новый важный класс проблем, лучше всего создать новый язык программирования. Например, в сочинении Ларри Уолла говорится, что решение класса проблем, называемых «системное администрирование», было для него мотивацией к созданию Perl.

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

Наконец, многие программисты хотят языки, которые позволяют легко рассуждать о программах . Например, Сегодня один мой студент реализовал новый алгоритм, благодаря которому его программа работала в шесть раз быстрее. Ему пришлось очень тщательно продумать содержимое массивов C, чтобы убедиться, что новый алгоритм будет выполнять ту же работу, что и старый. К счастью, у C есть достойные инструменты для рассуждений о программах, например:

  • Изменение в a [i] не может повлиять на значение a [i-1] .

. Мой ученик также применил принцип рассуждений, который недействителен в C:

  • Сумма целых чисел без знака в последовательности будет не меньше, чем любое целое число в последовательности.

Это неверно в C , потому что сумма может вылиться за край. Одна из причин, по которой некоторые программисты предпочитают такие языки, как Standard ML, заключается в том, что в SML этот принцип рассуждений всегда действует. Языков, широко используемых, вероятно, у Haskell самые сильные принципы рассуждения. Ричард Берд разработал эквациональное рассуждение о программах высокого искусства.


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

2
ответ дан 5 December 2019 в 04:33
поделиться

Немного длинная напыщенная речь

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

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

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

Например:

Сделай мне кофе.

Очень легко понять для человека, но только потому, что мы знаем, что означает каждое из слов.

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

Например:

Сделай мне кофе.

Очень легко понять для человека, но только потому, что мы знаем, что означает каждое из слов.

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

Например:

Сделай мне кофе.

Очень легко понять для человека, но только потому, что мы знаем, что означает каждое из слов.

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

Мы знаем все эти определения наизусть, но нам пришлось выучить их в какой-то момент.

Таким же образом компьютер можно «научить» «понимать» слова также.

Coffee::make()->giveTo($me);

Это могло быть вполне допустимым выражением на компьютерном языке. Если компьютер «знает», что означает Coffee , make () и giveTo () и если определено $ me . Он выражает ту же идею, что и английское предложение, только с другим, более строгим синтаксисом.

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

コ ー ヒ ー を 作 っ て も ら っ て い で す か?
Kōhī o tsukuttemoratte mo ii desu ka?

Что примерно соответствует:

if ($Person->isAgreeable('Coffee::make()')) {
    return $Person->return(Coffee::make());
}

Та же идея , тот же результат, но подразумевается $ me , и если вы сначала не проверите isAgreeable , вы можете получить ошибку выполнения. В компьютерных терминах это было бы в некоторой степени аналогично предполагаемому поведению Ruby по возврату результата последнего выражения («грамматическая особенность») и сначала проверке доступной памяти (экологическая необходимость).

Если вы разговариваете с очень медленным человеком имея небольшой словарный запас, вам, вероятно, придется объяснять вещи более подробно:

Иди на кухню.
Возьми горшок.
Наполните кастрюлю водой.
...

Прямо как Ассемблер. : o)

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

РЕДАКТИРОВАТЬ:
Еще один момент об «оптимизации для слушатель »состоит в том, что языки программирования пытаются устранить двусмысленность. Пример «Сделай мне кофе» технически можно понять как «превратить меня в кофе». Человек может интуитивно сказать, что имеется в виду, компьютер - нет. Следовательно, в языках программирования все обычно имеет одно и одно значение. В противном случае вы можете столкнуться с проблемами, типичным примером является оператор « + » в Javascript.

1 + 1     -> 2
'1' + '1' -> '11'
4
ответ дан 5 December 2019 в 04:33
поделиться

как друг научил меня о компьютерных языках, язык - это мир. Мир общения с этой машиной. Это мир для реализации идей, алгоритмов, функциональности, как описано Алонзо и Алана. Это технический эквивалент математических структур, которые построены вышеупомянутые ученые. Это язык с эпперевозками, а также ограничивает. Однако, как сказал Людвиг Витгенштейн «Пределы моего языка означает пределы моего мира», всегда есть ограничения, и именно поэтому выбирают язык, который соответствует улучшению его потребностей.

Это общий ответ ... некоторые мысли на самом деле и меньше ответа.

2
ответ дан 5 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: