Products

Solutions

Resources

Partners

Community

About

New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.


Language Wars: Dynamic Languages

As promised, this is the first in a series of posts that are designed to talk about the important differences in languages. In my first post I made the point that we often get caught up on the lack of semi-colons or how one languages uses curly braces and one uses “If/End If” (and friends), but we often neglect the interesting differences. So, to start off this series discussing some of the interesting differences in programming languages, I figured I’d start with a class of languages that has been gaining popularity recently: “Dynamic Languages”

What are dynamic languages? Basically, instead of relying on the compiler to statically type-check your code (to ensure you aren’t trying to assign a string to an integer variable, etc.), the language run-time is responsible for doing these checks. A common misconception is that this is the same as a language like JavaScript, which has no real type system. However, dynamic languages are still strongly-typed languages, unlike "type-less" languages such as JavaScript which are not. This means that once you create an object, you can’t change its type. For example, in ‘traditional’ languages like C#, the following statement would be illegal:
i = 1 + "Hello"
In a type-less language, this statement would be perfectly legal, but it is illegal in a dynamic-language. The trick to what makes dynamic languages different is that the variables can hold objects of any type (think Variant in VB6, or Object in .Net).

So, in a dynamic language, you can execute the following code:
myInt = 1
myInt = "Hello
Now, those familiar with statically typed languages such as C# or VB.net will notice that ‘myInt’ was never defined. In dynamic languages, you don’t need to declare variables before you use them, the first time you use it, it is automatically declared. So, how does the compiler know what type of variable to create (Integer, String, etc.)? It doesn’t, variables can hold objects of any type (those familiar with VB can imagine a line at the top saying: “Dim myInt as Variant”). This means you can put a String into the ‘myInt’ variable because the variable isn’t restricted to holding Integers.

So what happens if I try to call a method that’s defined on an Integer on my String object? In C#, I would get a compiler error because the compiler can detect that the method doesn’t exist. In a dynamic-language, the compiler doesn’t know what type you’re using so it won’t raise an error. It isn’t until run-time that the error will occur, because the run-time does know what type the object is and that the method doesn’t exist.

Dynamic languages often tend to scare those of us who are familiar with static languages. It feels like a backwards step. We've spend the past years moving away from dynamic languages (Variant was removed from VB.net), why are we going back? We can use dynamic languages because we have much better software development processes now. Unit Testing, Test Driven Development, all these techniques make dynamic languages safer. Also, dynamic languages are usually easier to write in, and give you cool features like “Duck Typing” [Wikipedia] ("If it walks like a duck and quacks like a duck, it must be a duck"). In the end, it all depends on what you are trying to achieve and what you are familiar with.

That’s it for this intro to dynamic languages, in the next couple of weeks (hopefully), I’ll talk a bit about Python and Ruby (particular dynamic languages). If you want more info, check out the Wikipedia entry for Dynamic Languages [Wikipedia] or if you just want to jump in, download Python (http://www.python.org/) or Ruby (http://www.ruby-lang.org/en/) and try it out!

Comments

Comment Form

Only registered users may post comments.

NewsArchives


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Daniels (3)
Alex Shirley (10)
Andrew Hoefling (3)
Andrew Nurse (30)
Andy Tryba (1)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (37)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Bogdan Litescu (1)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (213)
Chris Paterra (55)
Clint Patterson (108)
Cuong Dang (21)
Daniel Bartholomew (2)
Daniel Mettler (181)
Daniel Valadas (48)
Dave Buckner (2)
David Poindexter (12)
David Rodriguez (3)
Dennis Shiao (1)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (80)
Francisco Perez Andres (17)
Geoff Barlow (12)
George Alatrash (12)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (274)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Kelly Ford (4)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matt Rutledge (2)
Matthias Schlomann (16)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Miguel Gatmaytan (3)
Mike Horton (19)
Mitchel Sellers (40)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Oliver Hine (1)
Patricio F. Salinas (1)
Patrick Ryan (1)
Peter Donker (54)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Sacha Trauwaen (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott Schlesier (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Steven Fisher (1)
Tony Henrich (3)
Torsten Weggen (3)
Tycho de Waard (4)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (40)
Will Strohl (180)
William Severance (5)
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out