Jump to content

Первоклассный гражданин

В данном языке программирования первоклассный гражданин [а] — это объект, который поддерживает все операции, обычно доступные другим объектам. Эти операции обычно включают передачу в качестве аргумента , возврат из функции и присвоение переменной . [1]

История [ править ]

Понятие объектов первого и второго класса было введено Кристофером Стрейчи в 1960-х годах. [2] [3] На самом деле он не давал строгого определения этого термина, но противопоставлял действительные числа и процедуры в Алголе :

Объекты первого и второго класса. В АЛГОЛе вещественное число может присутствовать в выражении или быть присвоено переменной, и любое из них может выступать в качестве фактического параметра при вызове процедуры. С другой стороны, процедура может появиться только при вызове другой процедуры либо как оператор (наиболее распространенный случай), либо как один из фактических параметров. Не существует других выражений, включающих процедуры или чьи результаты являются процедурами. Таким образом, в некотором смысле процедуры в Алголе являются гражданами второго сорта: они всегда должны присутствовать лично и никогда не могут быть представлены переменной или выражением (за исключением случая формального параметра)... [4]

Робин Попплстоун дал следующее определение:Все объекты имеют определенные фундаментальные права.

  1. Все элементы могут быть фактическими параметрами функций.
  2. Все элементы могут быть возвращены как результаты функций.
  3. Все элементы могут быть предметом операторов присваивания.
  4. Все элементы можно проверить на равенство. [5]

В 1990-е годы Рафаэль Финкель [6] предложил определения ценностей второго и третьего класса, но эти определения не получили широкого распространения. [7] [ нужен лучший источник ]

Примеры [ править ]

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

Во многих старых языках массивы и строки не являются первоклассными: их нельзя присваивать как объекты или передавать в подпрограмму в качестве параметров. Например, ни Fortran IV, ни C не поддерживают присвоение массивов, и когда они передаются в качестве параметров, фактически передается только позиция их первого элемента — их размер теряется. Кажется, что C поддерживает присвоение указателей массива , но на самом деле это просто указатели на первый элемент массива и опять-таки не передают размер массива. [ нужна ссылка ]

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

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

Концепция Описание Языки
первоклассная функция замыкания и анонимные функции Smalltalk , Dart , Scheme , ML , Haskell , F# , Kotlin , Scala , Swift , Perl , PHP , Python , Raku , JavaScript , Delphi , Rust
первоклассный контроль продолжения Схема , ML , F#
первоклассный тип зависимые типы Кок , Идрис , Агда
первоклассный тип данных Общий Haskell , C++11
первоклассный полиморфизм непредикативный полиморфизм
первоклассное сообщение динамические сообщения (вызовы методов) Смолток , [8] Цель-С , [8] Общий Лисп
первоклассный класс метакласс и метаобъект Smalltalk , Objective-C , Ruby , Python , Delphi , Common Lisp
первоклассные доказательства объект доказательства [9] Кок , Агда

Функции [ править ]

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

Некоторые авторы требуют, чтобы во время выполнения можно было создавать новые функции , чтобы называть их «первоклассными». [ нужна ссылка ] Согласно этому определению, функции в C не являются объектами первого класса; вместо этого их иногда называют объектами второго класса , поскольку ими по-прежнему можно манипулировать большинством вышеперечисленных способов (с помощью указателей на функции ).

В Smalltalk функции (методы) являются объектами первого класса, как и классы Smalltalk. Поскольку операторы Smalltalk (+, - и т. д.) являются методами, они также являются объектами первого класса.

Отражение [ править ]

Некоторые языки, такие как Java и PHP , имеют явную подсистему отражения , которая обеспечивает доступ к внутренним структурам реализации, даже если они не доступны и не поддаются манипулированию так же, как обычные объекты.

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

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

См. также [ править ]

Примечания [ править ]

  1. ^ Также известен как первоклассный тип , первоклассный объект , первоклассная сущность или первоклассное значение .

Ссылки [ править ]

  1. ^ Скотт, Майкл (2006). Прагматика языков программирования . Сан-Франциско, Калифорния: Издательство Morgan Kaufmann. п. 140 . ISBN  9780126339512 .
  2. ^ Род Берстолл, «Кристофер Стрейчи — понимание языков программирования», Вычисления высшего порядка и символические вычисления 13:52 (2000)
  3. ^ Гарольд Абельсон и Джеральд Джей Сассман, Структура и интерпретация компьютерных программ , 2-е издание, раздел 1.3.4 , сноска 64. Архивировано 9 марта 2015 г. на Wayback Machine.
  4. ^ Кристофер Стрейчи, « Фундаментальные концепции языков программирования » в книге «Вычисления высшего порядка и символические вычисления» 13:11 (2000); хотя они были опубликованы в 2000 году, это конспекты лекций, которые Стрейчи прочитал в августе 1967 года.
  5. ^ Р. Дж. Попплстоун: Философия дизайна POP-2 . в: Д. Мичи: Машинный интеллект 3, Эдинбург, University Press, 1968.
  6. ^ Финкель, Р. Проектирование расширенного языка программирования , стр. 73
  7. ^ Норман Рэмси. «О ценности первого, второго и третьего сорта» . stackoverflow.com . Проверено 14 сентября 2013 г.
  8. Перейти обратно: Перейти обратно: а б Паритош Шрофф, Скотт Ф. Смит. Вывод типа для первоклассных сообщений с функциями сопоставления
  9. ^ Бове, Ана; Дюбьер, Питер (2009). «Зависимые типы на работе» (PDF) . Языковая инженерия и тщательная разработка программного обеспечения . Конспекты лекций по информатике. 5520 : 57–99. дои : 10.1007/978-3-642-03153-3_2 . ISBN  978-3-642-03152-6 . Архивировано (PDF) из оригинала 2 апреля 2014 г. Проверено 8 июня 2015 г. (также в архиве )
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9e5f63a821879d88f75729a882934f0f__1716376560
URL1:https://arc.ask3.ru/arc/aa/9e/0f/9e5f63a821879d88f75729a882934f0f.html
Заголовок, (Title) документа по адресу, URL1:
First-class citizen - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)