Learn More





DNN Community Blog

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 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, 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 ( or Ruby ( and try it out!


Comment Form

Only registered users may post comments.


2sic Daniel Mettler (124)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (21)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
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 (269)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (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)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?