what was the first program you've ever written do you remember it was my second year in university first year of computer science and it was an alcohol 60 I calculated the shape of super lips and then connected points on the on the perimeter creating star patterns it was with a with a wedding on paper printer and I was in college university
I I think I'll call 60 and after that I remember I remember snowboard I remember Fortran didn't fall in love with that I remember Pascal didn't fall in love with that it all gotten away of me and then I just covered a simpler and that was much more fun and from there I went to micro micro code
the most sort of interesting and major improvement of programming languages was Fortran the first Fortran because before that all code was written for a specific machine and each specific machine had a language a simply language or cross embro or some extension of that idea
Simula came along to make that idea more flexible and you could define your own types and that's where where I got very interested first Nicole was the main idea and behind Simula I was late 60s this was late 60s was a visiting professor in Oz and so I learned object-oriented programming by sitting around well in theory discussing with Christ Mughal
lots of people got their PhDs and made their careers out of forgetting about Simula or never knowing it for me the key idea was basically I could get my own types and that's the idea that goes for a lines of C++ where I can get better types and more flexible types and more efficient types
I met which are constrained by performance reliability issues deployability cost of hardware I I don't like things to be too dynamic it is really hard to write a piece of code that's perfectly flexible that you can also deploy on a small computer and that you can also put in say a telephone switch in Bogota
so about languages you should know languages I I reckon I knew about twenty-five or there abouts when I did C++ it was easier than those days because the languages were smaller and you didn't have to learn a whole programming environment and such to do it
the first step is to simplify the code have less code have code that are less likely to go wrong
we are trying to say what is it that a good programmer does at the fairly simple level of where you use the language and how you use it
static analysis is looking at the code without running the code yes and thereby it's almost not in production code but it's almost like an educational tool of how the language should be used
you get the best efficiency out of the best abstraction and my main tool for efficiency for performance actually is abstraction
I soon realized I couldn't just add features if you just add what looks pretty or what people ask for or what you think is good one by one you're not going to get a coherent whole
the zero overhead principle it basically says that if you have an abstraction it should not cost anything compared to write the equivalent code at a lower level
so if I have say a matrix multiplied it should be written in such a way that you could not drop to the C level of abstraction and use arrays and pointers and such and run faster
and so having a single implementation was never an option now I also happen to dislike monocultures monocultures they are dangerous because whoever owns the monoculture can go stale and there's no competition and there's no incentive to innovate
there's the object-oriented programming in this generic programming with the templates for the generic program yeah so you you've presented it very nicely but now you have to make all that happen and make it efficient
the debugging can be truly horrid come back to this because I have a solution anyway the debugging was ugly the code generated by C++ has always been ugly
I wanted to make sure that if you have say a sort algorithm and you give it a sorting criteria if that sorting criteria is simply comparing things with lesson the code generators should be the less than not a indirect function call to a compression object which is what it is in the source code but we really want down to the single instruction
The basic idea is that when you have a a generic component like a sort function the sort function will will require at least two parameters one a data structure with a given type and comparison criteria and these things are related but obviously you can't compare things if you don't know what the type of things you compare and so you want to be able to say I'm going to sort something and did this to be sortable what does it mean to be sortable
There's other places that use that word but the way we call Genetic Programming is Alex's and he called them concepts because he said there they are the sort of the fundamental concepts of an area so they should be called concepts and we've had concepts all the time if you look at the knr book about si si has arithmetic types and it has integral types it says so in the book and then it lists what they are and they have certain properties
So sometime in early 1989 two people one from IBM one from HP turned up in my office and told me I would like to standardize it PLAs PLAs this was a new idea to me and I pointed out that it wasn't finished yet it wasn't ready for former standardization and such and they say no beyond even gotten it you you really want to do this our organizations depend on c++ we cannot depend on something that's owned by another corporation that might be a competitor
I have written two papers for the history of programming languages conference which basically asked me such questions and I'm writing a third one which I will deliver at the history of programming languages conference in London next year so I've been thinking about that and there is one play answer constructors and destructors the way a constructor can establish the environment for the use of the Java type for object and the destructor that cleans up any messes at the end of it
collection that's how we can get predictable performance that's how you can get the minimal overhead in many cases and have really clean types
it's the idea of constructor destructor pairs sometimes it comes out under the name our high AIII resource acquisition is initialization which is the idea that you grab resources and the constructor and release them and destructor
so they're just like there is perhaps a unified theory of physics of the fundamental forces of physics now I'm sure there is commonalities among the languages but there's also people involved you know that help drive these developing these languages
machine learning is a kind of way of programming but just fuzzy it's very very different than C++ because C++ is a like it's just like you said it's extremely reliable it's efficient it's you know you can you can measure you can test in a bunch of different ways with biological systems or machine learning systems you can't say much except sort of empirically saying that ninety-nine point eight percent of the time it seems to work
I've spent a lot of time with C++ and there's a combination of a few good ideas a lot of hard work and a bit of luck and I try to get away from it a few times but I get tracked in again