пятница, 8 августа 2008 г.

Оператор with в Python

В прошлом посте я жаловался, что в Python мне не хватает чего-то похожего на C++-ные деструкторы, которые вызываются в любом случае для объекта созданного в стеке при выходе из области видимости, даже когда возникает исключение. В комментария, AQUAGNU упомянул оператор with, который в Python 2.5 был еще на "птичьих правах" (для его использования надо импортировать with_statement из модуля __future__), а в 2.6 стал зарезервированным словом.

Оператор with автоматизирует выполнение операций при входе в блок кода и при выходе из него не зависимо от того, было ли исключении при исполнении блока. Под операциями входа в блок и выхода из блока имеется ввиду, например, открытие и закрытие файла, залочивание и разлочивание при синхронизации. Это можно делать (как я раньше и делал) при помощи try/finally:
with все несколько упрощает:
Объект, который подается на вход with, называется менеджером контекста. У него должен быть реализован протокол менеджера контекста, состоящий из двух методов:
__enter__() - вызывается перед началом выполнения блока (контекста);
__exit__(type, value, traceback) - вызывается по завершению выполнения блока. Параметры, передаваемые ему, описывают исключение, если блок его сгенерировал.

В общем виде это выглядит так (взято отсюда):

В 2.5 версии контекст менеджерами могут выступать файлы, thread.LockType, threading.Lock, threading.RLock, threading.Condition, threading.Semaphore, threading.BoundedSemaphore. Применение with для Lock было показанное во втором примере. Для остальных случаев, прийдется реализовать протокол менеджера контекста или сделать адаптер:

Вот такой вот забавный оператор with.

PS: оказывается with был еще в делфи
PS2: дополнительно можно почитать здесь и здесь.

Read More...

вторник, 29 июля 2008 г.

Стартап: что мы делаем?

Прошло около 3-х месяцев как стартовал наш проект. Сегодня на хабре появилась первая информация о том, что мы делаем: Интеграция пользователей в социальный граф. Подход MetaID

Read More...

пятница, 11 июля 2008 г.

Любимая С++ фича

В своем посте My Favorite C++ Feature автор говорит, что его любимая фича в С++ - деструкторы. Согласен с ним в это на 100%, особенно вызов деструктора при выходе из области видимости. Использовать подобные конструкции мне доставляет прямо таки эстетическое удовольствие:

Это позволяет писать более читабельный код, не используя лишний раз try-catch. И это как раз то, чего мне сейчас не хватает в Python'e. Хотя, там есть деструкторы (__del__), но не факт, что он вызовется в нужный мне момент.

Кроме деструкторов, в С++ я обожаю шаблоны, но практика показывает, что использование шаблонов усложняет код и увеличивает время сборки проекта.

Вообще, тему С++ фич можно расширить - фичи с использованием С++. Здесь я могу назвать два своих самых любимых паттерна - smart pointer (как раз из-за деструкторов) и visitor (за возможность добавления новой функциональности иерархии классов без внесения изменения в их код и за возможность избежать использование dynamic_cast). А какие ваши самы любимые С++ фичи?

Read More...

четверг, 3 июля 2008 г.

Завязывайте вы с этим С++

Только что прочитал крик души бывшего С++ программиста - Язык имеет значение. Как-то все слишком складно получается - перешел на Haskell - получил 40% сэкономленного времени. А че ж никто не переходит? Никто что ли не слышал про него?

Может некоторые и "сцут". Но причина скорее всего не в этом. Ведь переходят же на другие языки, даж проекты портируют. Мне кажется, что в первую очередь дело в кадрах. Найти хорошего программиста очень сложно, а найти хорошего программиста на Хаскеле - практически нереально. Вот и пользуются тем, что есть. Оно то конечно - спрос рождает предложение, но пока хаскелистов днем с огнем не найдешь и спрашивать их не шибко будут. Все таки мы живем во взаимозависимом мире. А вы как думаете?

updated:
Вообще, это я как не программист считаю, а как программист я скорее согласен с повсеместным переходом на Хаскель (или другой язык, существенно экономящий время и приятным на ощупь :) Столкнувшись с Питоном, я оценил (и, думаю, в дальнейшем оценю еще больше), насколько он экономит время, по сравнению с С++, позволяет больше концентрироваться именно на том, что делаешь, а не на том как делаешь.

Read More...

среда, 18 июня 2008 г.

Поаутсорсить на Индию???

Сегодня мне звонил чувак (HR какой-то компании) аж из Индии и на довольно сносном русском предлагал поработать на них... Неужели я что-то пропустил и индусы уже нанимают украинцев?

Read More...

пятница, 30 мая 2008 г.

В восторге от Python'a

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

Например, мне нужно было сделать следующее: C++-ный код запускает Python-скрипт, который обрабатывает некоторые данные. Пользователь может захотеть написать свои обработчики для конкретных данных. Сложность состояла в том, как объяснить исходному скрипту, что есть другие реализации. Вот как позволяет это делать Python:


Теперь, все что надо пользователю - это написать класс с именем тип_данныхExt и методом process_data() и сохранить его в файле тип_данных.py. Получается намного проще, чем делать это на С++, причем проще и для разработчика и для пользователя.

Read More...

понедельник, 12 мая 2008 г.

До свиданья, аутсорсинг

Сегодня наконец-то решил сменить стабильную работу в аутсорсинговой компании на стартапный проект. За более чем год работы в аутсорсинге пришол к выводу, что такая работа стабильная не только в материальном плане, но и в плане скучности (тут я имею ввиду С++-проекты).

"Скука, скука, рутина, рутина..." (с) Кирпичи

Каким бы ни был интересным проект, в аутсорсинг идет одна рутина - дописать, пофиксить, потестить, стереть пыль, перекрасить, забить пару гвоздей... Может я такой невезучий, но ничего лучшего мне не попадалось. А вот интересный стартапный проект попался, и, хоть и стремно, решил попробовать. Посмотрим, чем это закончится :)

Read More...