Abstract: For many years, imperative programming has been the dominating paradigm in the industrial software development. Other paradigms, including functional and logic programming, have been used primarily by computer scientists in their research projects, but for some reason have not been adopted by the industry.
Things are beginning to change now, as more and more multiparadigm features are being introduced into mainstream programming languages. Speaking of .NET family of languages, functional features have been introduced into C# 3.0, including lambda-expressions, type inference, closures and LINQ data access mechanism, which allows us to argue that C# is becoming a multiparadigm language. However, it still remains primarily an imperative language, lacking the concise syntax that is typical for functional languages, and not enforcing such features as data immutability, etc.
The reason other programming paradigms are becoming increasingly important in modern software development is the increasing complexity of applications, including applications for multicore/manycore systems. Paradigms that employ immutable data structures allow for inherently parallel algorithms, thus greatly simplifying the job of creating multi-threaded applications for parallel computations. In addition, functional paradigm allows for more flexible functional abstraction techniques, provides more error-free code that require less debugging, and yields more compact code.
Taking the increasing importance of functional programming languages into account, Microsoft has plans to introduce a functional programming language, F#, into the next version of Visual Studio. F# is in fact a multiparadigm language, with some imperative features like mutable structures and loops, but primarily a functional one, derived from OCaml and ML family. It is fully interoperable with .NET framework, strongly statically typed language, having very concise syntax due to type inference. With those features, F# is becoming an attractive option for both educational and research scenarios, as well as for more industrial applications and as high-level scripting language.
This presentation introduces the F# language, demonstrates some examples of using the language together with .NET framework, and discusses usage of functional programming in some industrial contexts, as well as some software engineering aspects of using functional languages in real-life projects.