Hacker News new | past | comments | ask | show | jobs | submit login

I've been meaning to understand the idea of programming languages, removed from the syntactic details, and removed from the issue of converting a program to a machine executable form, and even optimizing a program.

I have a hunch that Krishnamurthi's book might be a good read in that regard (though not sure).

However I wonder what's left after you remove the issues I mentioned above. There are two cases: typed language and untyped language. In the first case you're left with Type Theory. In the second case you're left with, either a Turing Machine or a Lambda Calculus (e.g., implemented in a syntax free language like scheme). Is this the correct line of thinking? Or is there more to PLT than what I described?

To continue the thought further, in case of scheme, you have the base language on top of which you can build any PL feature or any PL paradigm you want. That means what's left is a survey/exploration of all possible PL features. Here I'm not interested in syntactic features. But in that case, what's left is really a survey/exploration of all possible PL paradigms, or programming paradigms [1]. So I guess what I'm really after is a massive study of the equivalent of all programming languages, but in a syntax-free way, i.e., in scheme syntax! (And I'm looking for a book that can provide that).

[1] https://en.wikipedia.org/wiki/Programming_paradigm




* However I wonder what's left after you remove the issues I mentioned above. There are two cases: typed language and untyped language. In the first case you're left with Type Theory. In the second case you're left with, either a Turing Machine or a Lambda Calculus (e.g., implemented in a syntax free language like scheme). Is this the correct line of thinking? Or is there more to PLT than what I described?*

Well, there's still what you describe in the rest of your post. Even something minimalist like Scheme has a load of features above and beyond plain lambda calculus: dynamic parameters, continuations, dynamic-wind, mutable variables, boxes, exceptions, the whole macro system, and so on. Not every programming language feature that can exist has already been invented. We also don't fully understand the implications of every language feature that has already been invented -- there's plenty of work to do in designing type systems that can cope with more language features. You're not going to find one book that covers every feature people have come up with, but PLAI at least gives a fairly broad guided tour. I would add a book on semantics (probably Winskel, maybe Gunter) to develop a mental toolkit for carefully defining and reasoning about new language features.


I guess you have a point. Thanks for your comment (and recommendations).


Have you looked at Concepts, Techniques, and Models of Computer Programming? - https://en.m.wikipedia.org/wiki/Concepts,_Techniques,_and_Mo...


Thanks. I haven't but I'll give it a try.


Agree with the recommendation of "Concepts, Techniques, and Models of Computer Programming". You can also have a look at "Essentials of Programming Languages"(http://www.eopl3.com/).


Thanks. I should take a look at those two books.


I think you'd really enjoy Practical Foundations for Programming Languages (it's one of the first books suggested in the original article). It approaches language design like you say: start with the essence of the feature, don't worry about the syntax. It analyzes each feature thoroughly so you really understand exactly what the essence of that feature is.


Thanks. Looks like the kind of books I'm looking for.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: