Learning Objectives
In this assignment you will demonstrate:
- Familiarity with Distributed Programming concepts.
- The ability to use Parallel Programming constructs in two programming languages.
Readings, Videos, and Self-Study
Although your team will be turning in only one submission, every team member is individually responsible for each of the following:
Submission Instructions
Submit to BrightSpace a PDF or text file with:
- Your name.
- An affidavit that each of the assigned readings were completed.
- A link to a GitHub repository containing your two projects. Your README must contain a description of the problem, the technologies used, and detailed instructions for cloning the repo and running the projects.
Exercises
- In the paper by Bal, Steiner, and Tannenbaum you read above, produce a table categorizing all of the languages covered in that paper. It’s not a difficult task, since all you have to do is collect information from existing tables. However, in doing so, you will be able to get a broad understanding of the landscape of distributed programming languages.:
- What new categories for language classification have arisen since Bal and friends wrote their 1989 paper?
- Choose five programming languages created since 1989 that are not covered in the Bal and friends paper, and show where they fit into the categorization scheme you gave in Exercise 1.
- Write a program in Zig or Rust, using your language’s SIMD support, that accepts three arrays of the same length, $A$, $B$, and $C$, and returns the array $A*B+C$, where multiplication and addition are element-wise.
- Port to Python the Five Pokémons solution we saw earlier in Java and Go.
- Rewrite the Go Dining Philosophers problem to be “fully distributed,” that is remove wait groups and shared variables and communication entirely via channels.
It is okay to get assistance for these projects from an GenAI chatbot, but you are responsible for cleaning up any code and comments it gives you.