понедельник, 7 августа 2017 г.

Про бегуна на длинные дистанции

Десять тысяч и всего один забег
Остался. (С) В. Высоцкий


Таки Саша М. замотивировал бегать. Записались на 10к в сентябре еще прошлым ноябрем. В апреле потихоньку начал тренироваться.

Бег сам по себе довольно бюджетный спорт. Более шахмат, конечно. Но не хоккей, например, или биатлон. Все что реально нужно, это нормальные кроссовки и нормальные часы/пульсометр. 

Увы, в России (провинции) купить часы и кроссовки практически не возможно. Не знаю как в столицах, но тут ритейлеры возят с коэффициентом 2-2.5 по цене. В Ростове-на-Дону кроссовки есть (Топ-Лига), но как-то вне основных путей. Я там не был, просто Саша А. там купила в командировке. 

Вышло, что в Европе получается адекватнее, и еще taxFree работает. Часы Garmin Forerunner 235 вышли около 15к, кроссовки Asics Cumulus - 10к. 

Всякие wristBand от Китая не смотрите, оно должно пульс непрерывно мерять, а не раз в минуту. GPS, куча аналитики и графиков, социалочка с друзьями, в простом Китае этого нет.

Начинал в начале апреля (еще снег и лед) где-то с 4к за 6:40 на км. Масса зимняя - 95кг. Кроссовки образовались ближе к концу мая. Там через неделю перешел на 7.5к. 

Сейчас я уже 4 года пишу на Scala и чувствую себя отлично спокойно делаю 10к за 50:20 (надо бы в течение месяца/двух пробить 50 минут), то есть 5:02 на км. Масса 82кг, то есть от зимнего ушло 13кг (после майских и Питера все равно был 95кг).  По массе еще точно 3-5кг на животе болтается, масса вторична, просто бегать с лишними 10-13кг оно по определению тяжелее.

Все бегал с оглядкой на пульс, последние недели две тупо по темпу (стабильно 5:15, или чуть быстрее по ощущениям), последний км на максимуме. Вообще не устаешь. До этого чисто по ощущениям первые два км идут быстро, но и сам потом упарываешься. Не надо так, бегайте в стабильном темпе.

Еще, в жару (все что выше 20) бегать сложно. Градусов 15-17 - идеально. Но в этой стране либо непрерывный дождь, либо жара в 25, либо стадион закрыт. В жару я решил более 7к не бегать, там обезвоживание что-то быстро идет, вообще не кайф.

До бега часа 4-5 вообще не есть (иначе больно), после вы сами не захотите. Двойная экономия. 

Еще, на такой дистанции с меня выходит 1-1.5 кг, очевидно воды. Рекомендуют восстанавливаться специальными жидкостями, а не просто водой. Там состав по солям/электролитам ближе к человеческому (гуглится, можно купить или что-то самому делать).

В общем, мотивируйтесь.

четверг, 18 августа 2016 г.

Про м*

Нет, не про мудаков.

Тут в функциональном интернете ходит поверье, что чтобы понять м*, ты просто обязан написать про них монографию пост, либо в крайнем случае твит. После этого ты теряешь все способности объяснить окружаюшим, что есть м*.

Так вот...

Это наиболее простое объяснение, которое я когда-либо встречал:

https://www.quora.com/Can-I-understand-monad-as-a-container-performing-certain-computation/answer/Bartosz-Milewski?share=a7312bea

В молодости ты все думаешь, что контейнер - это некая структура данных. Так вот... забейте, это не так. Думайте, что это контейнер (никакой STL тут не причем).

Самое важное, что есть в функциональном программировании (и вообще в программировании. и мире в целом) - это композиция  ("композибилити"). Это когда выход одного может быть входом другого. Для ФП - это как бы базис. Хваленное ООП не такое, тут понятие вход/выход выходит за рамки ООП. Ну а в мире, один из самых простых примеров - вилка-розетка. Это только потом Lego появилось.

Так вот... Иногда удобно, когда у вас выход чем-то обернут, назовем это "чем-то" контейнером. И хочется сохранить композицию. То есть следующая функция берет оригинал, и возвращает опять обертку. И мы это композируем.

В мире java до сих пор (2016 год у меня на дворе) любят null. Все-таки немного про мудаков. Всякие вариации nullable, Option[_] и есть контейнер. Мудаки все равно будут утверждать что null быстрее работает, что-нибудь про боксинг говорить. Мудаки как есть. Закончили про них.

