fbpx
Wikipedia

First-class citizen

In a given programming language design, a first-class citizen[a] is an entity which supports all the operations generally available to other entities. These operations typically include being passed as an argument, returned from a function, and assigned to a variable.[1]

History edit

The concept of first- and second-class objects was introduced by Christopher Strachey in the 1960s.[2][3] He did not actually define the term strictly, but contrasted real numbers and procedures in ALGOL:

First and second class objects. In ALGOL, a real number may appear in an expression or be assigned to a variable, and either of them may appear as an actual parameter in a procedure call. A procedure, on the other hand, may only appear in another procedure call either as the operator (the most common case) or as one of the actual parameters. There are no other expressions involving procedures or whose results are procedures. Thus in a sense procedures in ALGOL are second class citizens—they always have to appear in person and can never be represented by a variable or expression (except in the case of a formal parameter)... [4]

Robin Popplestone gave the following definition: All items have certain fundamental rights.

  1. All items can be the actual parameters of functions
  2. All items can be returned as results of functions
  3. All items can be the subject of assignment statements
  4. All items can be tested for equality.[5]

During the 1990s, Raphael Finkel[6] proposed definitions of second and third class values, but these definitions have not been widely adopted.[7][better source needed]

Examples edit

The simplest scalar data types, such as integer and floating-point numbers, are nearly always first-class.

In many older languages, arrays and strings are not first-class: they cannot be assigned as objects or passed as parameters to a subroutine. For example, neither Fortran IV nor C supports array assignment, and when they are passed as parameters, only the position of their first element is actually passed—their size is lost. C appears to support assignment of array pointers, but in fact these are simply pointers to the array's first element, and again do not carry the array's size.[citation needed]

In most languages, data types are not first-class objects, though in some object-oriented languages, classes are first-class objects and are instances of metaclasses. Languages in the functional programming family often also feature first-class types, in the form of, for example, generalized algebraic data types, or other metalanguage amenities enabling programs to implement extensions to their own implementation language.

Few languages support continuations and GOTO-labels as objects at all, let alone as first-class objects.

Functions edit

Many programming languages support passing and returning function values, which can be applied to arguments. Whether this suffices to call function values first-class is disputed.

Some authors require it be possible to create new functions at runtime to call them 'first-class'.[citation needed] Under this definition, functions in C are not first-class objects; instead, they are sometimes called second-class objects, because they can still be manipulated in most of the above fashions (via function pointers).

In Smalltalk, functions (methods) are first-class objects, just like Smalltalk classes. Since Smalltalk operators (+, -, etc.) are methods, they are also first-class objects.

Reflection edit

Some languages, such as Java and PHP, have an explicit reflection subsystem which allow access to internal implementation structures even though they are not accessible or manipulable in the same way as ordinary objects.

In other languages, such as those in the Lisp family, reflection is a central feature of the language, rather than a special subsystem. Typically this takes the form of some set of the following features:

  • syntactic macros or fexprs - which allow the user to write code which handles code as data and evaluates it by discretion, enabling, for example, programs to write programs (or rewrite themselves) inside of the compiler, interpreter, or even the parser (reader macros);
  • a meta-circular evaluator - which provides a definition of the language's evaluator as a compiled tautologisation of itself, facilitating straightforward modification of the language without requiring a metalanguage different from itself;
  • a metaobject protocol - a special form of meta-circular evaluator for object-oriented programming, in which the object system implements itself recursively via a system of metaclasses and metaobjects, which are themselves classes and objects.

These allow varying forms of first-class access to the language implementation, and are, in general, manipulable in the same way as, and fully indistinguishable from, ordinary language objects. Because of this, their usage generally comes with some (cultural) stipulations and advice, as untested modification of the core programming system by users can easily undermine performance optimisations made by language implementers.

See also edit

Notes edit

  1. ^ Also known as first-class type, first-class object, first-class entity, or first-class value.

References edit

  1. ^ Scott, Michael (2006). Programming Language Pragmatics. San Francisco, CA: Morgan Kaufmann Publishers. p. 140. ISBN 9780126339512.
  2. ^ Rod Burstall, "Christopher Strachey—Understanding Programming Languages", Higher-Order and Symbolic Computation 13:52 (2000)
  3. ^ Harold Abelson and Gerald Jay Sussman, Structure and Interpretation of Computer Programs, 2nd edition, section 1.3.4 footnote 64 2015-03-09 at the Wayback Machine
  4. ^ Christopher Strachey, "Fundamental Concepts in Programming Languages" in Higher-Order and Symbolic Computation 13:11 (2000); though published in 2000, these are notes from lectures Strachey delivered in August, 1967
  5. ^ R. J. Popplestone: The Design Philosophy of POP-2. in: D. Michie: Machine Intelligence 3, Edinburgh at the University Press, 1968
  6. ^ Finkel, R. Advanced Programming language Design, p 73
  7. ^ Norman Ramsey. "About first-,second- and third-class value". stackoverflow.com. Retrieved 14 September 2013.
  8. ^ a b Paritosh Shroff, Scott F. Smith. Type Inference for First-Class Messages with Match-Functions
  9. ^ Bove, Ana; Dybjer, Peter (2009). "Dependent Types at Work" (PDF). Language Engineering and Rigorous Software Development. Lecture Notes in Computer Science. 5520: 57–99. doi:10.1007/978-3-642-03153-3_2. ISBN 978-3-642-03152-6. (PDF) from the original on April 2, 2014. Retrieved 8 June 2015. (also archived)

