<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>alar</title>
  <link>http://nealar.livejournal.com/</link>
  <description>alar - LiveJournal.com</description>
  <lastBuildDate>Fri, 25 Dec 2009 13:06:38 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>nealar</lj:journal>
  <lj:journalid>7880109</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/65769.html</guid>
  <pubDate>Fri, 25 Dec 2009 13:06:38 GMT</pubDate>
  <title>шекспировский вопрос</title>
  <link>http://nealar.livejournal.com/65769.html</link>
  <description>AMD Geode или Vortex86DX?&lt;br /&gt;&lt;br /&gt;Нужно выбрать процессор для промышленного компа. В современные процессоры принято засовывать кучу полезного барахла: видео, изернет, USB, контроллер памяти. Выбор из трёх вариантов, но VIA я отметаю не глядя. Вопрос - с каким из двух оставшихся больше шансов наступить на грабли? И плевать на производительность: всё равно ввод-вывод съест больше 50% процессорного времени, а 5-10% оставшегося хватит на все задачи.</description>
  <comments>http://nealar.livejournal.com/65769.html</comments>
  <category>x86</category>
  <category>вопрос</category>
  <category>work</category>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/65434.html</guid>
  <pubDate>Wed, 23 Dec 2009 06:57:05 GMT</pubDate>
  <title>Много картинок и зверюшек</title>
  <link>http://nealar.livejournal.com/65434.html</link>
  <description>Вот тута: &lt;a href=&quot;http://drvini.livejournal.com/&quot;&gt;http://drvini.livejournal.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;via &lt;span class=&apos;ljuser ljuser-name_alexeynagaev&apos; lj:user=&apos;alexeynagaev&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://alexeynagaev.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://alexeynagaev.livejournal.com/&apos;&gt;&lt;b&gt;alexeynagaev&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;</description>
  <comments>http://nealar.livejournal.com/65434.html</comments>
  <category>lj</category>
  <category>тудейное</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/65026.html</guid>
  <pubDate>Tue, 22 Dec 2009 15:15:34 GMT</pubDate>
  <title>Как ведутся холиворы</title>
  <link>http://nealar.livejournal.com/65026.html</link>
  <description>&lt;a href=&quot;http://arbat.livejournal.com/404429.html&quot;&gt;http://arbat.livejournal.com/404429.html&lt;/a&gt;&lt;br /&gt;Текст, вроде бы, серьёзный, но я ржал.</description>
  <comments>http://nealar.livejournal.com/65026.html</comments>
  <category>holywars</category>
  <category>fun</category>
  <lj:music>Knorkator - Hardcore</lj:music>
  <media:title type="plain">Knorkator - Hardcore</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/64779.html</guid>
  <pubDate>Mon, 14 Dec 2009 14:41:27 GMT</pubDate>
  <title>Предвкушая наступающий HUG</title>
  <link>http://nealar.livejournal.com/64779.html</link>
  <description>Подскажите, унификация в суперкомпиляторах и в прологе - неслучайно одинаково называется?</description>
  <comments>http://nealar.livejournal.com/64779.html</comments>
  <category>вопрос</category>
  <category>тудейное</category>
  <category>суперкомпиляторы</category>
  <lj:music>Metallica (S&amp;M) - The Call Of Ktulu</lj:music>
  <media:title type="plain">Metallica (S&amp;M) - The Call Of Ktulu</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>11</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/64275.html</guid>
  <pubDate>Sun, 01 Nov 2009 14:56:30 GMT</pubDate>
  <title>затуп мозга, haskell</title>
  <link>http://nealar.livejournal.com/64275.html</link>
  <description>Есть индуктивный тип данных, примерно такое&lt;br /&gt;data InType = In1 InType | In2 InType InType | InL [InType] | In0 &lt;br /&gt;и тип, полученный из него разложением на составляющие:&lt;br /&gt;type Key = String&lt;br /&gt;data OutType = Out1 Key | Out2 Key Key | OutL [Key] | Out0&lt;br /&gt;&lt;br /&gt;и таких пар несколько (штуки 4). Везде структура сторого типа в точности повторяет структуру первого, за исключением рекурсивности. Как бы сэкономить и не писать такие повторения руками? И вообще, что тут можно сэкономить?&lt;br /&gt;Есть соблазн в каждое рекурсивное вхождение воткнуть Either InType Key, но это перегрузит доступ к типу сборками-разборками Either. И ваще как-то некрасиво.</description>
  <comments>http://nealar.livejournal.com/64275.html</comments>
  <category>types</category>
  <category>вопрос</category>
  <category>haskell</category>
  <category>stupidity</category>
  <lj:mood>default</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/63872.html</guid>
  <pubDate>Thu, 29 Oct 2009 14:45:00 GMT</pubDate>
  <title>Боевые промышленные фидорасы</title>
  <link>http://nealar.livejournal.com/63872.html</link>
  <description>Обнаружил на сервере - регистраторе аварийных ситуаций и прочих полезных параметров DOS-окошко с заголовком&lt;br /&gt;2:5020/795. Удивлён.</description>
  <comments>http://nealar.livejournal.com/63872.html</comments>
  <category>industry</category>
  <category>fido</category>
  <category>fun</category>
  <lj:mood>broken</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/63395.html</guid>
  <pubDate>Thu, 08 Oct 2009 09:21:19 GMT</pubDate>
  <title>Сборка мусора. Вопрос</title>
  <link>http://nealar.livejournal.com/63395.html</link>
  <description>Где-то я видел ссылку на статью про способ учесть циклические ссылки при сборке мусора путём подсчёта ссылок. Подскажите.</description>
  <comments>http://nealar.livejournal.com/63395.html</comments>
  <category>gc</category>
  <category>refcounting</category>
  <lj:music>Metallica - S&amp;M</lj:music>
  <media:title type="plain">Metallica - S&amp;M</media:title>
  <lj:mood>отравленное</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/63055.html</guid>
  <pubDate>Fri, 18 Sep 2009 13:20:41 GMT</pubDate>
  <title>Умные книжки</title>
  <link>http://nealar.livejournal.com/63055.html</link>
  <description>Немного обозначений из умных книжек:&lt;br /&gt;1. Г &lt;b&gt;|-&lt;/b&gt; x ::y &quot;Имеет тип&quot;&lt;br /&gt;В контексте Г x имеет тип y. Справа от знака |- всегда ставится обозначение типа.&lt;br /&gt;2.X Y&lt;br /&gt; -------&lt;br /&gt;   Z&lt;br /&gt;&quot;Следует&quot; или &quot;получается&quot;. Речь идёт о правилах вывода или системе переписывания. Следует в логике &quot;хост-языка&quot;, который заложен в голове у авторов или в реализации языка программирования / системы доказательств. А не в логике предметного языка, поэтому не используется обычное &quot;=&amp;gt;&quot;. Сверху от знака &quot;---&quot; перечисляются предпосылки, обычно через пробел, снизу - результат.&lt;br /&gt;3. В логике иногда |= значит &quot;истинно&quot;, а |- - &quot;выводимо&quot;. Слева стоит контекст, справа выражение, о котором речь.&lt;br /&gt;4. &amp;forall;x:X.Y или &amp;Pi;x:X.Y это, оказывается, одно и то же - тип зависимых функций. Частный случай этого типа X =&amp;gt; Y (в хаскеле стрелочка такая: -&amp;gt;) , а общий случай отличается от него тем, что в Y может входить переменная x.&lt;br /&gt;5. &amp;exist;x:X.Y или &amp;Sigma;x:X.Y - тип зависимых пар. Частный случай - тип X &amp;times; Y (он же X &amp;and; Y) (в хаскеле (X,Y)), в общем случае в Y может входить x. &lt;br /&gt;to be continued</description>
  <comments>http://nealar.livejournal.com/63055.html</comments>
  <category>altenkirch</category>
  <category>mcbride</category>
  <category>dependent_types</category>
  <category>epigram</category>
  <lj:music>Fear Factory</lj:music>
  <media:title type="plain">Fear Factory</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>13</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/62769.html</guid>
  <pubDate>Wed, 09 Sep 2009 14:56:07 GMT</pubDate>
  <title>Про ОПК</title>
  <link>http://nealar.livejournal.com/62769.html</link>
  <description>&lt;a href=&quot;http://www.livejournal.ru/themes/id/14883&quot;&gt;http://www.livejournal.ru/themes/id/14883&lt;/a&gt;&lt;br /&gt;Вот какое учебное пособие подошло бы для этого предмета.</description>
  <comments>http://nealar.livejournal.com/62769.html</comments>
  <category>lj</category>
  <category>holywars</category>
  <lj:music>Ozzy Osbourne</lj:music>
  <media:title type="plain">Ozzy Osbourne</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/62676.html</guid>
  <pubDate>Mon, 10 Aug 2009 07:03:06 GMT</pubDate>
  <title>USB. Как сделать на коленке?</title>
  <link>http://nealar.livejournal.com/62676.html</link>
  <description>Как быстро сделать устройство ввода данных со скоростью потока до 80 Мбит/с? Данные сыплются непрерывно (это выход с быстрого АЦП). Верно ли, что USB - подходящий интерфейс для такой задачи?</description>
  <comments>http://nealar.livejournal.com/62676.html</comments>
  <category>драйвер</category>
  <category>схемотехника</category>
  <category>usb</category>
  <category>вопрос</category>
  <category>hardware</category>
  <category>gps</category>
  <lj:music>Ozzy Osbourne - Dreamer</lj:music>
  <media:title type="plain">Ozzy Osbourne - Dreamer</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>31</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/62356.html</guid>
  <pubDate>Tue, 21 Jul 2009 18:28:19 GMT</pubDate>
  <title>Спамим-спамим!</title>
  <link>http://nealar.livejournal.com/62356.html</link>
  <description>&lt;a href=&quot;http://community.livejournal.com/ru_declarative/84989.html&quot;&gt;Первый номер журнала &quot;Практика функционального программирования&quot;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Как это обычно говорится? Срочно выводим в топ!&lt;br /&gt;&lt;br /&gt;Мнение: автору статьи о моноидах - респект, статью о состоянии потестю на явщиках. Перевод The Gentle Introduction - это круто, моя первая книжка про Haskell. &lt;br /&gt;Если найду время - попробую помедитировать над адептовскими шашками.</description>
  <comments>http://nealar.livejournal.com/62356.html</comments>
  <category>lj</category>
  <category>haskell</category>
  <category>spam</category>
  <category>fun</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/62155.html</guid>
  <pubDate>Thu, 16 Jul 2009 13:22:49 GMT</pubDate>
  <title>Почему gawk лучше чем Perl</title>
  <link>http://nealar.livejournal.com/62155.html</link>
  <description>&lt;a href=&quot;http://swtch.com/~rsc/regexp/regexp1.html&quot;&gt;http://swtch.com/~rsc/regexp/regexp1.html&lt;/a&gt;&lt;br /&gt;Вкратце: PCRE - на самом деле не совсем регэкспы, и не разбираются конечным автоматом. Поэтому, в перле сложный матчер, который, если знать как, очень легко загнать в экспоненциальное поведение (и Stack Overflow).&lt;br /&gt;&lt;br /&gt;ОБН: Для перла &lt;a href=&quot;http://rt.perl.org/rt3/Public/Bug/Display.html?id=24274&quot;&gt;уже неактуально&lt;/a&gt;</description>
  <comments>http://nealar.livejournal.com/62155.html</comments>
  <category>perl</category>
  <category>regexp</category>
  <category>производительность</category>
  <category>awk</category>
  <category>tcl</category>
  <category>ruby</category>
  <lj:music>Ozzy Osborne</lj:music>
  <media:title type="plain">Ozzy Osborne</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/61734.html</guid>
  <pubDate>Wed, 15 Jul 2009 07:05:30 GMT</pubDate>
  <title>Зависимые типы. Часть 5. Квантор W</title>
  <link>http://nealar.livejournal.com/61734.html</link>
  <description>&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;Все индуктивные типы данных представляют из себя разновидности деревьев. &lt;br /&gt;Например, список - это дерево, у которого из каждого узла торчит одна ветка или лист. Значит, можно попытаться описать их как один тип. &lt;br /&gt; Пусть A - тип данных, хранящийся в узле. Для List a, A = Either a &amp;perp; , для &amp;#8469; , A = Either T &amp;perp; , где T - тип из одного элемента (в хаскеле ()), &amp;perp; - пустой тип. Для типа data BTree a = BNode a (BTree a) (BTree a) | BNull, A = Either A &amp;perp;. B - перечислимый тип, с числом элементов, равным числу &quot;дырок&quot; в узле, в которые &quot;вставляются&quot; поддеревья. Для List a B - или N&lt;sub&gt;1&lt;/sub&gt; или &amp;perp;, для &amp;#8469; B - или N&lt;sub&gt;1&lt;/sub&gt; или &amp;perp;, для BTree a B - или N&lt;sub&gt;2&lt;/sub&gt; или &amp;perp;. Значение, хранящееся в узле, определяет тип узла и число ветвей, которые из него торчат. То есть, узел описывается конструкцией (x:A).B(x). Точней, в узле нашего типа IndT хранится x:A и функция subtrees::(B(x)=&amp;gt; IndT), которая по номеру &quot;дырки&quot; извлекает поддерево. Введём обозначение W(x:A).B(x) для таких типов. &lt;br /&gt;Как обычно, нарисуем правила работы с типом:&lt;br /&gt;WF: A:U&lt;sub&gt;0&lt;/sub&gt;, x:A &amp;#8866; B(x):U&lt;sub&gt;0&lt;/sub&gt;&lt;br /&gt;    -----------------------------------------------&lt;br /&gt;     (W x:A).B(x):U&lt;sub&gt;0&lt;/sub&gt;&lt;br /&gt;&lt;br /&gt;WI: a:A, subtrees:(B(a)=&amp;gt;(W x:A).B(x))&lt;br /&gt;    --------------------------------------------&lt;br /&gt;     Node a subtrees : (W x:A).B(x)&lt;br /&gt;&lt;br /&gt;WE: w: (W x:A).B(x) R: (&amp;forall;a:A).(&amp;forall;subtrees:(B(a)=&amp;gt;(W x:A).B(x)).(&amp;forall;y:B(a)).C(subtrees y)=&amp;gt; C(Node a subtrees)&lt;br /&gt;    -------------------------------------------------------------------------------------------&lt;br /&gt;    Rec w R : C(w)&lt;br /&gt;&lt;br /&gt;WC: Rec (Node a subtrees) R -&amp;gt; R a subtrees (&amp;lambda;x.Rec (subtrees x) R)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Экстенсиональность&lt;/b&gt;&lt;br /&gt;Любой индуктивный &lt;strike&gt;(рекурсивный)&lt;/strike&gt; тип данных представим в виде типа W. В частности, натуральные числа, списки и деревья. Но поведение W-представления отличается от поведения алгебраического типа данных. Например, в узле двоичного ADT-дерева BTree a = BNode a (BTree a) (BTree a) | BNull хранятся: 1. конструктор BTree, 2. значение в узле a, 3. 2 ветки (BTree a) .&lt;br /&gt;В узле двоичного W-дерева хранятся: 1. конструктор, обзовём его WT, 2. элемент данных &amp;exist;a:A.N&lt;sub&gt;2&lt;/sub&gt;, 3. функция N&lt;sub&gt;2&lt;/sub&gt;=&amp;gt; W (x:A).N&lt;sub&gt;2&lt;/sub&gt;, которая даёт ветки. &lt;br /&gt;Случай BNull я для упрощения опущу.&lt;br /&gt;Структурное равенство двух деревьев:&lt;br /&gt;1. алгебраических:&lt;br /&gt;BNode a l r == BNode a&apos; l&apos; r&apos; &amp;lt;=&amp;gt; &lt;br /&gt;{BNode == BNode;&lt;br /&gt;a == a&apos;;&lt;br /&gt;l == l&apos;;&lt;br /&gt;r == r&apos;}&lt;br /&gt;2. W:&lt;br /&gt;WT a:(&amp;exist;x:A.N&lt;sub&gt;2&lt;/sub&gt;) subtrees:(N&lt;sub&gt;2&lt;/sub&gt;=&amp;gt;W(y:A.N&lt;sub&gt;2&lt;/sub&gt;) == WT a&apos;:(&amp;exist;x:A.N&lt;sub&gt;2&lt;/sub&gt;) subtrees&apos;:(N&lt;sub&gt;2&lt;/sub&gt;=&amp;gt;W(y:A.N&lt;sub&gt;2&lt;/sub&gt;) &amp;lt;==&amp;gt;&lt;br /&gt;{ WT == WT;&lt;br /&gt;a == a&apos;;&lt;br /&gt;subtrees == subtrees&apos;}&lt;br /&gt;subtrees, subtrees&apos; - функции, их нельзя просто так вот взять и сравнить.&lt;br /&gt;Чтобы операция сравнения на таких деревьях вела себя так, как мы привыкли, надо функции сравнивать &lt;i&gt;экстенсионально&lt;/i&gt; - по возвращаемому результату. Подсовывая им в качестве аргумента значение в вершине. &lt;br /&gt;&lt;font color=&quot;blue&quot;&gt;Что из этого следует, я пока ещё не понял, но у экстенсионального сравнения совсем не такие теоретические свойства, как у структурного&lt;/font&gt;&lt;br /&gt;</description>
  <comments>http://nealar.livejournal.com/61734.html</comments>
  <category>dependent_types</category>
  <lj:music>Rainbow - Difficult To Cure</lj:music>
  <media:title type="plain">Rainbow - Difficult To Cure</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/61236.html</guid>
  <pubDate>Mon, 06 Jul 2009 11:48:55 GMT</pubDate>
  <title>Столичная живность.</title>
  <link>http://nealar.livejournal.com/61236.html</link>
  <description>Неожиданно.&lt;br /&gt;&lt;a href=&quot;http://oleg-l.livejournal.com/203747.html&quot;&gt;http://oleg-l.livejournal.com/203747.html&lt;/a&gt;&lt;br /&gt;Ещё там лоси в парке Сокольники и много совсем мелких животных.&lt;br /&gt;&lt;br /&gt;А в наших краях этой весной было нашествие водяных крыс.&lt;br /&gt;&lt;br /&gt;А для любителей более изысканных блюд: &lt;a href=&quot;http://drandrandr.livejournal.com/2939.html&quot;&gt;палехские узоры&lt;/a&gt;</description>
  <comments>http://nealar.livejournal.com/61236.html</comments>
  <category>lj</category>
  <category>звери</category>
  <category>Москва</category>
  <lj:music>Rainbow</lj:music>
  <media:title type="plain">Rainbow</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/60877.html</guid>
  <pubDate>Wed, 01 Jul 2009 08:15:12 GMT</pubDate>
  <title>VCS as DB</title>
  <link>http://nealar.livejournal.com/60877.html</link>
  <description>В СУБД бывают всякие служебные таблички со списком всех существующих таблиц и прочего. А в VCS есть какой-нибудь простой-простой способ собрать несколько реп в список? Хочется чего-то вроде &quot;покажи, какие проекты хранятся в VCS на этом сервере&quot;.</description>
  <comments>http://nealar.livejournal.com/60877.html</comments>
  <category>vcs</category>
  <category>работа</category>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/60559.html</guid>
  <pubDate>Tue, 30 Jun 2009 17:40:43 GMT</pubDate>
  <title>ФП. Вопрос</title>
  <link>http://nealar.livejournal.com/60559.html</link>
  <description>Если у потенциального работодателя потенциальный начальник говорит, что Лисп - не функциональный язык - следует ли делать какие-то выводы?</description>
  <comments>http://nealar.livejournal.com/60559.html</comments>
  <category>holywars</category>
  <category>lisp</category>
  <category>antirecruiting</category>
  <lj:security>public</lj:security>
  <lj:reply-count>61</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/59927.html</guid>
  <pubDate>Thu, 25 Jun 2009 06:12:12 GMT</pubDate>
  <title>Весёлые картинки</title>
  <link>http://nealar.livejournal.com/59927.html</link>
  <description>&lt;a href=&quot;http://eclisse.livejournal.com/191320.html&quot;&gt;&lt;img src=&quot;http://ljplus.ru/img4/e/c/eclisse/053007a.jpg&quot;&gt;&lt;/img&gt; &lt;img src=&quot;http://www.ljplus.ru/img4/e/c/eclisse/053007b.jpg&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Если кто хочет картинок, хороших и позитивных, рекомендую: &lt;span class=&apos;ljuser ljuser-name_eclisse&apos; lj:user=&apos;eclisse&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://eclisse.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://eclisse.livejournal.com/&apos;&gt;&lt;b&gt;eclisse&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Увидел тута: &lt;a href=&quot;http://crazy-zoologist.livejournal.com/430417.html?thread=2907729#t2907729&quot;&gt;http://crazy-zoologist.livejournal.com/430417.html?thread=2907729#t2907729&lt;/a&gt;</description>
  <comments>http://nealar.livejournal.com/59927.html</comments>
  <category>lj</category>
  <category>pics</category>
  <category>animals</category>
  <category>fun</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/59863.html</guid>
  <pubDate>Mon, 22 Jun 2009 13:11:21 GMT</pubDate>
  <title>Цитата дня</title>
  <link>http://nealar.livejournal.com/59863.html</link>
  <description>&lt;a href=&quot;http://mike67.livejournal.com/241240.html?thread=13464408#t13464408&quot;&gt; желание иметь детей - это скрытая педофилия&lt;/a&gt;</description>
  <comments>http://nealar.livejournal.com/59863.html</comments>
  <category>childfree</category>
  <category>holywars</category>
  <category>pedofily</category>
  <category>fun</category>
  <lj:music>Hallucinogen</lj:music>
  <media:title type="plain">Hallucinogen</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/59579.html</guid>
  <pubDate>Thu, 18 Jun 2009 17:43:09 GMT</pubDate>
  <title>L.I.S.P. Вопрос</title>
  <link>http://nealar.livejournal.com/59579.html</link>
  <description>К Scheme как-нибудь можно прикрутить удобный синтаксис?&lt;br /&gt;Может, можно сделать &quot;автоподставлятор скобок&quot;, и в каких-то местах их не писать?&lt;br /&gt; Суть задачи в том, что:&lt;br /&gt;1. надо, чтоб код получился сочетаемым  другим схемным кодом. То есть, &quot;возьми другой язык&quot; - не вариант.&lt;br /&gt;2. Но руками пейсать код на этом языке роботов - это мазохизм. Хочется немного подточить синтаксис: мнемоники понятные сделать, скобки куда-нибудь убрать.... Короче, предпроцессор. Желательно при этом не изобретать велосипед, а погнуть уже готовый.</description>
  <comments>http://nealar.livejournal.com/59579.html</comments>
  <category>вопрос</category>
  <category>lisp</category>
  <lj:security>public</lj:security>
  <lj:reply-count>42</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/59363.html</guid>
  <pubDate>Thu, 11 Jun 2009 12:59:42 GMT</pubDate>
  <title>Мифоложка</title>
  <link>http://nealar.livejournal.com/59363.html</link>
  <description>– Все условия, – сказал Иван-царевич. – Персональная оранжерея. Тропические деревья, штат обслуживающего персонала. Всё, что твоей душе угодно.&lt;br /&gt;– Заманчиво, – признала Жар-птица, и задумчиво пощёлкала клювом. – Я, пожалуй, приму твоё предложение… если ты поможешь мне с одной проблемой.&lt;br /&gt;– Я слушаю? – в голосе царевича слышалась готовность моментально решить любые птичьи проблемы.&lt;br /&gt;– Ты должен найти мне Жар-Птицу.&lt;br /&gt;Иван-царевич внимательно посмотрел на птицу, сидящую перед ним.&lt;br /&gt;– Э? – проговорил он, не в силах придумать ничего лучше.&lt;br /&gt;&lt;br /&gt;Существо, сидевшее на ветке перед ним, вздохнуло.&lt;br /&gt;– Вань, я не птица. Я Жар-птиц. Мальчик. Самец. Ну, посмотри на меня!&lt;br /&gt;Птиц встряхнул крыльями, роскошный, сияющий хвост заструился в воздухе. Царевич сощурился и заслонил глаза рукой.&lt;br /&gt;&lt;br /&gt;– В животном мире, – наставительно сказал птиц, – так выглядят именно самцы. У самочек, – он мечтательно покачал головой, и выгнул шею, отчего перья на ней засверкали всеми цветами радуги, – у самочек оперение куда скромнее… Что не делает их в наших глазах менее прекрасными, – закончил самец строго.&lt;br /&gt;– А, – отреагировал Иван. – И где эту твою самочку искать?&lt;br /&gt;– Понятия не имею, – ответил птиц с горечью. – Я лично давно ни одной не встречал. Их, видишь ли, переловили да перестреляли. Охотнички, – он обвиняюще посмотрел на Ивана, и тот поспешно передвинул на спину лук, торчавший из-за плеча.&lt;br /&gt;– Да как же, – забормотал царевич, чувствуя, что перспектива заиметь во дворце собственную Жар-птицу стремительно улетучивается, – у кого же рука поднимется?&lt;br /&gt;– Я же уже сказал, – раздражённо напомнил птиц, – что у самочек вид намного скромнее. Их невежественные тупицы обычно вообще не принимают за Жар-птиц.&lt;br /&gt;&lt;br /&gt;Повисла пауза. Иван раздумывал, Жар-птиц на дереве терпеливо ждал.&lt;br /&gt;– Хорошо, – сказал наконец царевич. – Я готов… попробовать. Разыскать тебе самочку. Ничего не обещаю, но попробую. Рассказывай, как они, всё-таки, выглядят.&lt;br /&gt;&lt;br /&gt;_____&lt;br /&gt;&lt;br /&gt;– Я ей непременно понравлюсь, – нервно говорил птиц, расхаживая по комнате из угла в угол. – Вань, ну как я могу ей не понравиться?&lt;br /&gt;– Понравишься, понравишься, – успокоил его Иван. – Но не сразу. Она сейчас проходит курс психологической реабилитации.&lt;br /&gt;– Что с ней, – заволновался птиц, и даже слегка потускнел от переживаний, – Она больна?&lt;br /&gt;– Совершенно здорова, – твёрдо сказал Иван. – Но я же рассказывал тебе. До недавнего времени она не считала себя Жар-птицей, и ей надо привыкнуть.&lt;br /&gt;– Варвары, – птиц схватился крыльями за голову. – Они искалечили девочку!&lt;br /&gt;– Ты должен признать, что их трудно обвинить, – осторожно заметил Иван. – Её внешность…&lt;br /&gt;– Да, разумеется, – саркастически сказал птиц, – Внешность! Но когда она снесла золотое яйцо, уж тогда-то эти идиоты могли бы заподозрить, что существо, которое они держат в своём доме, вовсе не курица!&lt;br /&gt;&lt;br /&gt;© silver_mew &lt;br /&gt;&lt;a href=&quot;http://ostrie.moskva.com/?do=Item&amp;amp;id=995088&quot;&gt;источник&lt;/a&gt;</description>
  <comments>http://nealar.livejournal.com/59363.html</comments>
  <category>fun myth anec ostrie</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/58896.html</guid>
  <pubDate>Tue, 26 May 2009 17:47:34 GMT</pubDate>
  <title>Кабала</title>
  <link>http://nealar.livejournal.com/58896.html</link>
  <description>Можно ли с помощью кабалы, а именно, build-type: Simple, собрать DLL? С помощью build-type: Make ,  ясное дело, её собрать можно, но тогда непонятно, зачем, собственно, нужна кабала. Да и забыл я, как мэйкфайлы пишут, слишком мало практики было.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class=&apos;ljuser ljuser-name_iakovz&apos; lj:user=&apos;iakovz&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://iakovz.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://iakovz.livejournal.com/&apos;&gt;&lt;b&gt;iakovz&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; и гугл нашли мне вот такой файл: &lt;a href=&quot;http://www.haskell.org/haskellwiki/Cabal&quot;&gt;http://www.haskell.org/haskellwiki/Cabal&lt;/a&gt;&lt;br /&gt;Фактически, оно, после сборки итогового .o, в которое компилируется пакет, выполняет 2 команды:&lt;br /&gt;$(GHC) --mk-dll -o $(DLLFILE) $(OFILE) $(PACKAGES)&lt;br /&gt;cp $(DLLFILE) $(PKGNAME)\$(DLLFILE)&lt;br /&gt;, где&lt;br /&gt;$(OFILE) = HS$(PKGNAME)$(PKGVER).o&lt;br /&gt;$(DLLFILE) = $(PKGNAME).dll&lt;br /&gt;$(PACKAGES) - зависимости пакета, в виде &quot;-package $(PKGNAME)$(PKGVER)&quot;&lt;br /&gt;--mk-dll - устаревший флаг, теперь он называется -shared.&lt;br /&gt;$(GHC),$(PKGNAME),$(PKGVER) и зависимости медленно и печально извлекаются из кабальных структур данных&lt;br /&gt;cp - программа, которая не всегда есть в наличии под Windows.&lt;br /&gt;Больше &lt;u&gt;ничего&lt;/u&gt; этот скрипт не делает. Остальное делает Distribution.Simple. &lt;br /&gt;Что поправить, чтоб учесть изменения в структурах кабалы я уже понял, а куда запихнуть зависимости, которые не в виде пакетов, а в виде внешних библиотек - ещё нет. Но самый сложный вопрос - каноничное место, куда надо класть итоговую DLL. И куда воткнуть .def-файл, который в кабале вообще не предусмотрен.&lt;br /&gt;&lt;br /&gt;Фактически, правильный собственный кабальный сборщик делается заменой buildHook в simpleUserHooks со стандартного defaultBuildHook на свой. Но, &lt;br /&gt;&lt;code&gt;&lt;br /&gt;{- из Distribution.Simple -}&lt;br /&gt;defaultBuildHook :: PackageDescription -&amp;gt; LocalBuildInfo&lt;br /&gt;        -&amp;gt; UserHooks -&amp;gt; BuildFlags -&amp;gt; IO ()&lt;br /&gt;defaultBuildHook pkg_descr localbuildinfo hooks flags = do&lt;br /&gt;  let distPref = fromFlag $ buildDistPref flags&lt;br /&gt;  build pkg_descr localbuildinfo flags (allSuffixHandlers hooks)&lt;br /&gt;  when (hasLibs pkg_descr) $&lt;br /&gt;      writeInstalledConfig distPref pkg_descr localbuildinfo False Nothing&lt;br /&gt;{- из Distribution.Simple.Build -}&lt;br /&gt;build    :: PackageDescription  -- ^mostly information from the .cabal file&lt;br /&gt;         -&amp;gt; LocalBuildInfo -- ^Configuration information&lt;br /&gt;         -&amp;gt; BuildFlags -- ^Flags that the user passed to build&lt;br /&gt;         -&amp;gt; [ PPSuffixHandler ] -- ^preprocessors to run before compiling&lt;br /&gt;         -&amp;gt; IO ()&lt;br /&gt;build pkg_descr lbi flags suffixes = do&lt;br /&gt;  let distPref  = fromFlag (buildDistPref flags)&lt;br /&gt;      verbosity = fromFlag (buildVerbosity flags)&lt;br /&gt;  initialBuildSteps distPref pkg_descr lbi verbosity suffixes&lt;br /&gt;  setupMessage verbosity &quot;Building&quot; (packageId pkg_descr)&lt;br /&gt;  case compilerFlavor (compiler lbi) of&lt;br /&gt;    GHC  -&amp;gt; GHC.build  pkg_descr lbi verbosity&lt;br /&gt;    JHC  -&amp;gt; JHC.build  pkg_descr lbi verbosity&lt;br /&gt;    Hugs -&amp;gt; Hugs.build pkg_descr lbi verbosity&lt;br /&gt;    NHC  -&amp;gt; NHC.build  pkg_descr lbi verbosity&lt;br /&gt;    _    -&amp;gt; die (&quot;Building is not supported with this compiler.&quot;)&lt;br /&gt;{- из Distribution.Simple.GHC -}&lt;br /&gt;build :: PackageDescription -&amp;gt; LocalBuildInfo -&amp;gt; Verbosity -&amp;gt; IO ()&lt;br /&gt;build pkg_descr lbi verbosity = do&lt;br /&gt;  let pref = buildDir lbi&lt;br /&gt;      pkgid = packageId pkg_descr&lt;br /&gt;      runGhcProg = rawSystemProgramConf verbosity ghcProgram (withPrograms lbi)&lt;br /&gt;      ifVanillaLib forceVanilla = when (forceVanilla || withVanillaLib lbi)&lt;br /&gt;      ifProfLib = when (withProfLib lbi)&lt;br /&gt;      ifSharedLib = when (withSharedLib lbi)&lt;br /&gt;      ifGHCiLib = when (withGHCiLib lbi &amp;&amp; withVanillaLib lbi)&lt;br /&gt;&lt;br /&gt;  -- Build lib&lt;br /&gt;  withLib pkg_descr () $ \lib -&amp;gt; do&lt;br /&gt;      info verbosity &quot;Building library...&quot;&lt;br /&gt;&lt;br /&gt;      libBi &amp;lt;- hackThreadedFlag verbosity&lt;br /&gt;                 (compiler lbi) (withProfLib lbi) (libBuildInfo lib)&lt;br /&gt;&lt;br /&gt;      let libTargetDir = pref&lt;br /&gt;          forceVanillaLib = TemplateHaskell `elem` extensions libBi&lt;br /&gt;          -- TH always needs vanilla libs, even when building for profiling&lt;br /&gt;&lt;br /&gt;      createDirectoryIfMissingVerbose verbosity True libTargetDir&lt;br /&gt;      -- TODO: do we need to put hs-boot files into place for mutually recurive modules?&lt;br /&gt;      let ghcArgs =&lt;br /&gt;                 [&quot;-package-name&quot;, display pkgid ]&lt;br /&gt;              ++ constructGHCCmdLine lbi libBi libTargetDir verbosity&lt;br /&gt;              ++ map display (libModules pkg_descr)&lt;br /&gt;          ghcArgsProf = ghcArgs&lt;br /&gt;              ++ [&quot;-prof&quot;,&lt;br /&gt;                  &quot;-hisuf&quot;, &quot;p_hi&quot;,&lt;br /&gt;                  &quot;-osuf&quot;, &quot;p_o&quot;&lt;br /&gt;                 ]&lt;br /&gt;              ++ ghcProfOptions libBi&lt;br /&gt;          ghcArgsShared = ghcArgs&lt;br /&gt;              ++ [&quot;-dynamic&quot;,&lt;br /&gt;                  &quot;-hisuf&quot;, &quot;dyn_hi&quot;,&lt;br /&gt;                  &quot;-osuf&quot;, &quot;dyn_o&quot;, &quot;-fPIC&quot;&lt;br /&gt;                 ]&lt;br /&gt;              ++ ghcSharedOptions libBi&lt;br /&gt;      unless (null (libModules pkg_descr)) $&lt;br /&gt;        do ifVanillaLib forceVanillaLib (runGhcProg ghcArgs)&lt;br /&gt;           ifProfLib (runGhcProg ghcArgsProf)&lt;br /&gt;           ifSharedLib (runGhcProg ghcArgsShared)&lt;br /&gt;&lt;br /&gt;      -- build any C sources&lt;br /&gt;      unless (null (cSources libBi)) $ do&lt;br /&gt;         info verbosity &quot;Building C Sources...&quot;&lt;br /&gt;         sequence_ [do let (odir,args) = constructCcCmdLine lbi libBi pref&lt;br /&gt;                                                            filename verbosity&lt;br /&gt;                       createDirectoryIfMissingVerbose verbosity True odir&lt;br /&gt;                       runGhcProg args&lt;br /&gt;                       ifSharedLib (runGhcProg (args ++ [&quot;-fPIC&quot;, &quot;-osuf dyn_o&quot;]))&lt;br /&gt;                   | filename &amp;lt;- cSources libBi]&lt;br /&gt;&lt;br /&gt;      -- link:&lt;br /&gt;      info verbosity &quot;Linking...&quot;&lt;br /&gt;      let cObjs = map (`replaceExtension` objExtension) (cSources libBi)&lt;br /&gt;          cSharedObjs = map (`replaceExtension` (&quot;dyn_&quot; ++ objExtension)) (cSources libBi)&lt;br /&gt;          vanillaLibFilePath = libTargetDir &amp;lt;/&amp;gt; mkLibName pkgid&lt;br /&gt;          profileLibFilePath = libTargetDir &amp;lt;/&amp;gt; mkProfLibName pkgid&lt;br /&gt;          sharedLibFilePath  = libTargetDir &amp;lt;/&amp;gt; mkSharedLibName pkgid&lt;br /&gt;                                                  (compilerId (compiler lbi))&lt;br /&gt;          ghciLibFilePath    = libTargetDir &amp;lt;/&amp;gt; mkGHCiLibName pkgid&lt;br /&gt;&lt;br /&gt;      stubObjs &amp;lt;- fmap catMaybes $ sequence&lt;br /&gt;        [ findFileWithExtension [objExtension] [libTargetDir]&lt;br /&gt;            (ModuleName.toFilePath x ++&quot;_stub&quot;)&lt;br /&gt;        | x &amp;lt;- libModules pkg_descr ]&lt;br /&gt;      stubProfObjs &amp;lt;- fmap catMaybes $ sequence&lt;br /&gt;        [ findFileWithExtension [&quot;p_&quot; ++ objExtension] [libTargetDir]&lt;br /&gt;            (ModuleName.toFilePath x ++&quot;_stub&quot;)&lt;br /&gt;        | x &amp;lt;- libModules pkg_descr ]&lt;br /&gt;      stubSharedObjs &amp;lt;- fmap catMaybes $ sequence&lt;br /&gt;        [ findFileWithExtension [&quot;dyn_&quot; ++ objExtension] [libTargetDir]&lt;br /&gt;            (ModuleName.toFilePath x ++&quot;_stub&quot;)&lt;br /&gt;        | x &amp;lt;- libModules pkg_descr ]&lt;br /&gt;&lt;br /&gt;      hObjs     &amp;lt;- getHaskellObjects pkg_descr libBi lbi&lt;br /&gt;                        pref objExtension True&lt;br /&gt;      hProfObjs &amp;lt;-&lt;br /&gt;        if (withProfLib lbi)&lt;br /&gt;                then getHaskellObjects pkg_descr libBi lbi&lt;br /&gt;                        pref (&quot;p_&quot; ++ objExtension) True&lt;br /&gt;                else return []&lt;br /&gt;      hSharedObjs &amp;lt;-&lt;br /&gt;        if (withSharedLib lbi)&lt;br /&gt;                then getHaskellObjects pkg_descr libBi lbi&lt;br /&gt;                        pref (&quot;dyn_&quot; ++ objExtension) False&lt;br /&gt;                else return []&lt;br /&gt;&lt;br /&gt;      unless (null hObjs &amp;&amp; null cObjs &amp;&amp; null stubObjs) $ do&lt;br /&gt;        -- first remove library files if they exists&lt;br /&gt;        sequence_&lt;br /&gt;          [ removeFile libFilePath `catchIO` \_ -&amp;gt; return ()&lt;br /&gt;          | libFilePath &amp;lt;- [vanillaLibFilePath, profileLibFilePath&lt;br /&gt;                           ,sharedLibFilePath,  ghciLibFilePath] ]&lt;br /&gt;&lt;br /&gt;        let arVerbosity | verbosity &amp;gt;= deafening = &quot;v&quot;&lt;br /&gt;                        | verbosity &amp;gt;= normal = &quot;&quot;&lt;br /&gt;                        | otherwise = &quot;c&quot;&lt;br /&gt;            arArgs = [&quot;q&quot;++ arVerbosity]&lt;br /&gt;                ++ [vanillaLibFilePath]&lt;br /&gt;            arObjArgs =&lt;br /&gt;                   hObjs&lt;br /&gt;                ++ map (pref &amp;lt;/&amp;gt;) cObjs&lt;br /&gt;                ++ stubObjs&lt;br /&gt;            arProfArgs = [&quot;q&quot;++ arVerbosity]&lt;br /&gt;                ++ [profileLibFilePath]&lt;br /&gt;            arProfObjArgs =&lt;br /&gt;                   hProfObjs&lt;br /&gt;                ++ map (pref &amp;lt;/&amp;gt;) cObjs&lt;br /&gt;                ++ stubProfObjs&lt;br /&gt;            ldArgs = [&quot;-r&quot;]&lt;br /&gt;                ++ [&quot;-o&quot;, ghciLibFilePath &amp;lt;.&amp;gt; &quot;tmp&quot;]&lt;br /&gt;            ldObjArgs =&lt;br /&gt;                   hObjs&lt;br /&gt;                ++ map (pref &amp;lt;/&amp;gt;) cObjs&lt;br /&gt;                ++ stubObjs&lt;br /&gt;            ghcSharedObjArgs =&lt;br /&gt;                   hSharedObjs&lt;br /&gt;                ++ map (pref &amp;lt;/&amp;gt;) cSharedObjs&lt;br /&gt;                ++ stubSharedObjs&lt;br /&gt;            -- After the relocation lib is created we invoke ghc -shared&lt;br /&gt;            -- with the dependencies spelled out as -package arguments&lt;br /&gt;            -- and ghc invokes the linker with the proper library paths&lt;br /&gt;            ghcSharedLinkArgs =&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;               [ &quot;-no-auto-link-packages&quot;,&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;                 &quot;-shared&quot;,&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;                 &quot;-dynamic&quot;,&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;                 &quot;-o&quot;, sharedLibFilePath ]&lt;br /&gt;                ++ ghcSharedObjArgs&lt;br /&gt;                ++ [&quot;-package-name&quot;, display pkgid ]&lt;br /&gt;                ++ (concat [ [&quot;-package&quot;, display pkg] | pkg &amp;lt;- packageDeps lbi ])&lt;br /&gt;                ++ [&quot;-l&quot;++extraLib | extraLib &amp;lt;- extraLibs libBi]&lt;br /&gt;                ++ [&quot;-L&quot;++extraLibDir | extraLibDir &amp;lt;- extraLibDirs libBi]&lt;br /&gt;&lt;br /&gt;            runLd ldLibName args = do&lt;br /&gt;              exists &amp;lt;- doesFileExist ldLibName&lt;br /&gt;                -- This method is called iteratively by xargs. The&lt;br /&gt;                -- output goes to &lt;ldlibname&gt;.tmp, and any existing file&lt;br /&gt;                -- named &lt;ldlibname&gt; is included when linking. The&lt;br /&gt;                -- output is renamed to &lt;libname&gt;.&lt;br /&gt;              rawSystemProgramConf verbosity ldProgram (withPrograms lbi)&lt;br /&gt;                (args ++ if exists then [ldLibName] else [])&lt;br /&gt;              renameFile (ldLibName &amp;lt;.&amp;gt; &quot;tmp&quot;) ldLibName&lt;br /&gt;&lt;br /&gt;            runAr = rawSystemProgramConf verbosity arProgram (withPrograms lbi)&lt;br /&gt;&lt;br /&gt;             --TODO: discover this at configure time or runtime on unix&lt;br /&gt;             -- The value is 32k on Windows and posix specifies a minimum of 4k&lt;br /&gt;             -- but all sensible unixes use more than 4k.&lt;br /&gt;             -- we could use getSysVar ArgumentLimit but that&apos;s in the unix lib&lt;br /&gt;            maxCommandLineSize = 30 * 1024&lt;br /&gt;&lt;br /&gt;        ifVanillaLib False $ xargs maxCommandLineSize&lt;br /&gt;          runAr arArgs arObjArgs&lt;br /&gt;&lt;br /&gt;        ifProfLib $ xargs maxCommandLineSize&lt;br /&gt;          runAr arProfArgs arProfObjArgs&lt;br /&gt;&lt;br /&gt;        ifGHCiLib $ xargs maxCommandLineSize&lt;br /&gt;          (runLd ghciLibFilePath) ldArgs ldObjArgs&lt;br /&gt;&lt;br /&gt;        ifSharedLib $ runGhcProg ghcSharedLinkArgs&lt;br /&gt;&lt;br /&gt;  -- build any executables&lt;br /&gt;  withExe pkg_descr $ \exe@Executable { exeName = exeName&apos;, modulePath = modPath } -&amp;gt; do&lt;br /&gt;                 info verbosity $ &quot;Building executable: &quot; ++ exeName&apos; ++ &quot;...&quot;&lt;br /&gt;&lt;br /&gt;                 exeBi &amp;lt;- hackThreadedFlag verbosity&lt;br /&gt;                            (compiler lbi) (withProfExe lbi) (buildInfo exe)&lt;br /&gt;&lt;br /&gt;                 -- exeNameReal, the name that GHC really uses (with .exe on Windows)&lt;br /&gt;                 let exeNameReal = exeName&apos; &amp;lt;.&amp;gt;&lt;br /&gt;                                   (if null $ takeExtension exeName&apos; then exeExtension else &quot;&quot;)&lt;br /&gt;&lt;br /&gt;                 let targetDir = pref &amp;lt;/&amp;gt; exeName&apos;&lt;br /&gt;                 let exeDir    = targetDir &amp;lt;/&amp;gt; (exeName&apos; ++ &quot;-tmp&quot;)&lt;br /&gt;                 createDirectoryIfMissingVerbose verbosity True targetDir&lt;br /&gt;                 createDirectoryIfMissingVerbose verbosity True exeDir&lt;br /&gt;                 -- TODO: do we need to put hs-boot files into place for mutually recursive modules?&lt;br /&gt;                 -- FIX: what about exeName.hi-boot?&lt;br /&gt;&lt;br /&gt;                 -- build executables&lt;br /&gt;                 unless (null (cSources exeBi)) $ do&lt;br /&gt;                  info verbosity &quot;Building C Sources.&quot;&lt;br /&gt;                  sequence_ [do let (odir,args) = constructCcCmdLine lbi exeBi&lt;br /&gt;                                                         exeDir filename verbosity&lt;br /&gt;                                createDirectoryIfMissingVerbose verbosity True odir&lt;br /&gt;                                runGhcProg args&lt;br /&gt;                            | filename &amp;lt;- cSources exeBi]&lt;br /&gt;&lt;br /&gt;                 srcMainFile &amp;lt;- findFile (exeDir : hsSourceDirs exeBi) modPath&lt;br /&gt;&lt;br /&gt;                 let cObjs = map (`replaceExtension` objExtension) (cSources exeBi)&lt;br /&gt;                 let binArgs linkExe profExe =&lt;br /&gt;                            (if linkExe&lt;br /&gt;                                then [&quot;-o&quot;, targetDir &amp;lt;/&amp;gt; exeNameReal]&lt;br /&gt;                                else [&quot;-c&quot;])&lt;br /&gt;                         ++ constructGHCCmdLine lbi exeBi exeDir verbosity&lt;br /&gt;                         ++ [exeDir &amp;lt;/&amp;gt; x | x &amp;lt;- cObjs]&lt;br /&gt;                         ++ [srcMainFile]&lt;br /&gt;                         ++ [&quot;-optl&quot; ++ opt | opt &amp;lt;- PD.ldOptions exeBi]&lt;br /&gt;                         ++ [&quot;-l&quot;++lib | lib &amp;lt;- extraLibs exeBi]&lt;br /&gt;                         ++ [&quot;-L&quot;++libDir | libDir &amp;lt;- extraLibDirs exeBi]&lt;br /&gt;                         ++ concat [[&quot;-framework&quot;, f] | f &amp;lt;- PD.frameworks exeBi]&lt;br /&gt;                         ++ if profExe&lt;br /&gt;                               then [&quot;-prof&quot;,&lt;br /&gt;                                     &quot;-hisuf&quot;, &quot;p_hi&quot;,&lt;br /&gt;                                     &quot;-osuf&quot;, &quot;p_o&quot;&lt;br /&gt;                                    ] ++ ghcProfOptions exeBi&lt;br /&gt;                               else []&lt;br /&gt;&lt;br /&gt;                 -- For building exe&apos;s for profiling that use TH we actually&lt;br /&gt;                 -- have to build twice, once without profiling and the again&lt;br /&gt;                 -- with profiling. This is because the code that TH needs to&lt;br /&gt;                 -- run at compile time needs to be the vanilla ABI so it can&lt;br /&gt;                 -- be loaded up and run by the compiler.&lt;br /&gt;                 when (withProfExe lbi &amp;&amp; TemplateHaskell `elem` extensions exeBi)&lt;br /&gt;                    (runGhcProg (binArgs False False))&lt;br /&gt;&lt;br /&gt;                 runGhcProg (binArgs True (withProfExe lbi))&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Выделенные &quot;&amp;gt;&amp;gt;&amp;gt;&quot; строчки нуждаются в замене. Для сборки DLL достаточно флага -shared, а остальное - лишнее. Ради этого переписывать 3 исходных модуля (ведь на верхнем уровне нам доступны только userHooks) в свой кабальный скрипт - это перебор. Создавать свою версию модуля Distribution.Simple и связанных библиотек - развалится, как только кто-нибудь (хотя бы cabal-install) обновит кабалу из hackage. Создавать свой клон кабалы под названием Distribution.VerySimple - порвёт совместимость с кабальными инструментами, ведь наш пакет будет ставиться не cabal-install, а нашей собственной библиотекой. Можно, конечно, сделать бутстрап - сначала кабала собирает пакет Distribution.VerySimple (он у нас будет указан как зависимость), а потом строчка import Distribution.VerySimple в Setup.hs у нашего пакета ставит всё на место. &lt;br /&gt;Оказалось, над проблемой бьются лучшие умы: &lt;a href=&quot;http://hackage.haskell.org/trac/hackage/ticket/148&quot;&gt;http://hackage.haskell.org/trac/hackage/ticket/148&lt;/a&gt;&lt;br /&gt;Короче, .bat-файл для сборки  DLL - не такая уж плохая штука.&lt;br /&gt;Слегка причёсанный Setup.hs из гугла:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import Distribution.Simple&lt;br /&gt;import Distribution.Simple.LocalBuildInfo&lt;br /&gt;import Distribution.PackageDescription&lt;br /&gt;import System.Cmd&lt;br /&gt;import System.Directory&lt;br /&gt;import Data.List&lt;br /&gt;import Distribution.Text&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;main = defaultMainWithHooks (simpleUserHooks { postBuild = buildDll })&lt;br /&gt;	where&lt;br /&gt;	buildDll _ _ pkg info = do &lt;br /&gt;		putStrLn &quot;Building Dll...&quot;&lt;br /&gt;		setCurrentDirectory (buildDir info)&lt;br /&gt;		let	buildCmd = concat $ intersperse &quot; &quot; [ghcExe,&quot;-shared&quot;,&quot;-o&quot;,dllFile,oFile,packages]&lt;br /&gt;			dllFile = display (pkgName (package pkg)) ++ &quot;.dll&quot;&lt;br /&gt;			oFile = &quot;HS&quot; ++ (name pkg) ++ &quot;.o&quot;&lt;br /&gt;			packages = concat $ intersperse &quot; &quot; $ map showPackage $ packageDeps info&lt;br /&gt;	-- эта строчка лишняя&lt;br /&gt;			cpDllCmd = &quot;cp &quot; ++ dllFile ++ &quot; &quot; ++ (name pkg) ++ &quot;\\&quot; ++ dllFile&lt;br /&gt;			ghcExe = display $ compilerFlavor $ compiler $ info&lt;br /&gt;			&lt;br /&gt;			showPackage :: PackageIdentifier -&amp;gt; String&lt;br /&gt;			showPackage pi = &quot;-package &quot; ++ display pi&lt;br /&gt;			name :: PackageDescription -&amp;gt; String&lt;br /&gt;			name = display . package &lt;br /&gt;&lt;br /&gt;		putStrLn buildCmd&lt;br /&gt;		system buildCmd&lt;br /&gt;	-- и эти 2 тоже &lt;br /&gt;		putStrLn cpDllCmd&lt;br /&gt;		system cpDllCmd&lt;br /&gt;		return ()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Но он ещё не умеет учитывать сишные исходники и дополнительные библиотеки.</description>
  <comments>http://nealar.livejournal.com/58896.html</comments>
  <category>вопрос</category>
  <category>haskell</category>
  <category>тудейное</category>
  <category>dll</category>
  <category>cabal</category>
  <category>win</category>
  <lj:music>Nightmares on wax</lj:music>
  <media:title type="plain">Nightmares on wax</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>13</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/58589.html</guid>
  <pubDate>Fri, 22 May 2009 04:02:21 GMT</pubDate>
  <title>GCC vs AVR = 1:0</title>
  <link>http://nealar.livejournal.com/58589.html</link>
  <description>GCC - хороший компилятор. Но иногда его зарубает: в коде&lt;br /&gt;&lt;i&gt;&lt;br /&gt;uint16_t x;&lt;br /&gt;int16_t ref;&lt;br /&gt;uint32_t result;&lt;br /&gt;&lt;br /&gt;result += (x-ref)*(x-ref);&lt;br /&gt;&lt;/i&gt; он делает всё правильно, за исключением: &lt;br /&gt;1. результат умножения должен быть 32битным&lt;br /&gt;2. надо пользоваться командой перемножения знаковых чисел.&lt;br /&gt;Причём, получить от него 32битный результат, немного пошаманив, можно. Но при этом пациент пытается перемножать 32битные числа!  Добиться от него использования команды знакового умножения так и не удалось.&lt;br /&gt;&lt;br /&gt;А вот оптимизатор у него - очень качественный: выделение подвыражений (в этом примере x-ref он считает 1 раз), размещение данных в регистрах, толковый пролог у функций и прерываний (я иногда на асме пишу хуже :)).</description>
  <comments>http://nealar.livejournal.com/58589.html</comments>
  <lj:music>Venetian Snares - Hospitality</lj:music>
  <media:title type="plain">Venetian Snares - Hospitality</media:title>
  <lj:mood>shocked</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>31</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/58306.html</guid>
  <pubDate>Wed, 20 May 2009 04:19:00 GMT</pubDate>
  <title>Украина и Боги Хаоса</title>
  <link>http://nealar.livejournal.com/58306.html</link>
  <description>Часть первая: &lt;a href=&quot;http://v-star-78.livejournal.com/146656.html&quot;&gt;http://v-star-78.livejournal.com/146656.html&lt;/a&gt;&lt;br /&gt;Часть вторая: &lt;a href=&quot;http://v-star-78.livejournal.com/154864.html?nc=10&quot;&gt;http://v-star-78.livejournal.com/154864.html?nc=10&lt;/a&gt; комменты тоже достойны&lt;br /&gt;Часть третья: &lt;a href=&quot;http://v-star-78.livejournal.com/157086.html&quot;&gt;http://v-star-78.livejournal.com/157086.html&lt;/a&gt;&lt;br /&gt;Часть четвёртая: &lt;a href=&quot;http://mignews.com.ua/articles/359869.html&quot;&gt;http://mignews.com.ua/articles/359869.html&lt;/a&gt;</description>
  <comments>http://nealar.livejournal.com/58306.html</comments>
  <category>ua</category>
  <category>fantasy</category>
  <category>fun</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/57938.html</guid>
  <pubDate>Sun, 17 May 2009 13:42:03 GMT</pubDate>
  <title>разархивирование</title>
  <link>http://nealar.livejournal.com/57938.html</link>
  <description>В этом месяце стало модно писать о войне. И о ревизионизме. Вот и меня эта тема затронула. Пишу:&lt;br /&gt;&lt;br /&gt;Надо наведаться в ЦАМО. Вопрос: куда к кому там обратиться, что иметь при себе, какие грабли могут ожидать?</description>
  <comments>http://nealar.livejournal.com/57938.html</comments>
  <category>тудейное</category>
  <category>война</category>
  <category>архивы</category>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nealar.livejournal.com/57816.html</guid>
  <pubDate>Fri, 15 May 2009 09:08:59 GMT</pubDate>
  <title>Ленивые языки и мелкозернистая многозадачность</title>
  <link>http://nealar.livejournal.com/57816.html</link>
  <description>Если я правильно понимаю ситуацию, то ленивое выражение вычислется так:&lt;br /&gt;Выполнятор (RTS или STGM или как оно правильно называется) берёт отложенное вычисление (которое представляет из себя вершину в графе AST) и пытается его форсировать. При этом он натыкается либо на отложенное подвыражение, либо на вызов функции из FFI либо Prelude. В первом случае ситуация &lt;b&gt;повторяется&lt;/b&gt;. Во втором случае вызывается нативный код. Если время выполнения каждого нативного вызова предсказуемо, то получается, что выполнятор получает управление через предсказуемые промежутки времени. И может &lt;i&gt;перед каждым шагом&lt;/i&gt; вычисления отложенных выражений переключать контекст. &lt;br /&gt;&lt;br /&gt;Как бы теперь это к работе приспособить. Нужен легковесный ленивый параллельный язычок для тупых процессоров. И компромиссная библиотека: чем мельче будут раздроблены нативные вызовы, тем больше оверхед, но тем большее разрешение по времени мы получим для нашей многозадачности. А поверх этого надо накрутить какие-нибудь &quot;контракты&quot; с железом - чтобы знать, когда к каким событиям мы должны успеть. Смешение парадигм, однако.&lt;br /&gt;Альтернатива - параллельные сишные программисты, которые умеют точно оценивать время работы своего кода. &lt;br /&gt;Другая альтернатива - брать процессор помощней и надеяться, что всё везде успеет.</description>
  <comments>http://nealar.livejournal.com/57816.html</comments>
  <category>stgm</category>
  <category>haskell</category>
  <category>мюсли</category>
  <category>работа</category>
  <lj:music>DKAY.COM - What&apos;s next</lj:music>
  <media:title type="plain">DKAY.COM - What&apos;s next</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>92</lj:reply-count>
</item>
</channel>
</rss>
