Introduction.
• About the course; exercises/homeworks; code repositories; examination.
• POSIX
(UNIX) systems [→];
supercomputers and clusters
[top500 supercomuters],
[CSCAA].
• Popular programming
languages [survey@stackoverflow];
• The Computer Language Benchmarks Game
[→]
summary
[→].
• We shall only use "open
software"[→]
in this course.
⊕ Exercise "posix".
Code repositories. Makefiles.
* Distributed Version Control[→]
systems and code repositories; Mercurial[→] (hg)
and Git[→] (git);
* POSIX make utility[→]
for managing projects on a computer.
* C-sharp[→]
mono[→]
framework for POSIX programming.
+ Reading:
note "make",
introduction to Git from Atlassian[→].
+ Exercises:
"git",
"hello#",
"hello++";
- Extra reading: Chapter
"Introduction To Makefiles"[→]
in the "GNU make manual";
- Extra extra reading: Chapter
"make - maintain, update, and regenerate groups of programs",
of the POSIX standard.
+ Quiz:
!string" do?
!number" do?
echo",
"time", and
"date"
do?
echo" and
"time"
programs or shell commands?
You might want to install additional man-pages with the command
sudo apt-get install manpages-posix manpages-posix-dev
Main[main]
function.
int,
double,
string,
System.Numerics.Complex;
int,
double,
long double,
std::string,
std::complex<T>.
System.Console.Write
[std::cout].
System.Math class
[<cmath> header].
$@ (the target),
$< (the first prerequisite),
$^ (all prerequisites).
System.Math class[→].
the System.Console.Write method[→] method for simple output.
$@,
$<,
$^?
$(filter %.cs,$^) ?
$(addprefix -reference:,$(filter %.dll,$^)) ?
echo '$HOME' echo "$HOME" echo '"$HOME"' echo "'$HOME'" echo `pwd`
if else;
Loops for, while, do while;
Loop foreach;
for(init;condition;increment)body"
using the while-loop.
while(condition)body" using
the for-loop.
do body while(condition)" using
the while-loop.
(condition?iftrue:iffalse)",
using the "if" statement.
Hint: google "ternary conditional".
WriteLine($"x={x:e16}");
(try google "c# standard numeric format").
WriteLine( 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1 == 8*0.1 );Why does it produce "false" result ?
WriteLine( 0.125+0.125+0.125+0.125+0.125+0.125+0.125+0.125 == 8*0.125 );Why does this one produce "true" result?
System.Console.Out and
System.Console.In?
Main(string[]
args)"
function after the command
mono main.exe -input:in.txt -output:out.txt -numbers:1e0,2e0,3e0
getconf ARG_MAX" and/or (if you use GNU)
"echo|xargs --show-limits".
`command` and
$(command) in bash. Hint:
Bash
command substitution; POSIX
shell command substitution.
$$(command), in the Makefile? Hint:
GNU make: variables in
recipes.
pwd = a random string test: @echo pwd @echo `pwd` @echo $(pwd) @echo $$(pwd)
More programming:
generics [templates]; delegates [functions]; lambda expressions; closures;
complex numbers.
* C# generics [C++ templates];
* Passing functions around:
C# System.Func<double,double>
[C++ std::function<double(double)>];
* Closures;
+ Reading:
note "C# generics"
["C++ templates"];
+ Reading:
note "C# System.Func<...>"
["C++ std::function<...>"];
+ Exercise:
"generic list in C#"
["generic list in C++"];
+ Exercise:
complex.
- Extra reading:
C-sharp generics[→];
C-sharp delegates[→];
System.Func delegate[→];
Closures in computer programming[→];
+ Quiz:
static void set_arg_to_seven(double x){ x=7; }
Is the argument variable set to seven in the caller's scope (in the
scope where the function is called)?
Explain.
static void set_arg_to_seven(double[] xs){
for(int i=0;i<xs.Length;i++)xs[i]=7; }
Are the elements of the argument array set to seven in the caller's scope?
Explain.
static void set_to_seven(double[] xs){
xs = new double[xs.Length];
for(int i=0;i<xs.Length;i++)xs[i]=7;
}
Are the elements of the argument array set to seven in the caller's scope?
Explain.
static void set_arg_to_seven(ref double x){ x=7; }
Is the argument variable set to seven in the caller's scope?
Hint: google "csharp call by reference".
int.MaxValue" equal to "2³¹-1"?
Suppose you've got the following Makefile,
T1 := target: $@ T2 = target: $@ test: @echo $(T1) @echo $(T2)what will it print and why?
make --jobs[=4];
Suppose you calculate the harmonic sum using system's
"Parallel.For"[→]
loop like this,
double sum=0;
System.Threading.Tasks.Parallel.For(1,N+1,delegate(int i){sum+=1.0/i;});
why does it run slower (and produces wrong (and somewhat random) results)
than the ordinary serial loop,
double sum=0;
for(int i=1; i<N+1; i++) {sum+=1.0/i;}
despite using more processors? (It does so in my box).