Newspeak (programming language)

Last updated
Newspeak
Paradigm object-oriented, functional
Designed by Gilad Bracha
Developer Gilad Bracha, Peter von der Ahé, Vassili Bykov, Yaron Kashai, Ryan Macnak, William Maddox, Eliot Miranda
First appeared2006;18 years ago (2006)
Stable release
Prototype / February 2013;11 years ago (2013-02)
Typing discipline dynamic, optional
Implementation languageC++, Newspeak, JavaScript
OS Windows 10, MacOS, Linux, Android, Web browsers
License Apache
Website newspeaklanguage.org
Major implementations
Primordial Soup
Influenced by
Smalltalk, Self, BETA, E

Newspeak is a programming language and platform in the tradition of Smalltalk and Self being developed by a team led by Gilad Bracha. [1] The platform includes an integrated development environment (IDE), a graphical user interface (GUI) library, and standard libraries. [2] Starting in 2006, Cadence Design Systems funded its development and employed the main contributors, but ended funding in January 2009. [3]

Contents

Overview

Newspeak is a class-based and message-based language. Classes may be nested, as in BETA. This is one of the key differences between Newspeak and Smalltalk.

Newspeak is distinguished by its unusual approach to modularity. [4] The language has no global namespace. Top level classes act as module declarations. Modularity in Newspeak is based exclusively on class nesting. [1] Module declarations are first class values (i.e., they may be stored in variables, passed as parameters, returned from methods, etc.) and are stateless.

By design the newspeak lacks undeclared access to a global scope and therefore enforces dependency injection. As consequence it requires all class dependencies (instance variables referred as by "slots") to be explicitly referenced. This makes every class in Newspeak virtual. [1] All names of dependencies in Newspeak are late-bound (dynamically bound), and are interpreted as message sends, as in Self.

Notable feature of the newspeak is impossibility to directly access instance variables. It's done via automatically generated getters or setters. [1] :3

Development

While developed at Cadence Newspeak was used to write its own IDE (compiler, debugger, class browsers, object inspectors, unit testing framework, a mirror based reflection API etc.), a portable GUI tool kit, an object serializer/deserializer, a parser combinator library, a regular expression package, core libraries for collections, streams, strings and files, parts of foreign function interface and CAD application code. [5] The Newspeak platform as a whole took approximately 8 person years of work. [1] :17

Identity

The name Newspeak is inspired by the Newspeak language appearing in George Orwell's dystopian novel Nineteen Eighty-Four . The heading on the programming language's website says "It's doubleplusgood". The motive for the name is that Orwell's Newspeak language grew smaller with each revision; [6] Bracha views this as a desirable goal for a programming language.

The language icon is supposed to be Big Brother's eye, as seen in page 3 of the documentation.

It should not be confused with the safety critical programming language of the same name designed by Ian Currie of RSRE in 1984, for use with the VIPER microprocessor. Its principal characteristic was that its compiler would ensure all potential exceptional behaviour is explicitly handled by the program. [7] [8]

Implementation

Primordial Soup is a virtual machine (VM) that runs Newspeak binary snapshopts of serialized Newspeak files. [9] Internal Object Representation was inspired by the Dart VM and provides basic VM primitives for the language. [9] It can be compiled by SCons on various platforms.

Example of code

" A declaration of a class Point"classPointx:iy:j=(" This section is the instance initializer"|"slots declarations are always between bars"publicx::=i." ::= denotes slot initialization of a mutable slot"publicy::=j.|)("A method"publicprintString=(ˆx=,xprintString,y=,yprintString))"Instantiation of the Point to the `p` slot inside some class"...publicp:=Pointx:42y:91....

"Hello World" example

Hello world program:

HelloBraveNewWorldusingPlatform:platform=(platformTranscriptopenshow:'Hello, Oh Brave new world'.)

See also

Related Research Articles

A "Hello, World!" program is generally a simple computer program which outputs to the screen a message similar to "Hello, World!" while ignoring any user input. A small piece of code in most general-purpose programming languages, this program is used to illustrate a language's basic syntax. A "Hello, World!" program is often the first written by a student of a new programming language, but such a program can also be used as a sanity check to ensure that the computer software intended to compile or run source code is correctly installed, and that its operator understands how to use it.

<span class="mw-page-title-main">Smalltalk</span> Object-oriented programming language released first in 1972

Smalltalk is a purely object oriented programming language (OOP) that was originally created in the 1970s for educational use, specifically for constructionist learning, but later found use in business. It was created at Xerox PARC by Learning Research Group (LRG) scientists, including Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Diana Merry, and Scott Wallace.

In computing, a virtual machine (VM) is the virtualization or emulation of a computer system. Virtual machines are based on computer architectures and provide the functionality of a physical computer. Their implementations may involve specialized hardware, software, or a combination of the two. Virtual machines differ and are organized by their function, shown here:

<span class="mw-page-title-main">Squeak</span> Object-oriented programming language

Squeak is an object-oriented, class-based, and reflective programming language. It was derived from Smalltalk-80 by a group that included some of Smalltalk-80's original developers, initially at Apple Computer, then at Walt Disney Imagineering, where it was intended for use in internal Disney projects. The group would later go on to be supported by HP Labs, SAP, and most recently, Y Combinator.

<span class="mw-page-title-main">Lua (programming language)</span> Lightweight programming language

Lua is a lightweight, high-level, multi-paradigm programming language designed primarily for embedded use in applications. Lua is cross-platform, since the interpreter of compiled bytecode is written in ANSI C, and Lua has a relatively simple C API to embed it into applications.

<span class="mw-page-title-main">Self (programming language)</span> Prototype-based programming language

