Archive for мая, 2012

RDRubyTutorial: Метапрограммный Ruby level 2

мая 9, 2012  |  Published in Ruby, Основы

Предварительно рекомендую прочесть Метапрограммный Ruby.

К моему удивлению не все Ruby программисты знают внутреннего устройства Ruby. Не в том, смысле, что Ruby’ст должен изучать исходники своего любимого языка программирования, но в том, что многие моменты не понятны. Например не понятно, чем класс отличается от объекта или что такое singleton’ы в Ruby. Эта статья призвана совершить некоторую демистификацию Ruby. В простой манере и без влезания в код самого Ruby я расскажу почему что-то работает именно так, как работает. Статья ориентирована не на новичков, а на программистов более-менее среднего уровня, то есть достаточно хорошо знакомых с Ruby.

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

Классы — это объекты, но только на половину. Классы являются экземплярами одного из базовых классов Class, однако они не являются «классическими» объектами.

Read the rest of this entry »

Tags: , , , ,

Операторы, условия и циклы языка Си

мая 6, 2012  |  Published in Си и C++


Из серии:

  1. Введение в программирование на Си
  2. Переменные и типы данных в Си
  3. * Операторы, условия и циклы языка Си

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

Read the rest of this entry »

Tags: , , ,

QuasarLog: Запись вторая. Обход полиморфного HMT

мая 6, 2012  |  Published in CMS, QuasarLog, Ruby on Rails, Ruby on Rails 3

Что было сделано?

  • Удалена сущность Document, а вместе с тем и понятие документов. В Quasar будут присутствовать ресурсы, например статья, продукт или топик форума — это ресурсы. Здесь понятие ресурс несколько отличается от ресурса REST архитектуры, точнее первое множество входит во второе. В общем, в Quasar вместо документов теперь ресурсы.
  • Был добавлен первый ресурс — Article (статья). Он представляет собой какую-то совсем простую сущность, например пост в блоге или статью в новостном сайте. Для начала достаточно этой единственной сущности (ресурса), а затем мы добавим, например Product и Topic.
  • Добавлена константа RESTYPES, которая хранит имена моделей — ресурсов Quasar CMS. Эти модели должны храниться в директории app/models/resources.
  • Добавлена модель AttachmentLink, которая должна перелинковывать между собой ресурсы, точнее хранить связи между ресурсом и его вложениями (вложения — также ресурсы). Здесь и обнаружилась интересная проблема, о которой рассказано далее.
  • Добавлены счетчики для attached/master ресурсов.

Read the rest of this entry »

Переменные и типы данных в Си

мая 2, 2012  |  Published in Си и C++

gnu-c

Из серии:

  1. Введение в программирование на Си
  2. Переменные и типы данных в Си
  3. Операторы, условия и циклы языка Си

Нужно быть полнейшим идиотом для того, чтобы не понять по заголовку о чем идет речь в статье. Очевидно, что читатели RubyDev в совершенстве адекватные люди с IQ не ниже среднего и достаточно широкими энциклопедическими знаниями и кругозором и потому с места мы сразу прыгаем в карьер минуя абсолютно бесполезное разлогое введение в тему статьи.

Переменные

Переменные — это именованные, понятные человеку ссылки на данные. Переменные в языке Си являются статическим и строготипизированными. На практике это проявляется в следующем:

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

Если сравнивать переменные Си и Ruby, то они весьма отличаются друг от друга. Например переменные в Ruby являются не статическими, но динамическими и не типизированными. Переменная в Ruby может ссылаться на любой тип данных и постоянно менять его. Это связано с тем, что в Ruby переменная не резервирует область памяти, а ссылается на объект в виртуальной таблице объектов. Визуально это можно представить себе как две таблицы, одна содержит два столбца, в одном хранятся все объекты (их данные), а в другом — идентификатор object_id. Во второй таблице у нас имеются также два столбца, в одном хранится object_id, а в другом имя переменной. Когда вы присваиваете переменной другое значение, то во второй таблице напротив имени переменной просто меняется object_id. В Си все совсем иначе. Переменная при объявлении захватывает область памяти, размер которой соответствует типу переменной, например 1 байт. Далее переменная ссылается на эту область данных, а вы можете помещать в нее любое значение.

Read the rest of this entry »

Tags: , , , ,

Введение в программирование на Си

мая 2, 2012  |  Published in Си и C++

programming c
Из серии:

  1. * Введение в программирование на Си
  2. Переменные и типы данных в Си
  3. Операторы, условия и циклы языка Си

Несмотря на название RubyDev старается охватить максимальное количество тем касающихся разработки. Одной из таких тем является программирование на языке Си. Си был выбран потому, что это достаточно популярный язык, который уже более 30 лет остается весьма актуальным. Кроме того, Си будет интересен программистам на Ruby тем, что на нем можно легко писать расширения ваших gem’ов или критические куски вашего приложения, где производительность крайне важна.

Мы не будем погружаться в исторический экскурс. Совершенно не важно знать кто и когда создал Си и почему. Это совершенно бесполезная информация для изучения Си и я зря потратил бы время пытаясь рассказать историю языка. С другой стороны важно знать, что Си является императивным (иначе говоря — процедурным) языком программирования. Как показала практика и исследования, процедурные языки совершили переворот в мире разработки, поскольку программы написанные на процедурных языках легче читать и поддерживать, чем программы написанные на функциональных языка.

Лично для меня Си — это такое увлечение, по факту я ничего серьезного на нем не писал — не было потребности, потому советую сильно не доверять всему, что здесь написано. В целях предотвращения священных кровопролитных войн касательно преимуществ императивной парадигмы над функциональной, замечу, что говоря об этом преимуществе я лишь цитировал классиков. Признаться честно, я также (в меньшей мере) увлекаюсь языками CommonLisp и Erlang, которые являются функциональными. Разумеется, в каждом языке имеются свои недостатки, преимущества и изюм — что-то, что делает его выделяющимся из подобных ему.

Read the rest of this entry »

Tags: , ,