Еще контейнер - список. Функция возвращает не просто один "детерминированный" вариант, а целый список. Список пустой - функция загнулась. Список из одного элемента, единственный результат. Несколько элементов - резветвление "недетерминированных" вычислений (тут кавычки нужны, оно конечно все детерминированно).

Представьте, что задачу о N-ферзях считаете, либо что-то другое рекурсивно-переборное. То есть если вернулся пустой список, то все, ветка вычислений дальше не пойдет. Если несколько вариантов, то дальше на один уровень для каждого варианта углубляемся и машем.

Аналогия с прямолинейным Option/nullable тут на лицо. Если - косяк, то - косяк. Иначе живем. Можно обернуть этот косяк к красивым сообщение об ошибке. Так вот... у нас есть еще один контейнер.

А фьючи..? Например поэтому не хочется говорить структура данных, это именно контейнер.

Про упоротых хаскеллистов я пока не буду, мне рановато. Все равно IO() немного маджик, там как-то скрыта ссылка на внешний мир.

State он прикольный, но я тоже ничего здесь писать не буду. У меня местами есть подозрение, что в какие-то моменты времени до меня доходят Free M* и trampoline. Трансформеры пока мимо кассы.

А так реальный пример с широкими массами: заметил у Сереги на работе код на swift-e. Тот унылый треугольник кода, где пять вложенных if-ов, в каждом проверка на null и что-то деланье. Выразил свое негодование. Через неделю проверил, там 4-5 вынесенных мини-функций, но все равно по факту лапша. Континуэшенами не втирал, но близко. Оказалось, что в swift у Option и так есть map/flatMap. Переписали в 4 строки, ни одного if-a.

В первые полгода сначала кажется, какой же классный синтаксис, for работает и со списками, и с фьючами, и с Option. Так вот, это не синтаксис, это и есть м*.

ЗЫ. Вот и философский вопрос. Предположим есть язык, в котором достаточно богатая типизация, м* вынесены как абстракция, но нет for-comprehension. Вопрос, на который день он появится?

вторник, 10 мая 2016 г.

Изоморфизм с едой

Таки услышал хорошую мысль от Erik Meijer, про всякие agile&&scrum. Делюсь.

Вот в McDonalds работает куча необразованного персонала тинейджерского возраста, им нужно куча инструкций/бизнес-процессов, что бы из полуфабрикатов (читай, тоже так себе продукты) сделать что-то более-менее съедобное.

С другой стороны в ресторане есть шеф-повар, который сам отвечает за покупку продуктов, у него каждый день различное меню, его едой наслаждаются. Ему не нужна куча инструкций и досок с отрывными бумажками. Это называется профессионализм.

Конец цитаты (вольный пересказ).

Все эти ваши методологии (с) направлены на:
- взаимодействие с "верхами" (заказчик/клиент/менеджер)
- показать прозрачность разработки/планирования
- ...

Но никаким образом не сказываются на внутреннем качестве кода. Тесты/CI/code_review как-то мимо. Оно и понятно, что scrum-ы и для производства автомобилей применимо, где code review отсутствует. Так и получается, что все все равно говорят на разных языках.

А выход у программиста - это код. И с моей точки зрения, нужно все метрики вводить на код. Хороводы у костра - это дистракт от кода, и программистам он вообще теплее не делает (а всем остальным руко-водителям как бы теплее).

Вместо получения нормальной спецификации по задаче (да, это сложно, но это как-то нужно делать) вводят кучу *-мастеров, по словам Erik-а, вообще на сетевую пирамиду похоже.

ЗЫ. После ухода с МС, Мейер как-то много где тусил. А потом как-то пропал. Вообще, локально обсуждали, думали опять с кем-то поругался. Оказалось, его хорошенько по здоровью скосило, на полгода. Вывод: не строить домыслов.

пятница, 6 мая 2016 г.

Алгеброидная хроника

Организованная группа лиц в поле пыталась извлечь корень из единицы. В последнее время участились случаи использования таких корней при производстве пучков ко-гомологий, контрамодулей и других психотропных веществ.

РосМатриксКонтроль удаленно зафиксировал незаконное использование размерности больше 3, на место предполагаемого преступления выехала оперативная полугруппа "Анти-Тензор". Подозреваемые задержаны.

Главарь группы (погоняло Моноид), ранее судимый за подобные ко-преступления, имеет характеристику 7, что далеко от идеала. Согласно аксиомам, Универсум гарантирует бесплатного алгеброида для данного процесса. Остальные элементы ранее не выходили за пределы Банахова пространства и отпущены под подписку о невычислениях.

