La programación funcional y las arquitecturas multicore: estado del arte

Jorge Gabriel Hoyos Pineda, Álex Puertas-González


Este artículo presenta una revisión bibliográfica tendiente a identificar los conceptos fundamentales de la programación funcional, los diferentes enfoques y las aplicaciones que se han dado a este paradigma de programación. En una segunda parte, la revisión se centra en los trabajos orientados a la aplicación y el aprovechamiento de la programación funcional para el procesamiento paralelo sobre arquitecturas multicore. Se concluye que gracias a las características especiales que presenta, el paradigma funcional ha venido ganando terreno en diferentes campos de aplicación y paulatinamente se ha venido incorporando en los planes de estudio de programas universitarios en el área de la computación y afines. 

Palabras clave

programación funcional; arquitecturas multicore; procesamiento paralelo

Texto completo:



Abel, S. (2011). Nested Lambda Expressions with Let Expressions in C++ Template Metaprograms. Electronic Notes in Theoretical Computer Science, 279(3), 27-41. doi: 10.1016/j.entcs.2011.11.036

Al Zain, A., Trinder, P., Aswad, M., Michaelson, G., Hammond, K. y Berthold, J. (2009). Low-pain, high-gain multicore programming in Haskell. Paper presented at the DAMP’09, Savannah, Georgia, USA.

Aswad, M., Thinder, P. W. y Loidl, H. (2012). Architecture aware parallel programming in glasgow parallel Haskell (GPH). Procedia Computer Science, 9, 1807-1816. Doi: 10.1016/j.procs.2012.04.199

Bailes, P. y Kemp, C. (2004). Obstacles to a totally functional programming style. Paper presented at the 2004 Australian Software Engineering Conference.

Bergstrom, L., Rainey, M., Reppy, J., Shaw,A. y Fluet, M. (2010). Lazy tree splitting. Paper presented at the International Conference on Functional Programming.

Berthold, J., Marlow, S., Hammond, K. y Al Zain, A. (2009). Comparing and optimising parallel Haskell implementations for multicore machines. Paper presented at the 2009 International Conference on Parallel Processing Workshops.

Blelloch, G. E. (1996). Programming parallel algorithms. Communications of the ACM, 39(3), 13. Doi: 10.1145/227234.227246

Bousdira, W., Gava, F., Gesbert, L., Loulergue, F. y Petiot, G. (2010). Functional parallel programming with revised bulk synchronous parallel ML. Paper presented at the Networking and Computing (ICNC), 2010 First International Conference on.

Cerný, D. y Josef, D. (2014). Functional programming languages in computer simulation of electronics circuits. 2014 International Conference on Computational Science and Computational Intelligence, 229-235. Doi: 10.1109/ CSCI.2014.46

Collins, G. y Doug, B. (2011). The snap framework: a web toolkit for Haskell. Recuperado de http://static. en//pubs/archive/37267.pdf

Commercial Users of Functional Programming (CUFP) (2014a). Functional Programming at Verizon OnCue. Recuperado de

Commercial Users of Functional Programming (CUFP) (2014b). Haskell in the Misson Control Domain. Recuperado de

Commercial Users of Functional Programming (CUFP) (2014c). Haskell tools for satellite operations. Recuperado de

Chakravarty, M., Leshchinskiy. R., Peyton, S., Keller, G. y Marlow, S. (2007). Data parallel Haskell: a status report. Paper presented at the Workshop on Declarative Aspects of Multicore Programming.

Choppella, V., Kumar, H., Manjula, P. y Viswanath, K. (2012). From high-school algebra to computing through functional programming. Paper presented at the Technology for Education (T4E), 2012 IEEE Fourth International Conference.

Damjanovic, V. y Dragan, D. (2010). Functional programming way to interact with software attacks and vulnerabilities. Third International Conference of Software Testing, Verification, and Validation Workshops, 388- 393. doi: 10.1109/ICSTW.2010.53

Diaz, J., Muñoz-Caro, C. y Niño, A. (2012). A survey of parallel programming models and tools in the multi and many-core era. IEEE Transactions on Parallel and Distributed Systems, 23(8).

Dung, P. y Hansen, M. (2011). From functional programming to multicore parallelism: A case study based on Presburger Arithmetic. Paper presented at the Nordic Workshop on Programming Theory.

Fenwick, M., S,esanker, C., Schiller, M. R., Ellis, H. J., Vyas, J. y Grik, M. R. (2012). An open-source sandbox for increasing the accessibility of functional programming to the bioinformatics and scientific communities. Paper presented at the Ninth International Conference on Information Technology- New Generations. IEEE computer Society.

Gibbons, J. (2015). Functional programming for domain-specific languages. Recuperado de http://www.cs.ox.

Glaser, H. y Henderson, P. (1991) Functional programming. Software Engineer’s Reference Handbook. Butterworth, 35/1-35/6.

González, F. (1998). Programación funcional: conceptos y perspectivas. Ingeniería e Investigación, 40, 65-71.

Hansen, M. y Rischel, H. (2013). Functional programming using F#. Cambridge: Cambridge University Press.

Henderson, P. (1986). Functional programming, formal specification, and rapid prototyping. IEEE Transactions on Software Engineering, SE-I2(2), 10.

Hinsen, K. (2009). The promises of Functional Programming. Computing in Science & Engineering, 86-90. Doi: 10.1109/MCSE.2009.129

