Быстро разобраться в новом проекте

Довольно часто возникает необходимость разобрать новый большой проект и не совсем очевидно с какой стороны подступиться к огромной горе исходных кодов которая свалилась на вас. Если вам повезло и проект написан на C++, C, Objective-C, Python, Java, PHP, C#, Фортран или VHDL то простое решение есть – Doxygen + GraphWiz.

Я не буду вдаваться в такие базовые вещи, как создание проектов в Doxygen, с этим и так все очень просто. Заметка базируется на предположении что базовый проект создан, пути к исходным кодам, которые необходимо изучить, прописаны и осталось сделать так, что бы по генерируемой Doxygen документации можно было быстро легко разобраться в проекте.

В качестве примера я решил взять LLVM с размером исходного кода около 12Мб. На построение документации ушло около 2 минут, что, конечно, не мало, но с учетом однократности подобной операции совершенно не критично. Continue reading

Secure Coding Guide от Apple

На днях Apple опубликовала Secure Coding Guide. Главный недостаток документа – наличие большого количества “воды”, т.е. он мог бы быть с легкостью ужат со 123 до 50 страниц без потери качества. Тем не менее, OSX разработчикам крайне рекомендуется к прочтению или как минимум к пролистыванию.

Как выбрать язык программирования для нового проекта

На данный момент я кажется окончательно вывел для себя правила по выбору языка для той или иной задачи. До этого многие годы писал на C++, C, Python, Java и Objective-C. Перепробовал кучу экзотических языков, таких как OCaml, Erlang, Scala, Lisp, Clojure. Так как я не занимаюсь разработкой UI, Web-сайтов или мобильных приложений, все мои соображения актуальны исключительно для разработки системных приложений, сетевых приложений и бизнес логики. Кроме того, все что я пишу в этой заметке относится к командной разработке приложений в рамках относительно крупной компании, и будет не актуально для команд из 1-2 разработчиков или “домашних” проектов. Continue reading

WTFPL

Я долгое время был уверен что лучшая лицензия для открытого ПО – это The BSD 3-Clause License. Но сегодня, внезапно, наткнулся на Do What The Fuck You Want To Public License (WTFPL) и как-то даже засомневался. Эта лицензия мне нравится еще больше предыдущей, хотя, конечно, изрядная доля шутки в ней есть

Overload #119

overload-119

Коллеги, а знаете ли вы о таком замечательном журнале как Overload? Я уже несколько выпусков как собираюсь о нем написать, но все забываю. На мой взгляд, это лучший журнал посвященный C++ разработке на данный момент. В журнале есть все, начиная от алгоритмов и структур данных, заканчивая особенностями язка C++ и оптимизацией кода.

Callbacks, closures и модель памяти Rust

Реализуемая Rust модель памяти оставляет свой отпечаток на всем, включая такие вещи как замыкания и функции обратного вызова. Привычные по другим языкам концепции в случае с Rust начинают вести себя иначе и далеко не с первого взгляда очевидно почему такое происходит.

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

Разрушающее сопоставление с образцом

В Rust используется разрушающее сопоставление с образцом, что в купе с моделью памяти Rust, иногда, дает очень занятные эффекты. Для примера возьмем структуру MyStruct и создадим две переменные типа Option в которых будет лежать наша структура, в одном случае 1 в виде стекового объекта, а во втором в виде уникального указателя 2.

struct MyStruct {
    val: int
}
let stack_data = Some(MyStruct{val:42});   // (1)
let own_data = Some(~MyStruct{val:42});    // (2)

Continue reading