first, class, citizen, usage, society, second, class, citizen, given, programming, language, design, first, class, citizen, entity, which, supports, operations, generally, available, other, entities, these, operations, typically, include, being, passed, argume. For the usage in society see Second class citizen In a given programming language design a first class citizen a is an entity which supports all the operations generally available to other entities These operations typically include being passed as an argument returned from a function and assigned to a variable 1 Contents 1 History 2 Examples 3 Functions 4 Reflection 5 See also 6 Notes 7 ReferencesHistory editThe concept of first and second class objects was introduced by Christopher Strachey in the 1960s 2 3 He did not actually define the term strictly but contrasted real numbers and procedures in ALGOL First and second class objects In ALGOL a real number may appear in an expression or be assigned to a variable and either of them may appear as an actual parameter in a procedure call A procedure on the other hand may only appear in another procedure call either as the operator the most common case or as one of the actual parameters There are no other expressions involving procedures or whose results are procedures Thus in a sense procedures in ALGOL are second class citizens they always have to appear in person and can never be represented by a variable or expression except in the case of a formal parameter 4 Robin Popplestone gave the following definition All items have certain fundamental rights All items can be the actual parameters of functions All items can be returned as results of functions All items can be the subject of assignment statements All items can be tested for equality 5 During the 1990s Raphael Finkel 6 proposed definitions of second and third class values but these definitions have not been widely adopted 7 better source needed Examples editThe simplest scalar data types such as integer and floating point numbers are nearly always first class In many older languages arrays and strings are not first class they cannot be assigned as objects or passed as parameters to a subroutine For example neither Fortran IV nor C supports array assignment and when they are passed as parameters only the position of their first element is actually passed their size is lost C appears to support assignment of array pointers but in fact these are simply pointers to the array s first element and again do not carry the array s size citation needed In most languages data types are not first class objects though in some object oriented languages classes are first class objects and are instances of metaclasses Languages in the functional programming family often also feature first class types in the form of for example generalized algebraic data types or other metalanguage amenities enabling programs to implement extensions to their own implementation language Few languages support continuations and GOTO labels as objects at all let alone as first class objects Concept Description Languagesfirst class function closures and anonymous functions Smalltalk Dart Scheme ML Haskell F Kotlin Scala Swift Perl PHP Python Raku JavaScript Delphi Rustfirst class control continuations Scheme ML F first class type dependent types Coq Idris Agdafirst class data type Generic Haskell C 11first class polymorphism impredicative polymorphismfirst class message dynamic messages method calls Smalltalk 8 Objective C 8 Common Lispfirst class class metaclass and metaobject Smalltalk Objective C Ruby Python Delphi Common Lispfirst class proofs proof object 9 Coq AgdaFunctions editMain article First class functions Many programming languages support passing and returning function values which can be applied to arguments Whether this suffices to call function values first class is disputed Some authors require it be possible to create new functions at runtime to call them first class citation needed Under this definition functions in C are not first class objects instead they are sometimes called second class objects because they can still be manipulated in most of the above fashions via function pointers In Smalltalk functions methods are first class objects just like Smalltalk classes Since Smalltalk operators etc are methods they are also first class objects Reflection editMain article Reflection computer programming Some languages such as Java and PHP have an explicit reflection subsystem which allow access to internal implementation structures even though they are not accessible or manipulable in the same way as ordinary objects In other languages such as those in the Lisp family reflection is a central feature of the language rather than a special subsystem Typically this takes the form of some set of the following features syntactic macros or fexprs which allow the user to write code which handles code as data and evaluates it by discretion enabling for example programs to write programs or rewrite themselves inside of the compiler interpreter or even the parser reader macros a meta circular evaluator which provides a definition of the language s evaluator as a compiled tautologisation of itself facilitating straightforward modification of the language without requiring a metalanguage different from itself a metaobject protocol a special form of meta circular evaluator for object oriented programming in which the object system implements itself recursively via a system of metaclasses and metaobjects which are themselves classes and objects These allow varying forms of first class access to the language implementation and are in general manipulable in the same way as and fully indistinguishable from ordinary language objects Because of this their usage generally comes with some cultural stipulations and advice as untested modification of the core programming system by users can easily undermine performance optimisations made by language implementers See also editFirst class function ReificationNotes edit Also known as first class type first class object first class entity or first class value References edit Scott Michael 2006 Programming Language Pragmatics San Francisco CA Morgan Kaufmann Publishers p 140 ISBN 9780126339512 Rod Burstall Christopher Strachey Understanding Programming Languages Higher Order and Symbolic Computation 13 52 2000 Harold Abelson and Gerald Jay Sussman Structure and Interpretation of Computer Programs 2nd edition section 1 3 4 footnote 64 Archived 2015 03 09 at the Wayback Machine Christopher Strachey Fundamental Concepts in Programming Languages in Higher Order and Symbolic Computation 13 11 2000 though published in 2000 these are notes from lectures Strachey delivered in August 1967 R J Popplestone The Design Philosophy of POP 2 in D Michie Machine Intelligence 3 Edinburgh at the University Press 1968 Finkel R Advanced Programming language Design p 73 Norman Ramsey About first second and third class value stackoverflow com Retrieved 14 September 2013 a b Paritosh Shroff Scott F Smith Type Inference for First Class Messages with Match Functions Bove Ana Dybjer Peter 2009 Dependent Types at Work PDF Language Engineering and Rigorous Software Development Lecture Notes in Computer Science 5520 57 99 doi 10 1007 978 3 642 03153 3 2 ISBN 978 3 642 03152 6 Archived PDF from the original on April 2 2014 Retrieved 8 June 2015 also archived Retrieved from https en wikipedia org w index php title First class citizen amp oldid 1184811838, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.