Calling HLists “collections” is misleading. In spite of their name, HLists are actually record types. The only actual list involved is a compile-time list of component types used to form a record type. To give a perhaps…
In general, Haskell does not do parametric polymorphism through monomorphization. In particular, higher-rank polymorphism becomes unusable if polymorphism is implemented through monomorphization. On the other hand, if I…
Two words: loop invariant. Implement a system that figures out the right loop invariant given a problem description (expressed however you want), and you will have made a lot of progress.
That's actually Brian Kernighan. Dijkstra would have never advocated debugging to begin with.
Oops, sorry, yes.
Optionals are a better alternative to null. They compose better (i.e., they nest) and play nicely with data abstraction (i.e., you can define an abstract type that hides the fact that its underlying representation is…
Typed Racket is more ambitious than other attempts at adding types to an underlying untyped language. Namely, Typed Racket guarantees that typed code is never to blame for certain contract violations, and, if any such…
> It doesn't try to analyze and compare existing programming languages. It does. For example, this theory identifies when and how incorrectly designed programming languages fail to enforce abstractions, very much like…
I don't understand in what sense programs can be called “differentiable”. Is the space of programs modulo observational equivalence a manifold to begin with? (I don't think it's Hausdorff or even T1, but I could be…
> Safety > Variables are immutable by default, globals are not allowed, functions are pure. This is a huge non-sequitur.
You are badly conflating some issues here. How to implement automatic memory management is a runtime design issue. How to enforce proper non-memory resource management is a language design issue. Nothing forbids an…
> The problem is, functional programming languages are almost always harder to read than other languages. Haskell is the obvious example There are many legitimate reasons to dislike Haskell, such as being hard to parse…
Voilà.
> 4. Viola! Send them to your friends or trade them The musical instrument?
I don't see anything wrong with rose trees: datatype 'a tree = T of 'a * 'a tree list Do you?
Not too long was it figured out how to reconcile subtyping with type inference. However, this requires doing subtyping in a very specific way, which most users of languages with subtyping will not find pleasing. In…
Lately, I am of the idea that the real problem with how we do concurrency is that we have yet to figure out a way to do it without first-class procedures. When we spawn a thread, even in a low language such as C, we use…
> Java's semantics are pass-by-value only of you consider that the "values" that are being passed are pointers. All values in Java are indeed either primitives or pointers. You cannot define your own values! How is…
Java is pass-by-value, indeed. Too bad Java's values aren't the values you want.
> Your definitions of Ring and PolynomialRing are incomplete because neither specifies the appropriate set of axioms. Because you do not specify those axioms, your type signature is underspecified. Indeed. Types are not…
It is not clear to me how you could enforce invariants that relate multiple database states. Allow me to give a silly toy example. Suppose you have to design a system where (0) Every bank account must admit a linear…
> However, I am considering an even more general scheme, where it is possible to define what is meant by addition, multiplication, etc., for new datatypes unimagined by the language designer So, um, like this? signature…
> intricate and expressive type system that Scala gives you Most of the complexity of Scala's type system comes from a desire to be compatible with Java, rather than to actually make it more expressive. For example,…
Dart merely has optional typing, not gradual typing.
> And, in fact, it has a name - gradual typing. Is there a guarantee that runtime type errors in Julia can be precisely traced back to an offending piece of untyped code? This is part of the definition of what gradual…
Calling HLists “collections” is misleading. In spite of their name, HLists are actually record types. The only actual list involved is a compile-time list of component types used to form a record type. To give a perhaps…
In general, Haskell does not do parametric polymorphism through monomorphization. In particular, higher-rank polymorphism becomes unusable if polymorphism is implemented through monomorphization. On the other hand, if I…
Two words: loop invariant. Implement a system that figures out the right loop invariant given a problem description (expressed however you want), and you will have made a lot of progress.
That's actually Brian Kernighan. Dijkstra would have never advocated debugging to begin with.
Oops, sorry, yes.
Optionals are a better alternative to null. They compose better (i.e., they nest) and play nicely with data abstraction (i.e., you can define an abstract type that hides the fact that its underlying representation is…
Typed Racket is more ambitious than other attempts at adding types to an underlying untyped language. Namely, Typed Racket guarantees that typed code is never to blame for certain contract violations, and, if any such…
> It doesn't try to analyze and compare existing programming languages. It does. For example, this theory identifies when and how incorrectly designed programming languages fail to enforce abstractions, very much like…
I don't understand in what sense programs can be called “differentiable”. Is the space of programs modulo observational equivalence a manifold to begin with? (I don't think it's Hausdorff or even T1, but I could be…
> Safety > Variables are immutable by default, globals are not allowed, functions are pure. This is a huge non-sequitur.
You are badly conflating some issues here. How to implement automatic memory management is a runtime design issue. How to enforce proper non-memory resource management is a language design issue. Nothing forbids an…
> The problem is, functional programming languages are almost always harder to read than other languages. Haskell is the obvious example There are many legitimate reasons to dislike Haskell, such as being hard to parse…
Voilà.
> 4. Viola! Send them to your friends or trade them The musical instrument?
I don't see anything wrong with rose trees: datatype 'a tree = T of 'a * 'a tree list Do you?
Not too long was it figured out how to reconcile subtyping with type inference. However, this requires doing subtyping in a very specific way, which most users of languages with subtyping will not find pleasing. In…
Lately, I am of the idea that the real problem with how we do concurrency is that we have yet to figure out a way to do it without first-class procedures. When we spawn a thread, even in a low language such as C, we use…
> Java's semantics are pass-by-value only of you consider that the "values" that are being passed are pointers. All values in Java are indeed either primitives or pointers. You cannot define your own values! How is…
Java is pass-by-value, indeed. Too bad Java's values aren't the values you want.
> Your definitions of Ring and PolynomialRing are incomplete because neither specifies the appropriate set of axioms. Because you do not specify those axioms, your type signature is underspecified. Indeed. Types are not…
It is not clear to me how you could enforce invariants that relate multiple database states. Allow me to give a silly toy example. Suppose you have to design a system where (0) Every bank account must admit a linear…
> However, I am considering an even more general scheme, where it is possible to define what is meant by addition, multiplication, etc., for new datatypes unimagined by the language designer So, um, like this? signature…
> intricate and expressive type system that Scala gives you Most of the complexity of Scala's type system comes from a desire to be compatible with Java, rather than to actually make it more expressive. For example,…
Dart merely has optional typing, not gradual typing.
> And, in fact, it has a name - gradual typing. Is there a guarantee that runtime type errors in Julia can be precisely traced back to an offending piece of untyped code? This is part of the definition of what gradual…