PostScript
'''PostScript''' is a concatenative dynamically typed language with abundant meta language facilities. It allows definition of new control structures at run time, allows reflection and reification of stack, scopes, and even continuations. With Display PostScript, the language even has facilities for multi-threaded execution. Since the language is based on stack, it is suitable for combinator based programming, and all the higher order combinators (initiated by joy language) is applicable in postscript. The language also allows a form of prototype based object orientated programming using dictionaries. See for implementation of higher order combinators.
'''PostScript''' originated as a printer definition language invented by the founders of '''Adobe'''. The language was necessitated by the increasing demands of printing and rendering jobs on the computers of the 1970s. These tasks were therefore pushed to the printers themselves, with the result that printers now had chips and built in interpreters for PostScript. With the growth of printing complexity, some printers ended up having even more powerful processors than the master systems themselves.
Although now almost displaced by the '''Portable Document Format''' (PDF), also developed by Adobe, PostScript's USP lies in it's being a '''Turing complete''' language with support for the basic data types and fundamental structures and concepts of Computer Science. Many interpreters and viewers of PostScript are available, some even for free. Although primarily a language suited for 2D graphics, PostScript is complete as a language and able to handle normal computation tasks.
''(does "USP" mean "unique selling proposition"?)''
See Also
*WPS - PostScript interpreter written in JavaScript. *postcanvas - Open-source PostScript interpreter written in JavaScript. *Ghostscript opensource postscript interpreter with a lot of extensions. *Owen Densmore, Object-Oriented Programming in NeWS, describes the use of dictionaries for implementing single- and multiple-inheritance.
Tasks
- 100 doors
- A+B
- Accumulator factory
- Ackermann function
- Anonymous recursion
- Apply a callback to an array
- Arithmetic/Complex
- Arithmetic/Integer
- Array concatenation
- Arrays
- Associative array/Creation
- Associative array/Iteration
- Averages/Arithmetic mean
- Averages/Pythagorean means
- Averages/Root mean square
- Boolean values
- Comments
- Conditional structures
- Copy a string
- Dot product
- Dragon curve
- Draw a rotating cube
- Draw a sphere
- Empty program
- Factorial
- Fibonacci sequence
- Filter
- First-class functions
- FizzBuzz
- Flatten a list
- Forest fire
- Fractal tree
- Function composition
- Function definition
- Generic swap
- Greatest common divisor
- Greatest element of a list
- Hash from two arrays
- Hello world!
- Hello world/Graphical
- Hello world/Line printer
- Hello world/Standard error
- Hello world/Text
- Higher-order functions
- Identity matrix
- Infinity
- Integer sequence
- Knight's tour
- Leap year
- Literals/Integer
- Logical operations
- Loop over multiple arrays simultaneously
- Loops/Break
- Loops/Foreach
- Loops/Infinite
- Loops/While
- Mandelbrot set
- Matrix transposition
- Metaprogramming
- Mutual recursion
- Pentagram
- Plot coordinate pairs
- Program termination
- Queue/Definition
- Queue/Usage
- Remove duplicate elements
- Repeat a string
- Reverse a string
- Rot-13
- Sierpinski carpet
- Sierpinski triangle
- Sierpinski triangle/Graphical
- Sorting algorithms/Bubble sort
- Stack
- String length
- Sum and product of an array
- Sum of a series
- Sum of squares
- Terminal control/Ringing the terminal bell
- Trigonometric functions
- Y combinator
- Yin and yang
- Zig-zag matrix