5 ms·
Carmack talks practical use of Haskell, Lisp in game prog at Quakecon keynote
- msie 13y agoIt's inspiring to hear how he struggles learning a new language and having trouble doing things not related to his work.
- macmac 13y agoI agree. It is quite charming to hear him point quite precisely to the qualities that makes him fond of Haskell, but then struggle to put words to the strengths of Scheme.
- oacgnol 13y agoHe's one of my favorite people to follow on Twitter [1] because of this; he regularly tweets about stuff he's learning, especially new languages. It's quite inspiring and uplifting to see a such a figure in the industry still make time to learn on his own and candidly share his thoughts. [1]: https://twitter.com/ID_AA_Carmack https://twitter.com/ID_AA_Carmack
- BgSpnnrs 13y agoI strongly recommend listening to his Quakecon keynote in full. It meanders over a huge variety of topics and I personally find him a very engaging and easy to listen to orator.
- Sprint 13y agoAbsolutely! I uploaded it as single segment at https://www.youtube.com/watch?v=o2bH7da_9Os https://www.youtube.com/watch?v=o2bH7da_9Os , will archive it to archive.org shortly.
- sherbondy 13y agoIs there any chance you could extract the audio and put it online somewhere? I am currently finishing a cross-country bike trip, and would absolutely love to listen to his keynote, but only have a phone on me currently. It would mean a ton!
- macmac 13y agoA phone that doesn't do YouTube - is that even legal?
- Sprint 13y agoSure thing! http://archive.org/details/Quakecon_2013_-_Welcome_and_Annual_Keynote_-_John_Carmack/ http://archive.org/details/Quakecon_2013_-_Welcome_and_Annua... includes the AAC track extracted from the video as well as a mono 32kbit/s VBR Opus in Ogg to save you bandwidth. Enjoy!
- Sprint 13y agoSorry, that ogg was borked. At least I cannot play it anywhere. Will replace it with a standard Ogg Vorbis one.
- macmac 13y agoAt 1:44:00 https://www.youtube.com/watch?feature=player_detailpage&v=o2bH7da_9Os&t=6258 https://www.youtube.com/watch?feature=player_detailpage&v=o2... it sounds like he is actively looking for an opportunity to use Scheme as an embedded language in a game. Does HN know of any examples of such use?
- JabavuAdams 13y agoNaughty Dog is the canonical example. They were founded by two ex-MIT AI Lab guys. They designed a couple of in-house languages for Crash Bandicoot, and Jak & Daxter. In the early days of the PS2, they supposedly derived a benefit from having a higher-level language that could be compiled for any of the PS2's various processors (EE, VU0, VU1). I think that at the time, you couldn't do VU programming in C. In the end, they had to revert to industry standard C/C++ due to hiring issues.
- georgemcbay 13y agoWhile their games used to be even more Scheme-based than they are now, AFAIK they do still use PLT Scheme (at least as far up as the Uncharted games, haven't read too much on the tech under The Last of Us) for the sort of traditional scripting one would use UnrealScript or QuakeC for.
- noelwelsh 13y agoPLT Scheme, or Racket as it is now known, is in use in the Last of Us: http://lists.racket-lang.org/users/archive/2013-June/058325.html http://lists.racket-lang.org/users/archive/2013-June/058325.... A bit of insight into the use of Racket here (scroll down): http://comments.gmane.org/gmane.comp.lang.racket.devel/6915 http://comments.gmane.org/gmane.comp.lang.racket.devel/6915
- dadrian 13y agoActually, only one was MIT AI lab. The other was an economics major at the University of Michigan. But, same result nevertheless.
- deleted 13y ago
- mkilling 13y agoIt struck me how well Carmack's ideas about running all actors in the game world in parallel map to Clojure's agents[1]. Clojure introduces a bunch of interesting ideas on how to handle parallel programming. "Perception and Action" by Stuart Halloway is a great talk to listen to if you're interested[2]. [1] http://clojure.org/agents http://clojure.org/agents [2] http://www.infoq.com/presentations/An-Introduction-to-Clojure-Time-Model http://www.infoq.com/presentations/An-Introduction-to-Clojur...
- macmac 13y agoIn fact one of Rich Hickey's very first demos of Clojure was ants.clj which uses agents to simulate the ants. While not a game but rather a simulation it includes many elements that would also be present in a game. A literate version of ants.clj may be found here: https://github.com/limist/literate-clojure-ants/blob/master/literate-ants.org https://github.com/limist/literate-clojure-ants/blob/master/...
- nabilhassein 13y agoIs there a transcript?
- macmac 13y agoNot that I know of besides the one auto generated by YouTube.
- _random_ 13y agoGlad to see him think that strong static typing is the way to go.
- gnuvince 13y agoThere's only so many times you can get an error in your programs before you begin thinking that static typing might offer non-trivial benefits.
- derefr 13y agoI have a feeling that all the people still arguing in favor of dynamic typing at all, are tilting at the windmill of static languages without type inference. Nobody really thinks those are good languages any more :)
- _random_ 13y agoVery valid point. Really hate spelling out things for the compiler these days. Unfortunately for some reason language designers think it's a good idea to go crazy about syntax when developing something functional, because it makes things "terse".
- brandonbloom 13y ago> all the people still arguing in favor of dynamic typing at all, are tilting at the windmill of static languages without type inference Some of us who argue in favor of dynamic typing have a much more nuanced and informed view... I, for one, am of the mind that the there are precisely zero production-caliber statically typed environments that possess a sufficiently powerful type system for the kinds of problems I tackle on a regular basis. Haskell doesn't count, since you need to turn on about a dozen GHC language extensions in order to incorporate the last 20 years of research. There's also quite a bit of design warts that newer academic languages are starting to iron out. In particular, I don't think monad transformer stacks are a reasonable solution to computational effects. That's not to say you can't write any program in an environment where the type system is constraining you. You can. You simply implement a "tagged interpreter", which is something that's so simple to do, people do it all the time without realizing. Either you have a run-time map or you pattern match on an sum type data constructor, then loop over some sequence of those things with a state value threaded through. Poof! You've got a little interpreter. I find that this happens a lot. And, I also find that a lot of problems are easier to reason about if you create a lazy sequence of operations and then thread a state through a reduction over that sequence. Now, in Haskell, I've got a type correct interpreter for an untyped (unlikely turing-complete) language! Sadly, I can't re-use any of the reflective facilities of the host language because my host language tries to eliminate those reflective facilities at compile time :-( I'm in favor of optional, pluggable, and modular type systems. I think that a modern dynamic language should come with an out-of-the-box default type system that supports full inference. If, for some reason, I build a mini interpreter-like thing. I should be able to reuse components to construct a new type system that lets me prove static properties about that little dynamic system. This level of proof should enable optimizations of both my general purpose host language and my special purpose embedded "language". Additionally, I require that type checking support external type annotations, such that I can separate my types from my source code. In this way, type checking becomes like super cheap & highly effective unit tests: The `test` subcommand on your build tool becomes an alias for both `type-check` and `test-units`. You just stick a "types/" directory right next to your "tests/" directory in your project root. Just as a stale unit test won't prevent my program from executing, neither will an over-constrained type signature.
- Vekz 13y agoIt blows my mind that this is his first foray into functional languages. Makes my imagination wonder what the current state of the gaming and programming industries would be like, had he built Wolf 3D in a functional language and inspired everyone else from there.
- Tloewald 13y agoDid you listen to the end? He wonders aloud what might have been if QuakeC had been QuakeScheme. It's not his first foray into functional languages though. It's his first attempt to write production scale code in a pure functional language.
- _ZeD_ 13y agowhile listening to the structuring of the haskell version, with a "world" and an "actor" for each element, and the interaction as message-passing, I would think Carmack would find using erlang very satisfing as another alternative :D