За данное преступление согласно 1729 статье математического кодекса виновному грозит до 2-х лет вычислений на дистрибутивной решетке, а так же запрет на использование кватернионов и комплексных чисел до 5-ти лет. Пункт 2 статьи 1729, за те же деяния, совершенные группой лиц по предварительному сговору, запрещает занимать любые вычислительные должности на срок до 7 лет.

Если вам что-либо известно о данной группе, либо об аналогичных преступлениях, просьба обратиться на ближайшую кафедру. Реверсивность и вознаграждение гарантируется.

среда, 6 апреля 2016 г.

Объявление (аренда квартиры)

Таки извиняюсь, личное, и объявление.

Сдам 2-х комнатную квартиру, Ижевск, район ГорСовета, 9 этаж, вид на Металлург.

Кухня вся (газ плита, микроволновка, холодильник), стиральная машина, пылесос, 2 раскладных дивана, интернет.

14тр + счетчики. На длительный срок(!). Депозит в размере 1 месяца, так как без риэлторов, то других платежей нет. Сильное желание, чтоб вы меня знали (и симметрично).

Таки не актуально. Всем спасибо.
















пятница, 4 марта 2016 г.

Scala

Обнаружил, что у меня здесь два черновика с таким заголовком. Оба удалил, пишу еще один пост про это.

Собственно, Scala is awesome. Оосам. За 2.5 года (чуть более чем) профессиональной (100% и свободное время) понимаю, что это что-то иное, чем ... язык.

В принципе, язык и есть способ мышления. Все еще поражает, что у меня есть рост (хотя вру, не поражает), но рост есть.

Начал отличать здоровую от нездоровой функциональщины. Пока у нас в коде есть 2-3 кб нездоровой функциональщины. Нездоровая - это когда ты и твоя команда не понимает, как оно работает. В общем, у нас есть немного shapeless с небольшими включениями HList-ов. Базовую концепцию понять не сложно, но у нас кусок нездоровой. В принципе, я понимал, что это можно сделать магией, спросил на StackOverFlow, и получил кусок магии. Суммарно 2-3 дня вкуривания, и ... не помогло.

Еще в 2-3 местах хочется scalaz.Functor.lift, но не критично. По факту хочется лифтинга с базовой функции на коллекцию, что еще внутри параллелизм был. Одного метода вручную должно хватить.

Еще у нас есть имплициты (неожиданно, правда?), очевидно, у всех есть. А еще есть имплицит, который из одного имплицита достает что надо. То есть такой рекурсивный имплицит на один уровень.

Еще у нас есть 4Тб сырых данных и 9.5 млрд строчек там. Это так, что б померяться. Правда, это вся история, а не за сутки.

Еще у нас нет null-ов. Вообще. Zero. Хотя NPE был на этой неделе, но там запрос в легаси БД, где джоиняться 10 таблиц (какие-то дебилы писали), и на выходе где-то пусто оказалось. Но дальше этого null-ы не пройдут. ScalaStyle проверяет, что в коде нет слова null. И точка.

Еще у нас нет var-ов. Лукавлю, есть. Есть два итератора, и как-то внутри итераторов без стейта вообще сложно, особенно, если он нужен. И еще в одном/двух местах, но там не я, и надо выпиливать.

Еще понимаешь, что дело не в языке, а в людях/головах. Бывает отвернешься, смотришь коммит, а там на тебя смотрит Try[Option[List[String]]]. Или null, или var, однажды вообще break торчал. А ты такой, берешь лопату, и говоришь: "Не надо так". Потом идешь в continuous integration и добавляешь правило, что оно само следило за порядком.

А однажды, я глазами обнаружил пласт копи-пасты, пришлось свой плагин для sbt писать, чтоб это безобразие контролировать.

Еще был кусок макроса. Но нашлась библиотека, которая состоит из этого макроса. Enum собирать в коллекцию. Тот же рефлекшн, только компайл-тайм.

Еще в одном месте доабстрагировались, что есть мини-OLAP, с иерархической агрегацией, и все это в N строчек кода. N - мало.

А еще я понимаю, что хвастаться - не хорошо.

А еще есть чудики, которые пишут, что язык ХХХ - говно, мы перешли на Go, и все стало круто. Другие, что компания, занимающаяся языком YYY произвела ребрендинг (поменяла название), что языку YYY - хана.

Из всего этого я понял, что мир не одномерен (читай, язык ХХХ - лучший), а как минимум трехмерен [команда, задача, технологии]. Но об этом кричат люди, которые даже не в команде.

