ARGON
Check-in [c1d292a038]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Fixed wiki markup links
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: c1d292a0381c892c4a112b79350e006a81b81783
User & Date: alaric 2017-07-11 21:01:58
Context
2017-07-26
19:05
Fexprs in kernel paper check-in: 3bc06e06ae user: alaric tags: trunk
2017-07-11
21:01
Fixed wiki markup links check-in: c1d292a038 user: alaric tags: trunk
20:59
Updated CHROME, with thoughts from reading Design Concepts in Programming Languages and reading about Idris. check-in: 971887d31c user: alaric tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to intro/chrome.wiki.

42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

Laziness can come with a performance cost, but the Haskell folks have
done lots of good work on strictness analysis. In exchange, you can
write conditional constructs without needing macros, streams, infinite
data structures, some performance <em>gains</em>, and easier semantics
for recursive expressions.

Uniqueness typing has [many many
advantages](http://home.pipeline.com/~hbaker1/Use1Var.html), so we'll
use that instead of nasty monads. But we can do monads too, when
they're useful.

Haskell-style typeclasses and generic functions are used to provide
polymorphism, rather than class- or prototype-based object
orientation.








|
|







42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

Laziness can come with a performance cost, but the Haskell folks have
done lots of good work on strictness analysis. In exchange, you can
write conditional constructs without needing macros, streams, infinite
data structures, some performance <em>gains</em>, and easier semantics
for recursive expressions.

Uniqueness typing has <a href="http://home.pipeline.com/~hbaker1/Use1Var.html">many many
advantages</a>, so we'll
use that instead of nasty monads. But we can do monads too, when
they're useful.

Haskell-style typeclasses and generic functions are used to provide
polymorphism, rather than class- or prototype-based object
orientation.

122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
us an "Any" type we can use in those cases.

Dependant types are awesome, too. Let's have those while we're at
it. We're now wel into "Type system is Turing complete" territory, so
we'd better have function totality as part of the type system to keep
our type expressions halting.

[Idris](https://www.idris-lang.org/) does a pretty epic job of making
such a type system work in practice, but I do find the Haskelly syntax
for types a bit obtuse at times; it's too pattern-matchy for me. The
way constraints are written in "design by contract" languages (eg,
Eiffel) are much more readable, to my eyes at least - and as far as I
can see, identical in expressiveness. Design by Contract and dependent
types are much the same idea, just expressed in different ways, so
let's bring them together; we can statically check the constraints







|







122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
us an "Any" type we can use in those cases.

Dependant types are awesome, too. Let's have those while we're at
it. We're now wel into "Type system is Turing complete" territory, so
we'd better have function totality as part of the type system to keep
our type expressions halting.

<a href="https://www.idris-lang.org/">Idris</a> does a pretty epic job of making
such a type system work in practice, but I do find the Haskelly syntax
for types a bit obtuse at times; it's too pattern-matchy for me. The
way constraints are written in "design by contract" languages (eg,
Eiffel) are much more readable, to my eyes at least - and as far as I
can see, identical in expressiveness. Design by Contract and dependent
types are much the same idea, just expressed in different ways, so
let's bring them together; we can statically check the constraints