Tuesday, October 21, 2008

6 Scripting Languages Your Developers Wish You'd Let Them Use

Greiner's article on the state of the scripting universe was slashdotted. Several people raised their eyebrows at the (to them) obvious omissions, since the article only covered PHP, Perl, Python, Ruby, Tcl and JavaScript. As I wrote at the time, Lynn chose those languages because hers was a follow-up to an article from three years back. Plus, most IT managers are familiar with at least one of those well-known scripting languages, even if they haven't personally written a line of code in one of them.

However, while we've covered several in depth, those five dynamic languages are not the only ones developers use. Since every programming language is a tool suited to solve a particular problem, it behooves each IT shop to use the best tool for the job. So in this article, I share a few up-and-coming scripting languages that really ought to be on your company's radar, with a few passionate arguments from developers who have adopted them.

Scala

Scala is particularly attractive to Java developers. Per its website: "Scala... is both object-oriented (think inheritance, methods, ...) and functional (think closures). It blends a number of modern language features, while maintaining close compatibility with Java."

Dean Wampler, senior consultant at Object Mentor, is currently co-writing a book on Scala for O'Reilly. "Scala is the best language I have seen that meets the 'one size fits all' goal," he says. "Scala fixes problems with Java, like verbosity and limitations in Java's support for object-oriented programming. In addition, Scala supports functional programming—an approach that has been around for a long time in academic computer science, but is now proving to be very useful for writing robust concurrent software. Concurrency is very important for scaling up software at large websites and enterprises."

For David Ritchie MacIver, a developer at Trampoline Systems, Scala's primary benefit is that he can avoid Java. "I can match [Java] in terms of library support, performance and ease of deployment," he says. Many Java tools carry over to Scala, too. MacIver says his company is adopting Scala for some of their visualization software as the software is updated, and reducing its use of Java and Ruby.

MacIver doesn't recommend Scala for everything, though. "People will push Scala for concurrency advantages. Please don't succumb to the temptation. It doesn't particularly have any. Any more than Java does, that is."

Groovy

Another language gaining ground in the Java community is Groovy. According to its website, Groovy is an agile and dynamic language for the Java Virtual Machine (JVM). It builds on Java's strengths but has additional power features inspired by languages like Python, Ruby and Smalltalk.

So, what's Groovy's compelling feature? According to the slashdot commenter who first brought it up (and inspired this entire project... see what he or she started?), "I was surprised that Groovy didn't appear anywhere in the article. If there's a dynamic language poised to convert the enterprise crowd, it's Groovy. [It's] able to compile into Java bytecode, compile Java code and directly exploit the huge base of Java, but without the cumbersome Java syntax. I wouldn't be surprised to see Python and Ruby supplanted by Groovy in a couple of years."

Java developer Chris Broadfoot agrees. "Groovy lets Java developers code in an effective, expressive manner, while maintaining cross-compatibility with legacy Java code," he says.

Clojure

Your company may be adopting the latest hardware, but can your software take advantage of its multithreading capabilities? You might want to look at Clojure, a dynamic programming language that targets the JVM. Explains its website, Clojure is "designed to be a general-purpose language, combining the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming. Clojure is a compiled language—it compiles directly to JVM bytecode, yet remains completely dynamic. Every feature supported by Clojure is supported at runtime. Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection."

Small? Powerful? Java? Can those three co-exist? Chris Houser, member of the technical staff at Four D Development in Fort Wayne says, "Clojure is a small, powerful language that compiles and runs on the JVM, so no new infrastructure [is needed]. Plus it lets you get more done with less code, which is good for development schedules and maintenance. It's particularly good at taking advantage of multicore hardware without as much programmer overhead as Java."

"The most pressing issue in software development today is how to better take advantage of multicore CPUs to increase performance and reduce energy costs," explains J. McConnell, founder of Übermensch Consulting. "Clojure provides a fundamentally better approach (in terms of ease and safety) to concurrency than other languages out there. Its Lisp heritage gives it the power to greatly increase programmer productivity in a way that grows over time and to enable easy DSL creation to allow business owners to verify the correctness of programs. The fact that it runs on the JVM and can smoothly integrate with the millions of lines of legacy Java code are just icing on a very tall cake."

Lua

Formally, Lua is "a powerful, fast, light-weight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping."

Less formally: "It's just a really slick little language overall," says Evan DeMond, a junior software engineer at a Midwest custom software development shop. "I enjoy programming in it, and I get things done in it quickly." DeMond has been using Lua for scripts and small tools. He has also experimented with writing larger apps in it lately, which "has been going pretty well so far," he says.

Developer Ralph Hempel describes Lua as "one of the best little secrets in programming languages, and I've been through a lot of them in the last 30 years." While it lacks a formally approved library distribution mechanism, Hempel says, there are plenty of de facto standard libraries for file system access, network connectivity, database access and so on. "For me, the best part of the Lua system is the rock-solid language core and the carefully considered upgrades and patches. The releases of Lua are controlled by the 'three amigos' that have been involved with the language from the start." Hempel has ported Lua to the LEGO Mindstorms NXT.

