Está en la página 1de 9

Scala, Haskell and Fantom Programming Language

Raymark D. Dulce (200712952) January 01, 2011

was released in March 2006. Platforms and License Scala runs on the Java platform(Java Virtual Machine) and is compatible with existing Java programs. In fact. Sun’s Java compiler. History of Scala The design of Scala started in 2001 at the cole Polytechnique F d rale de Lausanne (EPFL) by Martin Odersky. signifying that it is designed to grow with the demands of its users. including compiler and libraries.NET implementation). v2.0. Scala code and Java code are indistinguishable. enabling Java and other programmers to be more productive.Scala Programming Language What is Scala? Scala is a multi-paradigm programming language designed to integrate features of object-oriented programming and functional programming.NET libraries in the . To the JVM. Micro Edition Connected Limited Device Configuration. and on the . The Scala compiler generates byte code that is nearly identical to that generated by the Java compiler. The name Scala stands for ”scalable language”. The Scala software distribution. It smoothly integrates features of object-oriented and functional languages. Scala was released late 2003 / early 2004 on the Java platform. following on from work on Funnel. It also runs on Java Platform. As of November 2010. so Scala code can call Java libraries (or . elegant.jar.NET platform in June 2004. and type-safe way. Scala’s operational characteristics are the same as Java’s. Scala code can be decompiled to readable Java code. with the exception of certain constructor operations. scala-library.1. a programming language combining ideas from functional programming and Petri nets.8. the latest release is version 2. is released under a BSD license. Scala is a general purpose programming language designed to express common programming patterns in a concise. 1 . Odersky had previously worked on Generic Java and javac. Scala has the same compilation model as Java and C-sharp. A second version of the language. The only difference is a single extra runtime library.

are byte code compatible with Java so you can make full use of existing Java libraries or existing application code. Classes are extended by subclassing and a flexible mixin-based composition mechanism as a clean replacement for multiple inheritance. Scala is object-oriented Scala is a pure object-oriented language in the sense that every value is an object. Scala programs run on the Java VM. You can call Scala from Java and you can call Java from Scala. Scala is functional Scala is also a functional language in the sense that every function is a value. Scala’s case classes and its built-in support for pattern matching model algebraic types. it supports higher-order functions. all of which support Scala. it allows functions to be nested. the integration is seamless. Moreover. NetBeans or Intellij for example. Scala provides a lightweight syntax for defining anonymous functions. you will be at home with familiar development tools. Scala is statically typed Scala is equipped with an expressive type system that enforces statically that abstractions are used in a safe and coherent manner. the type system supports: • generic classes • variance annotations • upper and lower type bounds • inner classes and abstract types as object members 2 .Seamless integration with JAVA Existing Java code and programmer skills are fully re-usable. Types and behavior of objects are described by classes and traits. and supports currying. Eclipse. In particular.

The Hello World Program object HelloWorld { def main(args: Array[String]) { println("Hello. and • polymorphic methods. world!") } } 3 . • A joint use of both features facilitates the definition of new statements without extending the syntax and without using macro-like meta programming facilities. the development of domain-specific applications often requires domain-specific language extensions. Scala provides a unique combination of language mechanisms that make it easy to smoothly add new language constructs in form of libraries: • any method may be used as an infix or postfix operator. and closures are constructed automatically depending on the expected type (target typing). Scala is extensible In practice.• compound types • explicitly typed self references • views.

The language is named for Haskell Brooks Curry. In particular. An open-source product of more than twenty years of cutting-edge research. hence the lambda we use as a logo. it allows rapid development of robust. with non-strict semantics and strong static typing. was announced in Nov. a revised version was published as Haskell 98 Language and Libraries: The Revised Report. quite different from most other programming languages. portable version of the language and an accompanying standard library for teaching. named Haskell 2010. it is a polymorphically statically typed. Haskell Prime In early 2006.0) was defined in 1990. the process of defining a successor to the Haskell 98 standard. It is a standardized. The first revision. Haskell 98 In late 1997. intended to specify a stable. was begun. concise. Haskell is based on the lambda calculus. whose work in mathematical logic serves as a foundation for functional languages. Haskell is a computer programming language.0 The first version of Haskell (Haskell 1. minimal. the Haskell 98 language standard was originally published as The Haskell 98 Report. In February 1999. 4 . informally named Haskell’. In January 2003. lazy. the series culminated in Haskell 98. and as a base for future extensions. producing a new revision once per year. purely functional language. History of Haskell Haskell 1. correct software. 2009. This is an ongoing incremental process to revise the language definition. general-purpose purely functional programming language.Haskell Programming Language What is Haskell? Haskell is an advanced purely-functional programming language.

Why use Haskell? Haskell offers you: • Substantially increased programmer productivity • Shorter. higher reliability. allowing for bindings to other programming languages. NoNPlusKPatterns. • Shorter lead times. ForeignFunctionInterface. • A smaller semantic gap between the programmer and the language. EmptyDataDeclarations. and more maintainable code. It introduces the Language-Pragma-Syntax-Extension which allows for designating a haskell source as Haskell 2010 or requiring certain Extensions to the Haskell Language. LineCommentSyntax. • Fewer errors. The Hello World Program "Hello. World!" OR putStrLn "Hello World" OR main = putStrLn "Hello. LanguagePragma. RelaxedDependencyAnalysis. fixes some syntax issues (changes in the formal grammar) and bans so-called n-plus-k-patterns. HierarchicalModules. World!" 5 .Haskell 2010 Haskell 2010 adds the Foreign Function Interface (FFI) to Haskell. that is. The names of the extensions introduced in Haskell 2010 are DoAndIfThenElse. definitions of the form fak (n+1) = (n+1) * fak n are no longer allowed. PatternGuards. clearer. FixityResolution.

as they are in C-sharp and Java. but it does have a set of built-in generic types: List. named after the neighborhood where the creators live in Richmond. . It borrows it’s Syntax from Java but also adds many features and syntactic sugar created or borrowed from .NET. Like C-sharp and Java. It is familiar to a Java / . Virginia. and Func. After gaining some popularity. Typing Fantom’s type system is simple by design. 6 . Fantom takes a middle of the road approach to its type system. The language supports functional programming through closures and concurrency through the Actor model. members of the community raised concerns about the searchability of the name. Fantom rejects generic types due to their complexity. In November 2009.Erlang etc. Fantom is an exciting new language that targets the Java VM and the CLR.Groovy. Fantom uses a curly brace syntax. History of Fantom The original name of the Fantom programming language was Fan. Fantom has an easy to use reflection API and metaprogramming capabilities.NET CLR. Fantom is designed as a practical programming language to make it easy and fun to get real work done. Fantom can also take on the feel of a dynamically typed language through dynamic calls and automatic downcasting. All variables are statically typed.Fantom Programming Language What is Fantom? Fantom is a general purpose object-oriented programming language that runs on the JRE. Map.Net programmer but is much less painful to use (no boilerplate).Python. blending together aspects of both static and dynamic typing. and Javascript. the name of the project was officially changed from Fan to Fantom.

packages. and double in Java or C-sharp.pod files. They are stored as . the documentation. 7 . but with much less surface area than the APIs found in Java or . The reality is that many software organizations are committed to one or the other of these platforms. The three special types Bool. Portability Fantom is created to write software that can seamlessly run on both the Java VM and the . the unit of deployment is called a pod.NET CLR. A pod name fully qualifies a type name. If a pod contains a type named Main. Elegant APIs Quite obsessive about providing all the key features required for a standard library. and resource files necessary to run the pod. long.NET model of value types. For example. These types have all the same performance characteristics of using boolean. and modules. Object Oriented Fantom follows the . Pods take on the role of namespaces. which are zip files containing the FCode (the Fantom bytecode). Int. fwt::Widget is distinct from webapp::Widget. A pod can define any number of types for use in other libraries and applications. Unlike Java these types cleanly subclass from Obj to create a unified class hierarchy.NET.NET.Pods In Fantom. Familiar Syntax Java and C-sharp programmers will feel at home with Fantom’s evolutionary syntax. Even dynamic languages like Python and Ruby are getting hosted on one of these VMs. and Float are value types which are implemented as primitives in Java and value types in . The compiler automatically implements boxing and unboxing when necessary. then it can be executed on the command line with:fan ¡podName¿ The Fantom build system can package a set of Pods into a Jar archive through build::JarDist.

Closures are a key feature of the language. uris. ranges. Functions and closures are baked in.Funtional Programming Fantom was designed from the ground up to support functions as first class objects. maps. Fantom also includes a text serialization syntax which is human readable and writable. Declarative Programming Fantom incorporates declarative programming right into the language. Fantom supports a literal syntax for lists. Concurrency Fantom tackles concurrency using a couple techniques: • Immutability is built into the language (thread safe classes) • Static fields must be immutable (no shared mutable state) • Actors model for message passing (Erlang style concurrency) The Hello World Program class HelloWorld { static Void main() { echo("Hello. and all the APIs are written to use functions and closures where appropriate. World!") } } 8 .so you can paste a serialization file right into your source code as an expression. The serialization syntax is a clean subset of the programming language . and durations.