Hacker News new | past | comments | ask | show | jobs | submit login
Anders Hejlsberg on Modern Compiler Construction (2016) [video] (youtube.com)
213 points by PredictorY on June 10, 2018 | hide | past | favorite | 44 comments



Original author of Turbo Pascal, chief architect of Delphi, lead architect of C#, creator of TypeScript. Does anyone else in language design have as many accolades as this or designed languages on which trillions of dollars of commerce depend?


Martin Odersky, created Turbo Modula-2 for Borland, member of the Pizza language whose design lead to Java generics implementation, designer of the Scala language.

Erik Meyer, member of GHC design team and Haskell community, responsible for LINQ design bringing FP to the masses, reactive extensions in .NET which lead to the RX model adopted by Netflix, nowadays contributing back to Haskell at FB (if I am not mistaken).

Niklaus Wirth, creator of Pascal, Modula-2, Oberon, Oberon-2, Oberon-07. Helped Apple design Object Pascal for Mac OS and Lisa. Contributed feedback to Active Oberon and Component Pascal. Built single language workstations using the Modula and Oberon family of languages.


In other words,no.


Meijer also worked on Hack, Dart and others.


Guy Steele comes to mind. He hasn't been as successful with the languages he co-created (most importantly scheme and to a lesser extent Common Lisp; Fortress was stillborn) but he's also been involved with the Javascript, C, Fortran (as a standards committee member) and Java (as a specification author). And he's been tremendously influential as a profound thinker on language design; I'm not sure anyone else understand so much about so many different languages and from quite different perspectives.

Hejlsberg probably is completely in a class of his own as a designer and architect/implementor of innovative spins on existing languages though.


>Hejlsberg probably is completely in a class of his own as a designer and architect/implementor of innovative spins on existing languages though.

Arhictect/implementor of IDE's (TurboPascal, Delphi, VS - all immensely influential).

If you haven't had the joy of programming in Delphi, you'll feel at home if you ever used VS/C#.. in Delphi 2.0 of the mid-90's.


> or designed languages on which trillions of dollars of commerce depend

Brendan Eich probably scores even higher on that scale.

https://en.wikipedia.org/wiki/Brendan_Eich


Stirred lots of controversy for having lopsided equality tables (ambiguity intended)


true == 1 === true

What's ambiguous about that? :-P


Of course this would not work.

typeof(true) is of type 'Boolean' and typeof(1) is of type 'number'.

Do they compare to the same type? Nope, therefore is false in both cases.

Try the following:

    let foo = true;
    true === foo === true; // returns true.


er - no. Assuming you are not trolling (benefit of the doubt and all that):

You might mean it shouldn't work? but alas it does (because of 'lopsided equality tables'). Try the following: open the console of your browser, type the following:

true == 1 === true

and press enter - tada! You can also check out this SO answer if you are sufficiently flabbergasted: https://stackoverflow.com/a/12236341


I'm not sure how what you linked is related, but the only "surprising" thing here is probably `true == 1`. This evaluates to true, and because comparisons are left-associative, we have `(true == 1) === true` which reduces to `true === true`, which, unsurprisingly, is true.


Agree. It was my point. `true 0== 1` resolves to true, but shouldn't so `true == 1 === true` should be false but is true, which could at the very least be called ambiguous to people not familiar with the language. It may reflect somewhat badly on Brendan since they felt compelled to introduce === to rectify this. Personally I think it made the language richer, with more options to chose from depending on circumstance, and it was more like an adaption to the new uses for js.


It's fascinating to me that he never graduated with a bachelor's degree, let alone a research degree. Even more impressive.


Lars Bak has quite a track record with runtimes as well as languages.

https://en.wikipedia.org/wiki/Lars_Bak_(computer_programmer)


I don't think anyone can beat Dennis Ritchie on the "designed languages on which trillions of dollars of commerce depend" metric, especially when we consider the many languages which are themselves implemented in C.


He was helped by AT&T giving away UNIX source code for a symbolic price to universities, which had to pay thousands for other commercial systems.

https://arstechnica.com/tech-policy/2011/07/should-we-thank-...


That would be joint credit with core innovation going to Martin Richards: the inventor of BCPL that B and C were based on. His team went from big, safe languages to a tiny, efficient one close to the machine with philosophy that programmer was in control. Ken Thompson picked it up from him on MULTICS project.

https://en.m.wikipedia.org/wiki/Martin_Richards_(computer_sc...


Barbara Liskov, who won the 2008 Turing Award for her work in the design of programming languages and software methodology that led to the development of object-oriented programming. Her work at MIT on the CLU programming language influenced many modern languages, interfaces, exception handling, abstraction mechanisms, etc. She was my undergraduate thesis advisor in 1974.


There's so much that's great about C#, and that results from really smart, pragmatic, forward-looking language design, that I find it surprising how many aspects of C# development are hampered by really bad design.

Specifically, the backwards compatibility story of the standard library is a mess (all the different .NET Framework versions, or wait, do I mean .NET Standard, or WinRT, or...?) and the package manager (NuGet) is not very impressive.

I figure that the good stuff (the core language design and CLR) comes from Hejlsberg and his team, while the clunky stuff comes from the wider Windows teams at Microsoft.

Are there many people using C# for things other than Windows apps and cross-platform games? I get the impression that Java is still much bigger for cloud infrastructure, finance etc, but maybe I'm wrong.


Yeah, I think the switch to .NET Core has been much more painful than it should have been in hindsight. It is vastly improving though and seems like a good choice for new projects.

C# is still massive for web/cloud development, including in finance.


Every time I hear someone say that C# is a well designed language I think of the story of how they had to hack the compiler to get async/await to work, and how F# implemented the same feature as a library. I guess there are different levels of "well designed".


I don't know about the compiler internals, but from the perspective of a C# user, async/await is really excellent. It's easy to use and the resulting code is easy to read and understand. Much simpler than chained futures, Go-style channels, etc. It's good language design in that sense (the implementation may or may not be good).


Can anyone clarify who _invented_ async/await? I thought it was Anders and his group ... perhaps not?


You are definitely right with the library shism (Silverlight to blame). But, on the other hand, it also shows how adaptive this environment is. And not only the language but also the base class library, which independent of actual Factorings (like Silverlight, WinRT, Framework, Mono whatever) allowed a familiar environment to program in.

Java had also its moments (mobile Java, ee java, Android/Google Java, or Microsoft J++ (which btw. Was also Anders doing). About Python I just say 2/3 and let us not start with JavaScript. Languages and class libraries evolve and adapt. Not always to the better but they do and should.


Hmm, I don't think Java has had it nearly as bad historically (possibly apart from the old mobile Java profiles, which I agree were quite painful). Any code using the core classes (math, collections, basic I/O) would always work fine on any JVM, including Android. Porting pure Java code to Android has always been very easy, as it should be.

Whereas I've found with C# that even perfectly innocuous-looking functions would be mysteriously unavailable in Silverlight, say. It has been very hard to pick a C# library subset that's both portable and useful, and Microsoft seem to have taken an awfully long time to sort that out.


I ported huge amounts of code to .NET Core and it was effortless. It always depends which API your code uses. I think that is similar to your Java experience.

The Core API factoring was focused to remove deprecated API. When not using "deprecated" framework API, the porting is pretty easy.


There are many people doing all kind of C# stuff. The Exodus which started with node.js is long over and - from my perspective - C# is used all over in any domain and area.


There is a pretty promising answer to the current package management problems called OneGet:https://github.com/OneGet/oneget

Unfortunately it looks like the original creator/designer was moved off the project and it seems like it has suffered from some internal political issues. Development is happening on it but it looks pretty slow.


There is also Paket which is used by the F# community : https://fsprojects.github.io/Paket/


OneGet is for Windows package manager. Not .net



I must admit I fantasize that this great mind will one day return to his Turbo Pascal roots and “rescue” the Delphi project! (More wishful thinking than imagining DT admitting climate change, I know.)


I'd love a 'Delphi for the web' created by this guy. Maybe something that uses TypeScript?


I really, really want a Turbo Pascal 5.5 with objects for linux.


FreePascal is about that.

TP 5.5 with objects was a really clunky object system though (designed by Apple, IIRC). Object slicing by default. Vtable pointer added on definition of first virtual method in object hierarchy, like C++. And to invoke a constructor on a new heap-allocated object, you had to pass it as an argument to New(), with this weird syntax - "New(myObjPtr, Init(...))". Delphi's object system was far superior.

See some examples: http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Web...


The strategic, non language focused thinking here is amazing. Tooling is a very important topic for modern compilers. The modern language servers and supreme support for Typescript and C# in any editor is a core result of this work.

However, it could only achieved because MS financed a redo of the compiler. Instead of keeping the original.


Not 100% related, but in 2004-2006 I was an entrepreneur in Italy, AND a full professor at a local university, teaching "Compilers and Programming Languages Lab" to students only a few years younger than me.

For some reason, the budget for a full professorship (not permanent, but only 1-year long) was meager, I think it was ~1,600 Euros for the whole year. As a consequence, the usual corrupted nominations didn't happen for this one, and I ended up being selected among one or two other candidates with a similar curriculum as mine (which, to be honest, wasn't particularly strong on Compilers stuff).

When I found out I was assigned that professorship, few weeks before the start of the course, I spent time preparing the material and studying a lot more, as I felt my preparation needed some beefing up.

The text book, the (in) famous Dragon book, was available only at 150 Euros, more than 4 times the average cost of a textbook back then, and it contained way too much information for that course. I then decided to create content specific for that course, and to release it with a creative commons license.

It was the first time in that University (year 2004) that a professor released content under Creative Commons, and that content was available online, and that it was free.

I might not have been the best professor on the planet, but I felt really proud of that. The beauty of internet is that, 14 or so years later, you can still find that content somewhere [0].

I gave hundreds of hours to teaching, only for pennies, and I'm still very grateful for that opportunity in my life.

End of the story (assuming you're curious now) is that two years later a proper budget was allocated, and of course I was not renewed. Someone with much more political clout and influence was selected, as it usually happens in Italy.

I decided that the academic world was not for me. I pursued a career in the private sector, and 2-3 years later I landed a job at Amazon Web Services, and left Italy. [1]

Ten years later, I know for sure that being an academic would have not made me happy. I would have not been able to stand the bureaucracy, or the defined and determined career path.

I wish, though, that I had the opportunity to teach someone a bit closer to my passions (e.g. Databases). That's a little regret left in me :)

[0]: http://www.lulu.com/shop/simone-brunozzi/dispense-lab-lingua...

[1]: http://brunozzi.com/2008/05/22/how-i-got-hired-by-amazon.com...


It would be nice to have similar "specific" content for Databases (implementation, I assume) as well... ;)


Jens Dittrich's youtube videos are a good place to pick up a lot of information or review concepts: https://bigdata.uni-saarland.de/datenbankenlernen/



Looks great! Do you know if this is (or maybe some other course) more project based approach, where at the end of the course you have e.g. SQLite-ish ACID compliant system completed?


I know for the advanced database course the students end up writing a new feature for an existing database called Peloton, which is a research project at CMU[0]. You obviously aren't writing the whole thing from scratch though.

[0]: https://github.com/cmu-db/peloton


The non-advanced one - intro, seems like a good fit - and you also get to implement a custom storage for SQLite.




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

Search: