Связанные понятия
По одной из классификаций, языки программирования неформально делятся на сильно и слабо типизированные (англ. strongly and weakly typed), то есть обладающие сильной или слабой системой типов. Эти термины не являются однозначно трактуемыми, и чаще всего используются для указания на достоинства и недостатки конкретного языка. Существуют более конкретные понятия, которые и приводят к называнию тех или иных систем типов «сильными» или «слабыми».
Подробнее: Сильная и слабая типизация
Объектами
первого класса (англ. first-class object, first-class entity, first-class citizen) в контексте конкретного языка программирования называются элементы, которые могут быть переданы как параметр, возвращены из функции, присвоены переменной.
Мона́да — это абстракция линейной цепочки связанных вычислений. Монады позволяют организовывать последовательные вычисления.
Каламбур типизации является прямым нарушением типобезопасности. Традиционно возможность построить каламбур типизации связывается со слабой типизацией, но и некоторые сильно типизированные языки или их реализации предоставляют такие возможности (как правило, используя в связанных с ними идентификаторах слова unsafe или unchecked). Сторонники типобезопасности утверждают, что «необходимость» каламбуров типизации является мифом.
Упоминания в литературе
При рассмотрении языка в качестве одного из маркеров этничности группы не столь существенно действительное положение идиома: язык может служить одним из основных символических маркеров, поддерживающих границы сообщества, однако не представлять собою, с точки зрения внешнего наблюдателя, языка в структурном смысле слова, то есть «не существовать» для лингвиста, иными словами, – не выполнять в сообществе коммуникативной функции. Отмечены сообщества, в которых манифестируемый в качестве символа группы идиом утрачен (как, например, марковский говор [Бахтин, 2001]), однако группа по-прежнему использует его как один из маркеров своих границ. С точки зрения их роли
в конструировании идентичности идиомы, подобные марковскому говору, функционально не отличаются от полноценных языков.
Мы поддерживаем следующие рассуждения Дж. Люгера: "…понимание естественного языка включает куда больше, чем разбор предложений на индивидуальные части речи и поиск значений слов в словаре. Оно базируется на обширном фоновом знании о предмете беседы и идиомах, используемых в этой области, так же, как и на способности применять общее контекстуальное знание для понимания недомолвок и неясностей, присущих человеческой речи. Задача сбора и организации этого фонового знания, чтобы его можно было применить к осмысливанию языка, составляет значительную проблему в автоматизации
понимания естественного языка. Разработано множество методов структурирования семантических значений. Но, из-за огромных объемов знаний, требуемых для понимания естественного языка, большая часть работы ведется в хорошо понимаемых специализированных проблемных областях. Методики представления известных специализированных программ слишком просты, чтобы передать семантическую организацию более богатых и сложных предметных областей. Основная часть текущих работ в этой области направлена на поиск формализмов представления, которые должны быть достаточно общими, чтобы применяться в широком круге приложений и уметь адаптироваться к специфичной структуре заданной области. Множество разнообразных методик, большинство из которых являются развитием или модификацией семантических сетей, исследуются с этой целью и используются при разработке программ, способных понимать естественный язык в ограниченных, но достаточно интересных предметных областях. Есть стохастические модели, описывающие совместное использование слов в языке, которые применяются для характеристики как синтаксиса, так и семантики. Далее следует принципиально важный вывод: полное понимание языка на вычислительной основе все же остается далеко за пределами современных возможностей" [264, стр. 47].
Тезис Ф. де Соссюра «все диахроническое в языке является таковым лишь через речь» [Соссюр 1977:130] за прошедшие сто лет был отвергнут, переосмыслен и снова принят. Множество «обломков прошлого» (по выражению А. А. Потебни) остается в языке в качестве идиом, которые с трудом поддаются описанию в терминах генеративных правил. Эти единицы могут быть рассмотрены как реликты былых состояний или ростки новых явлений, то есть
как примеры постоянного языкового развития. Часть таких единиц в результате генерализации формируют то или иное правило, часть – хранится в виде застывших штампов. Представленные ниже исследования синтаксических фразем являются по преимуществу ориентированными на динамические модели в языке, проявляющиеся как на синхронном срезе языка, так и в его развитии. По этой причине целесообразно кратко остановиться на двух подходах, повлиявших на авторов настоящего исследования (обстоятельный обзор теорий языкового изменения можно найти в третьей главе книги [Croft 2000: 42–86]).
Таким образом, для изучения принципов восприятия и адекватной интерпретации рекламного текста важно иметь представление об образе читателя- потребителя. Адресатами рекламных сообщений являются люди, разные по положению в обществе, образованности, профессии, возрасту, полу, с различной степенью «информированности». «Информированный читатель»1, отвечающий условиям языкового конвенционализма, т.е. он должен быть компетентным носителем языка, на котором составлен текст; в совершенстве владеть семантическим
знанием лексических рядов, возможностей словосочетания, идиом, профессионализмов, терминологии и т.п.
Так,
для носителей русского языка очевидным является завершение инициальных частей следующих слого-ритмических комбинаций («под-сол…нух», «под-кач… ка», «под-ли…за»); идиом («домоклов … меч», «ахиллесова … пята», «несолоно … хлебавши»); фразеологических единств и выражений («Ни к селу… ни к городу», «Незваный гость… хуже татарина», «Без труда… не выловишь и рыбку из пруда»). Опыт наших исследований свидетельствует о том, что ребенок с нормальным речевым развитием к трем годам обнаруживает отчетливую способность к прогнозированию окончаний знакомых слов или фраз [Бабина, Сафонкина, 2004]. Подтверждения данному находим, например, в исследованиях С. Н. Цейтлин и М. Б. Елисеевой (1998). В своей работе авторы зафиксировали следующие факты. Мать практикует с сыном (2,5 г.) игру с завершениями стихотворных текстов: «Иго-го – кричит ребенок, значит это – …»; «Вяжет мама длинный шарф, потому что сын ….»; «Он веселая игрушка и зовут его …». Ребенок добавляет: «Аськафонок!» (жеребенок), «Касяф! Зиляф!» (жираф), «Питуська!» (Петрушка) [Цейтлин, Елисеева, 1998, с. 86]. Приведенный пример показывает, что возможность проговаривания слоговых составляющих слова находится у этого ребенка на этапе становления, однако прогнозирование окончаний стихотворных фраз, для которых требуется добавить слова различной слоговой структуры, он реализует без ошибок.
Для современного научного дискурса в целом характерны две противоречивые тенденции: с одной стороны, повышение значимости работы и авторитета автора за счет корректного изложения анализируемых идей, с другой – стремление обеспечить максимально широкое и комфортное поле обсуждения выдвигаемых идей. Повышение авторитетности работы и в целом осуществляется путем «демонстрации» обезличенности и беспристрастности изложения, использования корректных ссылок, исчерпывающих классификаций, специальной терминологии, включения в работу благодарностей конкретным авторам. Размывание научной терминологии, стремление к перформативности, обращение к специфическому научному юмору и
использование модных научных идиом приводит к расширению «поля общения» внутри научного сообщества.
Помимо фразеологизмов в устной деловой
речи используются и профессиональные идиомы: разнести по ведомостям, поднять отчетность, снять с баланса, наработать связи, выйти на потребителя, запустить в работу, расписать сумму и т. д.
Связанные понятия (продолжение)
Абстра́ктный тип да́нных (АТД) — это математическая модель для типов данных, где тип данных определяется поведением (семантикой) с точки зрения пользователя данных, а именно в терминах возможных значений, возможных операций над данными этого типа и поведения этих операций.
Запись — агрегатный тип данных, инкапсулирующий без сокрытия набор значений различных типов.
Блок (также говорят блок кода, блок команд, блок инструкций) в программировании — это логически сгруппированный набор идущих подряд инструкций в исходном коде программы, является основой парадигмы структурного программирования.
Система типов — совокупность правил в языках программирования, назначающих свойства, именуемые типами, различным конструкциям, составляющим программу — таким как переменные, выражения, функции или модули. Основная роль системы типов заключается в уменьшении числа багов в программах посредством определения интерфейсов между различными частями программы и последующей проверки согласованности взаимодействия этих частей. Эта проверка может происходить статически (на стадии компиляции) или динамически...
Функции первого класса являются неотъемлемой частью функционального программирования, в котором использование функций высшего порядка является стандартной практикой. Простым примером функции высшего порядка будет функция Map, которая принимает в качестве своих аргументов функцию и список и возвращается список, после применения функции к каждому элементу списка. Чтобы язык программирования поддерживал Map, он должен поддерживать передачу функций как аргумента.
Вывод типов (англ. type inference) — в программировании возможность компилятора самому логически вывести тип значения у выражения. Впервые механизм вывода типов был представлен в языке ML, где компилятор всегда выводит наиболее общий полиморфный тип для всякого выражения. Это не только сокращает размер исходного кода и повышает его лаконичность, но и нередко повышает повторное использование кода.
Процеду́рное программи́рование — программирование на императивном языке, при котором последовательно выполняемые операторы можно собрать в подпрограммы, то есть более крупные целостные единицы кода, с помощью механизмов самого языка.
В информатике
типобезопасность (англ. type safety) языка программирования означает безопасность (или надёжность) его системы типов.
Ленивые вычисления (англ. lazy evaluation, также отложенные вычисления) — применяемая в некоторых языках программирования стратегия вычисления, согласно которой вычисления следует откладывать до тех пор, пока не понадобится их результат. Ленивые вычисления относятся к нестрогим вычислениям. Усовершенствованная модель ленивых вычислений — оптимистичные вычисления — переходит в разряд недетерминированных стратегий вычисления.
Сопоставление с образцом (англ. Pattern matching) — метод анализа и обработки структур данных в языках программирования, основанный на выполнении определённых инструкций в зависимости от совпадения исследуемого значения с тем или иным образцом, в качестве которого может использоваться константа, предикат, тип данных или иная поддерживаемая языком конструкция.
Фу́нкция вы́сшего поря́дка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных. Использование функций высшего порядка приводит к абстрактным и компактным программам, принимая во внимание сложность производимых ими вычислений.
Алгебраи́ческий тип да́нных — в информатике наиболее общий составной тип, представляющий собой тип-сумму из типов-произведений. Алгебраический тип имеет набор конструкторов, каждый из которых принимает на вход значения определённых типов и возвращает значение конструируемого типа. Конструктор представляет собой функцию, которая строит значение своего типа на основе входных значений. Для последующего извлечения этих значений из алгебраического типа используется сопоставление с образцом.
Пара́метр в программировании — принятый функцией аргумент. Термин «аргумент» подразумевает, что конкретно и какой конкретной функции было передано, а параметр — в каком качестве функция применила это принятое. То есть вызывающий код передает аргумент в параметр, который определен в члене спецификации функции.
Область видимости (англ. scope) в программировании — часть программы, в пределах которой идентификатор, объявленный как имя некоторой программной сущности (обычно — переменной, типа данных или функции), остаётся связанным с этой сущностью, то есть позволяет посредством себя обратиться к ней. Говорят, что идентификатор объекта «виден» в определённом месте программы, если в данном месте по нему можно обратиться к данному объекту. За пределами области видимости тот же самый идентификатор может быть...
Синтаксический сахар (англ. syntactic sugar) в языке программирования — это синтаксические возможности, применение которых не влияет на поведение программы, но делает использование языка более удобным для человека.
Анонимная функция в программировании — особый вид функций, которые объявляются в месте использования и не получают уникального идентификатора для доступа к ним. Поддерживаются во многих языках программирования.
Динами́ческая типиза́ция — приём, широко используемый в языках программирования и языках спецификации, при котором переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов. Примеры языков с динамической типизацией — Smalltalk, Python, Objective-C, Ruby, PHP, Perl, JavaScript, Lisp, xBase, Erlang, Visual Basic.
Мно́жественное насле́дование — свойство, поддерживаемое частью объектно-ориентированных языков программирования, когда класс может иметь более одного суперкласса (непосредственного класса-родителя), интерфейсы поддерживают множественное наследование во многих языках программирования. Эта концепция является расширением «простого (или одиночного) наследования» (англ. single inheritance), при котором класс может наследоваться только от одного суперкласса.
Ме́тод в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-то классу или объекту.
Императи́вное программи́рование — это парадигма программирования (стиль написания исходного кода компьютерной программы), для которой характерно следующее...
Тип-сумма (англ. sum type; также Σ-тип, меченое объединение) — конструкция в языках программирования и интуиционистской теории типов, тип данных, построенный как дизъюнктное объединение исходных типов.
Мо́дульное программи́рование — это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определённым правилам. Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут быть строго отделены от других подзадач, что улучшает мобильность создаваемых программ.
Обобщённое программирование (англ. generic programming) — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. В том или ином виде поддерживается разными языками программирования. Возможности обобщённого программирования впервые появились в виде дженериков (обобщённых функций) в 1970-х годах в языках Клу и Ада, затем в виде параметрического полиморфизма в ML и его потомках, а затем во многих объектно-ориентированных...
Сравне́ние в программировании — общее название ряда операций над па́рами значений одного типа, реализующих математические отношения равенства и порядка. В языках высокого уровня такие операции, чаще всего, возвращают булево значение («истина» или «ложь»).
Абстрактное синтаксическое дерево (АСД) — в информатике конечное помеченное ориентированное дерево, в котором внутренние вершины сопоставлены (помечены) с операторами языка программирования, а листья — с соответствующими операндами. Таким образом, листья являются пустыми операторами и представляют только переменные и константы.
Из-за путаницы с терминологией словом «оператор» в программировании нередко обозначают операцию (англ. operator), см. Операция (программирование).Инстру́кция или опера́тор (англ. statement) — наименьшая автономная часть языка программирования; команда или набор команд. Программа обычно представляет собой последовательность инструкций.
Подробнее: Оператор (программирование)
Декларати́вное программи́рование — это парадигма программирования, в которой задаётся спецификация решения задачи, то есть описывается, что представляет собой проблема и ожидаемый результат. Противоположностью декларативного является императивное программирование, описывающее на том или ином уровне детализации, как решить задачу и представить результат. В общем и целом, декларативное программирование идёт от человека к машине, тогда как императивное — от машины к человеку. Как следствие, декларативные...
Переменная типа (ти́повая переменная) в языках программирования и теории типов — переменная, которая может принимать значение из множества типов данных.
Побо́чные эффе́кты (англ. side effects) — любые действия работающей программы, изменяющие среду выполнения (англ. execution environment). Например, к побочным эффектам относятся...
Подробнее: Побочный эффект (программирование)
Интерпретируемый язык программирования — язык программирования, исходный код на котором выполняется методом интерпретации. Классифицируя языки программирования по способу исполнения, к группе интерпретируемых относят языки, в которых операторы программы друг за другом отдельно транслируются и сразу выполняются (интерпретируются) с помощью специальной программы-интерпретатора (что противопоставляется компилируемым языкам, в которых все операторы программы заранее оттранслированы в объектный код...
Зарезерви́рованное сло́во (или ключево́е сло́во) — в языках программирования слово, имеющее специальное значение. Идентификаторы с такими именами запрещены.
Полиморфизм в языках программирования и теории типов — способность функции обрабатывать данные разных типов.
Синтаксис языка программирования — набор правил, описывающий комбинации символов алфавита, считающиеся правильно структурированной программой (документом) или её фрагментом. Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям.
При́месь (англ. mix in) — элемент языка программирования (обычно класс или модуль), реализующий какое-либо чётко выделенное поведение. Используется для уточнения поведения других классов, не предназначен для порождения самостоятельно используемых объектов.
Конста́нта в программировании — способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается.
Низкоуровневый язык программирования (язык программирования низкого уровня) — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, байт-код, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).
Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.
Паради́гма программи́рования — это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию). Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером.
Компилируемый язык программирования — язык программирования, исходный код которого преобразуется компилятором в машинный код и записывается в файл с особым заголовком и/или расширением для последующей идентификации этого файла, как исполняемого операционной системой (в отличие от интерпретируемых языков программирования, чьи программы выполняются программой-интерпретатором).
В языках программирования объявле́ние (англ. declaration) включает в себя указание идентификатора, типа, а также других аспектов элементов языка, например, переменных и функций. Объявление используется, чтобы уведомить компилятор о существовании элемента; это весьма важно для многих языков (например, таких как Си), требующих объявления переменных перед их использованием.
Подробнее: Объявление (информатика)
Литерал (англ. literal ) — запись в исходном коде компьютерной программы, представляющая собой фиксированное значение. Литералами также называют представление значения некоторого типа данных.
Контрактное программирование (design by contract (DbC), programming by contract, contract-based programming) — это метод проектирования программного обеспечения. Он предполагает, что проектировщик должен определить формальные, точные и верифицируемые спецификации интерфейсов для компонентов системы. При этом, кроме обычного определения абстрактных типов данных, также используются предусловия, постусловия и инварианты. Данные спецификации называются «контрактами» в соответствии с концептуальной метафорой...
Абстракция данных — популярная и в общем неверно определяемая техника программирования. Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик, существенных для корректного её использования. Такое разделение может быть выражено через специальный «интерфейс», сосредотачивающий описание всех возможных применений программы.
Раскрутка компилятора (англ. bootstrapping — от boot и strap) — метод создания транслятора для некоторого языка программирования, при котором транслятор пишется на том же языке программирования, для трансляции которого создаётся; создание транслятором исполняемых файлов из исходного кода самого транслятора. Используется для переноса трансляторов на новые платформы. Появился в середине 1950-х годов. Позволяет создать транслятор, который генерирует сам себя. Применялся для создания трансляторов многих...