Differences

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

Link to this comparison view

dss:laboratoare:02 [2019/06/13 10:09]
razvan.nitu1305
dss:laboratoare:02 [2019/06/20 10:40] (current)
razvan.nitu1305 [2. Generic Partitioning Search]
Line 683: Line 683:
  
 Template constraints have the same syntax as an if statement (without else). Template constraints have the same syntax as an if statement (without else).
 +
 +
  
 ===== Exercises ===== ===== Exercises =====
  
-TODO+The exercises for ''​lab-02''​ are located in this [[https://​github.com/​RazvanN7/​D-Summer-School/​tree/​master/​lab-02|repo]]. 
 + 
 +==== 1. Enum disassembly ==== 
 + 
 +Go to this [[https://​godbolt.org/​z/​0RGPvB|link]]. You will find the disassembly of a code. Observe how the call 
 +to function **sum** is translated in assembly code. Explain the output. 
 + 
 +==== 2. Generic Partitioning Search ==== 
 + 
 +Implement a generic partitioning search algorithm. 
 +  
 +  * The algorithm will receive an array/​associative array and an element and returns the number of elements that are lesser than the element in the array/​associative array list of keys. 
 +  * The element type may be struct, class or builtin type. 
 +  * Use templated function(s) and **template constraints** or **static if**s to implement the various cases. 
 +  * Use these [[https://​dlang.org/​phobos/​std_traits.html|helper traits]]. 
 + 
 +==== 3. Pragma(msg) ==== 
 + 
 +Pragmas are compile time instructions used to pass or ask the compiler for specific information. **pragma(msg)** is used as a compile time debugging tool that allows printing of compile time known variables:​ 
 + 
 +<code D> 
 +class Foo {} 
 +Foo a; 
 +enum b = 2; 
 +pragma(msg, "​hello"​); ​    // prints "​hello"​ at compile time 
 +pragma(msg, Foo);         // prints Foo at compile time 
 +pragma(msg, a);           // error, a cannot be read at compile time 
 +pragma(msg, typeof(a)); ​  // prints Foo at compile time 
 +pragma(msg, b);           // prints 2 at compile time 
 +</​code>​ 
 + 
 +Use **pragma(msg)** inside the templated functions from the previous exercise. Observe the output when compiling the code. Explain the results. 
 + 
 +==== 4. Template Sequence Parameters ==== 
 + 
 +Navigate to the ''​4-template''​ directory. Inspect the source ''​template.d''​ and try to understand what happens. What does the code do? How many instances of the **printArguments** function are created? 
 + 
 +<note hint> 
 +Use **pragma(msg)** to inspect the instantiation type(s). 
 +</​note>​ 
 + 
 +==== 5. Error ==== 
 + 
 +Navigate to the ''​5-error''​ directory. Inspect and compile the code. What happens? Why? Solve the issue. 
 + 
 +==== 6. Standard library template example ==== 
 + 
 +Follow this [[https://​github.com/​dlang/​phobos/​blob/​master/​std/​algorithm/​sorting.d#​L317|link]]. That is the official D language standard library implementation of the **ordered** function. Read the documentation and the unittests, then try to understand the implementation. This is how real life meta-programming looks like. Ask the [[http://​ocw.cs.pub.ro/​courses/​dss?&#​team|lab rats]] about clarifications on any misunderstandings. ​
dss/laboratoare/02.1560409741.txt.gz · Last modified: 2019/06/13 10:09 by razvan.nitu1305
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