12. Summary, Trends, Research
© O. Nierstrasz PS — Summary, Trends, Research Roadmap Summary: —Trends in programming paradigms Research:... —scg.unibe.ch
© O. Nierstrasz PS — Summary, Trends, Research C and C++ Good for: systems programming portability Bad for: learning (very steep learning curve) rapid application development maintenance Trends: increased standardization generative programming
© O. Nierstrasz PS — Summary, Trends, Research Functional Languages Good for: equational reasoning declarative programming Bad for: OOP explicit concurrency run-time efficiency (although constantly improving) Trends: standardization: Haskell extensions (concurrency, objects)
© O. Nierstrasz PS — Summary, Trends, Research Lambda Calculus Good for: simple, operational foundation for sequential programming languages Bad for: programming Trends: object calculi concurrent, distributed calculi (e.g., pi calculus, “join” calculus...)
© O. Nierstrasz PS — Summary, Trends, Research Type Systems Good for: catching static errors documenting interfaces formalizing and reasoning about domains of functions and objects Bad for: reflection; self-modifying programs Trends: reasoning about concurrency and other side effects “pluggable”, optional types
© O. Nierstrasz PS — Summary, Trends, Research Polymorphism Good for: parametric good for generic containers subtyping good for frameworks (generic clients) overloading syntactic convenience (classes in Haskell, overloading in Java) coercion convenient, but may obscure meaning Bad for: local reasoning optimization Trends: combining subtyping, polymorphism and overloading exploring alternatives to subtyping (“matching”)
© O. Nierstrasz PS — Summary, Trends, Research Denotational Semantics Good for: formally and unambiguously specifying languages sequential languages Bad for: modelling concurrency and distribution Trends: “Natural Semantics” (inference rules vs. equations) concurrent, distributed calculi
© O. Nierstrasz PS — Summary, Trends, Research Logic Programming Good for: searching (expert systems, graph & tree searching...) symbolic interpretation Bad for: debugging modularity Trends: constraints concurrency modules
© O. Nierstrasz PS — Summary, Trends, Research Object-Oriented Languages Good for: domain modelling developing reusable frameworks Bad for: learning (steep learning curve) understanding (hard to keep systems well-structured) semantics (no agreement) Trends: aspect-oriented programming prototype-based programming (renaissance)
© O. Nierstrasz PS — Summary, Trends, Research Scripting Languages Good for: rapid prototyping high-level programming reflection; on-the-fly generation and evaluation of programs gluing components from different environments Bad for: type-checking; reasoning about program correctness performance-critical applications Trends: replacing programming as main development paradigm scripting web applications
© O. Nierstrasz PS — Summary, Trends, Research Visual Programming Languages Good for: Simulation, games GUI programming Bad for: Complex algorithms Scale Trends: Programming for kids Model transformation
© O. Nierstrasz PS — Summary, Trends, Research License > Attribution-ShareAlike 2.5 You are free: to copy, distribute, display, and perform the work to make derivative works to make commercial use of the work Under the following conditions: Attribution. You must attribute the work in the manner specified by the author or licensor. Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. For any reuse or distribution, you must make clear to others the license terms of this work. Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above.