Hudak, P. (1989). Conception, evolution, and application of functional programming languages. ACM Computing Surveys, 21(3), 359-411.

Hughes, J. (1990). Why functional programming matters. Recuperado de dat/miranda/whyfp90.pdf

Jones, S., Leshchinskiy, R., Keller, G. y Chakravarty, M. M. (2008). Harnessing the multicores: nested data parallelism in Haskell. Paper presented at the FSTTCS.

Karczmarczuk, L. (1999). Scientific computation and functional programming. Computing in Science and Engineering Magazine, 9.

Läufer, K. y George, K. (2009). The promises of typed, pure, and lazy functional programming: Part II. Recuperado de viewcontent.cgi?article=1022&context=cs_facpubs

Machado, R. (2013). An introduction to lambda calculus and functional programming. 2013 2nd Workshop-School on Theoretical Computer Science, 26-33. Doi: 10.1109/ WEIT.2013.40

Marlow, S. (2012). Parallel and concurrent programming in Haskell. Cambridge: Microsoft Research Ltd.

Meijer, E. (2014). The curse of the excluded middle. Communications of de ACM, 12(4), 50-55.

Muranushi, T. (2012). Paraiso: an automated tuning framework for explicit solvers of partial differential equations. Computational Science & Discovery, 5, 1-40. Doi: 10.1088/1749-4699/5/1/015003

Nelson, B., Archer, J. y Rushton, N. (2014). Easel: purely functional game programming. Paper presented at the SERP 2014.

Nelson, B. y Rushton, N. (2013). Fully automatic parallel programming. Paper presented at the International Conference on Parallel and Distributed Processing Techniques and Applications (PDPTA). (2015). Companies using OCaml. Recuperado de

Ortiz, S. (2012). Computing trends lead to new programming languages. Computer, 45(7).

Pankratius, V., Schmidt, F. y Garreton, G. (2012). Combining functional and imperative programming for multicore software: An empirical study evaluating Scala and Java. Paper presented at the 34th International Conference on Software Engineering (ICSE).

Perry, A. (2007). System level design with Rosetta. San Francisco: Morgan Kaufmann.

Phan, A.-D. y Hansen, M. (2014). An approach to multicore parallelism using functional programming: A case study based on Presburger Arithmetic. Journal of Logical and Algebraic Methods in Programming, 84(1), 1-17. Doi: 10.1016/j.jlamp.2014.07.002

Reck, F. y Fischer, S. (2009). Towards a parallel search for solutions of non-deterministic computations. Paper presented at the 39th Annual Meeting of the German Informatics Society.

Ren, S. y Nogiec, J. (2008). Developing concurrent applications on emerging multicore platforms. Paper presented at the International Conference on Complex, Intelligent and Software Intensive Systems (CISIS).

Rivoire, S. (2010). A breadth-first course in multicore and manycore programming. Proceedings of the 41st ACM technical symposium on Computer Science education, 214-218. Doi: 10.1145/1734263.1734339

Sivaramakrishnan, K. C. Z., L ; Jagannathan, S. (2014). MultiMLton: Amulticore-aware runtime for standard ML. Journal of Functional Programming, 24(6), 1-62. Doi: 10.1017/S0956796814000161

Slonneger, K. (1995). Formal syntax and semantics of programming languages: a loboratory-based approach. Reading, Massachusetts: Addison-Wesley.

Subramaniam, V. (2014). Functional Programming in Java- Harnessing the Power of Java 8 Lambda Expressions. Dallas, Texas: The Pragmatic Programmers

Thiry, L. y Hassenforder, M. (2013). Surfing with fun. Paper presented at the 2013 International Symposium of Theoretical Aspects of Software Engineering.

Tran, N.-L., Skhiri, S., Lesuisse, A. y Zimányi, E. (2012). AROM: processing big data with data flow graphs and functional pogramming. IEEE 4th International Conference on Cloud Computing Technology and Science, 875-882. Doi: 10.1109/CloudCom.2012.6427487

Vara, A. (2008). Formalizando el proceso de depuraciónen programación funcional paralela y perezosa (tesis de doctorado). Madrid: Universidad Complutense de Madrid.

Veldema, R. y Philippsen, M. (2010). Safe and familiar multi-core programming by means of a hybrid functional and imperative language. Recuperado de http://link. 13374- 9_11#page-2

Vichare, A. (2013). Algorithms, the lambda calculus and programming - An intuitive approach. Resonance, 18(4), 345-367.

Vinoski, S. (2012). The Nitrogen Erlang Web Framework. The Functional Web, 4.

Voellmy, A., Wang, J., Hudak, P. y Yamamoto, K. (2014). Mio: a high-performance multicore IO manager for GHC. Recuperado de

Wadler, P. (2001). Monads for functional programming. Computing science. Glasgow: Universidad de Glasgow.

Wampler, D. (2011a). Functional programming for Java developers. Estados Unidos: O’Reilly.

Wampler, D. (2011b). Scala web frameworks: looking beyond lift. The Functional Web, 8.

Winter, V. (2014). Bricklayer: an authentic introduction to the functional programming language SML. Paper presented at the TFPIE 2014.

Enlaces refback

  • No hay ningún enlace refback.

Revista indexada e indizada en:


Licencia de Creative CommonsIngenio Magno de esta bajo una licencia Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 License.