<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LFX77:Boo - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LFX77:Boo&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 22:26:06 GMT</lastBuildDate>
		<item>
			<title>Lockal: восстановление кавычек в коде  AWB</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LFX77:Boo&amp;diff=4436&amp;oldid=prev</link>
			<description>&lt;p&gt;восстановление кавычек в коде  &lt;a href=&quot;/index.php?title=Linuxformat:AutoWikiBrowser&amp;amp;action=edit&quot; class=&quot;new&quot; title=&quot;Linuxformat:AutoWikiBrowser&quot;&gt;AWB&lt;/a&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&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&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;Версия 13:05, 27 апреля 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 27:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 27:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;Например, статическую типизацию. Python не задает явные типы переменных, он просто присваивает им подходящий тип при записи значения. Это может быть опасно и зачастую приводит к труднообнаружимым ошибкам. Boo использует типы, но он заимствует «утиную типизацию» (duck typing) из Ruby, где &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 class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Например, статическую типизацию. Python не задает явные типы переменных, он просто присваивает им подходящий тип при записи значения. Это может быть опасно и зачастую приводит к труднообнаружимым ошибкам. Boo использует типы, но он заимствует «утиную типизацию» (duck typing) из Ruby, где &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; &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; &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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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; class=&quot;diff-lineno&quot;&gt;Строка 53:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 53:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Предположим я хорошо знаю Python, есть ли что-то, чего я должен опасаться?'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Предположим я хорошо знаю Python, есть ли что-то, чего я должен опасаться?'''&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;Нескольких второстепенных вещей – и нескольких важных. Во-первых, нет кортежей, но Boo использует массивы в стиле C#, очень на них похожие. Есть также изменения семантики. Нет нужды использовать &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;‘self’ &lt;/del&gt;в методах объектов, а стандартные методы классов, такие как __init__, ___del__ и __str___ имеют другие обозначения, типа constructor(). Полный список расположенпо адресу: http://boo.codehaus.org/Gotchas+for+Python+Users. Но это не так сложно.&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;Нескольких второстепенных вещей – и нескольких важных. Во-первых, нет кортежей, но Boo использует массивы в стиле C#, очень на них похожие. Есть также изменения семантики. Нет нужды использовать &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'self' &lt;/ins&gt;в методах объектов, а стандартные методы классов, такие как __init__, ___del__ и __str___ имеют другие обозначения, типа constructor(). Полный список расположенпо адресу: http://boo.codehaus.org/Gotchas+for+Python+Users. Но это не так сложно.&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Но мне нравятся кортежи...'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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 colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 61:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 61:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; array1 = («abc», «ABC», «123»)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; array1 = («abc», «ABC», «123»)&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 style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;‘abc’&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;‘ABC’&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;‘123’&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 style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'abc'&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'ABC'&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'123'&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; array2 = array1[1]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; array2 = array1[1]&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 style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ABC’&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 style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ABC'&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; print array2[0]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; print array2[0]&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; A&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; A&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 69:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 69:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; C&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; C&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; array1[1][2]=»D»&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; array1[1][2]=»D»&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; ERROR: Property &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;‘System&lt;/del&gt;.String.&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Chars’ &lt;/del&gt;is read only.&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; ERROR: Property &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'System&lt;/ins&gt;.String.&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Chars' &lt;/ins&gt;is read only.&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; array4 = (1,2,3,4,5)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; array4 = (1,2,3,4,5)&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; (1, 2, 3, 4, 5)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; (1, 2, 3, 4, 5)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 27 Apr 2008 13:05:23 GMT</pubDate>			<dc:creator>Lockal</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LFX77:Boo</comments>		</item>
		<item>
			<title>Loki: Новая: __TOC__  '' '''Ник Вейч''' вглядывается в интригующий новый язык, написанный с прицелом на любителей Python.''  '''...</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LFX77:Boo&amp;diff=3288&amp;oldid=prev</link>
			<description>&lt;p&gt;Новая: __TOC__  '' '''Ник Вейч''' вглядывается в интригующий новый язык, написанный с прицелом на любителей Python.''  '''...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
