<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF159%3A_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8</id>
		<title>LXF159: Устоим перед отказами - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF159%3A_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;action=history"/>
		<updated>2026-05-14T05:47:00Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=18011&amp;oldid=prev</id>
		<title>Olkol: /* Erlang: Ус­тои­м перед от­ка­зами */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=18011&amp;oldid=prev"/>
				<updated>2018-09-25T22:34:45Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Erlang: Ус­тои­м перед от­ка­зами&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 22:34, 25 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 21:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Для понимания то­го, как про­ис­хо­дит по­иск, раз­бе­рем­ся, как осу­ще­ст­в­ля­ет­ся вы­полнение ка­ко­го-ли­бо при­ло­жения. Единицей вы­полнения всегда яв­ля­ет­ся функ­ция. Вы­полнение при­ло­жения на­чи­на­ет­ся с неко­то­рой функ­ции, на­зы­вае­мой точ­кой вхо­да [entry point]; в про­цес­се ра­бо­ты эта функ­ция мо­жет вы­зы­вать дру­гие функ­ции, а те, в свою оче­редь, мо­гут вы­зы­вать еще ка­кие-ли­бо функ­ции, и т. д. В лю­бой мо­мент вре­мени со­стояние вы­полнения про­грам­мы со­дер­жит, по­ми­мо ука­за­те­ля команд, и ин­фор­ма­цию о том, ка­кие функ­ции бы­ли вы­зва­ны пе­ред тем, как вы­полнение про­грам­мы при­шло в те­ку­щую точ­ку (на ко­то­рую ука­зы­ва­ет ука­за­тель команд). Ес­ли во вре­мя вы­полнения про­грам­мы про­ис­хо­дит ис­клю­чение, нор­маль­ное вы­полнение про­грам­мы приоста­нав­ли­ва­ет­ся (сре­дой вы­полнения) и на­чи­на­ет­ся рас­крут­ка [unwind] сте­ка в по­ис­ках пер­вого под­хо­дя­ще­го об­ра­бот­чика возник­ше­го ис­клю­чения. По­иск идет сле­дую­щим об­ра­зом: сна­ча­ла мы про­смат­ри­ваем спи­сок за­ре­ги­ст­ри­ро­ван­ных об­ра­бот­чи­ков в те­ку­щей точ­ке вы­полнения. Ес­ли сре­да вы­полнения на­шла под­хо­дя­щий об­ра­бот­чик, то вы­полнение про­грам­мы пе­ре­да­ет­ся на него; по­сле об­ра­бот­ки ис­клю­чения (ес­ли во вре­мя об­ра­бот­ки не бы­ло сгенери­ро­ва­но ника­ко­го ис­клю­чения) вы­полнение про­грам­мы про­дол­жа­ет­ся в нор­маль­ном ре­жи­ме. Ес­ли сре­да вы­полнения под­хо­дя­щий об­ра­бот­чик не на­шла или ес­ли во вре­мя ра­бо­ты об­ра­бот­чи­ка бы­ло сгенери­ро­ва­но это же или ка­кое-ли­бо дру­гое ис­клю­чение, сре­да вы­полнения пе­ре­хо­дит в точ­ку про­грам­мы, из ко­то­рой бы­ла вы­зва­на дан­ная функ­ция, и про­дол­жа­ет по­иск там. Эта точ­ка про­грам­мы при­над­ле­жит неко­то­рой ро­ди­тель­ской функ­ции, т. е. функ­ции, в хо­де вы­полнения ко­то­рой бы­ла вы­зва­на дан­ная функ­ция.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Для понимания то­го, как про­ис­хо­дит по­иск, раз­бе­рем­ся, как осу­ще­ст­в­ля­ет­ся вы­полнение ка­ко­го-ли­бо при­ло­жения. Единицей вы­полнения всегда яв­ля­ет­ся функ­ция. Вы­полнение при­ло­жения на­чи­на­ет­ся с неко­то­рой функ­ции, на­зы­вае­мой точ­кой вхо­да [entry point]; в про­цес­се ра­бо­ты эта функ­ция мо­жет вы­зы­вать дру­гие функ­ции, а те, в свою оче­редь, мо­гут вы­зы­вать еще ка­кие-ли­бо функ­ции, и т. д. В лю­бой мо­мент вре­мени со­стояние вы­полнения про­грам­мы со­дер­жит, по­ми­мо ука­за­те­ля команд, и ин­фор­ма­цию о том, ка­кие функ­ции бы­ли вы­зва­ны пе­ред тем, как вы­полнение про­грам­мы при­шло в те­ку­щую точ­ку (на ко­то­рую ука­зы­ва­ет ука­за­тель команд). Ес­ли во вре­мя вы­полнения про­грам­мы про­ис­хо­дит ис­клю­чение, нор­маль­ное вы­полнение про­грам­мы приоста­нав­ли­ва­ет­ся (сре­дой вы­полнения) и на­чи­на­ет­ся рас­крут­ка [unwind] сте­ка в по­ис­ках пер­вого под­хо­дя­ще­го об­ра­бот­чика возник­ше­го ис­клю­чения. По­иск идет сле­дую­щим об­ра­зом: сна­ча­ла мы про­смат­ри­ваем спи­сок за­ре­ги­ст­ри­ро­ван­ных об­ра­бот­чи­ков в те­ку­щей точ­ке вы­полнения. Ес­ли сре­да вы­полнения на­шла под­хо­дя­щий об­ра­бот­чик, то вы­полнение про­грам­мы пе­ре­да­ет­ся на него; по­сле об­ра­бот­ки ис­клю­чения (ес­ли во вре­мя об­ра­бот­ки не бы­ло сгенери­ро­ва­но ника­ко­го ис­клю­чения) вы­полнение про­грам­мы про­дол­жа­ет­ся в нор­маль­ном ре­жи­ме. Ес­ли сре­да вы­полнения под­хо­дя­щий об­ра­бот­чик не на­шла или ес­ли во вре­мя ра­бо­ты об­ра­бот­чи­ка бы­ло сгенери­ро­ва­но это же или ка­кое-ли­бо дру­гое ис­клю­чение, сре­да вы­полнения пе­ре­хо­дит в точ­ку про­грам­мы, из ко­то­рой бы­ла вы­зва­на дан­ная функ­ция, и про­дол­жа­ет по­иск там. Эта точ­ка про­грам­мы при­над­ле­жит неко­то­рой ро­ди­тель­ской функ­ции, т. е. функ­ции, в хо­де вы­полнения ко­то­рой бы­ла вы­зва­на дан­ная функ­ция.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|left|Заголовок=По­лез­ные за­мет­ки|Ширина=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;500&lt;/del&gt;% |Содержание=Да­вай­те рас­смот­рим бли­же про­бле­му гра­мот­ной очи­ст­ки ре­сур­сов в си­туа­ции, когда о том, что про­изош­ла ошиб­ка, мы мо­жем уз­нать толь­ко при по­мо­щи воз­вра­щае­мых зна­чений и ко­дов ошиб­ки. Для это­го на­пи­шем несколь­ко ва­ри­ан­тов неболь­шо­го фраг­мен­та ко­да на язы­ке C под опе­ра­ци­он­ную сис­те­му Linux, в ко­то­ром мы от­кро­ем два фай­ла и вы­полним с эти­ми от­кры­ты­ми фай­ла­ми неко­то­рую ра­бо­ту, по­сле че­го за­кро­ем их. Для оп­ре­де­лен­но­сти бу­дем счи­тать, что этот фраг­мент на­хо­дит­ся внут­ри функ­ции с ти­пом воз­вра­щае­мо­го зна­чения void. Пер­вый ва­ри­ант – об­ра­ба­ты­вать про­бле­мы при от­кры­тии фай­ла, и ес­ли файл от­крыть не уда­лось, пе­ре­да­вать управ­ление из фраг­мен­та ко­да на­ру­жу. Ес­ли при от­кры­тии вто­ро­го фай­ла у нас возник­нут ка­кие-ли­бо про­бле­мы, то мы вый­дем из фраг­мен­та ко­да, оста­вив неза­кры­тым пер­вый файл. Та­ким об­ра­зом, на­ли­цо по­тен­ци­аль­ная утеч­ка ре­сур­сов.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|left|Заголовок=По­лез­ные за­мет­ки|Ширина=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;50&lt;/ins&gt;% |Содержание=Да­вай­те рас­смот­рим бли­же про­бле­му гра­мот­ной очи­ст­ки ре­сур­сов в си­туа­ции, когда о том, что про­изош­ла ошиб­ка, мы мо­жем уз­нать толь­ко при по­мо­щи воз­вра­щае­мых зна­чений и ко­дов ошиб­ки. Для это­го на­пи­шем несколь­ко ва­ри­ан­тов неболь­шо­го фраг­мен­та ко­да на язы­ке C под опе­ра­ци­он­ную сис­те­му Linux, в ко­то­ром мы от­кро­ем два фай­ла и вы­полним с эти­ми от­кры­ты­ми фай­ла­ми неко­то­рую ра­бо­ту, по­сле че­го за­кро­ем их. Для оп­ре­де­лен­но­сти бу­дем счи­тать, что этот фраг­мент на­хо­дит­ся внут­ри функ­ции с ти­пом воз­вра­щае­мо­го зна­чения void. Пер­вый ва­ри­ант – об­ра­ба­ты­вать про­бле­мы при от­кры­тии фай­ла, и ес­ли файл от­крыть не уда­лось, пе­ре­да­вать управ­ление из фраг­мен­та ко­да на­ру­жу. Ес­ли при от­кры­тии вто­ро­го фай­ла у нас возник­нут ка­кие-ли­бо про­бле­мы, то мы вый­дем из фраг­мен­та ко­да, оста­вив неза­кры­тым пер­вый файл. Та­ким об­ра­зом, на­ли­цо по­тен­ци­аль­ная утеч­ка ре­сур­сов.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;int descr1, descr2;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;int descr1, descr2;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=17992&amp;oldid=prev</id>
		<title>Olkol: /* Erlang: Ус­тои­м перед от­ка­зами */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=17992&amp;oldid=prev"/>
				<updated>2018-09-25T03:26:06Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Erlang: Ус­тои­м перед от­ка­зами&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 03:26, 25 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 21:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Для понимания то­го, как про­ис­хо­дит по­иск, раз­бе­рем­ся, как осу­ще­ст­в­ля­ет­ся вы­полнение ка­ко­го-ли­бо при­ло­жения. Единицей вы­полнения всегда яв­ля­ет­ся функ­ция. Вы­полнение при­ло­жения на­чи­на­ет­ся с неко­то­рой функ­ции, на­зы­вае­мой точ­кой вхо­да [entry point]; в про­цес­се ра­бо­ты эта функ­ция мо­жет вы­зы­вать дру­гие функ­ции, а те, в свою оче­редь, мо­гут вы­зы­вать еще ка­кие-ли­бо функ­ции, и т. д. В лю­бой мо­мент вре­мени со­стояние вы­полнения про­грам­мы со­дер­жит, по­ми­мо ука­за­те­ля команд, и ин­фор­ма­цию о том, ка­кие функ­ции бы­ли вы­зва­ны пе­ред тем, как вы­полнение про­грам­мы при­шло в те­ку­щую точ­ку (на ко­то­рую ука­зы­ва­ет ука­за­тель команд). Ес­ли во вре­мя вы­полнения про­грам­мы про­ис­хо­дит ис­клю­чение, нор­маль­ное вы­полнение про­грам­мы приоста­нав­ли­ва­ет­ся (сре­дой вы­полнения) и на­чи­на­ет­ся рас­крут­ка [unwind] сте­ка в по­ис­ках пер­вого под­хо­дя­ще­го об­ра­бот­чика возник­ше­го ис­клю­чения. По­иск идет сле­дую­щим об­ра­зом: сна­ча­ла мы про­смат­ри­ваем спи­сок за­ре­ги­ст­ри­ро­ван­ных об­ра­бот­чи­ков в те­ку­щей точ­ке вы­полнения. Ес­ли сре­да вы­полнения на­шла под­хо­дя­щий об­ра­бот­чик, то вы­полнение про­грам­мы пе­ре­да­ет­ся на него; по­сле об­ра­бот­ки ис­клю­чения (ес­ли во вре­мя об­ра­бот­ки не бы­ло сгенери­ро­ва­но ника­ко­го ис­клю­чения) вы­полнение про­грам­мы про­дол­жа­ет­ся в нор­маль­ном ре­жи­ме. Ес­ли сре­да вы­полнения под­хо­дя­щий об­ра­бот­чик не на­шла или ес­ли во вре­мя ра­бо­ты об­ра­бот­чи­ка бы­ло сгенери­ро­ва­но это же или ка­кое-ли­бо дру­гое ис­клю­чение, сре­да вы­полнения пе­ре­хо­дит в точ­ку про­грам­мы, из ко­то­рой бы­ла вы­зва­на дан­ная функ­ция, и про­дол­жа­ет по­иск там. Эта точ­ка про­грам­мы при­над­ле­жит неко­то­рой ро­ди­тель­ской функ­ции, т. е. функ­ции, в хо­де вы­полнения ко­то­рой бы­ла вы­зва­на дан­ная функ­ция.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Для понимания то­го, как про­ис­хо­дит по­иск, раз­бе­рем­ся, как осу­ще­ст­в­ля­ет­ся вы­полнение ка­ко­го-ли­бо при­ло­жения. Единицей вы­полнения всегда яв­ля­ет­ся функ­ция. Вы­полнение при­ло­жения на­чи­на­ет­ся с неко­то­рой функ­ции, на­зы­вае­мой точ­кой вхо­да [entry point]; в про­цес­се ра­бо­ты эта функ­ция мо­жет вы­зы­вать дру­гие функ­ции, а те, в свою оче­редь, мо­гут вы­зы­вать еще ка­кие-ли­бо функ­ции, и т. д. В лю­бой мо­мент вре­мени со­стояние вы­полнения про­грам­мы со­дер­жит, по­ми­мо ука­за­те­ля команд, и ин­фор­ма­цию о том, ка­кие функ­ции бы­ли вы­зва­ны пе­ред тем, как вы­полнение про­грам­мы при­шло в те­ку­щую точ­ку (на ко­то­рую ука­зы­ва­ет ука­за­тель команд). Ес­ли во вре­мя вы­полнения про­грам­мы про­ис­хо­дит ис­клю­чение, нор­маль­ное вы­полнение про­грам­мы приоста­нав­ли­ва­ет­ся (сре­дой вы­полнения) и на­чи­на­ет­ся рас­крут­ка [unwind] сте­ка в по­ис­ках пер­вого под­хо­дя­ще­го об­ра­бот­чика возник­ше­го ис­клю­чения. По­иск идет сле­дую­щим об­ра­зом: сна­ча­ла мы про­смат­ри­ваем спи­сок за­ре­ги­ст­ри­ро­ван­ных об­ра­бот­чи­ков в те­ку­щей точ­ке вы­полнения. Ес­ли сре­да вы­полнения на­шла под­хо­дя­щий об­ра­бот­чик, то вы­полнение про­грам­мы пе­ре­да­ет­ся на него; по­сле об­ра­бот­ки ис­клю­чения (ес­ли во вре­мя об­ра­бот­ки не бы­ло сгенери­ро­ва­но ника­ко­го ис­клю­чения) вы­полнение про­грам­мы про­дол­жа­ет­ся в нор­маль­ном ре­жи­ме. Ес­ли сре­да вы­полнения под­хо­дя­щий об­ра­бот­чик не на­шла или ес­ли во вре­мя ра­бо­ты об­ра­бот­чи­ка бы­ло сгенери­ро­ва­но это же или ка­кое-ли­бо дру­гое ис­клю­чение, сре­да вы­полнения пе­ре­хо­дит в точ­ку про­грам­мы, из ко­то­рой бы­ла вы­зва­на дан­ная функ­ция, и про­дол­жа­ет по­иск там. Эта точ­ка про­грам­мы при­над­ле­жит неко­то­рой ро­ди­тель­ской функ­ции, т. е. функ­ции, в хо­де вы­полнения ко­то­рой бы­ла вы­зва­на дан­ная функ­ция.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;{{Врезка|left|Заголовок=По­лез­ные за­мет­ки|Ширина=500% |Содержание=Да­вай­те рас­смот­рим бли­же про­бле­му гра­мот­ной очи­ст­ки ре­сур­сов в си­туа­ции, когда о том, что про­изош­ла ошиб­ка, мы мо­жем уз­нать толь­ко при по­мо­щи воз­вра­щае­мых зна­чений и ко­дов ошиб­ки. Для это­го на­пи­шем несколь­ко ва­ри­ан­тов неболь­шо­го фраг­мен­та ко­да на язы­ке C под опе­ра­ци­он­ную сис­те­му Linux, в ко­то­ром мы от­кро­ем два фай­ла и вы­полним с эти­ми от­кры­ты­ми фай­ла­ми неко­то­рую ра­бо­ту, по­сле че­го за­кро­ем их. Для оп­ре­де­лен­но­сти бу­дем счи­тать, что этот фраг­мент на­хо­дит­ся внут­ри функ­ции с ти­пом воз­вра­щае­мо­го зна­чения void. Пер­вый ва­ри­ант – об­ра­ба­ты­вать про­бле­мы при от­кры­тии фай­ла, и ес­ли файл от­крыть не уда­лось, пе­ре­да­вать управ­ление из фраг­мен­та ко­да на­ру­жу. Ес­ли при от­кры­тии вто­ро­го фай­ла у нас возник­нут ка­кие-ли­бо про­бле­мы, то мы вый­дем из фраг­мен­та ко­да, оста­вив неза­кры­тым пер­вый файл. Та­ким об­ра­зом, на­ли­цо по­тен­ци­аль­ная утеч­ка ре­сур­сов.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;int descr1, descr2;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr1 = open(“file1.dat”, 0_RDWR);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 == descr1) return;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr2 = open(“file2.dat”, 0_RDWR);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 == descr2) return;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;some_task(descr1, descr2);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;close(descr2);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;close(descr1);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Пе­ре­де­ла­ем этот фраг­мент, уст­ранив по­тен­ци­аль­ную утеч­ку ре­сур­сов. Но­вый ва­ри­ант ра­бо­та­ет сле­дую­щим об­ра­зом: мы пы­та­ем­ся от­крыть вто­рой файл, толь­ко ес­ли пер­вый файл от­крыл­ся успеш­но; вы­пол­ня­ем неко­то­рую ра­бо­ту с фай­ла­ми, толь­ко ес­ли оба фай­ла от­кры­лись успеш­но, и т. д. Для это­го при­меним ряд вло­жен­ных бло­ков if. Сра­зу же мож­но уви­деть по­тен­ци­аль­ный недоста­ток это­го ва­ри­ан­та: вло­жен­ность бло­ков if силь­но раз­рас­та­ет­ся при на­ли­чии несколь­ких ре­сур­сов, под­ле­жа­щих «очи­­ст­­ке».&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;int descr1, descr2;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr1 = open(“file1.dat”, 0_RDWR);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 == descr1) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr2 = open(“file2.dat”, 0_RDWR);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 == descr2) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;some_task(descr1, descr2);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;close(descr2);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;close(descr1);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Сде­ла­ем еще од­ну по­пыт­ку реа­ли­зо­вать фраг­мент так, что­бы из­бе­жать утеч­ки ре­сур­сов. Да­вай­те, ес­ли нам не уда­лось от­крыть вто­рой файл, за­кры­вать пер­вый пе­ред вы­хо­дом из фраг­мен­та ко­да. Имен­но этот под­ход и ис­поль­зу­ет­ся в сле­дую­щей реа­ли­за­ции. Эта реа­ли­за­ция то­же да­ле­ка от идеа­ла: у нас возника­ет дуб­ли­ро­вание ко­да по очи­ст­ке ре­сур­сов в кон­це фраг­мен­та и в си­туа­ции, когда вто­рой файл от­крыть не уда­лось.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;int descr1, descr2;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr1 = open(“file1.dat”, 0_RDWR);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 == descr1) return;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr2 = open(“file2.dat”, 0_RDWR);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 == descr2) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;close(descr1);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;return;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;some_task(descr1, descr2);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;close(descr2);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;close(descr1);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;И по­след­няя по­пыт­ка ре­шить про­бле­му с очи­ст­кой ре­сур­сов. Сде­ла­ем сле­дую­щие обя­за­тель­ные ша­ги. Все пе­ре­мен­ные, со­дер­жа­щие ре­сур­сы, долж­ны быть инициа­ли­зи­ро­ва­ны зна­чения­ми, оз­на­чаю­щи­ми от­сут­ст­вие ре­сур­са (для де­ск­рип­то­ров фай­лов это зна­чение -1, для ди­на­ми­че­­ски вы­де­ляе­мой па­мя­ти – NULL). Всю очи­ст­ку ре­сур­сов мы по­ме­ща­ем в конец фраг­мен­та и по­ме­ча­ем мет­кой; при этом при очи­ст­ке ка­ж­до­го ре­сур­са про­ве­ря­ем, был ли этот ре­сурс вы­де­лен (на­при­мер, что де­ск­рип­тор фай­ла не ра­вен -1). И, на­конец, ес­ли ка­кой-ли­бо ре­сурс вы­де­лить не уда­лось, то в этой си­туа­ции мы пе­ре­хо­дим на­пря­мую к сек­ции очи­ст­ки ре­сур­сов. В ре­зуль­та­те код по­лу­ча­ет­ся про­стым и раз­де­лен­ным с ко­дом для очи­ст­ки ре­сур­сов. Ми­нус это­го ре­шения толь­ко один: ис­поль­зо­вание опе­ра­то­ра goto для пе­ре­хо­да к сек­ции очи­ст­ки ре­сур­сов.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;int descr1, descr2;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr1 = -1;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr2 = -1;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr1 = open(“file1.dat”, 0_RDWR);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 == descr1) goto CLEANUP;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;descr2 = open(“file2.dat”, 0_RDWR);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 == descr1) goto CLEANUP;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;some_task(descr1, descr2);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;CLEANUP:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 != descr2) close(descr2);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;if (-1 != descr1) close(descr1); }}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Вполне воз­мож­на си­туа­ция, что во вре­мя по­ис­ка под­хо­дя­ще­го об­ра­бот­чи­ка ис­клю­чений сре­да вы­полнения при­шла в функ­цию, яв­ляю­щую­ся точ­кой вхо­да, и не на­шла в ней спе­циа­ли­зи­ро­ван­но­го об­ра­бот­чи­ка для дан­но­го ис­клю­чения. В та­кой си­туа­ции бу­дет вы­зван об­ра­бот­чик ис­клю­чений по умол­чанию, ко­то­рый за­вер­шит дан­ное при­ло­жение. Возника­ет вполне оче­вид­ный во­прос: как в этом слу­чае га­ран­ти­ро­вать очи­ст­ку ре­сур­сов? Для ре­шения этой про­бле­мы мы мо­жем за­ре­ги­ст­ри­ро­вать спе­ци­аль­ный об­ра­бот­чик для очи­ст­ки ре­сур­сов (как вме­сте с ре­ги­ст­ра­ци­ей об­ра­бот­чи­ков ис­клю­чений, так и сам по се­бе), ко­то­рый бу­дет всегда вы­зван (что га­ран­ти­ру­ет­ся сре­дой вы­полнения) во вре­мя рас­крут­ки сте­ка.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Вполне воз­мож­на си­туа­ция, что во вре­мя по­ис­ка под­хо­дя­ще­го об­ра­бот­чи­ка ис­клю­чений сре­да вы­полнения при­шла в функ­цию, яв­ляю­щую­ся точ­кой вхо­да, и не на­шла в ней спе­циа­ли­зи­ро­ван­но­го об­ра­бот­чи­ка для дан­но­го ис­клю­чения. В та­кой си­туа­ции бу­дет вы­зван об­ра­бот­чик ис­клю­чений по умол­чанию, ко­то­рый за­вер­шит дан­ное при­ло­жение. Возника­ет вполне оче­вид­ный во­прос: как в этом слу­чае га­ран­ти­ро­вать очи­ст­ку ре­сур­сов? Для ре­шения этой про­бле­мы мы мо­жем за­ре­ги­ст­ри­ро­вать спе­ци­аль­ный об­ра­бот­чик для очи­ст­ки ре­сур­сов (как вме­сте с ре­ги­ст­ра­ци­ей об­ра­бот­чи­ков ис­клю­чений, так и сам по се­бе), ко­то­рый бу­дет всегда вы­зван (что га­ран­ти­ру­ет­ся сре­дой вы­полнения) во вре­мя рас­крут­ки сте­ка.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=17991&amp;oldid=prev</id>
		<title>Olkol: /* Erlang: Ус­тои­м перед от­ка­зами */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=17991&amp;oldid=prev"/>
				<updated>2018-09-25T03:22:09Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Erlang: Ус­тои­м перед от­ка­зами&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 03:22, 25 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Ан­д­рей Уша­ков раз­би­ра­ет­ся в хит­ро­спле­те­ни­ях про­цес­сов, ста­ра­ясь обес­пе­чить их пра­виль­ное взаи­мо­дей­ст­вие и отказустойчивость.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Ан­д­рей Уша­ков раз­би­ра­ет­ся в хит­ро­спле­те­ни­ях про­цес­сов, ста­ра­ясь обес­пе­чить их пра­виль­ное взаи­мо­дей­ст­вие и отказустойчивость.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Файл:Ushakov.A_fmt.png | left&amp;#160; |thumb|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;300px&lt;/del&gt;|&amp;#160; '''Наш эксперт'''. Ан­д­рей Уша­ков&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Файл:Ushakov.A_fmt.png | left&amp;#160; |thumb|&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;100px&lt;/ins&gt;|&amp;#160; '''Наш эксперт'''. Ан­д­рей Уша­ков&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ак­тив­но при­бли­жа­ет тот день, ко­гда функ­цио­наль­ные язы­ки ста­нут мейн­ст­ри­мом. ]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ак­тив­но при­бли­жа­ет тот день, ко­гда функ­цио­наль­ные язы­ки ста­нут мейн­ст­ри­мом. ]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Соз­дание ре­аль­ных рас­пре­де­лен­ных сис­тем невоз­мож­но без рас­смот­рения та­кой важ­ной те­мы, как от­ка­зо­устой­чи­вость. А для это­го нам необ­хо­ди­мо знать от­ве­ты на сле­дую­щие во­про­сы: как долж­на реа­ги­ро­вать сис­те­ма, ес­ли во вре­мя вы­полнения ка­кой-ли­бо за­да­чи что-то по­шло не так? Как долж­на реа­ги­ро­вать сис­те­ма, ес­ли во вре­мя вы­полнения за­да­чи возник­ла необ­ра­бо­тан­ная (этой за­да­чей) ошиб­ка? Как долж­ны реа­ги­ро­вать дру­гие за­да­чи на ошиб­ку в ка­кой-ли­бо за­да­че? Ка­кая под­держ­ка со сто­ро­ны сис­те­мы есть для очи­ст­ки ре­сур­сов? От­ве­ты на эти во­про­сы при­менитель­но к язы­ку Erlang мы и рас­смот­рим в дан­ной ста­тье.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Соз­дание ре­аль­ных рас­пре­де­лен­ных сис­тем невоз­мож­но без рас­смот­рения та­кой важ­ной те­мы, как от­ка­зо­устой­чи­вость. А для это­го нам необ­хо­ди­мо знать от­ве­ты на сле­дую­щие во­про­сы: как долж­на реа­ги­ро­вать сис­те­ма, ес­ли во вре­мя вы­полнения ка­кой-ли­бо за­да­чи что-то по­шло не так? Как долж­на реа­ги­ро­вать сис­те­ма, ес­ли во вре­мя вы­полнения за­да­чи возник­ла необ­ра­бо­тан­ная (этой за­да­чей) ошиб­ка? Как долж­ны реа­ги­ро­вать дру­гие за­да­чи на ошиб­ку в ка­кой-ли­бо за­да­че? Ка­кая под­держ­ка со сто­ро­ны сис­те­мы есть для очи­ст­ки ре­сур­сов? От­ве­ты на эти во­про­сы при­менитель­но к язы­ку Erlang мы и рас­смот­рим в дан­ной ста­тье.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=17990&amp;oldid=prev</id>
		<title>Olkol в 03:21, 25 сентября 2018</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=17990&amp;oldid=prev"/>
				<updated>2018-09-25T03:21:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 03:21, 25 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Категория: Учебники]] &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Категория: Учебники]] &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Категория: Программирование]] &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Erlang Опи­сы­ва­ет­ся сле­дую­щей фор­му­лой: &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;функ­цио­наль­ный язык + про­цес­сы&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;	&lt;/del&gt;Erlang&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: Ус­тои­м перед от­ка­зами&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;Erlang. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Опи­сы­ва­ет­ся сле­дую­щей фор­му­лой: функ­цио­наль­ный язык + про­цес­сы'''&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Ан­д­рей Уша­ков раз­би­ра­ет­ся в хит­ро­спле­те­ни­ях про­цес­сов, ста­ра­ясь обес­пе­чить их пра­виль­ное взаи­мо­дей­ст­вие и отказустойчивость&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;=Erlang: Ус­тои­м перед от­ка­зами=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''Ан­д­рей Уша­ков раз­би­ра­ет­ся в хит­ро­спле­те­ни­ях про­цес­сов, ста­ра­ясь обес­пе­чить их пра­виль­ное взаи­мо­дей­ст­вие и отказустойчивость.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Файл:Ushakov.A_fmt.png | left&amp;#160; |thumb|300px|&amp;#160; '''Наш эксперт'''. Ан­д­рей Уша­ков&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ак­тив­но при­бли­жа­ет тот день, ко­гда функ­цио­наль­ные язы­ки ста­нут мейн­ст­ри­мом. ]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Соз­дание ре­аль­ных рас­пре­де­лен­ных сис­тем невоз­мож­но без рас­смот­рения та­кой важ­ной те­мы, как от­ка­зо­устой­чи­вость. А для это­го нам необ­хо­ди­мо знать от­ве­ты на сле­дую­щие во­про­сы: как долж­на реа­ги­ро­вать сис­те­ма, ес­ли во вре­мя вы­полнения ка­кой-ли­бо за­да­чи что-то по­шло не так? Как долж­на реа­ги­ро­вать сис­те­ма, ес­ли во вре­мя вы­полнения за­да­чи возник­ла необ­ра­бо­тан­ная (этой за­да­чей) ошиб­ка? Как долж­ны реа­ги­ро­вать дру­гие за­да­чи на ошиб­ку в ка­кой-ли­бо за­да­че? Ка­кая под­держ­ка со сто­ро­ны сис­те­мы есть для очи­ст­ки ре­сур­сов? От­ве­ты на эти во­про­сы при­менитель­но к язы­ку Erlang мы и рас­смот­рим в дан­ной ста­тье.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Соз­дание ре­аль­ных рас­пре­де­лен­ных сис­тем невоз­мож­но без рас­смот­рения та­кой важ­ной те­мы, как от­ка­зо­устой­чи­вость. А для это­го нам необ­хо­ди­мо знать от­ве­ты на сле­дую­щие во­про­сы: как долж­на реа­ги­ро­вать сис­те­ма, ес­ли во вре­мя вы­полнения ка­кой-ли­бо за­да­чи что-то по­шло не так? Как долж­на реа­ги­ро­вать сис­те­ма, ес­ли во вре­мя вы­полнения за­да­чи возник­ла необ­ра­бо­тан­ная (этой за­да­чей) ошиб­ка? Как долж­ны реа­ги­ро­вать дру­гие за­да­чи на ошиб­ку в ка­кой-ли­бо за­да­че? Ка­кая под­держ­ка со сто­ро­ны сис­те­мы есть для очи­ст­ки ре­сур­сов? От­ве­ты на эти во­про­сы при­менитель­но к язы­ку Erlang мы и рас­смот­рим в дан­ной ста­тье.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=17989&amp;oldid=prev</id>
		<title>Olkol: Новая страница: «Категория: Учебники   Erlang Опи­сы­ва­ет­ся сле­дую­щей фор­му­лой:  функ­цио­наль­ный …»</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;diff=17989&amp;oldid=prev"/>
				<updated>2018-09-25T00:05:04Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «&lt;a href=&quot;/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%D0%B8&quot; title=&quot;Категория:Учебники&quot;&gt;Категория: Учебники&lt;/a&gt;   Erlang Опи­сы­ва­ет­ся сле­дую­щей фор­му­лой:  функ­цио­наль­ный …»&lt;/p&gt;
&lt;a href=&quot;http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:_%D0%A3%D1%81%D1%82%D0%BE%D0%B8%D0%BC_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8&amp;amp;diff=17989&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	</feed>