Talk:Dynamic programming language
What exactly is a dynamic programming language ?
I believe that everyone agrees that dynamic programmig language does not have a precise definition. That's including programming language designers/designers wannabe [1]. In addition, this term has been greatly misused by journalists and techies (including Gosling) who simply didn't know what they were talking about. If this article provides a precise definition, well, we need to build it first.
I believe that everybody agrees that
- Compiled C is not dynamic.
- Lisp, Scheme, Dylan, Python, Ruby are dynamic.
What about
- Haskell and OCaml ? After all, they support dynamic programming, with extensions, they can perform compile-time reflexivity, etc.
- Java ? After all, it supports reflexivity and, with extensions, it supports dynamic programming, etc.
- Acute ? It's statically + dynamically typed.
- Self-modifiable assembly language ?
Criteria
- Dynamic = interpreted ?
- Dynamic = dynamically-typed ?
- Dynamic = check as many things as possible at run-time rather than ahead-of-time (including types and possibly syntax) ?
- Dynamic = no need for type annotations ?
- Dynamic = interactive programming ?
- Dynamic = modifying properties of the language itself at run-time ? (à la SmallTalk)
- Dynamic = run-time read/only introspection ?
- Dynamic = run-time read/write introspection ?
- Dynamic = dynamically linked ?
- Dynamic = new and shiny ?
- Is there such a thing as a dynamic programming language or should we say that one language is more dynamic than another ? I would vote for the second option.
- Is there such a thing as a dynamic programming language or should we say that one implementation of a language is dynamic ? I would vote for the second option. After all, iirc, there's an interpreted version of C, with a toplevel and the possibility of adding or replacing functions at run-time. Still, it is the same language.
I have a better suggestion: A dynamic programming language is one that supports rapid development cycles: rapid modification of code and designs, etc. Also, such languages are not "new and shiny"; they have been with us since the 1960's.
Interpretation
Lisp is dynamic. Lisp can be compiled. Is that a good-enough counter-example ? I must admit that I don't know enough about the internals of Lisp compilation. Yoric 16:58, 14 June 2006 (UTC)
Dynamic typing, type annotations
Could anyone give an example of a dynamic programming language which is not dynamically typed, or a dynamically typed programming language which is not dynamic? -- ciphergoth 20:05, 2005 Apr 5 (UTC)
- Maybe. I'm still not sure what exactly this article wants to classify as a dynamic language. Pike is a statically typed, high level, object oriented, interpreted language. Is it a dynamic language? I can't tell from this article. Its similar to a statically typed python with C-style syntax though. Generic Player 04:09, 6 Apr 2005 (UTC)
This article is a complete mess, and badly in need of a rewrite. The language is informal and non-standard, and there are no sources to any of the potentially controversial (or at least non-obvious) assertions made. Plus, at least half of the content (the bit about functions and addresses) is simply incorrect. The way "dynamic" languages are described as using indirection rather than running code at a predefined memory address really is completely unimportant as a distinction -- it is possible to modify the contents of a memory address (or use it to point elsewhere) while code is running to change the behavior, and this can be done even in C. In fact, it is done in C quite often in some types of programming, such as emulators, for example.
The single most important distinguishing feature between most "dynamic" languages and "non-dynamic" languages has to do with type systems (and not interactivity, or some other fuzzily defined concept which doesn't hold under careful examination), yet type systems are practically ignored in the article. 70.36.30.117 06:27, 28 March 2006 (UTC)
- simply because the type system is not the point. It may be easier to implement a dynamic language as a dynamically typed language. Still it is not the same. —Preceding unsigned comment added by 85.177.153.98 (talk) 13:53, 6 February 2008 (UTC)
I'm not sure about the dynamic typing part. I mean yes, every dynamic language I can think of is dynamically typed. But I believe that this absence of static or semi-static checks is more related to the fact that the designers of the language were not able to provide static checks, rather than a feature/drawback by itself. Yoric 14:25, 14 June 2006 (UTC)
To the best of my knowledge, no dynamic language needs type annotations -- although some can use them. Although OCaml is usually considered static by its fans and detractors, it doesn't need type annotations either. What do we conclude of this ? Yoric 16:58, 14 June 2006 (UTC)
- I disagree that C, ASM or C++ are not dynamic.
They are as dynamic as the Computer and OS they are running on are. If I write a C prog. that includes a small and simple compiler I can even load uncompiled C-code at Runtime. I don't even need to do that ! I can just call an existing compiler under various systems (or distribute it)! Every compiler operation can be done at Runtime / dynamic :/ Therefor every C program can be dynamic !
- Also note that "dynamic" does not necessary mean that I load code written in the same language !
I can just take a C subset (or anything else) and as long as it extents a Program written in C that makes my C prog. dynamic (even loading compiled code is dynamic) !
- The difference between static and dynamic is the ability to get and lose space and the ability to write , read and jump to this space.
- It all comes down to the simple questions:
- "Can I get/lose new space for new program code" and the answer is "yes, use malloc/free"
- "Can I read/write to that place?" and the answer is "Yes you can!"
- "Can I jump to new loaded executeable code?" again "Ofcourse!"
- That means a program written in the language can "expand" , "contract" and "change" which makes it and the language dynamic because I can do it due to the ability the language provides for me.
- Also note that most interpreters are written in C. That means a C (!) Program does interpret and load dynamic stuff (which makes C the dynamic language).
- I will not change anything but I hope that this article will change its viewpoint on dynamic or static. In fact there is no static language I can think of and if there is one its a safety design not a missing ability (since all OS provide the ability).
Characteristics of dynamic programming languages
The term dynamic programming language does not have a precise definition, but it is nevertheless useful to refer to what distinguishes "dynamic" languages such as Perl and Python from more traditional languages such as C, C++, and Java. Not all languages considered dynamic will have all of the features below, and some non-dynamic languages will share some of them or have some way to achieve the same effect; the reader should assume that there are exceptions nearly all of the generalizations below.
Traditional programming languages require that the program be annotated with extra information (such as type declarations) that makes the compile-time checking possible. Dynamic languages dispense with these annotations because they use extra information available at runtime instead. In particular, they are dynamically typed, and use automatic memory management.
I like to ride on motorcycle then read this, and you? :)
[color=#225588][url=http://scooter.halloween2006.info]scooter[/url][/color]
Advantages
- Dynamic programming languages are generally somewhat easier for newcomers to programming, in large part because they need not understand the system of annotations referred to above in order to write programs
- This delay can be dramatically reduced almost to zero in practice however, for instance, the Objective-C programming language used a pre-loaded cache and a small bit of assembler code in order to reduce this overhead to a single operation.
That's a claim I've often heard. I've never seen anything to back it. Does anyone have any clue ?
Yoric 14:25, 14 June 2006 (UTC)
Rewrite
I just started this rewrite, but didn't have time to finish it. I leave the text here in the hope it's useful in a future version -- ciphergoth 20:05, 2005 Apr 5 (UTC)
In computer science, a dynamic programming language is a kind of programming language in which many tests to ensure that each computational step is valid are deferred until the operation is actually performed (at runtime) rather than taking place when the program is first prepared for execution (at compile time). They allow programs to change their structure as they run: functions may be introduced or removed, new classes of objects may be created, new modules may appear.
Wrong Languages
You can't have it both ways: either a language tries to do extensive compile-time checking, or it defers such checks until runtime. Eiffel advertises itself with all the wonderful things it does at compile time. As a result, it can't be a "dynamic language". In fact, Eiffel is the prototypical static language.
Agreed. Neither are Oberon and Objective Modula-2.
VB6 has it both ways. The type of a variable can be declared and the compiler checks the method calls at compile time. Or if the type is Object, then the type checking is defered to runtime when the underlying type is queried to see if it will respond to the method call. 86.10.80.92 (talk) 21:46, 2 July 2008 (UTC)