I don’t really want to say what is and isn’t a functional programming language. However I think it’s pretty clear that c++ and java are not particularly functional and that the next version adding traditionally functional features does not convert one’s legacy codebase into an FP program. It’s still the non-FP program it was before.
I don’t think this was ever really about first class functions (by which you really mean closures): C already had function pointers and a common pattern of function pointer plus a void * for some data which effectively gives you closures without the syntax. And java already had the ability to mint a class inside a function which closed over (final) variables which is basically the same as a lambda. Saying that functional programming means lambdas is like saying that FP is the same as having GC (or good static types, or dynamic types, or lots of parens, or ...). This isn’t true (again, see java, but when it was new) and there are examples of languages in each quadrant of the FP vs GC square.
The fact that C++/Java are picking up features from functional programming languages is sort-of irrelevant. I think it makes more sense to say that they are picking up useful features from all sorts of programming languages
My main point in this area is that despite the mood on HN, most programming done in industry is with the same big existing procedural/oop programs that have been around for ages and are likely not going to dramatically change or be rewritten just because FP has been coming back into fashion in the last 10 years. And the new programs written in industry will probably still be in the same languages to interoperate with the old programs (although perhaps written in a slightly more functional style depending on who writes the programs and which libraries they use).
Having said that I’m less sure about JS. I get the impression that it’s tending to a more functional style as a solution to managing complicated state and user interfaces, that many programs are written with new functional style libraries like react, and that programs are less likely to be old and big and more likely to be frequently rewritten. But maybe this impression is wrong and most JS programs are just using jquery.
Two actual changes are I think moving towards web based UIs instead of platform native ones, and moving to json instead of xml. But these have little to do with programming languages.
I don’t think this was ever really about first class functions (by which you really mean closures): C already had function pointers and a common pattern of function pointer plus a void * for some data which effectively gives you closures without the syntax. And java already had the ability to mint a class inside a function which closed over (final) variables which is basically the same as a lambda. Saying that functional programming means lambdas is like saying that FP is the same as having GC (or good static types, or dynamic types, or lots of parens, or ...). This isn’t true (again, see java, but when it was new) and there are examples of languages in each quadrant of the FP vs GC square.
The fact that C++/Java are picking up features from functional programming languages is sort-of irrelevant. I think it makes more sense to say that they are picking up useful features from all sorts of programming languages
My main point in this area is that despite the mood on HN, most programming done in industry is with the same big existing procedural/oop programs that have been around for ages and are likely not going to dramatically change or be rewritten just because FP has been coming back into fashion in the last 10 years. And the new programs written in industry will probably still be in the same languages to interoperate with the old programs (although perhaps written in a slightly more functional style depending on who writes the programs and which libraries they use).
Having said that I’m less sure about JS. I get the impression that it’s tending to a more functional style as a solution to managing complicated state and user interfaces, that many programs are written with new functional style libraries like react, and that programs are less likely to be old and big and more likely to be frequently rewritten. But maybe this impression is wrong and most JS programs are just using jquery.
Two actual changes are I think moving towards web based UIs instead of platform native ones, and moving to json instead of xml. But these have little to do with programming languages.