Hello,

Joining the group just to respond to this...

On Tuesday, February 11, 2014 10:20:38 AM UTC+7, Stefan Karpinski wrote:
>
> We were never directly influenced by Dylan. As far as I know, neither Jeff 
> nor Viral nor I have done any Dylan programming. Any linguistic 
> similarities are due to common influences (e.g. Lisp, Pascal, Algol), 
> convergent design, or coincidence. I'm not sure what the reasons were for 
> Dylan choosing multiple dispatch, but for us it was a necessity to be able 
> to cleanly express the polymorphic behaviors that are rampant in numeric 
> programming. As the wikipedia page details, Dylan doesn't have parametric 
> types, which means, among other things, that you can't have a generic array 
> type that allows arrays that can only contains values of a particular 
> element type. In particular, that means that you can't store such an array 
> in C/Fortran-compatible form, which is a non-starter for numerical work 
> since that's the layout that all the numerical libraries expect. Not being 
> able to call BLAS is a show-stopper for technical computing. There are many 
> other benefits from both multiple dispatch and parametric types, and Julia 
> is unique in having the combination of (1) a dynamic type system, (2) 
> generic functions by default, and (3) parametric types that you can 
> dispatch on.
>

Dylan chose multiple dispatch as it was a descendent of Common Lisp and 
CLOS (and shared some of the same language designers). Dylan took things 
further by making the object system a core part of the language rather than 
bolted on as CLOS was with Common Lisp.

As for parametric dispatch, Dylan lacks full support for parametric 
dispatch, but your statements about not having a generic array type and the 
conclusions that follow from that are unfounded.

Dylan supported limited types as described in our language specification:

    http://opendylan.org/books/drm/Limited_Types

The limited collection types are what are applicable here:

    http://opendylan.org/books/drm/Limited_Collection_Types

These fully support laying out data in memory efficiently.  When using a 
size limit, the compiler can also optimize away some array bounds checks 
(when the right information is present).  The capabilities of limited 
collections are used pretty extensively.  (We also use them for passing 
data to OpenGL.)

Julia may or may not be unique in the way that you described. I don't know 
enough about Julia to venture a statement regarding that.  Dylan certainly 
has supported much of what you described (although with limited rather than 
full parametric types) for the last many years.

There was also a thesis written which had an implementation of a parametric 
type system extension to Dylan and it can be found linked from our 
publications page:

    Extending Dylan’s type system for better type inference and error 
detection
    http://opendylan.org/documentation/#publications
    https://dl.acm.org/citation.cfm?id=1869643.1869645

This was presented at ILC 2010.

You might also find this master's thesis by James Knight on the addition of 
parameterized types to Goo from 2002 interesting:

    http://people.csail.mit.edu/jrb/goo/james-thesis.pdf

The fact that Julia is jitted is technically an implementation detail – 
> there's nothing that prevents Dylan and other languages from doing the same 
> thing (JavaScript and Lua both have excellent, fast production-quality jit 
> implementations that were built long after the languages were created). 
> That said, Julia's implementation has been jitted from the start, so its 
> design is particularly amenable to jit compilation and efficient execution 
> in general. I also personally find Dylan's syntax to be unfortunately 
> verbose, and feel that some of the object-oriented aspects of the language 
> are overly "featurey". It's kind of a shame, imo, that Dylan didn't stick 
> with its original S-expression syntax and adopt less of the object-oriented 
> thinking of the time.
>

Two things here ...

The Windows version of Open Dylan can compile and update code in a running 
executable. This feature isn't yet available on other platforms for a 
variety of reasons, but there's nothing about the design of things that 
prohibits it.  This really doesn't matter though. These are implementation 
details as you said.

The "original" S-expression syntax was just as object-oriented (and in the 
same CLOS-like way) as modern Dylan is. The change in the syntax had 
nothing whatsoever to do with how OO or not Dylan is. (And many would argue 
that CLOS-like OO has little to do with the type of OO thinking that 
flourished in the 1990s.)

Cheers,

 - Bruce

Reply via email to