'' '''Ник Вейч''' вглядывается в интригующий новый язык, написанный с прицелом на любителей Python.''&lt;br /&gt;
&lt;br /&gt;
'''Это как то связано с привидениями? Тогда должен сказать, что я трусишка...'''&lt;br /&gt;
&lt;br /&gt;
Нет, задача Boo – вовсе не пугать людей. Это безобидная смесь Python и C#, из которой рождается новый язык для среды Mono/.NET.&lt;br /&gt;
&lt;br /&gt;
'''Ой! CLI? C#? Mono? Страшно....'''&lt;br /&gt;
&lt;br /&gt;
Хорошо, тогда более подробно. Boo - это язык программирования. Я знаю, что вы хотите сказать – их и так предостаточно. Что ж, это верно, но всегда есть причины создать что-то еще. В данном случае, причиной явилось желание родриго Баррето де Оливейра (Rodrigo Barreto de Oliveira) использовать Python в среде .NET. «Мне все стало ясно», – написал он в манифесте Boo – «Я должен создать новый язык программирования для CLI, который позволит программистам использовать замечательные возможности среды .NET»&lt;br /&gt;
&lt;br /&gt;
'''Хорошо. я слышал, что Python - это скриптовый язык. При чем здесь CLI и .NET?'''&lt;br /&gt;
&lt;br /&gt;
Насчет Python все верно. Это кроссплатформенный интерпретируемый язык, использующийся во многих тек-&lt;br /&gt;
стовых и web-приложениях. Он быстро осваивается, а код легко читается, к тому же у него много последователей.&lt;br /&gt;
Среда .NET была разработана Microsoft как ответ на Java. Идея состояла в создании виртуальной машины с хорошей функциональностью, запускаемой на любой платформе. При наличии соответствующих компиляторов для нее можно программировать на любом языке. Возможно, вы уже знаете аббревиатуру CLI как Command Line Interpreter, но в данном случае она расшифровывается как Common Language Infrastructure. CLI включает в себя описание промежуточного языка (IL – intermediate language) и набора базовых ресурсов, доступных из IL.&lt;br /&gt;
  &lt;br /&gt;
'''В чем смысл промежуточного языка?'''&lt;br /&gt;
&lt;br /&gt;
Намного проще создать компилятор IL для виртуальной платформы и компиляторы высокоуровневых языков в IL, чем полноценные компиляторы для всех языков. Последнее может привести к несовместимости и потребует больше времени.&lt;br /&gt;
&lt;br /&gt;
'''Ага! В таком случае почему бы просто не сделать компилятор Python?'''&lt;br /&gt;
&lt;br /&gt;
Ну, можно и так. На самом деле уже есть ряд подобных проектов (причем один из них, IronPython, развивается самой Microsoft, прим.ред.). Но автор Boo хотел использовать преимущества CLI и добавить в Python несколько дополнительных возможностей.&lt;br /&gt;
&lt;br /&gt;
'''Что вы имеете в виду?'''&lt;br /&gt;
&lt;br /&gt;
Например, статическую типизацию. Python не задает явные типы переменных, он просто присваивает им подходящий тип при записи значения. Это может быть опасно и зачастую приводит к труднообнаружимым ошибкам. Boo использует типы, но он заимствует «утиную типизацию» (duck typing) из Ruby, где ‘утке’ – типизированной переменной, назначается тип в соответствии с присвоенными данными. Термин происходит от фразы: «Если ходит как утка, и крякает как утка ...». Также можно использовать неявную типизацию, при которой новые переменные создаются как «утки», если не было&lt;br /&gt;
указано иное.&lt;br /&gt;
&lt;br /&gt;
'''Это похоже на Python с заимствованием из C#, не так ли?'''&lt;br /&gt;
&lt;br /&gt;
Да, и даже более того. Например, в синтаксисе Python всегда используются отступы для выделения блоков кода. Boo использует это, но он также поддерживает описание структур в скобках, как в C. Пример из документации Boo, вероятно, объяснит все лучше нежели, я. &lt;br /&gt;
В стиле Python:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
button = Button(Text: «Нажми меня»)&lt;br /&gt;
button.Click += def ():&lt;br /&gt;
             print(«${button} был щелчок!»)&lt;br /&gt;
             print(«Да это похоже на другие блоки...»)&lt;br /&gt;
