IBM®
Skip to main content
    Country/region [select]      Terms of use
 
 
    
     Home      Products      Services & solutions      Support & downloads      My account     
 
developerworks > Dashboard > Bobby Woolf: WebSphere SOA and J2EE in Practice > Miscellaneous Technologies > Fortress
developerWorks
Log In   View a printable version of the current page.
Overview Spaces Forums Blogs Podcasts Wikis Exchange
Fortress
Added by bwoolf, last edited by bwoolf on Oct 26, 2006  (view change)
Labels: 
(None)

Fortress

In "A Growable Language" at OOPSLA 2006, Guy Steele of Sun Microsystems Laboratories spoke about the Fortress programming language.

Fortress is based on a premise that a planned programming language takes too long to develop and is obsolete by the time it's available. To combat this, a programming language cannot be designed, it must be grown. Thus a focus of the Fortress language is to make a very simple language that supports the development of powerful class libraries, and allow the innovation to occur in the class libraries. In this way, the language can grow and adapt to new uses by updating the class libraries.

Fortress is intended to replace FORTRAN for developing mathematically intensive applications. One consequence is that the main programming notation is mathematical equations. The equations can be entered as ASCII using wiki-like markup, and displayed like the equations shown in textbooks, which is a very natural language for the intended audience of mathematicians and scientists. Fortress will have mathematical data types like matrices and support matrix multiplication.

Fortress has built-in capabilities to divide a program into parts to process them concurrently and distribute them across multiple processors, capabilities that are very important for rapidly calculating complex equations. One such opportunity is a loop: Why run a loop ten times in one thread on a processor if you can run it once on ten different processors concurrently? So Fortress tries to do this dynamically at runtime; this enables you to write code one way that will adjust to the hardware available at runtime. The language uses constructs called generators to perform the evaluation, which are like iterators on steroids. In some equations, loops must be run sequentially, perhaps because the result of one iteration is used as input to the next. In this case, one marks the loop as "seq" in the source code, which selects an appropriate generator at runtime.

Most (all?) of these mathematic specifics is handled in the class libraries, not the language itself. Thus it should be possible to use the language to write and run different class libraries for domains very different from mathematics, and handle those domains in an equally natural manner (depending on the capabilities of the libraries). Because the language is already written, developing new class libraries for new domains should be much faster and less error prone than developing a new language from scratch. These new domains should still be able take advantage of the language features, such as transparent runtime access to parallel processing.

OOPSLA has a wiki page on Guy's talk.


    About IBM Privacy Contact