Differences

This shows you the differences between two versions of the page.

Link to this comparison view

dss:workshop-01 [2019/08/14 13:51]
eduard.staniloiu
dss:workshop-01 [2021/03/10 23:46] (current)
eduard.staniloiu
Line 1: Line 1:
 ====== Highschool workshop - Introduction to D ====== ====== Highschool workshop - Introduction to D ======
 +
 +===== Slides =====
 +
 +{{:​dss:​workshop-liceu.odp|Slides}}
  
 ===== Exercises ===== ===== Exercises =====
 +
 +For these exercises you can use the [[https://​run.dlang.io|D Online Editor]].
 +If you wish to install the D compiler and Standard Library, go to the [[https://​dlang.org/​download.html|download]] page.
  
 ==== 1. Array Median Element ==== ==== 1. Array Median Element ====
Line 12: Line 19:
   - Write [[https://​ocw.cs.pub.ro/​courses/​dss/​laboratoare/​01#​unittests|unittests]] to validate your implementation.   - Write [[https://​ocw.cs.pub.ro/​courses/​dss/​laboratoare/​01#​unittests|unittests]] to validate your implementation.
  
-<​note>​+<​note ​tip>
 Use small [[https://​ocw.cs.pub.ro/​courses/​dss/​laboratoare/​01#​functions|functions]] to increase code readability and testing. Use small [[https://​ocw.cs.pub.ro/​courses/​dss/​laboratoare/​01#​functions|functions]] to increase code readability and testing.
 </​note>​ </​note>​
  
 +<​note>​
 +Remember to pass the **-unittest** argument to the compiler, in order to enable the unittests.
 +</​note>​
  
 +==== 2. The Standard Library ====
 +
 +D has a standard library called [[https://​dlang.org/​phobos/​|Phobos]]. Implement exercise 1 using functions from the [[https://​dlang.org/​phobos/​std_algorithm.html|std.algorithm]] package. Use Universal Function Call Syntax (**UFCS**) for an increase in expressiveness.
 +
 +==== 3. Dictionaries ====
 +
 +Using [[https://​ocw.cs.pub.ro/​courses/​dss/​laboratoare/​01#​associative_arrays_aa|associative arrays]]:
 +  - Store mappings between the name of your team mates and their email address.
 +  - Extend the previous point to also store their phone numbers.
 +
 +<note tip>
 +For bullet 2, use a [[https://​ocw.cs.pub.ro/​courses/​dss/​laboratoare/​01#​struct_vs_class|struct]],​ let's call it ColleagueInfo,​ to wrap their //email// and //phone// number.
 +<​code>​
 +struct ColleagueInfo
 +{
 +    string telefon;
 +    string mail;
 +}
 +</​code>​
 +
 +Now go ahead and create your <name, ColleagueInfo>​ dictionary
 +<​code>​
 +ColleagueInfo[string] d;
 +</​code>​
 +
 +</​note>​
 +
 +==== 4. @safe ====
 +
 +Inspect the [[https://​github.com/​edi33416/​D-Summer-School/​blob/​ipworkshop/​hs-workshop/​4-safe/​safe.d|source file]].
 +Compile and run the code.
 +
 +  - What does the code do? Why is it useful to take the address of a parameter?
 +  - Add the [[http://​ocw.cs.pub.ro/​courses/​dss/​laboratoare/​03?&#​safe_functions|@safe]] attribute to the **main** function. What happens?
 +  - How can we get rid of the error messages?
 +
 +==== 5. Function templates ====
 +
 +Write a simple templated function that computes the sum of the elements of an array.
 +Your function should be able to work on any numeric type. This is exactly what we demoed in the presentation.
 +
 +<​note>​
 +If you want to read more about D meta-programming,​ start with this introductory [[https://​ocw.cs.pub.ro/​courses/​dss/​laboratoare/​02|hands-on]].
 +</​note>​
  
dss/workshop-01.1565779917.txt.gz ยท Last modified: 2019/08/14 13:51 by eduard.staniloiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0