You reminded me of a wonderful and brilliant presentation by Guy Steele:
Growing a Language.
He explains how languages should be designed to grow. In fact, he grows his mini-English language during the presentation itself.
Guy Steele wroteLisp was designed by one man, a smart man, and it works in a way that I think he
did not plan for. In Lisp, new words defined by the user look like primitives and, what
is more, all primitives look like words defined by the user! In other words, if a user has
good taste defining new words, what comes out is a larger language that has no seams.
The designer in charge can grow the language with close to no work on his part, just by
choosing with care from the work of many users.
Sorry for the Lisp plug, it's unintentional but it does illustrate the point. The same is true for other similarly designed languages of course.
Languages that are designed to grow naturally tend to evolve DSLs.
A good Framework, in my view, should look and behave like the primitives of the language, there should be no "seams". In that sense, you can think of all good DSLs as frameworks that extend the language. The opposite is of course not always true.
I'd like to see how others define the word "Framework" since I know it's not always clearly understood.
Here's
a transcript of the talk [PDF].