//или с фигурными скобками:&lt;br /&gt;
button1 = Button(Text: «Нажми меня», Click:&lt;br /&gt;
 {print(«Щелчок!») })&lt;br /&gt;
button2 = Button(Text: «меня тоже!»)&lt;br /&gt;
button2.Click = { print(«${button2} была нажата!»);&lt;br /&gt;
             print(«внутри {} пробелы игнорируются...»);&lt;br /&gt;
             print(«поэтому необходимо использовать точки с запятой для разделения операторов...»);&lt;br /&gt;
             print(«но не пишите такой код просто потому что так можно :)»)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Предположим я хорошо знаю Python, есть ли что-то, чего я должен опасаться?'''&lt;br /&gt;
&lt;br /&gt;
Нескольких второстепенных вещей – и нескольких важных. Во-первых, нет кортежей, но Boo использует массивы в стиле C#, очень на них похожие. Есть также изменения семантики. Нет нужды использовать ‘self’ в методах объектов, а стандартные методы классов, такие как __init__, ___del__ и __str___ имеют другие обозначения, типа constructor(). Полный список расположенпо адресу: http://boo.codehaus.org/Gotchas+for+Python+Users. Но это не так сложно.&lt;br /&gt;
&lt;br /&gt;
'''Но мне нравятся кортежи...'''&lt;br /&gt;
&lt;br /&gt;
Что ж, массивы весьма схожи с ними; более того, они сохраняют срезы в стиле Python. С другой стороны, кортежи были идеальны для хранения неизменяемых значений – в системе Boo, значения массивов могут изменяться в зависимости от типа. Ниже приведена запись простой сессии в оболочке Boo (запустите booish):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; array1 = («abc», «ABC», «123»)&lt;br /&gt;
 (‘abc’, ‘ABC’, ‘123’)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; array2 = array1[1]&lt;br /&gt;
 ABC’&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print array2[0]&lt;br /&gt;
 A&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print array1[1][2]&lt;br /&gt;
 C&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; array1[1][2]=»D»&lt;br /&gt;
 ERROR: Property ‘System.String.Chars’ is read only.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; array4 = (1,2,3,4,5)&lt;br /&gt;
 (1, 2, 3, 4, 5)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; array5= array4[2]&lt;br /&gt;
 3&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; array4[2]=7&lt;br /&gt;
 7&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; array5&lt;br /&gt;
 3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как видно, для некоторых типов значения изменяются. При создании срезов, новые переменные становятся копиями, а не ссылками, поэтому не зависят от изменений в исходном массиве.&lt;br /&gt;
&lt;br /&gt;
'''Где я могу взять Boo?'''&lt;br /&gt;
&lt;br /&gt;
Вы можете загрузить исходники и бинарные пакеты с http://boo.codehaus.org/Download. Но помните, что для его использования вам понадобятся и другие компоненты Linux.&lt;br /&gt;
&lt;br /&gt;
'''Например?'''&lt;br /&gt;
&lt;br /&gt;
Ну, определенно необходима среда Mono (www.mono-project.com). Этот аналог платформы .NET с открытым кодом, сейчас поддерживается Novell. Среда Mono содержит виртуальную платформу для запуска вашего CLI-кода. Вам также понадобится GTK#, который можно найти там же.&lt;br /&gt;
&lt;br /&gt;
'''Стоп! Да он тянет зависимости не хуже Gnome! А у меня место на диске не закончится?'''&lt;br /&gt;
&lt;br /&gt;
GTK# - это не новая GTK-библиотека, а набор привязок (bindings), позволяющих разработчикам создавать GUI в стиле GTK на C#, Boo или других языков. Вы можете найти пакет в своем дистрибутиве или загрузить его с http://gtk-sharp.sourceforge.net.&lt;br /&gt;
&lt;br /&gt;
'''Зачем мне нужна еще и GTK#?'''&lt;br /&gt;
&lt;br /&gt;
Она облегчает создание GUI. Вы можете импортировать эту привязку в ваши Boo-скрипты, также как и в сценариях Python. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import System&lt;br /&gt;
import Gtk from «gtk-sharp»&lt;br /&gt;
Application.Init()&lt;br /&gt;
window = Window(«Привет Кнопка»,&lt;br /&gt;
DefaultWidth: 100,&lt;br /&gt;
DefaultHeight: 150,&lt;br /&gt;
DeleteEvent: Application.Quit)&lt;br /&gt;
window.Add(Button(«Привет, я кнопка!»,&lt;br /&gt;
Clicked: { print(«Кнопка нажата!») }))&lt;br /&gt;
window.ShowAll()&lt;br /&gt;
Application.Run()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь вы можете видеть, что привязки GTK# включают классы окон (Window) и приложений (Application). Конструктор для Window говорит сам для себя. Класс Application, в данном случае, нужен только для того чтобы приложение работало до тех пор, пока не получит событие Quit от Window. Щелчок на кнопке активирует слот Clicked, которые в приведенном примере просто выводит сообщение в stdout, но, конечно же, может быть соединен с чем угодно. Итак, вы получили работающую GUI программу в несколько строк кода.&lt;br /&gt;
&lt;br /&gt;
'''Я не вижу особой разницы по сравнению с Python и GTK.'''&lt;br /&gt;
&lt;br /&gt;
Так и есть - по крайней мере, на уровне кодирования. Истинное отличие в другом. Компиляция данного кода в&lt;br /&gt;
Mono позволит ему выполняться на всех платформах, на которых работает Mono. Без сомнения, вы можете писать&lt;br /&gt;
GUI на Python под Windows или Mac, но его создание для Mono делает его более переносимым между поддерживаемыми платформами.&lt;br /&gt;
&lt;br /&gt;
'''Как писать под Boo? Есть ли IDE?'''&lt;br /&gt;
&lt;br /&gt;
Вы можете писать программы в любом текстовом редакторе, поддерживающем UTF-8. Kate, Emacs и прочие прекрасно подойдут. Но вы также можете использовать IDE самого проекта, MonoDevelop. Хотя она еще находится в ранней стадии своего развития, это удобный инструмент для работы с Mono, особенно если у вас есть несколько .NET проектов.&lt;br /&gt;
&lt;br /&gt;
'''Boo это просто последний модный язык-однодневка или он действительно имеет будущее?'''&lt;br /&gt;
&lt;br /&gt;
Я не могу сейчас предсказать точно, но знаю, что имеется огромное количество людей работающих с Boo и к нему&lt;br /&gt;
благосклонно относятся многие разработчики, использующие Mono. И конечно же вам следует ознакомиться с&lt;br /&gt;
множеством примеров, учебников и т. д. на домашней странице: http://boo.codehaus.org.&lt;br /&gt;
&lt;br /&gt;
'''Спасибо. Все не так страшно как я думал.'''&lt;br /&gt;
&lt;br /&gt;
Без проблем. Да, те постукивания и свист, что вы слышите поздно ночью... Не пугайтесь – это просто я.&lt;/div&gt;</description>
			<pubDate>Mon, 24 Mar 2008 02:39:04 GMT</pubDate>			<dc:creator>Loki</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LFX77:Boo</comments>		</item>
	</channel>
</rss>