О двух интересных проектах

В этих ваших интернетах, за последнюю неделю, я узнал о двух проектах которые, на мой взгляд, как минимум заслуживают того, что бы о них прочитать. Речь идет о двух новых “почти ОС”, одна из которых совсем уж наброски, а вторая вполне себе рабочий прототип. Интересны системы, в первую очередь, тем на чем они написаны и в какой среде работают. Continue reading

Луч поноса авторам HomeBrew

Довольно давно, а если говорить точнее, то уже лет как 5 я использую MacPorts. Порты, конечно, не без багов, но все же они достаточно хорошо спроектированы и удобны в использовании. В них всегда можно найти несколько версий компиляторов и т.д. И тут, внезапно, мне понадобился HomeBrew. Да, я знаю, что писать пакеты для MacPorts трудно, а для HomeBrew легко. Да, я в курсе того, что заставить работать MacPorts через прокси не так уж и просто, а HomeBrew очень легко. Но…

КАКОГО ХЕРА HomeBrew требует что бы пользователь был Admin?! Что за жопорукий дебил это придумал?! Системное приложение ОБЯЗАНО уметь работать через sudo или каким-то иным способом повышать свои права!

Что бы такое посмотреть, что бы такое почитать? III

Надо сказать, эта неделя выдалась довольно интересной: несколько отличных статей по C++, обзор состояния C++1Y и пара выступлений о Rust.

Если говорить о C++, то отличился Саттер, выдавший одну интересную статью и небольшую головоломку:

А новости относительно Rust вообще необычайно приятны:

Да, чуть не забыл. Некоторое время назад я наткнулся на сайт с описанием основных структур данных и алгоритмов с информацией о сложности той или иной операции. Удобно сделано!

Поговорим об акторах

Лично мне очень нравится концепция акторов. Что интересно, познакомился я с ней куда раньше повальной моды на функциональщину, в году так 2003, когда начал плотно работать с библиотекой ACE (это та, которая The ADAPTIVE Communication Environment). Ну а сейчас акторами никого не удивишь, все про них только и говорят. И это хорошо, так как данная модель сильно упрощает отладку и разработку, при относительно не большой просадке по производительности и памяти.

В последнее время я присматриваюсь у относительно экзотическим языкам программирования, таким как Rust и Scala, а для обоих языков модель акторов является родной. При этом, на данный момент, Rust ничего не может предложить сравнимого с библиотекой AKKA, хотя даже в текущем своем состоянии его представление модели акторов не безынтересно. Continue reading

Монитор от Герба Саттера

В недавно вышедшем выступлении Герба Саттера посвященном многопоточности он привел интересный пример примитива для синхронного выполнения последовательностей операций. Сам Майерс окрестил детище “монитором”, по аналогии с мониторами из мира Java и C#, хотя на мой взгляд, сходства между ними не так уж и много. Суть задумки в том, что бы синхронизировать работу с каким-либо объектом, который изначально не поддерживает синхронизации. При этом, обеспечив синхронность не только на уровне одной операции, но и на уровне “трансзакции”.

string s = "Start\n";
vector<future <void>> v;

for(int i=0; i&lt;5; ++i)
{
    v.push_back(async([&,i]{
        {
            // необходимо сделать атомарно.
            s += to_string(i) + " " + to_string(i);
            s += "\n";
        }
        {
            // так же необходимо сделать атомарно.
            cout < < s;
        }
    }));
}

В принципе, в приведенном выше примере вполне можно воспользоваться комбинацией mutex + lock_guard, но так не интересно, не красиво, да и о чем было бы рассказывать в течении полутора часов?
Решение предложенно действительно элегантное: Continue reading

Модель памяти Rust

Модель памяти Rust довольно сильно отличается как от управляемых языков типа Java или C#, так и от не управляемых языков типа C и C++. Так как Rust является совершенно новым языком программирования и не ограничен какими-либо требованиями совместимости с предшественниками, он реализует наиболее удобную модель памяти для решения следующих целей:
Безопасность. Предотвращение возникновения утечек памяти или ошибок сегментации.
Производительность. Сборщик мусора управляет указателями а не объектами. Нет необходимости замораживать все задачи для очистки памяти, так как каждая из них имеет собственный хип.
Многопоточность. Предотвращение возникновения гонок в памяти, так как каждая из задач имеет собственный хип и передаваемые между задачами данные должны копироваться. Наличие хипа обмена для избежания лишних операций копирования с семантикой владения. Continue reading

Внутреннее устройство Mac OS X

Долгое время, единственной книгой по внутреннему устройству Mac OS X была Mac OS X Internals: A Systems Approach. Книга жутко тоскливая и по моим ощущениям на 50% состоящая из исходников XNU. Так вот, похоже что дело идет на поправку, и я только что наткнулся на OS X and iOS Kernel Programming. Пока что успел довольно поверхностно пролистать, но первые ощущения очень положительные.
Бумажная версия, как всегда, есть на Amazon.

Кроссплатформенность в современном мире

Очередное обсуждение недостатков Nemerle на РСДНе навело меня на интересную мысль о связи между успешностью того или иного инструмента и его кроссплатформенностью.
По большому счету, Nemerle это язык с интересными концепциями и идеями, который не нужен практически никому, кроме его разработчиков. Почему я делаю такое утверждение? Тут все просто, возьмем для сравнения его ровесников Scala, Groovy и даже совсем молодежь Clojure. Для того что бы понять, нужен ли язык кому-то, кроме его авторов, можно воспользоваться следующей информацией:

  1. На каких языках присутствует информацию о языке в Википедии
  2. На какой строчке находится язык в индексе TIOBE;
  3. Участвует ли язык в индексах The Computer Language Benchmarks Game;
  4. Написал ли кто-то книги по этому языку.

Continue reading