В общем, не будьте плоскими. Можно считать это тостом.

воскресенье, 11 октября 2015 г.

О хорошем

Что такое "хороший программист". Мои 50центов.

Наверняка у вас в голове есть тоже какое-то определение. Есть еще всякие слова типа Lead/ведущий, в английском еще странная позиция уровня "Staff engineer", что в иерархии может быть довольно крутым (даже после lead).

Сейчас у нас импортный коллега в импортном офисе в linkedin выставил что он "директор по инфраструктуре и облачным решениям". По факту он единственный сис. админ. Директор - оно конечно звучит, но факт не отменяет.

Еще у себя у университете я видел "ведущего программиста". Так как это бюджетная организация, то ставка "ведущего программиста" подразумевала открывание аудитории с компьютерами до начала занятий и закрытие оной после окончания занятий. Российское понятие "трудовая книжка" не описывает всю сложность выполняемых работ, потому безликая надпись "ведущий программист" в принципе уравнивает всех несмотря на цветовую дифференциацию штанов на этой планете.

Сейчас в нашей команде 3 человека. Можно выбрать любой титул для linkedin, все равно санитары его не читают. Если что, я им лучше про аппликативные функторы рассказывать буду, чем вице-президентом представляться.

Сейчас (на ближайщий год) мое определение "хорошего программиста" - использование подходящего уровня абстракции и способность переходить/опускаться/подниматься на нужный уровень.

Да, это довольно абстрактно.

Но это лучше чем "я руководил коллективом и 15 программистов", "в начале 2000-х я писал на COM+/драйвера для принтера". Очевидно, что есть куча специализаций, и сравнить вообще что-то просто бессмысленно. Опыт/знание/умение не численный показатель.

Как же тогда оценить "подходящий уровень абстракции", спросит надоедливый читатель? Если коротко, я не знаю.

Есть куча нормальных задач, где надо опускаться сверху вниз. При условии, что вы это сами можете. Двигаться вверх обычно сложнее, и в задачах редко можно шагнуть на 1-2 шага вверх без сложностей.

Двигаться вниз на 2-3 шага довольно занимательно. Но дальше вы снова упретесь в абстракции. Либо там уже аксиоматика, либо абстракции, близкие к аксиомам. Можно опускаться в квантовую механику (заметьте, что "опускаться"). Понятие числа вообще сложно, тем более вещественного. А основания логики и философские основания математики вроде выглядят как "копание вниз", все равно упиратесь. Так что копание вниз и абстрагирование вверх одинаково сложно.

Разные уровни абстракции приводят к разным языкам. И не только в программировании. Порефлексируйте на эту тему самостоятельно.

Вообще, все вышенаписанное применимо в абстрактной форме к тем вещам, где есть абстракции. К землекопам, роющим троншеи для ГВС оно слабо применимо. Можно конечно, перейти из 2d в 3d, но дальше не получится. 

пятница, 2 октября 2015 г.

почти как в одной стране

Кстати, а откуда в числе \pi все есть?

Ну, иррациональное и трасцендентное. В \log{2}{10} как бы тоже, и как континуум других чисел, но в логарифме как-то иначе. А про \pi все говорят/бьют себя в грудь, будь то сами видели. Тут можно вспомнить  бородатый анекдот про Чака Норисса. Что тот в качестве пароля использует последние 8 знаков числа \pi.

Еще меня только на прошлой неделе осенило, что в числе \pi есть число \pi. Причем дважды (очевидно что больше ) ). "Легко видеть, что " если взять первые $n$ знаков числа \pi, то они с какой-то позиции содержатся. Предельный переход по $n$ (не совсем уверен, законно ли это).

Причем та копия, тоже содержит число \pi. Тут уровень рефлексии зашкаливает.

Это все рассуждения, при условии что в \pi содержится любая конечная последовательность.

А та наркомания от Рамануджана, где \sqrt (\pi * \ e / 2) = цепная дробь + гипергеометрический ряд. Оно вообще доказано, либо у Рамы много чего из сонника есть. Следуют ли отсюда какие-то свойства \e ?

Так же недавно еще наркомания в голову пришла. Возможно, многие уже в курсе, что 1+2+3+4+... = -1/12? Если нет, так вот знайте. Даже я знаю про 3 доказательства на уровне школы. Товарищи с МехМата сказали, что это вообще очевидно следует из Гамма-функции, но я не такая.