Self is an object-oriented programming language based on the concept of prototypes. Self began as a dialect of Smalltalk, being dynamically typed and using just-in-time compilation (JIT) as well as the prototype-based approach to objects: it was first used as an experimental test system for language design in the 1980s and 1990s. In 2006, Self was still being developed as part of the Klein project, which was a Self virtual machine written fully in Self. The latest version is 2017.1 released in May 2017.

In programming languages, a closure, also lexical closure or function closure, is a technique for implementing lexically scoped name binding in a language with first-class functions. Operationally, a closure is a record storing a function together with an environment. The environment is a mapping associating each free variable of the function with the value or reference to which the name was bound when the closure was created. Unlike a plain function, a closure allows the function to access those captured variables through the closure's copies of their values or references, even when the function is invoked outside their scope.

Bytecode is a form of instruction set designed for efficient execution by a software interpreter. Unlike human-readable source code, bytecodes are compact numeric codes, constants, and references that encode the result of compiler parsing and performing semantic analysis of things like type, scope, and nesting depths of program objects.

In computer science, reflective programming or reflection is the ability of a process to examine, introspect, and modify its own structure and behavior.

Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.

<span class="mw-page-title-main">Raku (programming language)</span> Programming language derived from Perl

Raku is a member of the Perl family of programming languages. Formerly known as Perl 6, it was renamed in October 2019. Raku introduces elements of many modern and historical languages. Compatibility with Perl was not a goal, though a compatibility mode is part of the specification. The design process for Raku began in 2000.

IP Pascal is an implementation of the Pascal programming language using the IP portability platform, a multiple machine, operating system and language implementation system. It implements the language "Pascaline", and has passed the Pascal Validation Suite.

A Java package organizes Java classes into namespaces, providing a unique namespace for each type it contains. Classes in the same package can access each other's package-private and protected members.

Haxe is a high-level cross-platform programming language and compiler that can produce applications and source code for many different computing platforms from one code-base. It is free and open-source software, released under the MIT License. The compiler, written in OCaml, is released under the GNU General Public License (GPL) version 2.

The Java Class Loader is a part of the Java Runtime Environment that dynamically loads Java classes into the Java Virtual Machine. Usually classes are only loaded on demand. The virtual machine will only load the class files required for executing the program. The Java run time system does not need to know about files and file systems as this is delegated to the class loader.

Generics are a facility of generic programming that were added to the Java programming language in 2004 within version J2SE 5.0. They were designed to extend Java's type system to allow "a type or method to operate on objects of various types while providing compile-time type safety". The aspect compile-time type safety was not fully achieved, since it was shown in 2016 that it is not guaranteed in all cases.

<span class="mw-page-title-main">Pharo</span>

Pharo is an open source, cross-platform implementation of the classic Smalltalk-80 programming language and runtime. It is based on the OpenSmalltalk virtual machine called Cog (VM), which evaluates a dynamic, reflective, and object-oriented programming language with a syntax closely resembling Smalltalk-80.

<span class="mw-page-title-main">Gilad Bracha</span> American software engineer

Gilad Bracha is a software engineer at F5 Networks, and formerly at Google, where he was on the Dart programming language team. He is creator of the Newspeak language, and co-author of the second and third editions of the Java Language Specification, and a major contributor to the second edition of the Java Virtual Machine Specification.

Nemerle is a general-purpose, high-level, statically typed programming language designed for platforms using the Common Language Infrastructure (.NET/Mono). It offers functional, object-oriented, aspect-oriented, reflective and imperative features. It has a simple C#-like syntax and a powerful metaprogramming system.

Dart is a programming language designed by Lars Bak and Kasper Lund and developed by Google. It can be used to develop web and mobile apps as well as server and desktop applications.

References

  1. 1 2 3 4 5 Bracha, Gilad; von der Ah´, Peter; Bykov, Vassili; Kashai, Yaron; Maddox, William; Miranda, Eliot (June 2010). "Modules as Objects in Newspeak" (PDF).
  2. Gilad Bracha, Peter Ahe, Vassil Bykov, Yaron Kashai and Eliot Miranda. The Newspeak Programming Platform.
  3. Bracha, Gilad (2008-11-24). "Room 101: We have Good news, and we have Bad news". Room 101: A place to be (re)educated in Newspeak. Google Blogger. Retrieved 2009-09-21.
  4. Gilad Bracha, Peter Ahe, Vassili Bykov, Yaron Kashai, William Maddox and Eliot Miranda. Modules as Objects in Newspeak. In the Proceedings of the 24th European Conference on Object Oriented Programming, Maribor, Slovenia, June 21–25, 2010.
  5. Bracha, Gilad; Von der Ah, Peter; Bykov, Vassili; Kashai, Yaron; Maddox, William; Miranda, Eliot (May 6, 2008). "The Newspeak Programming Platform". Cadence Design Systems via Researchgate.
  6. Software Engineering Radio Episode 140: Newspeak and Pluggable Types With Gilad Bracha/
  7. Currie, I.F. (July 1986). "NewSpeak: an unexceptional language". Software Engineering Journal. 1 (4): 170–176. doi:10.1049/sej.1986.0027. ISSN   0268-6961.
  8. Cullyer, W.J. (2012-12-06). "Implementing Safety Critical Systems: The VIPER Micropocessor". In Birtwistle, Graham; Subrahmanyam, P. A. (eds.). VLSI Specification, Verification and Synthesis. Springer Publishing. pp. 16–17. ISBN   978-1461320074.
  9. 1 2 Primordial Soup, Ministry of Truth, 2021-12-19, retrieved 2023-05-11