“the ways in which one can dividing the original program together depends on the way people can glue problems together. one must provide new kinds of glue in teh programming language” Goals of PL balancing between: productivity—Python safety—Coq, Lean performance—C, Edges: safety+performance—Rust (not really productive) productivity+safety—ML, Maskell (not very performant) productivity+performance—Matlab (not very safe) Java and C++ tries to do all three, but makes them more contradictory systems because you can’t get optimality on all three key challenges of PL developers are reading, not writing hardware is changing + software doesn’t exploit it well memory bloat is getting worse bugs aren’t getting any better software systems are complex at all scales developers mostly comprehend/debug code end of the Moore’s law to get more performance: you have to build the hardware differently software ways of performance improvement becomes much more important history of programming evolution evolution theory turing machines designed for studying logic first showed that it is possible to show that some procedural systems don’t halt lambda calculus designed for formal logic systems evolution of Turing-type languages initial implementation Von Neumann designed the idea of turing machines being able to be implemented Grace hopper designed the idea of higher-level programming abstractions (i.e. tape code, etc.) FORTRAN John Backus got quick adoption of FORTRAN, replacing much of assembly Algol Derivation of FORTRAN, very European theory work: decoration, conditionals, global/local variables, block programming, etc. C The OS community took Algol and try to strip it down to bare basics for low-level features, and also try to make it type safe SIMULA New simulation language: the first object-oriented system—inspired by ALGOL and other such efforts. This was super duper slow. C++ C++ was C’s reaction to SIMULA. Java This was near the advent of Internet. Java was a reaction to C++’s lack of garbage collection, manual memory collection, made it aggressively more objective oriented, and tried to fix its lack of portability, security, distributed programming, and threading. Python Python is a reaction to C++ and a desire evolution of Church-type languages LISP “I didn’t understand the rest of [Chruch’s] book” but took lambda calculus ISWIM ISWIM—a typed-ish LISP ML a formal, basic functional language , supporting ideas of induction, etc. Haskell lazy evaluation, call by name lambda calculus, infinite structures, etc. why hasn’t church languages taken over? computers, for the most part, are Turing machines church languages, back in the day, didn’t fit and didn’t finish in a long time Alex protip of making a new programming language: you can throw away all the semantics, but keep syntax the same. But, machines don’t like turing machines any more: Turing languages are actually pretty bad at that. change! software systems tend to be big, slow, and buggy broad forces are having compelling changes security is a problems => let’s design better verification systems revolution is happening in underlying hardware (they are not turing machines) => let’s move beyond Turing languages we have a shortage of skilled programmers => let’s automate programming

[[curator]]
I'm the Curator. I can help you navigate, organize, and curate this wiki. What would you like to do?