Так вот, говорят что физики это натянули на теории струн, и наша вселенная вообще 26 мерная, причем из этих -1/12 они взяли 12, помножили на 2 и еще добавили 2. Странные какие-то. Пусть, я своими глазами вообще только проективную геометрию вижу, да и об горячий чайник рукой обжигаюсь.

Если же паралелльные вселенные существуют, то в них тоже 1+2+3+...=-1/12, тогда если еще и поверить физикам и неведомым струнам, то пространство тоже 26-мерное. Мирок изоморфный нашему получится. Такой же, с инфляцией и ценами на гречку. А это несколько печалит. Хотелось бы что-то иное. Это, если конечно, физики нас со струнами не обманывают. А я только название знаю, и слишком доверчивая.


суббота, 22 августа 2015 г.

flashmob

1. Взять ближайшую книгу.
2. Открыть на странице 69.
3. Найти первое предложение — оно и описывает вашу сексуальную жизнь.
4. Поместить в дневнике вместе с этими инструкциями.
5. Не выбирать книгу, взять ту, которая ближе других в данный момент!

"Дополняя исследования параграфов 15 и 49, приведем еще все типы групп восьмого порядка."

ЗЫ. Больше полугода на столе лежит что попало. Бумажные медленно идут (

среда, 19 августа 2015 г.

scala-cpd, yet another scala copy paste detector

You could treat this post as ad. Because, literally it is.

I have realise that our code contains a little bit copy-pasted blocks. Code in Scala, obviously. So, I was looking for perfect working tools for it (at least, to find those blocks). I found only  two non-working  implementations. One is based on PMD (some classic tool for this topic), I cannot execute other variant because of elder sbt version. 

So... I write my own. It's sbt-plugin. 


The code is pretty simple. Scala 2.10 contains macros/run time aka ToolBox. That means, we have AST for free. After that we traverse tree and put all matched subtrees into dictionary (as strings). All matched substrees are blocks/functions_apply/vals/defs and so on. Yeah, and we don't care about comments, because ToolBox-parser perform only AST for code, not for comments.

If two subtrees are equal (syntactically, by _.toString) and  big enough, it's a problem. Houston. 

Fairly, first version is simple. Next version, I hope, would find val-renaming. It should be simple task while we work with AST, not with code-as-string. 

At least, we use it in out CI-process. For each commits, TeamCity execute task with this plugin, and check that count of copy-pasted-blocks is less or equal than for previous commit. 

It would be a big pleasure, if you also will use it.

PS. 3 years ago we use Simian. It's good enough, but it's not a AST, just strings. 

суббота, 4 июля 2015 г.

Само совершенство (нечетное)

http://mathworld.wolfram.com/OddPerfectNumber.html

Таки наконец-то случайно наткнулся (хотя вообще странно, что мне лень было погуглить што-ле?)

В отечественной научПоповской литературе про ТЧ (как ни странно) есть два мнения, что нечетных совершенных чисел нет и не будет, либо просто отсылка к тому что "типа, никто не знает".

А тут аж библиография на 35 источников.

И еще вот тут http://www.oddperfect.org/ люди таки как-то их ищут. И это несколько забавляет, хотя внутри математики, очевидно, неограниченно. Забавляет скорее факт, что их результат будет вроде "Соверешенное нечетное, если и существует, обязано быть более 10^645" (степень случайна, и брякнута на клавиатуре).

Мерсенн-щиков (тех, кто GIMP гоняет) я тоже не понимаю. Себя я тоже не понимаю, мини-идеи и эксперименты (в виду лени) как-то у меня не шибко идут.

ЗЫ.
Жаль я довольно туп. Хотя бы потому, что не нашел этого ранее.

О дивный, новый мир. Хотя не... спать сегодня спокойно буду.

понедельник, 27 апреля 2015 г.

Принцип двойной записи и псевдовыборы

Тут некое видео, которое показывает тонкие места нашей(все давно понимают, что не нашей) избирательной системы:
https://navalny.com/p/4219/

И так, основной глюк всей этой системы - это "вброс". Проблема, как мне кажется, имеет очевидное решение.

Почти постановка задачи.

На избирательном участке в день выборов проходит не более 2000 человек (мультиплицирующий коэффициент не так важен). Важен факт, что всех этих людей обрабатывают (проверяют в списках/паспорт) вручную.

Если в результате бюллетеней оказывается меньше, чем официально выдано - это формально не проблема. Текущими законами (очевидно, это все с моей точки зрения, так как "закон о выборах" я не читал) не запрещается взять, но не проголосовать.

Хуже, если бюллетеней оказывается больше, чем изначально выдано.

Задача сводится к проверке аутентичности/подлинности бумажки. Очевидно, что если бумажка только содержит галочку и ее можно отпечатать в некоторой типографии, то ничего не получится.

Первое тривиальное решение, которое приходит в голову - это заверять каждую бумажку у Главного(-ых) в избирательной комиссии. Подписи 3-4 человек в углу документа/специальном поле, позволяют отделить выданные от "вброшенных". Круговая порука, 3-4 человека, представляющие разные стороны. По крайне конкретно эту проблему должен решить. Минусы тоже очевидны - замедление процесса, и необходимость в изменении законов/процесса. Лично я - за честность.

Возможна куча других модификаций, типа записывать что этот бланк выдан тогда-то (с точностью до минуты) в отдельный лог (журнал). И на бланке ссылка. В случае подозрений можно искать в логах. Тут только аккуратно продумать с тайностью голосования, чтобы нельзя было привязать голос к голосующему.

Варианты с фильтром Блюма, (полу-)центральной выдачей GUID-ов и т. д. возможны, но пока довольно сложны.

ЗЫ. Подделывать подписи 3-4 людей тоже возможно, но таки сложнее. 

воскресенье, 19 апреля 2015 г.

Абстрактнее

https://gist.github.com/noelwelsh/02b9ecf6d21c7b8934e8

Хотя в текущем проекте потенциально null-ы могут придти только из внешних систем (), но писать обработку на всякий случай приходится. Сейчас это только Cassandra и какая-то хреновина для гео-локации по ip (maxmind). Наследие. "В java только дедушки" (с).

null вообще запрещен синтаксически к употреблению в scalaStyle. Приходится в нескольких местах закрывать/открывать проверку стиля.

Вот те две проверки на равенство null теперь можно довольно красиво заменить на (см. ссылку на месте первого абзаца):

> result.?.getOrElse("")

Перфекционизма с возрастом все больше и больше. Это отход от студенчества.

Прошелся по коду. Оказалось, что Option[_] тоже можно глуповато использовать. Очевидно, это лучше чем null. Но и пересолить/переборщить тоже можно. К тому же, если потом в каждом месте match-ить или if-ить. Try[_] там оказался уместнее. Хотя дать волю, то его тоже начнуть match-ить или if-ить, хотя кроме необходимого map/flatMap больше ничего и не надо.

В scala очень нравится то, что через месяц (и каждый месяц в течение нескольких лет) написанный код уже начинает вызывать отторжение, и хочется переписать на чуть более абстрактные абстракции. И это очень клево, хоть какая-то движуха.


понедельник, 30 марта 2015 г.

КопиПаста

Пока не нашел для scala работающей тулзы для поиска копипасты в коде. (Коллега немного грешен, в аду не я по этому поводу гореть буду). Есть 1-2 неработающих, но они на 2.9 и как-то уже несколько лет не активны.

Как всегда, (даже если вас съели) есть два выхода.

Тупой, и в то же время, обычно работающий вариант, смотреть на это все как на строки. И искать плагиат. Баян. Через "а".

А крутой способ - это иметь AST, и искать похожие поддеревья. В чем крутизна, что строить/парсить/лексить scala не надо, начиная с 2.11 тут нормальные механизмы. Пока руки коротки, но скоро все подключу.

Очевидно, что в каждом компиляторе все проходят через шаги c AST. То есть основная задача - это внедриться в процесс и в нужный момент искать копипасту. В реальности проблемы, что обычно это написано как монолитный кусок (тут можно бы добавить, но я тактично промолчу) кода. В C# почти сделали Roslynd, но я уже два года вне темы и C#. В gcc внедряются как-то, но я вообще вне темы. Уровень вхождения там сильно выше.

А в scala видится несложным. Макросы должны быть гораздо проще, но лично мне макросы пока тоже далековаты, хотя в пару мест и можно было бы запихнуть. Тут что-то рефлексией попахивает. В общем, надо копать.

вторник, 17 марта 2015 г.

Режим радиомолчания

Пора уже выходить из радиомолчания. В принципе, писать есть о чем, но в то же время и не хочется. Как в классике: "Начало лекции про ленивые вычисления. -Лекция окончена. У вас есть вопросы?"

Так что ссылка на котиков не будет, вместо этого канал на Wednesday Addams.

http://www.youtube.com/channel/UCyX7977vwwko1lurVlEJszQ

И ленивые вычисления совершенно не причем.