Expressive Power is defined by Wikipedia as:
Let's give that page a re-read. One of the first things to note is that it says "language", not "programming language", and most of its examples are not programming languages, e.g. the first example given is a comparison of OWL2 EL and OWL2 RL, which are both ontology languages.
One can apply the concept to programming languages, but also pattern-matching langauges, markup languages, query languages, visual stylesheet langauges, regular expressions (and all the regular languages they refer to) and so on. One can even refer to the expressive power of natural languages like English, which is often done very informally, but with more seriousness when considering the problems related to natural language processing.
Does "ideas" refer to the things (operations, structures, algorithms, etc.?) we can communicate to the machine? Or does it refer to the "human" concepts that can be captured and communicated with the language to other humans?
It refers to what can be expressed in that language, considered purely as a thing in itself.
For example, (I'll use javascript throughout for my examples, because your question indicates that its one of the languages you know) consider the javascript statement:
var x = 3 + 4;
This represents that the value sum of 3 and 4 is computed and the value associated with a label x
within a given namespace scope.
If we destroyed all the computers in the world and wrote that code on a piece of paper, it would remain that in javascript it still had that same meaning; we wouldn't be able to run such code on anything, but the abstract definition of the language is still something we could talk about.
This may seem pedantic, but it's actually quite important that languages are things that can be reasoned about in the abstract without consideration of real computers. For one thing, people reasoning about theoretical points of computer languages that were not yet feasible in practice is one of the things that has got us to where we are today; computers need computer science, but computer science does not need computers, just the idea of a computation.
Of course, we do use computers in the real world, and these days there are a lot of people using them in practice rather than a few specialists discussing them in theory. The page you linked to says:
The term expressive power may be used with a range of meaning. It may mean a measure of the ideas expressible in that language:
The first sense dominates in areas of mathematics and logic that deal with the formal description of languages and their meaning, such as formal language theory, mathematical logic and process algebra.
In informal discussions, the term often refers to the second sense, or to both. This is often the case when discussing programming languages. Efforts have been made to formalize these informal uses of the term
Of these two uses of the term, the first's practical impact relates solely to the what can be conveyed to the computer.
The second relates more to human understanding in both reading and writing, though the degree to which it does so, differs a lot between uses, since they are informal and as such are not rigourously defined.
For instance, if we took a language like JavaScript and imposed a weird restriction on variable names, such as variable must be an 8-digit number preceded by an underscore, matching /^_[0-9]{8}$/
, would we lose expressive power?
By the formal definition, we've lost no expressive power: We're restricted to 100,000,000 variables, but if we really needed to we could get around this by creating objects to hold more variables within the newly-created namespace. As such any program written in javascript today could be rewritten in this new form, so they are equally expressive.
By the informal definition, we've lost some, but just how much depends on just how informal we're being, which will vary because again you can't say what is "the rule" about an informl use. We might say we've lost a tiny amount, because programs with more than 100,000,000 variables in the same namespace have to be rewritten beyond a simple substitution. An even more informal use again would refer to the mental impact of such ungainly variable names on human comprehensive.
Its also worth noting that people will informally consider things that are not strictly part of the language at all. Consider the changes in Javascript from its creation until today.
By the most formal definition, there has been pretty unchanged in expressiveness; it was Turing complete to start with, after all.
By a more informal definition, it has become considerably more expressive in certain things like array manipulation, exception handling and (perhaps most of all) in the inclusion of regular expressions. These don't do anything that couldn't be done in javascript before, though they can often do something in a few lines and a subsecond execution time that would take kilobytes of code to write in javascript1.0 and a long time to run.
By a much more informal definition again, the change from javascript's first use in browsers (able to change the values of form inputs, document.write
while the page is first being parsed and move to a new location or go back or forward in the history, but pretty much nothing else) to that today (able to change just about anything on the page, including on the basis of data from server calls) is absolutely immense, though most of it doesn't relate to javascript but to the object models and APIs made available, rather than the language (e.g. vbscript in IE benefitted from those changes equally).
To my mind, that last use is so informal as to not really be correct, but that's the problem with informal definitions.
By the formal defintion, it really hasn't become more expressive at all.