Эта статья посвящена бесцельному путешествию по вырожденной форме Ruby в попытках узнать больше о функциональном программировании, простоте и дизайне программных интерфейсов.
Предположим, что единственный способ представления кода — лямбда-выражение, а единственная доступная структура данных — массив:
square = ->(x) { x * x }
square.(4) # => 16
person = ["Dave",:male]
print_person = ->((name,gender)) {
puts "#{name} is a #{gender}"
}
print_person.(person)
Это самые основы функционального программирования: функции — единственное, что у нас есть. Давайте попробуем написать что-то более похожее на реальный код в таком же стиле. Посмотрим, как далеко мы сможем зайти без особых мучений.
Недавно мне задали вопрос: как бы я реализовал механизм виртуальных функций на языке C?
Поначалу я понятия не имел, как это можно сделать: ведь C не является языком объектно-ориентированного программирования, и здесь нет такого понятия, как наследование. Но поскольку у меня уже было немного опыта с C, и я знал, как работают виртуальные функции, я подумал, что должен быть способ сымитировать поведение виртуальных функций, используя структуры (struct).
Краткое пояснение для тех, кто не знает, что такое виртуальные функции: Виртуальная функция — это функция, которая может быть переопределена классом-наследником, для того чтобы тот имел свою, отличающуюся, реализацию. В языке C++ используется такой механизм, как таблица виртуальных функций
(кратко vtable) для того, чтобы поддерживать связывание на этапе выполнения программы. Виртуальная таблица — статический массив, который хранит для каждой виртуальной функции указатель на ближайшую в иерархии наследования реализацию этой функции. Ближайшая в иерархии реализация определяется во время выполнения посредством извлечения адреса функции из таблицы методов объекта.
Давайте теперь посмотрим на простой пример использования виртуальных функций в C++
В последнее время я начал замечать, как трудно разрабатывать под окружение рабочего стола, которое сам не используешь. И, поскольку большая часть моей работы сейчас относится к GNOME (и KDE), я понял, что мне придется использовать новый GNOME 3. К сожалению, Ubuntu 11.04 с GNOME 3 работает не слишком стабильно, на мой взгляд.
Я очень нетерпеливый разработчик: я очень не люблю компилировать и долго разбираться с пакетами. Когда я использовал виртуальную машину, мне пришлось серьезно повозиться с Mutter, поэтому я решил перейти на Fedora. Это позволило мне взглянуть на всё по-новому, поскольку я долгое время использовал Ubuntu.
Термин «свободное ПО» может иметь разное значение, в зависимости от того, с какой стороны вы на него смотрите. Для многих, в частности для меня и большинства читателей моего блога, свободное ПО означает открытый исходный код. Для мира в целом это понятие имеет совершенно другое значение.
Сегодня в блоге Qt Labsбыло сообщено о выходе первой бета-версии IDE Qt Creator 2.2. Релиз был назван в честь умершего белого медведя Кнута (Knut Creator). Помимо множества багфиксов в бету было добавлено несколько серьезных улучшений, в частности поддержка системы управления версиями Bazaar, сниппеты кода, улучшенный дебаггер.
[Мой перевод предыдущей статьи Рафаэля]
Не знаю, как вы, но когда я только начал использовать свободное ПО, я был поражен, что мог пользоваться всеми этими программами бесплатно. И через несколько месяцев решил найти способ чем-нибудь отплатить. Это было 13 лет назад… и вплоть до сегодняшнего дня я все еще активный разработчик Debian :-)
Марк Шаттлворт объявил, что следующая после Natty Narwhal версия Ubuntu будет называться Oneiric Ocelot.
В сообщении "Next After Natty?" в своем блоге Шаттлворт описывает цели следующей итерации Ubuntu и объясняет, почему она должна быть названа именно так. Марк говорит: «Oneiric значит “мечтательный”, и вместе с оцелотом это напоминает мне о том, как происходят инновации: отчасти мечты, отчасти дисциплина»
Вместе с Ubuntu 11.10 на CD также будет поставляться Unity 2D для тех людей, железо которых не позволяет использовать 3D версию, а также Qt, что, как утверждает Шаттлворт, “даст разработчикам еще больше возможностей для создания интерфейсов, которые как функциональны, так и эстетически привлекательны”
С точки зрения пользователя относительно просто сделать выбор между Debian и Ubuntu. У каждого есть свои личные предпочтения, и попробовать обе ОС не займет слишком много времени. Но когда дело доходит до вклада в разработку, времени для этого потребуется гораздо больше, и вам наверняка захочется подумать об этом дважды, прежде чем начинать. Так на какую систему лучше потратить свое время?
Это непростой вопрос, на который нет ответа, который удовлетворил бы каждого. Все зависит от того, каков ваш стимул для участия в разработке.
Здравствуйте, хабражители. Думаю, многие из вас слышали о программируемых калькуляторах (а некоторые даже использовали их). Как ни странно, здесь я не нашел ни одной статьи, рассказывающей о такой интересной вещи, и поэтому решил восполнить этот пробел и рассказать об основах программирования на калькуляторах.
Некоторое время назад я нашел у себя в кладовке старый «Электроника МК-61», принадлежавший моему папе. Естественно, я не мог упустить такой шанс освоить не совсем «стандартное» программирование на калькуляторе. (В случае, если у вас нет программируемого калькулятора, вы можете скачать эмулятор здесь)