编程语言评价标准
编程语言需要提供足够简单和丰富的概念来表达我们要描述的世界;
并且执行的效率要足够高
Enough of the small talk, how do we go about comparing these two goliaths? In reality this can’t be a true comparison, as Angular is a framework and React a library; but we will be looking at some of the important aspects we look at when considering technologies for our projects:
- Abstraction – Can we represent complex things in ways that are understandable?
- Performance – Does it scale well, with fast response times? In my browser? In my code?
- Integration – Can I use libraries/frameworks I’m already familiar with? Can I get help if I have a problem?
- Simplicity - What is the learning curve? Does it follow relatable architectural principles? How quickly can a new developer become productive?
- Testability - How easy is it to test?
- Debugging – Problems occur, how easy is it to understand what happened?
- State Management – Does it handle state correctly and efficiently?
https://capgemini.github.io/react/reacting-to-change/
Highly Expressive? That would help reading and writing. Does the language have:
- Operators like A = B + C which adds whole arrays in Fortran 90?
- Abstract data types (with encapsulation)?
- Module and package structures to aid programming-in-the-large?
- A rich operator set, as in languages like APL and Perl?
- Rich type/object structures supporting inheritance, composition and aggregation?
- Polymorphism, overloading, aliasing?
- Higher order functions?
- Pattern matching?
- Built-in control flow (e.g. unification, backtracking)?
- Facilities for symbolic computation?
- Support for asynchronous, concurrent, and distributed programming?
Understanding Evaluation Tradeoffs
You can’t have everything, it seems:
- The expressive power of dynamic typing, polymorphic type systems, functions as first-class values, higher-order functions, and closures can sometimes impact performance.
- Automatic garbage collection saves billions of dollars in programmer time, but isn’t always a good idea in embedded, life-critical, real-time systems.
- A language may be wonderful and amazing and increase developer productivity, but if no talented people are out there that know the language, how will you hire the best team?
- Languages that are intentionally designed to be horrible (Brainfuck, Java2K, Malbolge, etc.) have some intellectual and educational value (and offer amusement).
https://cs.lmu.edu/~ray/notes/evaluatingprogramminglanguages/