wc рд╕реЗ D: 712 рд╡рд░реНрдг рдПрдХ рд╢рд╛рдЦрд╛ рдХреЗ рдмрд┐рдирд╛

" рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдПрдХ 80-рд▓рд╛рдЗрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдорд╛рд░реЛ " рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж , рдЬреЛ рдореБрдЭреЗ рд╣реИрдХрд░ рдиреНрдпреВрдЬ рдкрд░ рдорд┐рд▓рд╛ , рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдбреА рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдореИрдВрдиреЗ D.

Note.per рдореЗрдВ wc рд▓рд┐рдЦрд╛ рдерд╛ ред рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛0xd34df00d, рд▓реЗрдХрд┐рди рд╡рд╣ рдЕрдкрдиреЗ "рд╣рд╛рдХрд┐рдВрдЧ рдХреА рдмреАрд╕ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬреАрддрдирд╛: рдЕрдкрдирд╛ рдбрдмреНрд▓реНрдпреВрд╕реА рд▓рд┐рдЦрдирд╛" рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рдереЗ ред рдФрд░ рдЕрдм рд▓реЗрдЦ rehashings рдХреА рддрд░рд╣ рдЧреБрдгрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ "рдЯрдХрд╕рд╛рд▓ рд╕рд┐рдХреНрдХрд╛ред"

рдХрд╛рд░реНрдпрдХреНрд░рдо


рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ - 34 рд▓рд╛рдЗрдиреЗрдВ рдФрд░ 712 рдЕрдХреНрд╖рд░ред

рд╕реЛрд░реНрд╕ рдХреЛрдб
import std.stdio : writefln, File;
import std.algorithm : map, fold, splitter;
import std.range : walkLength;
import std.typecons : Yes;
import std.uni : byCodePoint;

struct Line {
	size_t chars;
	size_t words;
}

struct Output {
	size_t lines;
	size_t words;
	size_t chars;
}

Output combine(Output a, Line b) pure nothrow {
	return Output(a.lines + 1, a.words + b.words, a.chars + b.chars);
}

Line toLine(char[] l) pure {
	return Line(l.byCodePoint.walkLength, l.splitter.walkLength);
}

void main(string[] args) {
	auto f = File(args[1]);
	Output o = f
		.byLine(Yes.keepTerminator)
		.map!(l => toLine(l))
		.fold!(combine)(Output(0, 0, 0));

	writefln!"%u %u %u %s"(o.lines, o.words, o.chars, args[1]);
}


рдмреЗрд╢рдХ, рд╡рд╣ рдлреЛрдмреЛрд╕, рдбреА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдлреЛрдмреЛрд╕ рд╕реБрдВрджрд░ рд╣реИ, рдФрд░ рд╣рд░ рдбреА рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛрдИ рд╡рдХреНрддрд╡реНрдп рдирд╣реАрдВ рд╣реИред рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рдбрдмреНрд▓реНрдпреВрд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдХрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреА рдХрд╛рд░реНрдпрдХреНрд░рдо, рдореБрдЦреНрдп рдПрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреАрди рдФрд░ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд░реЗрдВрдЬ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд░рдЦ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рд╕рдВрднрд╡рддрдГ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ 80 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреЛрдб рд╢реИрд▓реА рдХрд╛ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИред

рдкреНрд░рджрд░реНрд╢рди


рдХреНрдпрд╛ w рдкрд░ wc рдХреЛрд░ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рддреЗрдЬ рд╣реИ? рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ 15 рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓рдЧрд╛ (рдореБрдЭреЗ рд╡реЙрдХ рд▓реИрдВрде рдХреЛ рджреЗрдЦрдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдлрдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рднреВрд▓ рдЧрдпрд╛ рдерд╛)ред
рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓рдкрдВрдХреНрддрд┐рдпрд╛рдВрдмрд╛рдЗрдЯcoreutilsHaskellрдбреА
app.d469063.5 рдПрдордПрд╕ ┬▒ 1.9 рдПрдордПрд╕39.6 рдПрдордПрд╕ ┬▒ 7.8 рдПрдордПрд╕8.9 рдПрдордПрд╕ ┬▒ 2.1 рдПрдордПрд╕
big.txt86264k4.7 рдПрдордПрд╕ ms 2.0 рдПрдордПрд╕39.6 рдПрдордПрд╕ ┬▒ 7.8 рдПрдордПрд╕9.8 рдПрдордПрд╕ ┬▒ 2.1 рдПрдордПрд╕
vbig.txt1.7M96M658.6ms ┬▒ 24.5ms226.4 рдПрдордПрд╕ ┬▒ 29.5 рдПрдордПрд╕1.102 рдПрд╕ ┬▒ 0.022 рдПрд╕
vbig2.txt12.1M671M4.4 рдПрд╕ 58 0.058 рдПрд╕1.1 рдПрд╕ 39 0.039 рдПрд╕7.4 рдПрд╕ 85 0.085 рдПрд╕

рдпрд╛рдж:
рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓coreutilsHaskellрдбреА
app.d2052K7228K7708K
big.txt2112K7512K7616K
vbig.txt2288K42620K7712K
vbig2.txt2360K50860K7736K
Haskell рдкрд░ рддреЗрдЬреА рд╕реЗ wc? рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, GNU рдХреЛрд░реБрдЯрд┐рд▓реНрд╕ рдЕрднреА рднреА рдЬреАрддрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг IO рджреНрд╡рд╛рд░рд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рддреЗрдЬ рд╣реИред

рдореИрдВ рдпрд╣ рддрд░реНрдХ рдирд╣реАрдВ рджреВрдВрдЧрд╛ рдХрд┐ рдПрдХ рднрд╛рд╖рд╛ рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ рд╣реИред рдпрджрд┐ рдЖрдк рдорд╛рдЗрдХреНрд░реЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЬреАрддреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЕрд╕рд▓ рдЬрд┐рдВрджрдЧреА рдореЗрдВ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдбреА рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓рдЧрднрдЧ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдПрдлрдкреА рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИред

рдбреА рдореЗрдВ рд░реЗрдВрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛


рд╕реАрдорд╛ рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рд╣реИ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрдЧреНрд░рд╣ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреЛ рдЫреВрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рд╕реАрдорд╛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рд╡рд░реНрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд░реЗрдВрдЬ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред рд╕рд░рд▓рддрдо рд░реВрдк, InputRange, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

void popFront();

рдФрд░ рджреЛ рд╕рджрд╕реНрдп рдпрд╛ рдЧреБрдг

T front;
bool empty;

T рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрддреНрд╡ рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рддрд╛ рд╣реИред

рдбреА рд░реЗрдВрдЬ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдЬрдм рд╕реАрдорд╛ рдлреЙрд░реНрдЪреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдЖрддреА рд╣реИ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╢реЛрдзрди рдХрд░рддрд╛ рд╣реИред

foreach (e; range) { ... }

рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ

for (auto __r = range; !__r.empty; __r.popFront()) {
    auto e = __r.front;
    ...
}

рдСрдЯреЛ рдИ = рдкреНрд░рдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЯреА рдИ = рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдПрдХ рдРрд╕реА рд╕реАрдорд╛ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝реЙрд░реНрдЪ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

struct Iota {
	int front;
	int end;

	@property bool empty() const {
		return this.front == this.end;
	}

	void popFront() {
		++this.front;
	}
}

unittest {
	import std.stdio;
	foreach(it; Iota(0, 10)) {
		writeln(it);
	}
}

Iota рд░реЗрдВрдЬ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд┐рдирд╛, рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╢реБрд░реВ рд╕реЗ рдЕрдВрдд рддрдХ рдПрдХ рдХреА рд╡реГрджреНрдзрд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рд╕реЗ рдбреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИред

@property bool empty() const {

@ рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрдкрдХреЛ рдПрдХ рд╕рджрд╕реНрдп рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рдЦрд╛рд▓реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ (рдХреЛрд╖реНрдардХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛)ред рдЕрдВрдд рдореЗрдВ рдХрд╛рд╕реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЦрд╛рд▓реА рдХрд╣рддреЗ рд╣реИрдВ ред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг 0 рд╕реЗ 10 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЕрдиреНрдп рдЫреЛрдЯреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдХреА рдХрдореА рд╣реИред Iota рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рджреЛ рдЕрдВрддрд░ рд╕рджрд╕реНрдп рдЪрд░ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдлреЙрд░реНрдЪреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ, рд╣рдо рдПрдХ рдЖрдИрдУрдЯреА рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рджреЛ рдЗрдирдЯреНрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╢рд╛рдмреНрджрд┐рдХ рд╣реИред рдЬрдм рдХрдВрдкрд╛рдЗрд▓рд░ рдбреА рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рд╕рдВрдЧрдд рдирд┐рд░реНрдорд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ - рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЗрдВрдЯ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ред

рддреАрди рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЦрд╛рд▓реА рдЭреВрдареА рд╣реИ, рддреЛ рдкреЙрдкрдлреНрд░рдВрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рддрддреНрд╡ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИред PopFront рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЦрд╛рд▓реА рдорд╛рди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рдЪ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рдХреА рдХреЙрд▓ рдЕрдорд╛рдиреНрдп рд╣реИрдВред InputRange рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ :

  • рд╕рд╛рдордиреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЕрдЧрд░ рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЦрд╛рд▓реА рд░рд┐рдЯрд░реНрди рдпрд╛ рдЭреВрдареЗ рд╡рд╛рдкрд╕ рдЖрдПрдВрдЧреЗред
  • рдкреЙрдкрдлреНрд░рдВрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдХрдИ рдмрд╛рд░ рд╕рд╛рдордиреЗ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдЕрдиреНрдпрдерд╛ рдореНрдпреВрдЯрд┐рдВрдЧ рд░реЗрдВрдЬ рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛, рдФрд░ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред

рдлреЙрд░реНрдЪ рднрд╛рд╡, рдпрд╛ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдмрд╣реБрдд рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо Iota рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдЕрдЧрд░рдмрддреНрддреА рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдмрджрддрд░ рдмрдирд╛ рджреЗрдЧрд╛ред рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реАрдорд╛ рдереА рдЬреЛ рдПрдХ рд╕реАрдорд╛ рд▓реЗрддреА рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рдзреЗрдп рд╣реИ рдЬреЛ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рддрддреНрд╡ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред

struct Filter {
	Iota input;
	bool function(int) predicate;

	this(Iota input, bool function(int) predicate) {
		this.input = input;
		this.predicate = predicate;
		this.testAndIterate();
	}

	void testAndIterate() {
		while(!this.input.empty
				&& !this.predicate(this.input.front))
		{
			this.input.popFront();
		}
	}

	void popFront() {
		this.input.popFront();
		this.testAndIterate();
	}

	@property int front() {
		return this.input.front;
	}

	@property bool empty() const {
		return this.input.empty;
	}
}

bool isEven(int a) {
	return a % 2 == 0;
}

unittest {
	foreach(it; Filter(Iota(0,10), &isEven)) {
		writeln(it);
	}
}

рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд┐рд░ рд╕реЗ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: Iota рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рд╣рдо testAndIterate рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ Iota рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рддрдм рддрдХ рд▓реЗрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЦрд╛рд▓реА рди рд╣реЛ рдпрд╛ рд╡рд┐рдзреЗрдп рдЧрд▓рдд рди рд╣реЛ рдЬрд╛рдПред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдзреЗрдп рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЫреЛрдбрд╝рдирд╛ рд╣реИред рд╕рд╛рдордиреЗ рдФрд░ рдЦрд╛рд▓реА рдЧреБрдг рдмрд╕ Iota рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ рд╡рд╣ рд╣реИ рдкреЙрдкрдлреНрд░рдВрдЯред рдпрд╣ рдХрд░рдВрдЯ рдЖрдЗрдЯрдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ testAndIterate рдХрд╣рддрд╛ рд╣реИред рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдпрд╣ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред

рдмреЗрд╢рдХ, testAndIterate рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХрд╛ рд▓реВрдк рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛, рд╕рд┐рд░реНрдл рд╕рд╛рджрд╛ рдореВрд░реНрдЦрддрд╛ рд╣реИред рдбреА рдорд╣рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рдирд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдФрд░ рдЕрдХреНрд╕рд░ flaunts, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдереЛрдбрд╝реА рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдореНрдмрд▓рд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╛ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдЕрднреА рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдкрдврд╝рдиреЗ рдХреЗ рдЖрджреА рд╣реИрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ Iota рд╕реЗ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ Iota рдХреЗ рдмрд╛рдж рдЪрд▓рддрд╛ рд╣реЛред D рдПрдХ рдкрд╛рдЗрдк рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреВрдирд┐рдлрд╛рдЗрдб рдлрдВрдХреНрд╢рди рдХреЙрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ (UFCS) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡рд╣ рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдпрд╣ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорджрдж рдХрд░реЗрдЧрд╛:

string foo(string a) {
	return a ~ "World";
}

unittest {
	string a = foo("Hello ");
	string b = "Hello ".foo();
	assert(a == b);
}

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдлреВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЛ рдХреЙрд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЦрд░ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ, рджреЛрдиреЛрдВ рдХреЙрд▓ рдмрд░рд╛рдмрд░ рд╣реИрдВред рд╣рдорд╛рд░реЗ Iota рдлрд╝рд┐рд▓реНрдЯрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? UFCS рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

unittest {
	foreach(it; Iota(1,10).Filter(&isEven)) {
		writeln(it);
	}
}

рд░реЗрдВрдЬ рдХреЗ рд▓рд┐рдП рдирдХреНрд╢рд╛ / рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм рд╣рд░ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рдХреЗрд╡рд▓ рд╡рд┐рд╡рд░рдг рд╣реИрдВ, рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдирдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

рдмреЗрд╢рдХ, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреНрд╡рд┐рджрд┐рд╢ред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИред рдПрдХ рддреНрд╡рд░рд┐рдд рдЯрд┐рдк: рдкреАрдЫреЗ рдФрд░ popBack рдирд╛рдордХ рджреНрд╡рд┐рджрд┐рд╢ рд╕реАрдорд╛ рдореЗрдВ рджреЛ рдирдП рдЖрджрд┐рдо рд╣реИрдВред рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рджреЛ рдмрд╛рд░ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдЗрдирдкреБрдЯ рд░реЗрдВрдЬ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓рдЧрднрдЧ рдЙрдиреНрд╣реЗрдВ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВред

PS рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░, рдорд╛рдирдЪрд┐рддреНрд░ рдпрд╛ рдЧреБрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рди рдХрд░реЗрдВ; рдлреЛрдмреЛрд╕ рдбреА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред Std.algorithm рдФрд░ std.range рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ ред

рд▓реЗрдЦрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рд░реЙрдмрд░реНрдЯ рд╢реЗрд╣рдбреЗрдХ рдиреЗ рдУрд▓реНрдбрдирдмрд░реНрдЧ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдбрд┐рдЧреНрд░реА рд╣рд╛рд╕рд┐рд▓ рдХреАред рдЙрдирдХреЗ рдЧреБрд░реБ рдХреА рдереАрд╕рд┐рд╕ "DMCD - рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрдЯреЗрдб рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдбреА рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдж рдХреИрд╢рд┐рдВрдЧ" рдереА, рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рдбреА-рдХрдВрдкрд╛рдЗрд▓рд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╡рд╣ 2012-2018 рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд╛рдЗрдВрд╕ рдореЗрдВ рд╕реНрдирд╛рддрдХ рдЫрд╛рддреНрд░ рдереЗред рдУрд▓реНрдбреЗрдирдмрд░реНрдЧ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВред рдЙрдирдХрд╛ рдбреЙрдХреНрдЯрд░реЗрдЯ рд╢реЛрдз рдкреНрд░рдмрдВрдз рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдХреЛрд░рдо рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред 2018 рд╕реЗ, рд╡рд╣ рдЕрдкрдиреЗ рджреИрдирд┐рдХ рдХрд╛рдо рдореЗрдВ рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреГрдкрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕рдорд░реВрдкрддрд╛ рдирд┐рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕рдорд░реВрдкрддрд╛ рдирд┐рд╡реЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рд╕рд┐рдорд┐рдЯреНрд░реА рдЗрдиреНрд╡реЗрд╕реНрдЯрдореЗрдВрдЯреНрд╕ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдирд┐рд╡реЗрд╢ рдХрдВрдкрдиреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╣рд╛рдВрдЧрдХрд╛рдВрдЧ, рд╕рд┐рдВрдЧрд╛рдкреБрд░ рдФрд░ рд▓рдВрджрди рдореЗрдВ рд╣реИрдВред рд╣рдо рдиреНрдпреВрдпреЙрд░реНрдХ рдХреЗ рдПрдХ рдкреНрд░рдореБрдЦ рд╣реЗрдЬ рдлрдВрдб рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 2014 рд╕реЗ рдХрд╛рд░реЛрдмрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╕рдорд░реВрдкрддрд╛ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ, рднрд╛рдЧреАрджрд╛рд░реЛрдВ рдФрд░ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрдереЛрдЪрд┐рдд рдЬреЛрдЦрд┐рдо рд▓реЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЬреАрдд-рдЬреАрдд рдЕрдиреБрдмрдВрдз рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдкрдиреА рдХреНрд╖рдорддрд╛ рд╕реЗ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ - рд╢рдмреНрдж рдХреЗ рд╡реНрдпрд╛рдкрдХ рдЕрд░реНрде рдореЗрдВред рд╡рд┐рди-рд╡рд┐рди рд╣рдорд╛рд░рд╛ рдореМрд▓рд┐рдХ рдиреИрддрд┐рдХ рдФрд░ рд░рдгрдиреАрддрд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИред рдЬреАрдд-рдЬреАрдд рдХреЗ рд╡рд┐рдХрд▓реНрдк рдкреИрджрд╛ рдХрд░рдХреЗ, рд╣рдо рдЕрджреНрд╡рд┐рддреАрдп рд╕рдорд╛рдзрд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЕрд╕рдВрдЧрдд рдпрд╛ рд╡рд┐рдкрд░реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд░реНрдЯреА рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддреА рд╣реИред рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рдореИрдХреНрд░реЛ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд╢реНрдЪрд┐рдд рдЖрдп рдордзреНрдпрд╕реНрдерддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдПрдХ рдРрд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдирд╡-рдорд╢реАрди рдПрдХреАрдХрд░рдг рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдорд╢реАрдиреЗрдВ рд╡рд╣реА рдХрд░рддреА рд╣реИрдВ рдЬреЛ рд╡реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рд╣реЛрддрд╛ рд╣реИрддрд╛рдХрд┐ рд╡реЗ рд╡рд╣реА рдХрд░реЗрдВ рдЬреЛ рд╡реЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕рд╣рдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдпреЛрдЧреНрдпрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ: рдПрдХ рдРрд╕реА рд╕рдВрд╕реНрдХреГрддрд┐ рдЬрд┐рд╕рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдпреЛрдЧрджрд╛рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рдФрд░ рд╕рд╛рдореВрд╣рд┐рдХ рджреЛрдиреЛрдВ рддрд░рд╣ рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдЙрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрд╕реЗ рдкреБрд░рд╕реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рднрд╛рд╡рдирд╛ рдФрд░ рд╕рд╣рдпреЛрдЧ, рдЖрддреНрдо-рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдФрд░ рд╕рдореБрджрд╛рдп рдХреА рдЯреАрдо рднрд╛рд╡рдирд╛ рджреЛрдиреЛрдВ рдХреЛ рдорд╣рддреНрд╡ рджреЗрддреЗ рд╣реИрдВред

рд╕рд┐рдорд┐рдЯреНрд░реА рдЗрдирд╡реЗрд╕реНрдЯрдореЗрдВрдЯ рдХреЗ рд▓реЛрдЧ 2014 рд╕реЗ рдХрдореНрдпреБрдирд┐рдЯреА рдбреА рдХреЗ рд╕рдХреНрд░рд┐рдп рд╕рджрд╕реНрдп рд╣реИрдВред рд╣рдордиреЗ рдПрдХреНрд╕реЗрд▓-рдбреА, рдбреАрдкреАрдкреА, рдСрдЯреЛрдкреНрд░реЗрдк, рд▓рд┐рдмрдорд┐рд░ рдФрд░ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдкреНрд░рд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ред рд╣рдордиреЗ 2018 рдореЗрдВ рдХреЛрдб рдСрдлрд╝ рд╕рд┐рдорд┐рдЯреНрд░реА рдСрдЯрдо рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдФрд░ рд▓рдВрджрди рдореЗрдВ DConf 2019 рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреАред

рд▓рдЧрднрдЧред рдЪреВрдВрдХрд┐ рдЕрдиреБрд╡рд╛рджрдХ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдирд╢реЗ рдореЗрдВ рдерд╛, рдореИрдВ рдХреБрдЫ рдорд╛рдирд╡реАрдп рд╢рдмреНрджреЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдЙрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдФрд░ рдореИрдВ рдЕрдВрддрд┐рдо рдЦрдВрдб рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдЗрд╕рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрдЪрд╛рд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рднреЗрдЬреЗрдВред

All Articles