Matthew Wild, director of software consultancy Heavy Horse Ltd., sees Lua's advantages in terms of rapid Agile development, exceeding what is possible with more traditional languages. Lua doesn't try to do too much, Wild says. "Instead, it gives you the required building blocks out of which it is possible to build anything you want, in any way you want. The key benefits unique to Lua are the fact that it is amazingly small, fast, and on a technical level a masterpiece. Not every project manages to achieve so much with so little of the dreaded 'bloat.'"

Wild adds, "I've become so hopelessly in love with Lua, I've incorporated it into nearly all my recent projects, and yet it fits in nicely every time." Wild is starting to use Lua as a standalone, rather than embedded, language. "It is still fitting the job perfectly. Thanks to Lua, I'm now looking at weeks, rather than months, in our development schedule."

F#

The .NET development community is not without its set of scripting language enhancements. Among the most prominent is F#, which began as a Microsoft research programming language "to provide the much sought-after combination of type safety, succinctness, performance, expressivity and scripting, with all the advantages of running on a high-quality, well-supported modern runtime system." Microsoft is now turning F# into a fully-supported language on the .NET platform.

C# MVP Tomas Petricek, author of Real-world Functional Programming in .NET is working on a book about F#. Petrick says F# encourages the functional immutable style of programming, which is suitable for writing concurrent and distributed programs that can be easily tested. Moreover, it supports the declarative style of programming. "The way I like to talk about declarative style is that it allows you to divide the work between senior programmers that develop some 'smart' library for solving problems and junior programmers that use it to solve daily problems," he says. "An example of this may be List module in F#, but the LINQ libraries in .NET 3.5 follow the same functional principles."

Many programming languages make it easy to write something small that grows into a larger app, but they present problems when the software needs to turn into a real library with a strong logical structure. "F# gives you an excellent way for doing this," says Petricek. "You can start with simplicity (just as in dynamically-typed languages such as Python or Ruby), but end up with a very robust program (just as in C# or Java). The key benefit of F# is that the transition is completely fluent without having to do any painful steps in between. In fact, you don't need to rewrite any code that you wrote at the beginning."

Bulgarian ASP.NET developer Mihail Kochanov sees additional benefits for F#. "I believe learning F# makes me a better C# programmer," he says, explaining that F# made it easier to understand LINQ. He's also interested in F# for its parallel library context. "If you have stuff you might want to run parallel in the future, it might be good to be ready," he says.

Boo

Boo proclaims on its home page that it is "a new object oriented statically typed programming language for the Common Language Infrastructure (CLI) with a Python-inspired syntax and a special focus on language and compiler extensibility."

Josh Coffman, lead developer and founder of Computerist Solutions, would lobby for Boo particularly if he were to implement a domain-specific language (DSL). "It's not an interpreted language because it's compiled to CLI," he says. "Because it runs on .Net, you have all the power of .Net—only it's more flexible, and you can use it as a script or a compiled program." Boo has plenty of technical advantages, too, he says, such as being able to manipulate the compiler output during compilation. "The space indented syntax is kinda fun," he adds.

Matthew Fowle, software developer at Useful Networks, says "A computer language is a tool for making software; Boo as a computer language plays well with existing tools (the .Net ecosystem), but it goes further by allowing developers unprecedented power in developing their own language tooling. Most languages work around a fixed set of concepts; Boo works by giving developers the ability to craft and shape their own language concepts. Further, Boo syntax is wonderfully wrist-friendly, and comes with a variety of interpreters to accelerate rapid development."

I don't mean to imply that these up-and-coming languages are the only ones worth paying attention to. There are several others that IT managers should be aware of—and proponents are invited to add their suggestions in the article comments. Here's a few bonus languages.

Among the interesting languages are Factor, which MacIver described as "modernized Forth, with better support for functional programming."

Software engineer Anthony Cook would prefer to use REBOL, a language that gains its advantage through lightweight domain-specific sublanguages and micro-formats. Cook appreciates Rebol's "dialects" which let you create your own domain-specific languages. "One guy even built a virtual machine Assembly language interpreter as a Rebol dialect to teach it to his students," says Cook. It's also tiny, self-contained and cross platform, so code written for Windows runs exactly the same on Linux or Mac OS X. "It has a built in GUI library, the ability to send e-mails and access Web resources built in, with no includes, in only a couple of simple lines." The size of the executable program is small too, he says. "To do the same thing in Java would take hundreds of megabytes; in C it would take tons of includes and many lines of code to do the same thing."

It's fast, too. Cook says, "I'm used to using Ruby all day, and it's one of the slowest languages out there. REBOL is a Forth-stack based yet dynamic prototype-based language that runs almost as fast as native C code."

Software architect David Brabant would try to convince the boss to let him use Lisp. "Lisp is elegant, Lisp is compact, Lisp is powerful, Lisp is reflexive, Lisp allows me to write my DSL in a snap, using a few macros." But, he sighs, "In the end, I would be forced to use PHP like anybody else."


Resource - CIO.com

No comments: