Skip to main content

Daniel Jomphe's Library tagged language   View Popular

17 Jun 09

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).

12 Jun 09

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...
09 Jun 09

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 :(

openquark.org/...Welcome.html - Preview

programming language jvm cal haskell java

17 Apr 09

Relevance Blog : Java.next #4: Immutability

  • While immutability is possible in Ruby, be warned. Heavy use of freeze to 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's method_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...
15 Apr 09

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...
08 Apr 09

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...
1 - 20 of 221 Next › Last »
Showing 20 items per page

Highlighter, Sticky notes, Tagging, Groups and Network: integrated suite dramatically boosting research productivity. Learn more »

Join Diigo