Daniel Jomphe's Library tagged → View Popular
The Scheme Programming Language
THE ref book on Scheme, period.
Why? Language Archaeology ... and Metaprogramming
-
Python also felt the pressure to support metaprogramming, which began to appear in 2.x versions of the language in the form of metaclasses. Metaclasses turned out to be (like AOP in Java) too much of a mental shift to allow easy use by mainstream Python programmers, so in the most recent versions of Python, decorators were added. These are similar in syntax to Java annotations, but more powerful in use, primarily because Python is as fungible as Ruby. What's interesting is that the intermediate step of actually applying the decorator turns out to be less of an intrusion, (as it might initially appear) but rather a beneficial annotation that makes the code more understandable. Indeed, one of the main problems with metaclasses (other than the complexity) was that you couldn't easily see by looking at the code what it does; you had to know that the magic had been folded in because of the metaclass. Whereas, with decorators, it is clear that metaprogramming actions are being applied to a function or class.
Although we haven't seen an explosion in the creation of DSLs in Python as we have in Ruby (it's certainly possible to create DSLs in Python), decorators provide an interesting alternative: instead of creating an entirely new language syntax, you can create a decorated version of Python. Although this might not be tightly targeted to domain users as DSLs are, it has the benefit of being more easily understandable to someone who is already familiar with Python (rather than learning a new syntax for each DSL).
The Lambda Complex
-
Programming languages such as
C/C++/Java/Python are called imperative programming languages
because they consist of sequences of actions. The programmer tells
the computer how to perform a task, step-by-step. -
There are two areas that are fundamental to programming a computer
- resource management and sequencing. - 12 more annotations...
defmacro - Functional Programming For The Rest of Us
-
In functional languages automatic analysis of functions and finding good candidates for
concurrent execution is as trivial as automatic inlining! In this sense functional style programs are "future proof" -
Hot Code Deployment
- 48 more annotations...
Open Quark
A haskell-like on the JVM!! Too bad that this seams to be dying :(
Square root of x divided by zero: The speed, size and dependability of programming languages
Relevance Blog : Java.next #4: Immutability
-
While immutability is possible in Ruby, be warned. Heavy use of
freezeto enable safe concurrency is far from idiomatic. -
In JRuby and Groovy, immutability is possible.
- 8 more annotations...
Relevance Blog : Java.next #3: Dispatch
-
If you are a dynamic language programmer fearing the tyranny of the Scala compiler, pattern matching is a cause for rejoicing. With pattern matching, you can bypass static typing and get the flexibility of much more dynamic dispatch. Consider: Scala's pattern matching can be used to dispatch on arbitrary predicates. These predicates are not limited to type relationships known at compile time, so a Scala program that uses pattern matching as the cornerstone of its dispatch strategy can be as dynamic as an extremely dynamic Ruby program. Put another way: Scala's catch-all match default (
_) is the moral equivalent of Ruby'smethod_missing. -
Dispatch takes many forms. Single dispatch, switch statements, pattern matching, and multiple dispatch all meet similar needs: Selecting runtime behavior in response to varying runtime conditions.
Flexible dispatch is a key element of Java.next. All of the Java.next languages support dispatch strategies that are far more flexible than Java's single dispatch. These strategies are not perfectly interchangeable, but have a great degree of overlap. For example, Clojure's multimethods and Scala's pattern matching look quite different on the surface but can be used to solve similar problems.
Dispatch can be based on criteria more dynamic than the type system, even in Scala.
Relevance Blog : Java.next #2: Java Interop
-
The ports below are not best practice in the Java.next languages. They are deliberately simplistic
Relevance Blog : Java.next: Common Ground
-
Neither Groovy nor Ruby support functional programming in a real sense.
-
neither Groovy nor Ruby have functions as first-class objects.
- 3 more annotations...
Mathematics and Computation ยป On programming language design
-
I tell my students that there is a design principle from which almost everything else follows:
โProgrammers are just humans: forgetful, lazy, and they make every mistake imaginable.โ
-
People do not make bad design decisions because they are evil or stupid. They make them because they judge that the advantages of the decision outweigh the disadvantages.
- 32 more annotations...
briancarper.net :: Clojure 1, PHP 0
-
This is 10 times less code, which is a good reduction in my opinion.
-
Lisp lets you say what you want very concisely, with a bare minimum of boilerplate.
- 2 more annotations...
Selected Tags
Related Tags
Sponsored Links
Top Contributors
Groups interested in language
-
Members Blogs
Member blogs on EFL Classro...
Items: 314 | Visits: 449
Created by: eflclassroom 2.0
-
Social Networking for Language Learning
Social Networks for Learnin...
Items: 15 | Visits: 363
Created by: Victoria Castrillejo
-
World Language Resources
This list is a collection o...
Items: 73 | Visits: 280
Created by: Dianne Krause
Highlighter, Sticky notes, Tagging, Groups and Network: integrated suite dramatically boosting research productivity. Learn more »
Join Diigo

