"I mean I think the .Net library is great. It is wide, but does not really feel fat to me. I mean how does a functional language help you call something like Dns.GetHostEntry() any better?"
You’re right. If you need a library function like Dns.GetHostEntry() who gives a damn if it’s being called from IronPython or C#. It’s there because people need it, not because of static or dynamic typing.
I thought his objection to fat libraries was that developers should think about the problem more, and that given appropriate languages they can build precisely what they need for their app. themselves without necessarily modelling every aspect in OO and/or automatically falling back on a large stack of OO frameworks. Having said that, I've never really worked with frameworks like Spring or Hibernate so I don't know how bad the problem is. What are other people's experiences with these kind of frameworks? Good for technical-publishers or good for developers?
In .Net’s case I’d agree that the library weight is muscle, not fat; it’s there to do work for people – though with time it's naturally going to become more convoluted.
berni wrote:very interessting interview (i really like erik). but i have to say some words to charles. I think charles is in a mindset that functional programming is the way to go and all problems just fade away as soon as you write your code in ruby or F# and so on. I don't know what kind of programms charles is writing, but my experience as a professional developer is that "the old style" of programming is very appropriate for real world problems.
This was a really interesting discussion that came far around. Very good job.
Im very much looking forward to the second part!
I could listen to Dave Thomas for several hours.He really nailed it about what is going on at colleges in the USA with Java.More interviews like this Charles!
berni wrote:But unfortunately a lambda expression alone does not solve the concurrency problem.
Actually, to be more correct a lambda does NOTHING to solve the concurrency problem. Functional languages solve concurrency by disallowing mutable state. Lambdas are just one of many techniques that you need to get real work done in the presence of that draconian restriction.
I see a looming disaster if programmers misunderstand the implications of "functional elements" in imperative programming languages. Functional programming is as much about what you don't do as what you do. If you use typical functional constructs in a imperative language, you might accidentally take an implicit dependency on the implementation of everything you call -- nothing you call can mutate any state. This introduces versioning and subtle edge case bugs, as the author is probably unaware and cannot discover that you have taken that dependency.
This brings us to the second looming disaster. It simply doesn't work to have two classes of code, one of which cannot call the other. Several of the C# team members have discussed on channel 9 that this is why the C++ const modifier was not carried over into C#. It has proven frustratingly difficult to predict how other programmers will want to compose code. When one class of code cannot call another (ie "functional code" with no mutation and "imperative" code that can) one eventually sees parallel frameworks developing as common operations are eventually needed in both classes.
Don't get me wrong, local variable type inference and lambdas in C# are hot features. Linq has been my biggest boost in productivity since, well C#. But these features do not make the language functional, and you're setting yourself up for pain if you think they do.
John Melville, MD wrote:Actually, to be more correct a lambda does NOTHING to solve the concurrency problem. Functional languages solve concurrency by disallowing mutable state. Lambdas are just one of many techniques that you need to get real work done in the presence of that draconian restriction.I see a looming disaster if programmers misunderstand the implications of "functional elements" in imperative programming languages.