Gilad Bracha | |
---|---|
Alma mater | University of Utah |
Awards | Senior Dahl–Nygaard Prize (2017) |
Scientific career | |
Fields | Computer science |
Institutions | Animorphic Systems Sun Microsystems Cadence Design Systems F5 |
Thesis | The Programming Language 'Jigsaw': Mixins, Modularity and Multiple Inheritance (1991) |
Doctoral advisor | Gary Lindstrom |
Website | www |
Gilad Bracha is a software engineer at F5, and formerly at Google, where he was on the Dart programming language team. [1] [2] [3] He is creator of the Newspeak language, and co-author of the second and third editions of the Java Language Specification, [4] and a major contributor to the second edition of the Java Virtual Machine Specification. [5]
Between 1994 and 1997, he worked on the Smalltalk system developed by Animorphic Systems, [6] a company that was bought by Sun in 1997. From 1997 to 2006, he worked at Sun Microsystems as computational theologist and, as of 2005, distinguished engineer, on various aspects of the specification and implementation of Java. [6] Following that, he was distinguished engineer at Cadence Design Systems from 2006 to 2009, where he led a team of developers designing and implementing Newspeak. [6]
Bracha received his B.Sc. in mathematics and computer science from Ben Gurion University in Israel and his Ph.D. in computer science from the University of Utah. [7] Bracha won the Senior Dahl–Nygaard Prize in 2017.
In 2006, Bracha, with Neal Gafter, James Gosling, and Peter von der Ahé (collectively BGGA), drafted a specification for adding closures to the Java language, version 6. [8] The proposal has been criticized by Joshua Bloch on terms of being needlessly complex (adding function types and non-local returns) while providing little benefit for the average Java programmer over other simpler proposals. [9] Closures were added to Java 8, but based on a different proposal than the BGGA one.
Bracha proposed that choice of type system be made independent of choice of language; that a type system should be a module that can be "plugged" into a language as needed. He believes this is advantageous, because what he calls mandatory type systems make languages less expressive and code more fragile. [10] The requirement that types do not affect the semantics of the language is challenging to fulfill; for example, constructs like type-based overloading are disallowed.
In practice, pluggable type systems are variously called optional typing, type hinting, type annotations, or gradual type checking. They tend to be constructed by adding a static type system to an extant dynamically typed language without changing its semantics and usually its syntax. Examples include Smalltalk, [11] Python 3, [12] [13] Ruby, [14] Clojure, [15] and PHP 5. [16] For most of the languages there is only one implementation of the type system. The exception is Python 3 where the type system is truly pluggable, because there are several implementations and the programmer can use the one that is the best fit. The only language designed with a pluggable type system from the start is Newspeak. Java 8 provides the ability to extend the type system, but does not allow flexibility in the basics of the type system, such as choosing between static and dynamic typing. [17]
Java is a high-level, class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible. It is a general-purpose programming language intended to let programmers write once, run anywhere (WORA), meaning that compiled Java code can run on all platforms that support Java without the need to recompile. Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of the underlying computer architecture. The syntax of Java is similar to C and C++, but has fewer low-level facilities than either of them. The Java runtime provides dynamic capabilities that are typically not available in traditional compiled languages.
A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally describes what is required in a JVM implementation. Having a specification ensures interoperability of Java programs across different implementations so that program authors using the Java Development Kit (JDK) need not worry about idiosyncrasies of the underlying hardware platform.
In computer programming, operator overloading, sometimes termed operator ad hoc polymorphism, is a specific case of polymorphism, where different operators have different implementations depending on their arguments. Operator overloading is generally defined by a programming language, a programmer, or both.
Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation.
In computing, serialization is the process of translating a data structure or object state into a format that can be stored or transmitted and reconstructed later. When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object. For many complex objects, such as those that make extensive use of references, this process is not straightforward. Serialization of objects does not include any of their associated methods with which they were previously linked.
Java and C++ are two prominent object-oriented programming languages. By many language popularity metrics, the two languages have dominated object-oriented and high-performance software development for much of the 21st century, and are often directly compared and contrasted. Java's syntax was based on C/C++.
In computing, Strongtalk is a Smalltalk environment with optional static typing support. Strongtalk can make some compile time checks, and offer stronger type safety guarantees; this is the source of its name. It is non-commercial, though it was originally a commercial project developed by a small startup company named LongView Technologies.
A foreign function interface (FFI) is a mechanism by which a program written in one programming language can call routines or make use of services written or compiled in another one. An FFI is often used in contexts where calls are made into a binary dynamic-link library.
Java is a set of computer software and specifications that provides a software platform for developing application software and deploying it in a cross-platform computing environment. Java is used in a wide variety of computing platforms from embedded devices and mobile phones to enterprise servers and supercomputers. Java applets, which are less common than standalone Java applications, were commonly run in secure, sandboxed environments to provide many features of native applications through being embedded in HTML pages.
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 required that parametrically polymorphic functions are not implemented in the Java virtual machine, since type safety is impossible in this case.
Newspeak is a programming language and platform in the tradition of Smalltalk and Self being developed by a team led by Gilad Bracha. The platform includes an integrated development environment (IDE), a graphical user interface (GUI) library, and standard libraries. Starting in 2006, Cadence Design Systems funded its development and employed the main contributors, but ended funding in January 2009.
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build such a connection or interface is called an API specification. A computer system that meets this standard is said to implement or expose an API. The term API may refer either to the specification or to the implementation.
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.
Java bytecode is the instruction set of the Java virtual machine (JVM), the language to which Java and other JVM-compatible source code is compiled. Each instruction is represented by a single byte, hence the name bytecode, making it a compact form of data.
Gradual typing is a type system that lies inbetween static typing and in dynamic typing. Some variables and expressions may be given types and the correctness of the typing is checked at compile time and some expressions may be left untyped and eventual type errors are reported at runtime.
In computer programming, several language mechanisms exist for exception handling. The term exception is typically used to denote a data structure storing information about an exceptional condition. One mechanism to transfer control, or raise an exception, is known as a throw; the exception is said to be thrown. Execution is transferred to a catch.