Introduction Dylan Going Further
Dylan
Hannes Mehnert [email protected]
December 16, 2004
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Introduction Overview Hello World History
Dylan Libraries and Modules Classes Generic Functions Types Sealing
Going Further
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
Overview
I DYnamic LANguage
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
Overview
I DYnamic LANguage I Object Oriented: everything is an object
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
Overview
I DYnamic LANguage I Object Oriented: everything is an object I Safe: type-checking of arguments and values, no buffer overruns, no implicit casting, no raw pointers
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
Overview
I DYnamic LANguage I Object Oriented: everything is an object I Safe: type-checking of arguments and values, no buffer overruns, no implicit casting, no raw pointers I Efficient: can compile to code nearly as efficient as C
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
Hello world
define method hello-world () format-out(‘‘Hello world\n’’); end method;
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History factorial
define method factorial ( i ) if (i = 0) 1 else i * factorial( i - 1) end if end method;
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
History
I Created by Apple Computer in the early 1990’s
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
History
I Created by Apple Computer in the early 1990’s I sold as Technology Release by Apple in 1995
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
History
I Created by Apple Computer in the early 1990’s I sold as Technology Release by Apple in 1995 I CMU created Gwydion Dylan 1994 which is open source and maintained by Gwydion Dylan Maintainers (from USA, Germay, Japan, New Zealand, Hawaii,...)
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
History
I Created by Apple Computer in the early 1990’s I sold as Technology Release by Apple in 1995 I CMU created Gwydion Dylan 1994 which is open source and maintained by Gwydion Dylan Maintainers (from USA, Germay, Japan, New Zealand, Hawaii,...) I Harlequin developed Harlequin Dylan, now called Functional Developer, owned by Functional Objects, since 9 months open source (also maintained by Geydion Dylan Maintainers)
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
Dylan roots
I Dylan was developed with object-orientated ideas from Lisp and smalltalk
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
Dylan roots
I Dylan was developed with object-orientated ideas from Lisp and smalltalk I But Syntax looks more like Pascal
Hannes Mehnert [email protected] Dylan Introduction Overview Dylan Hello World Going Further History
Dylan roots
I Dylan was developed with object-orientated ideas from Lisp and smalltalk I But Syntax looks more like Pascal I Unlike C and C++, Dylan uses no malloc() and free(), it has a garbage collector; no double-free bugs
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Libraries
I Each Dylan program consist of one ore more Libraries
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Libraries
I Each Dylan program consist of one ore more Libraries I Libraries are the unit of compilation and boundaries of optimizations
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Libraries
I Each Dylan program consist of one ore more Libraries I Libraries are the unit of compilation and boundaries of optimizations I Libraries contain modules
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Library hello
define library hello use common-dylan; use io; export hello-world; end library;
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Modules
I Modules are namespaces
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Modules
I Modules are namespaces I Binding names are defined in a module
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Modules
I Modules are namespaces I Binding names are defined in a module I Modules import names from other modules, and export names of bindings defined within
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Modules
I Modules are namespaces I Binding names are defined in a module I Modules import names from other modules, and export names of bindings defined within I Bindings that aren’t exported are only visible in the module
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Module hello-world
define module hello-world use common-dylan; use format-out; export hello-world; end module;
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Importing, Exporting and Renaming
use common-dylan, import: all; use streams, import: {
use png-utils, export: { decode-png };
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Interfaces
I Many Dylan libraries only contain one module
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Interfaces
I Many Dylan libraries only contain one module I Libraries may define several export modules that represent different “interfaces” on the same functionality, similar to c++’s public:, private:, and protected:
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Library plug-in
define library plug-in use dylan; export plug-in, plug-in-implementor; end library;
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Module plug-in
define module plug-in use dylan;
create
create plug-in-name; end module;
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Module plug-in-implementor
define module plug-in-implementor use dylan;
create
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Classes
I Classes define a type in the class hierarchy, and storage for object state, called ”slots”
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Classes
I Classes define a type in the class hierarchy, and storage for object state, called ”slots” I Every instance object has a class
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Classes
I Classes define a type in the class hierarchy, and storage for object state, called ”slots” I Every instance object has a class I Classes have no member functions
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Classes
I Classes define a type in the class hierarchy, and storage for object state, called ”slots” I Every instance object has a class I Classes have no member functions I Classes are not namespaces (modules are)
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Classes
I Classes are types. There are also types that are not classes.
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Classes
I Classes are types. There are also types that are not classes. I There is a root class ”¡object¿”. It is the root of the class and type hierarchy.
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Classes
I Classes are types. There are also types that are not classes. I There is a root class ”¡object¿”. It is the root of the class and type hierarchy. I Classes are objects; you can pass them around, test properties, etc.
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Classes
I Classes are types. There are also types that are not classes. I There is a root class ”¡object¿”. It is the root of the class and type hierarchy. I Classes are objects; you can pass them around, test properties, etc. I Dynamic: You can create classes and subclasses at runtime
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Class
define class
let point = make(
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Init Expressions
define class
let point = make(
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Init Keywords
define class
let point = make(
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Slot Inheritance
define class
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Slot Types
define class
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Slot Allocation
I instance slot x; I class slot instance-count = 0; I each-subclass slot quux; I virtual slot bar;
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Class Adjectives
I define concrete class I define abstract class
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Class Adjectives
I define concrete class I define abstract class
I define sealed class I define open class
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Class Adjectives
I define concrete class I define abstract class
I define sealed class I define open class
I define free class I define primary class
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Generic Functions
I Generic Functions are polymorphic functions
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Generic Functions
I Generic Functions are polymorphic functions I The basis of polymorphism and implementation inheritance in Dylan
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Generic Functions
I Generic Functions are polymorphic functions I The basis of polymorphism and implementation inheritance in Dylan I Contain one or more methods that provide an implementation for specific classes and types
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Generic Functions
I Generic Functions are polymorphic functions I The basis of polymorphism and implementation inheritance in Dylan I Contain one or more methods that provide an implementation for specific classes and types I Dynamic: Methods can be added/removed at runtime
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Generic Functions
I Generic Functions are polymorphic functions I The basis of polymorphism and implementation inheritance in Dylan I Contain one or more methods that provide an implementation for specific classes and types I Dynamic: Methods can be added/removed at runtime I Are not ”owned” by classes
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Generic Function Dispatch
I When you call a generic function it dispatches the call to a specific method
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Generic Function Dispatch
I When you call a generic function it dispatches the call to a specific method I The most-specific method for the argument types will be called
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Generic Function Dispatch
I When you call a generic function it dispatches the call to a specific method I The most-specific method for the argument types will be called I Multiple Dispatch: The types of all the required arguments are used for method dispatching; there is no distinguished ”self” or ”this” argument
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing double()
define generic double (o);
define method double (o ::
define method double (n ::
define method double (s ::
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing capture?()
define method capture? (a ::
define method capture? (a ::
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing capture?()
define method capture? (a ::
define method capture? (a ::
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Object-oriented Programming
I Modules: Interfaces, Access Control, Namespaces I Generic Functions: Polymorphism, Behaviors, Algorithms I Classes: Inheritance, Types, Attributes
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Types
I A type is a set of one or more values
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Types
I A type is a set of one or more values I Classes are types
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Types
I A type is a set of one or more values I Classes are types I There is a root class ”
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Types
I A type is a set of one or more values I Classes are types I There is a root class ”
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Types
I A type is a set of one or more values I Classes are types I There is a root class ”
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Singletons
I A singleton is a type with only one value; it is used to indicate a single object
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Singletons
I A singleton is a type with only one value; it is used to indicate a single object I Singleton types can be created with the singleton() function
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Singletons
I A singleton is a type with only one value; it is used to indicate a single object I Singleton types can be created with the singleton() function I It is not the singleton pattern, where instantiating a singleton class always returns the one object
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing singleton()
define constant
instance?( 42,
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing ==
define method fact (n == 0) 1 end method;
define method fact (n ::
fact(0); // calls the first method 1 fact(3); // calls the second method 6
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Union Types
I A union type is a type whose values include all the values of two or more other types
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Union Types
I A union type is a type whose values include all the values of two or more other types I Union types can be created with the type-union() function
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Union Types
I A union type is a type whose values include all the values of two or more other types I Union types can be created with the type-union() function I Particularly useful for allowing values of disparate types without subclassing, e.g., ”an rgb color, or a color table index, or a crayon color name string”
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing type-union()
define constant
define variable *speed* ::
*speed* := 93; *speed* := #"fast"; *speed* := #"medium"; *speed* := #t; {
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing false-or()
define method false-or (type ::
let x :: false-or(
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Limited Types
I A limited type is a type whose values are restricted to some subset of another type
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Limited Types
I A limited type is a type whose values are restricted to some subset of another type I Limited types can be created with the limited() function
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Limited Types
I A limited type is a type whose values are restricted to some subset of another type I Limited types can be created with the limited() function I Limited integers can be used to represent subranges of integers
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Limited Types
I A limited type is a type whose values are restricted to some subset of another type I Limited types can be created with the limited() function I Limited integers can be used to represent subranges of integers I Limited collections can be restricted in the types of objects they can contain, and they can be length limited
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing limited(
define constant
let rating ::
if (has-car-chases?( movie )) rating := rating + 1; end if; {
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Sealing
I Places limits on dynamism, both at runtime and compile time
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Sealing
I Places limits on dynamism, both at runtime and compile time I Reduces or eliminates runtime dispatch, type-checking, and other overhead
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Sealing
I Places limits on dynamism, both at runtime and compile time I Reduces or eliminates runtime dispatch, type-checking, and other overhead I You can seal domains, generic functions, methods, classes, and slots
Hannes Mehnert [email protected] Dylan Libraries and Modules Introduction Classes Dylan Generic Functions Going Further Types Sealing Sealing
I Places limits on dynamism, both at runtime and compile time I Reduces or eliminates runtime dispatch, type-checking, and other overhead I You can seal domains, generic functions, methods, classes, and slots I Libraries are the boundaries of sealing
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Element Reference - Function call
I sequence[i] – element( sequence, i )
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Element Reference - Function call
I sequence[i] – element( sequence, i ) I array[i, j, ...] – aref( array, i, j, ... )
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Element Reference - Function call
I sequence[i] – element( sequence, i ) I array[i, j, ...] – aref( array, i, j, ... ) I all-windows[0] – element( all-windows, 0 )
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Element Reference - Function call
I sequence[i] – element( sequence, i ) I array[i, j, ...] – aref( array, i, j, ... ) I all-windows[0] – element( all-windows, 0 ) I tic-tac-toe[1, 2] – aref( tic-tac-toe, 1, 2 )
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Slot Reference – Function call
I argument.function – function(argument)
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Slot Reference – Function call
I argument.function – function(argument) I window.position – position(window)
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Slot Reference – Function call
I argument.function – function(argument) I window.position – position(window) I window.view.origin – origin( view( window ) )
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Slot Reference – Function call
I argument.function – function(argument) I window.position – position(window) I window.view.origin – origin( view( window ) ) I view( window ).origin – origin( view( window ) )
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Multiple Values
I Functions can return multiple values, just like they can accept multiple arguments
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Multiple Values
I Functions can return multiple values, just like they can accept multiple arguments I Eliminates the need for ”output” parameters
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Multiple Values
I Functions can return multiple values, just like they can accept multiple arguments I Eliminates the need for ”output” parameters I There is no ”wrapper” object for the values; for example, on PowerPC, function arguments are stored in r3, r4, r5, etc. Multiple values could be returned in r3, r4, r5, etc.
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further values()
values( 1, 2, 3 ); 1 2 3
define method square-and-sum (x, y) values( x ^ 2, x + y ) end method;
square-and-sum( 2, 3 ) 4 5
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further if
if (camel.humps = 1) "dromedary" elseif (camel.humps = 2) "bactrian" else "not a camel" end if;
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further unless
unless (danger?( will-robinson )) follow( dr-smith ) end unless;
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further case
case camel.humps = 1 => "dromedary"; camel.humps = 2 => "bactrian"; otherwise => "not a camel"; end case;
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further select (by)
select (my-object by instance?)
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further for
for (tree in forest) look-at( tree ) end for;
for (i from 1 to 10) ...
for (j from 0 below 10, k from 10 above 0 by -1) ...
for (thing = first-thing then next(thing), until: done?(thing)) ...
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further block
block (return) open-files(); if (files-empty?()) return( #f ); end; process-files(); afterwards report-totals(); cleanup close-files(); end block;
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further let
let x = 0;
let sym ::
let (whole, rem) = truncate( amount );
let (whole ::
let (x, #rest rest) = values(1, 2, 3); x 1 rest #(2, 3)
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further local
local method square (x) x*x end method;
let y = square( 12 ); 144
local method back () forth() end, method forth () back() end;
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further more thinks to talk about
I Collections
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further more thinks to talk about
I Collections I Macros
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further more thinks to talk about
I Collections I Macros I C-Interface
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Naming Conventions
I Names: multiple-words
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Naming Conventions
I Names: multiple-words I Types:
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Naming Conventions
I Names: multiple-words I Types:
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Naming Conventions
I Names: multiple-words I Types:
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Naming Conventions
I Names: multiple-words I Types:
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Naming Conventions
I Names: multiple-words I Types:
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Implementations
I Gwydion Dylan: d2c compiles dylan to c, works on nearly every platfrom (Linux, FreeBSD, MacOSX,...) I Lacks support for threads
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Implementations
I Gwydion Dylan: d2c compiles dylan to c, works on nearly every platfrom (Linux, FreeBSD, MacOSX,...) I Lacks support for threads I Functional Developer: compiles to assembler, works only on Windows and x86 Linux I Nice IDE for Windows
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
Implementations
I Gwydion Dylan: d2c compiles dylan to c, works on nearly every platfrom (Linux, FreeBSD, MacOSX,...) I Lacks support for threads I Functional Developer: compiles to assembler, works only on Windows and x86 Linux I Nice IDE for Windows I Apple Dylan: only released as Technology Preview
Hannes Mehnert [email protected] Dylan Introduction Dylan Going Further
More information
I WWW: http://www.gwydiondylan.org I IRC: freenode, #dylan I Mail: [email protected]
Hannes Mehnert [email protected] Dylan