Experience with Parallel Programming Using Code Templates

Total Page:16

File Type:pdf, Size:1020Kb

Experience with Parallel Programming Using Code Templates Experience with Parallel Programming Using Code Templates 1 2 2 Ajit Singh Jonathan Schaeer Duane Szafron asinghetudeuwaterlo oca jonathancsualb ertaca duanecsualb ertaca 1 2 University of Waterlo o University of Alb erta Dept of Electrical and Computer Eng Dept of Computing Science Waterlo o Ontario Edmonton Alb erta Canada NL G Canada TG H Abstract For almost a decade we have b een working at developing and using templatebased mo dels for parallel computing Templatebased mo dels separate the sp ecication of the parallel structuring asp ects from the applicati on co de that is to b e parallelized A user provides the applicatio n co de and sp ecies the parallel structure of the application using highlevel icons called templates The parallel programming system then generates the co de necessary for paralleliz in g the application The goal here is to provide a mechanism for quick and reliable development of coarsegrain parallel applicatio ns that employ frequently o ccurring parallel structures Our initial templatebased system FrameWorks was p ositively received but had a numb er of shortcomings The Enterprise parallel programming environment evolved out of this work Now after several years of exp erience with the system its shortcomings are b ecoming evident Controlled exp eriments have b een conducted to assess the usability of our system in comparison with other systems This pap er outlines our exp eriences in developing and using these systems A list of desirable characteristics of templatebased mo dels is given FrameWorks and Enterprise systems are discussed in the context of these characteristics and the results of our usability exp eriments Many of our observations are relevant to other parallel programming systems even though they may b e based on dierent assumptions Although templatebase mo dels have the p otential for simplifying the complexities of parallel programming they have yet to realize these exp ectations for highp erformance applications Exp erience with Parallel Programming Using Co de Templates Intro duction Along with the growing interest in parallel and distributed computing there has b een a corresp onding in crease in the development of mo dels to ols and systems for parallel programming Consequently practitioners in the area are now faced with a somewhat dicult challenge how to select parallel programming to ols that will b e appropriate for their applications There is no easy answer The decision is a function of many parameters including some that are sp ecic to the user and their computing environment These include the typ e of parallelism available in the application for example ne or coarsegrained data parallel or not pip eline or masterslave the target architectures for example shared or distributed memory language constraints and p erformance exp ectations Other parameters are sp ecic to the to ol and its capabilities including its feature set p ortability fault tolerance and usability ease of use exibility expressive p ower As is evident from the formation of user groups such as the Parallel To ols Consortium there is a concern in the community ab out the lack of p ostdevelopment analysis and evaluation for various to ols and technologies that are b eing prop osed Typically researchers envision a new to ol or technology develop it and dep ending on their initial exp eriences rep ort it in the literature With few exceptions longterm exp eriences with parallel programming systems and their relationships with similar systems are hardly ever rep orted Many dierent approaches have b een taken towards the development of parallel programming mo dels A new parallel programming language is one approach for example a pro cedural language such as Orca or a functional language like Sisal However practical considerations such as legacy co de and the demand for FortranCbased languages often make this an impractical choice Alternatives that allow the programmer to take advantage of the existing co de and exp ertise in common sequential languages have found much wider acceptance One such approach includes providing libraries for parallelization PVM P and MPI are examples Another approach is to extend an existing sequential language with compiler directives High Performance Fortran or keywords for example Mentat and PAMS A relatively new alternative has b egun to emerge that allows a programmer to b enet from the existing co de and knowledge of a sequential program while minimizing the mo dications that are required for parallelization The programmer provides a sp ecication of the parallel structuring asp ects of the application in the form of co de annotations One interesting approach to co de annotation is to recognize that there are commonly o ccurring parallel techniques A parallel programming to ol can supp ort these techniques by providing algorithmic skeletons or templates that capture the parallel b ehavior The user provides the sequential application co de and selects the templates required to parallelize the application such as in PIE Exp erience with Parallel Programming Using Co de Templates and HeNCE The system then generates the necessary parallel co de Templatebased mo dels separate the sp ecication of the parallel structuring asp ects such as synchronization communication and pro cesspro cess or mapping from the application co de that is to b e parallelized A template implements commonly o ccurring parallel interactions in an applicationindep endent manner The goal here is to provide an easy approach for the initial development and restructuring of coarsegrain parallel applications that relies on commonly used parallelization techniques This pap er discusses our longterm exp eriences with two templatebased parallel programming systems for coarsegrained parallelism Our research b egan in when we used templates to exp eriment with dierent parallel structures for a computer animation application We quickly realized that the approach was more general and could b e used to build a larger class of parallel applications Building on this success the FrameWorks parallel programming to ol was develop ed Our initial exp erience with FrameWorks was encouraging However for a numb er of reasons describ ed later in this pap er it was not p ossible to evolve the system b eyond a certain p oint Consequently an entirely new pro ject called Enterprise was initiated Enterprise is a templatebased parallel programming environment which oers a much wider range of related to ols for parallel program design co ding debugging and p erformance tuning It has b een publicly available since httpwebcsualb ertacaenter Several other parallel programming systems have relied on techniques that are similar to the approach used by us for example Many of our results and exp eriences with FrameWorks and Enterprise are applicable to such systems as well as other highlevel parallel programming systems Before we delve into details it is useful to clarify a couple of p oints regarding our use of the term template In the past techniques based on the use of applicationindep endent common parallel structures have often b een describ ed under dierent names such as algorithmic skeletons mo del programs based on parallel programming paradigms and parallel program archetyp es In addition to us some other researchers also have recognized or used the term template to refer to such techniques Although the underlying details of these techniques vary signicantly they all have the common goal of sp ecifying commonly o ccurring parallel structures in the form of applicationindep endent and reusable co de For the last ten years we have used the term templatebased to refer to this technique At this p oint it should also b e p ointed out that our use of the term template here is quite distinct from C templates Our usage is restricted to the context of parallel programming where it is used to denote a prepackaged set of applicationindep endent characteristics This has no intended relationship with the C templates Exp erience with Parallel Programming Using Co de Templates which are used to build generic classes in sequential programs In this pap er we lo ok at templatebased parallel programming mo dels from two viewp oints First as the designers we can address the diculties in the design and implementation of these to ols Second we have had considerable interaction with users developing templatebased parallel applications Controlled exp eriments which compared Enterprise with a numb er of to ols including PVM give insights ab out the strengths and weaknesses of the templatebased approach The result is that although templatebased mo dels have tremendous p otential for bridging the gap b etween sequential and parallel co de there still remain a numb er of shortcomings that must b e addressed b efore the technology will b e widely used Section describ es the templatebased approach Section explains the distinctions b etween this ap proach and other highlevel techniques for parallel programming Section outlines the ob jectives for an ideal templatebased parallel programming to ol and discusses their signicance Section briey describ es FrameWorks and its shortcomings These problems with FrameWorks led to the design of Enterprise as describ ed in Section Section describ es our exp eriences with templatebased mo dels and the lessons learned Extending the template mo del to other asp ects of parallel programming is discussed in Section Section describ es the requirements for future templatebased to ols
Recommended publications
  • Edsger W. Dijkstra: a Commemoration
    Edsger W. Dijkstra: a Commemoration Krzysztof R. Apt1 and Tony Hoare2 (editors) 1 CWI, Amsterdam, The Netherlands and MIMUW, University of Warsaw, Poland 2 Department of Computer Science and Technology, University of Cambridge and Microsoft Research Ltd, Cambridge, UK Abstract This article is a multiauthored portrait of Edsger Wybe Dijkstra that consists of testimo- nials written by several friends, colleagues, and students of his. It provides unique insights into his personality, working style and habits, and his influence on other computer scientists, as a researcher, teacher, and mentor. Contents Preface 3 Tony Hoare 4 Donald Knuth 9 Christian Lengauer 11 K. Mani Chandy 13 Eric C.R. Hehner 15 Mark Scheevel 17 Krzysztof R. Apt 18 arXiv:2104.03392v1 [cs.GL] 7 Apr 2021 Niklaus Wirth 20 Lex Bijlsma 23 Manfred Broy 24 David Gries 26 Ted Herman 28 Alain J. Martin 29 J Strother Moore 31 Vladimir Lifschitz 33 Wim H. Hesselink 34 1 Hamilton Richards 36 Ken Calvert 38 David Naumann 40 David Turner 42 J.R. Rao 44 Jayadev Misra 47 Rajeev Joshi 50 Maarten van Emden 52 Two Tuesday Afternoon Clubs 54 2 Preface Edsger Dijkstra was perhaps the best known, and certainly the most discussed, computer scientist of the seventies and eighties. We both knew Dijkstra |though each of us in different ways| and we both were aware that his influence on computer science was not limited to his pioneering software projects and research articles. He interacted with his colleagues by way of numerous discussions, extensive letter correspondence, and hundreds of so-called EWD reports that he used to send to a select group of researchers.
    [Show full text]
  • Glossary of Technical and Scientific Terms (French / English
    Glossary of Technical and Scientific Terms (French / English) Version 11 (Alphabetical sorting) Jean-Luc JOULIN October 12, 2015 Foreword Aim of this handbook This glossary is made to help for translation of technical words english-french. This document is not made to be exhaustive but aim to understand and remember the translation of some words used in various technical domains. Words are sorted alphabetically. This glossary is distributed under the licence Creative Common (BY NC ND) and can be freely redistributed. For further informations about the licence Creative Com- mon (BY NC ND), browse the site: http://creativecommons.org If you are interested by updates of this glossary, send me an email to be on my diffusion list : • [email protected][email protected] Warning Translations given in this glossary are for information only and their use is under the responsability of the reader. If you see a mistake in this document, thank in advance to report it to me so i can correct it in further versions of this document. Notes Sorting of words Words are sorted by alphabetical order and are associated to their main category. Difference of terms Some words are different between the "British" and the "American" english. This glossary show the most used terms and are generally coming from the "British" english Words coming from the "American" english are indicated with the suffix : US . Difference of spelling There are some difference of spelling in accordance to the country, companies, universities, ... Words finishing by -ise, -isation and -yse can also be written with -ize, Jean-Luc JOULIN1 Glossary of Technical and Scientific Terms -ization and -yze.
    [Show full text]
  • Lecture 10: Fault Tolerance Fault Tolerant Concurrent Computing
    02/12/2014 Lecture 10: Fault Tolerance Fault Tolerant Concurrent Computing • The main principles of fault tolerant programming are: – Fault Detection - Knowing that a fault exists – Fault Recovery - having atomic instructions that can be rolled back in the event of a failure being detected. • System’s viewpoint it is quite possible that the fault is in the program that is attempting the recovery. • Attempting to recover from a non-existent fault can be as disastrous as a fault occurring. CA463 Lecture Notes (Martin Crane 2014) 26 1 02/12/2014 Fault Tolerant Concurrent Computing (cont’d) • Have seen replication used for tasks to allow a program to recover from a fault causing a task to abruptly terminate. • The same principle is also used at the system level to build fault tolerant systems. • Critical systems are replicated, and system action is based on a majority vote of the replicated sub systems. • This redundancy allows the system to successfully continue operating when several sub systems develop faults. CA463 Lecture Notes (Martin Crane 2014) 27 Types of Failures in Concurrent Systems • Initially dead processes ( benign fault ) – A subset of the processes never even start • Crash model ( benign fault ) – Process executes as per its local algorithm until a certain point where it stops indefinitely – Never restarts • Byzantine behaviour (malign fault ) – Algorithm may execute any possible local algorithm – May arbitrarily send/receive messages CA463 Lecture Notes (Martin Crane 2014) 28 2 02/12/2014 A Hierarchy of Failure Types • Dead process – This is a special case of crashed process – Case when the crashed process crashes before it starts executing • Crashed process – This is a special case of Byzantine process – Case when the Byzantine process crashes, and then keeps staying in that state for all future transitions CA463 Lecture Notes (Martin Crane 2014) 29 Types of Fault Tolerance Algorithms • Robust algorithms – Correct processes should continue behaving thus, despite failures.
    [Show full text]
  • Actor-Based Concurrency by Srinivas Panchapakesan
    Concurrency in Java and Actor- based concurrency using Scala By, Srinivas Panchapakesan Concurrency Concurrent computing is a form of computing in which programs are designed as collections of interacting computational processes that may be executed in parallel. Concurrent programs can be executed sequentially on a single processor by interleaving the execution steps of each computational process, or executed in parallel by assigning each computational process to one of a set of processors that may be close or distributed across a network. The main challenges in designing concurrent programs are ensuring the correct sequencing of the interactions or communications between different computational processes, and coordinating access to resources that are shared among processes. Advantages of Concurrency Almost every computer nowadays has several CPU's or several cores within one CPU. The ability to leverage theses multi-cores can be the key for a successful high-volume application. Increased application throughput - parallel execution of a concurrent program allows the number of tasks completed in certain time period to increase. High responsiveness for input/output-intensive applications mostly wait for input or output operations to complete. Concurrent programming allows the time that would be spent waiting to be used for another task. More appropriate program structure - some problems and problem domains are well-suited to representation as concurrent tasks or processes. Process vs Threads Process: A process runs independently and isolated of other processes. It cannot directly access shared data in other processes. The resources of the process are allocated to it via the operating system, e.g. memory and CPU time. Threads: Threads are so called lightweight processes which have their own call stack but an access shared data.
    [Show full text]
  • Mastering Concurrent Computing Through Sequential Thinking
    review articles DOI:10.1145/3363823 we do not have good tools to build ef- A 50-year history of concurrency. ficient, scalable, and reliable concur- rent systems. BY SERGIO RAJSBAUM AND MICHEL RAYNAL Concurrency was once a specialized discipline for experts, but today the chal- lenge is for the entire information tech- nology community because of two dis- ruptive phenomena: the development of Mastering networking communications, and the end of the ability to increase processors speed at an exponential rate. Increases in performance come through concur- Concurrent rency, as in multicore architectures. Concurrency is also critical to achieve fault-tolerant, distributed services, as in global databases, cloud computing, and Computing blockchain applications. Concurrent computing through sequen- tial thinking. Right from the start in the 1960s, the main way of dealing with con- through currency has been by reduction to se- quential reasoning. Transforming problems in the concurrent domain into simpler problems in the sequential Sequential domain, yields benefits for specifying, implementing, and verifying concur- rent programs. It is a two-sided strategy, together with a bridge connecting the Thinking two sides. First, a sequential specificationof an object (or service) that can be ac- key insights ˽ A main way of dealing with the enormous challenges of building concurrent systems is by reduction to sequential I must appeal to the patience of the wondering readers, thinking. Over more than 50 years, more sophisticated techniques have been suffering as I am from the sequential nature of human developed to build complex systems in communication. this way. 12 ˽ The strategy starts by designing —E.W.
    [Show full text]
  • Concurrent Computing
    Concurrent Computing CSCI 201 Principles of Software Development Jeffrey Miller, Ph.D. [email protected] Outline • Threads • Multi-Threaded Code • CPU Scheduling • Program USC CSCI 201L Thread Overview ▪ Looking at the Windows taskbar, you will notice more than one process running concurrently ▪ Looking at the Windows task manager, you’ll see a number of additional processes running ▪ But how many processes are actually running at any one time? • Multiple processors, multiple cores, and hyper-threading will determine the actual number of processes running • Threads USC CSCI 201L 3/22 Redundant Hardware Multiple Processors Single-Core CPU ALU Cache Registers Multiple Cores ALU 1 Registers 1 Cache Hyper-threading has firmware logic that appears to the OS ALU 2 to contain more than one core when in fact only one physical core exists Registers 2 4/22 Programs vs Processes vs Threads ▪ Programs › An executable file residing in memory, typically in secondary storage ▪ Processes › An executing instance of a program › Sometimes this is referred to as a Task ▪ Threads › Any section of code within a process that can execute at what appears to be simultaneously › Shares the same resources allotted to the process by the OS kernel USC CSCI 201L 5/22 Concurrent Programming ▪ Multi-Threaded Programming › Multiple sections of a process or multiple processes executing at what appears to be simultaneously in a single core › The purpose of multi-threaded programming is to add functionality to your program ▪ Parallel Programming › Multiple sections of
    [Show full text]
  • Download Distributed Systems Free Ebook
    DISTRIBUTED SYSTEMS DOWNLOAD FREE BOOK Maarten van Steen, Andrew S Tanenbaum | 596 pages | 01 Feb 2017 | Createspace Independent Publishing Platform | 9781543057386 | English | United States Distributed Systems - The Complete Guide The hope is that together, the system can maximize resources and information while preventing failures, as if one system fails, it won't affect the availability of the service. Banker's algorithm Dijkstra's algorithm DJP algorithm Prim's algorithm Dijkstra-Scholten algorithm Dekker's algorithm generalization Smoothsort Shunting-yard algorithm Distributed Systems marking algorithm Concurrent algorithms Distributed Systems algorithms Deadlock prevention algorithms Mutual exclusion algorithms Self-stabilizing Distributed Systems. Learn to code for free. For the first time computers would be able to send messages to other systems with a local IP address. The messages passed between machines contain forms of data that the systems want to share like databases, objects, and Distributed Systems. Also known as distributed computing and distributed databases, a distributed system is a collection of independent components located on different machines that share messages with each other in order to achieve common goals. To prevent infinite loops, running the code requires some amount of Ether. As mentioned in many places, one of which this great articleyou cannot have consistency and availability without partition tolerance. Because it works in batches jobs a problem arises where if your job fails — Distributed Systems need to restart the whole thing. While in a voting system an attacker need only add nodes to the network which is Distributed Systems, as free access to the network is a design targetin a CPU power based scheme an attacker faces a physical limitation: getting access to more and more powerful hardware.
    [Show full text]
  • Automated Distributed Implementation of Component-Based Models with Priorities Borzoo Bonakdarpour, Marius Bozga, Jean Quilbeuf
    Automated Distributed Implementation of Component-Based Models with Priorities Borzoo Bonakdarpour, Marius Bozga, Jean Quilbeuf To cite this version: Borzoo Bonakdarpour, Marius Bozga, Jean Quilbeuf. Automated Distributed Implementation of Component-Based Models with Priorities. 1th International Conference on Embedded Software, EM- SOFT 2011, Oct 2011, Taipei, Taiwan. pp.59-68, 10.1145/2038642.2038654. hal-00722405 HAL Id: hal-00722405 https://hal.archives-ouvertes.fr/hal-00722405 Submitted on 1 Aug 2012 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. Automated Distributed Implementation of Component-based Models with Priorities∗ Borzoo Bonakdarpour Marius Bozga Jean Quilbeuf School of Computer Science VERIMAG, Centre Équation VERIMAG, Centre Équation University of Waterloo 2 avenue de Vignate 2 avenue de Vignate 200 University Avenue West 38610, GIÈRES, France 38610, GIÈRES, France Waterloo, Canada, N2L3G1 [email protected] [email protected] [email protected] ABSTRACT and Meanings of Programs]: Specifying and Verifying In this paper, we introduce a novel model-based approach for and Reasoning about Programs—Logic of programs; I.2.2 constructing correct distributed implementation of [Artificial Intelligence ]: Automatic Programming—Pro- component-based models constrained by priorities.
    [Show full text]
  • Empirical Study of Concurrent Programming Paradigms
    UNLV Theses, Dissertations, Professional Papers, and Capstones May 2016 Empirical Study of Concurrent Programming Paradigms Patrick M. Daleiden University of Nevada, Las Vegas Follow this and additional works at: https://digitalscholarship.unlv.edu/thesesdissertations Part of the Computer Sciences Commons Repository Citation Daleiden, Patrick M., "Empirical Study of Concurrent Programming Paradigms" (2016). UNLV Theses, Dissertations, Professional Papers, and Capstones. 2660. http://dx.doi.org/10.34917/9112055 This Thesis is protected by copyright and/or related rights. It has been brought to you by Digital Scholarship@UNLV with permission from the rights-holder(s). You are free to use this Thesis in any way that is permitted by the copyright and related rights legislation that applies to your use. For other uses you need to obtain permission from the rights-holder(s) directly, unless additional rights are indicated by a Creative Commons license in the record and/ or on the work itself. This Thesis has been accepted for inclusion in UNLV Theses, Dissertations, Professional Papers, and Capstones by an authorized administrator of Digital Scholarship@UNLV. For more information, please contact [email protected]. EMPIRICAL STUDY OF CONCURRENT PROGRAMMING PARADIGMS By Patrick M. Daleiden Bachelor of Arts (B.A.) in Economics University of Notre Dame, Notre Dame, IN 1990 Master of Business Administration (M.B.A.) University of Chicago, Chicago, IL 1993 A thesis submitted in partial fulfillment of the requirements for the Master of Science in Computer Science Department of Computer Science Howard R. Hughes College of Engineering The Graduate College University of Nevada, Las Vegas May 2016 c Patrick M.
    [Show full text]
  • 60 Years of Mastering Concurrent Computing Through Sequential Thinking Sergio Rajsbaum, Michel Raynal
    60 Years of Mastering Concurrent Computing through Sequential Thinking Sergio Rajsbaum, Michel Raynal To cite this version: Sergio Rajsbaum, Michel Raynal. 60 Years of Mastering Concurrent Computing through Sequential Thinking. ACM SIGACT News, Association for Computing Machinery (ACM), 2020, 51 (2), pp.59-88. 10.1145/3406678.3406690. hal-03162635 HAL Id: hal-03162635 https://hal.archives-ouvertes.fr/hal-03162635 Submitted on 17 Jun 2021 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. 60 Years of Mastering Concurrent Computing through Sequential Thinking ∗ Sergio Rajsbaumy, Michel Raynal?;◦ yInstituto de Matemáticas, UNAM, Mexico ?Univ Rennes IRISA, 35042 Rennes, France ◦Department of Computing, Hong Kong Polytechnic University [email protected] [email protected] Abstract Modern computing systems are highly concurrent. Threads run concurrently in shared-memory multi-core systems, and programs run in different servers communicating by sending messages to each other. Concurrent programming is hard because it requires to cope with many possible, unpre- dictable behaviors of the processes, and the communication media. The article argues that right from the start in 1960’s, the main way of dealing with concurrency has been by reduction to sequential reasoning.
    [Show full text]
  • List of Lectures Lecture Content Concurrent Computing
    List of lectures 1Introduction and Functional Programming 2Imperative Programming and Data Structures 3Parsing TDDA69 Data and Program Structure 4Evaluation 5Object Oriented Programming Concurrent Computing 6Macros and decorators Cyrille Berger 7Virtual Machines and Bytecode 8Garbage Collection and Native Code 9Concurrent Computing 10Declarative Programming 11Logic Programming 12Summary 2 / 65 Lecture content Concurrent computing Parallel Programming In concurrent computing several Multithreaded Programming computations are executed at the same The States Problems and Solutions time Atomic actions Language and Interpreter Design Considerations In parallel computing all computations units Single Instruction, Multiple Threads Programming have access to shared memory (for instance Distributed programming in a single process) Message Passing In distributed computing computations units MapReduce communicate through messages passing 3 / 65 4 / 65 Benefits of concurrent computing Disadvantages of concurrent computing Faster computation Concurrency is hard to implement Responsiveness properly Interactive applications can be performing two Safety tasks at the same time: rendering, spell checking... Easy to corrupt memory Availability of services Deadlock Load balancing between servers Tasks can wait indefinitely for each other Controllability Non-deterministic Tasks can be suspended, resumed and stopped. Not always faster! The memory bandwidth and CPU cache is limited 5 / 65 6 / 65 Concurrent computing programming Stream Programming in Functional
    [Show full text]
  • Jezyki I Paradygmaty Programowania
    Języki i paradygmaty programowania Marek Góźdź 31 maja 2021 Marek Góźdź (31 maja 2021) Języki i paradygmaty programowania 1 / 331 Literatura podstawowa Aut J.E. Hopcroft, R. Motwani, J.D. Ullman, Wprowadzenie do teorii automatów, języków i obliczeń, wyd. 2, PWN, W-wa 2012 7J B.A. Tate, Siedem języków w siedem tygodni. Praktyczny przewodnik nauki języków programowania, Helion 2011 Literatura dodatkowa J. Bylina, B. Bylina, Przegląd języków i paradygmatów programowania, skrypt UMCS, Lublin 2011 M. Lipovaˇca, Learn You a Haskell for Great Good! A Beginner’s Guide, No Starch Press 2011 (dostępny również on-line: learnyouahaskell.com) W.F. Clocksin, C.S. Mellish, Prolog. Programowanie, Helion 2003 (druk na żądanie) dokumentacja i samouczki do języków: Ruby, Haskell i Prolog Marek Góźdź (31 maja 2021) Języki i paradygmaty programowania 2 / 331 Uwaga 1 Warunki zaliczenia: 1 zaliczone ćwiczenia 2 zdany egzamin Uwaga 2 5 ECTS = 125-150 godzin, czyli po 7-10 godzin pracy tygodniowo! Uwaga 3 Wykład dostępny jest na kft.umcs.lublin.pl/mgozdz/ Marek Góźdź (31 maja 2021) Języki i paradygmaty programowania 3 / 331 Dlaczego „Języki i paradygmaty programowania”, a nie „Paradygmaty i języki programowania”? O jakie języki chodzi? Marek Góźdź (31 maja 2021) Języki i paradygmaty programowania 4 / 331 Proces tworzenia programu: 1 cel – co program ma robić 2 projekt – dobór algorytmu 3 opis – dobór głównego paradygmatu 4 technika – dobór technik programowania 5 narzędzia – wybór języka programowania 6 wykonanie – napisanie kodu, sprawdzenie, uruchomienie Punkty 1–5 to praca koncepcyjna, dopiero ostatni punkt to klepanie w klawiaturę. Marek Góźdź (31 maja 2021) Języki i paradygmaty programowania 5 / 331 Paradygmat określa ogólny sposób podejścia do opisu problemu.
    [Show full text]