This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.
If this question can be reworded to fit the rules in the help center, please edit the question.

1 Answer
1

To a programing language academic, dynamic and static languages pretty much exclusively refers to the type systems. This is often shorthand for statically typed or dynamically typed. It is also often mentioned, especially in classes, that a more correct term is statically checked types or dynamically checked types.

Static vs. dynamic type checking has nothing to do with the orthogonal concept of compiled vs. interpreted. I don't think anyone who is well educated on the topic believes the words dynamic / static to have anything to do with this. As for meta-programming (what you're calling runtime-generation) and eval, I can see why someone would consider that to be the meaning of dynamic. But in my years spent in a programming languages lab static vs. dynamic always meant types.

It is important to note that it is, in fact, possible to have both in a language, though it is rare, and often not very noticeable if a language has both static and dynamic checking. Java is an example of a language with both. Most people would consider Java a statically typed language, and I agree. But there is dynamic type checking done on method dispatch since it is possible to downcast objects to subclasses. Java's static type system is not sound and therefor dynamic checks are done. OCaml is a good example of an object-oriented language with a no dynamic checks because OCaml does not allow down casting.