Any sufficiently advanced technology is indistinguishable from magic.
- Arthur C. Clarke
DRAFT NOTES
- Need to
- expand great platform list
- should we include Magical Tools?
A great programming language running on a great platform should amplify your computing abilities, giving you seemingly magical skills.
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.
- Report on the R5RS standard for the Scheme Programming Language
A Great Programming Language should make programming
- reliable
- behaving as expected
- a powerful, expressive and consistent semantic model
- supporting all important paradigms
- especially declarative paradigms
- e.g. functional, constraint, relational
- and metaprogramming
- generic or abstract code from which specialized code is automatically generated as needed
- e.g. generic functions & modules; abstract types & kinds
- especially declarative paradigms
- productive
- being as easy as possible to
- understand and maintain
- behavior profile is lexically apparent
- types, constraints, etc.
- easy to understand
- automatically verified
- behavior profile is lexically apparent
- innovate and evolve
- friendly to new ideas
- hackable without fighting existing structure
- port to another OS or CPU
- should be automatic by default
- anything non-portable should be labeled as such
- understand and maintain
- efficient
- fast and not a memory hog
- no need to write libraries in another language
- compiling efficiently to all desired and major CPUs
- e.g. by using the backend of
llvm
orgcc
- e.g. by using the backend of
See this survey of great programming languages.
A Great Computing Platform should
- Support great languages
- Provide a rich set of useful libraries
- Allow easy interoperation of code written in different source languages
- Enhance program understanding and analysis
- Provide great editing and refactoring tools
- Provide portability across different OSs and CPUs
- Management of system lifecycles
- Version management integrated with
- Automated testing and deployment
See this survey of programming platforms.