Ruby FAQ: различия между версиями

Содержимое удалено Содержимое добавлено
м Исправление опечаток и коррекция по мелочи , typos fixed: Еще → Ещё (3), серьезно → серьёзно (2), четырех → четырёх AWB
Строка 17:
* Ruby Way, Hal Fulton
 
ЕщеЕщё есть разные Ruby Recipes, Rails Cookbook и проч. На английском языке почти все из них съедобны, но второстепенны по отношению к упомянутым.
 
Отдельной строкой: [http://poignantguide.net/ruby/ Why’s (Poignant) Guide to Ruby]. Книга — шедевр, но на любителя.
Строка 33:
* [http://api.rubyonrails.org/ API Ruby on Rails (стабильной версии)]
* [http://caboo.se/doc/index.html API Ruby on Rails (Edge)]. См. также ссылки на caboo.se.
* [http://poignantguide.net/ruby/ why’swhy’s (poignant) guide to ruby] Забавная книга
* [http://www.visibleworkings.com/little-ruby/ A Little Ruby (Draft)] Несколько глав в стиле Little Schemer
* [http://www.humblelittlerubybook.com/ Humble Little Ruby Book] Для любителей chunky bacon
Строка 42:
* [http://ru.wikipedia.org/wiki/Ruby_on_Rails Rails wiki] Русское описание RubyOnRails (там приведены ещё ссылки на русскоязычные документы по Rails)
* [http://www.rsdn.ru/article/ruby/ruby_edges.xml Е.Охотников "Ruby-новые грани"]
* [http://ru.wikibooks.org/wiki/[Ruby |описание Ruby]] (ахтунг: очень вредные советы inside, особенно по оформлению кода!)
 
===Где купить русские переводы книг по Ruby и Rails?===
Строка 128:
Как преодолеваются различного рода проблемы.
 
* '''Скорость интерпретатора'''. Особенно сказывается в коде, производящим вычислительную работу (смайлик). Если есть задача что-то посчитать, обработать строку, разобрать XML и т.п., то лучше всего написать для этого C-extension (расширение на Си). Как это делается см. в Pickaxe 2nd ed. или в [http://www.ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html первой редакции]. API MRI позволяет писать на Си практически тот же код, что и на руби благодаря использованию родных рубиновых структур (RArray, RString и т.п.) Даже если переписать код впрямую на т.н. Ruby-C (Си с использованием руби-структур), будет достигнуто серьезносерьёзно улучшение работы кода. Во-первых, благодаря тому, что не будет работать интерпретатор, во-вторых потому что вы будете использовать более эффективные примитивы (чистый int вместо Fixnum).
 
Иногда проще переписать имеющийся код на рубине так, чтобы его стало банально меньше. Так появился [http://merb.rubyforge.org/ Merb], как альтернатива Rails. Основное его достоинство — в несколько раз меньшее время прохода запроса от сетевого порта до пользовательского кода ("время диспатча"). Если пользовательский код сам по себе очень быстр, то время диспетчеризации играет большую роль в общем быстродействии. Также Мерб умеет многопоточность, что позволяет сэкономить память, не запуская лишние экземпляры веб-серверов для максимальной утилизации CPU. Рельса же не является "thread-safe".
 
* '''Утилизация 100% CPU''', когда требуется 400%. В MRI используются «зеленые потоки» (green threads). Их достоинство — легковестность и большая скорость в сравнении с нативными потоками (уровня ОС), недостаток — утилизация только одного ядра, блокирование всех потоков на операциях ввода-вывода, блокирование всех потоков при выполнении native-кода (в экстеншенах). В случае серверного софта, следует проектировать программу так, чтобы её можно было запускать в раздельных процессах. Например, на четырехчетырёх ядрах веб-сервер следует запускать как минимум в 4-х экземплярах и использовать балансирующий прокси-сервер для раздачи запросов между ними (например, nginx). Если веб-сервер не многопоточный, то количество экземпляров может быть и больше количества ядер (Рельса, например, не thread-safe, поэтому веб-сервер монгрел ставит все запросы к ней в одну очередь, блокируя мьютекс перед Dispatcher.dispatch!).
 
* '''Блокирующий ввод-вывод'''. Существует [http://rubyeventmachine.com/ библиотека EventMachine], которая избавляет от проблем с блокирующим вводом-выводом и предоставляет удобный унифицированный интерфейс для написания истинно event-driven приложений. Библиотека включает в себя реализации на чистом руби (не на всех платформах работает гладко), бандл на Си++ и версия для JRuby. Используется в проксирующем http-сервере Swiftiply.
Строка 143:
Слишком «умный» код не только тяжел для понимания коллегами или самим писателем спустя некоторое время, но и приводит к ненужным затратам процессорного времени и оперативной памяти.
 
В частности DSL возникает когда становится очевидным некоторый паттерн. Пока вы не повторили некоторый код в точности пару-тройку раз, не имеет смысла его каким либо образом упаковывать в красивую оболочку метапрограммирования. belongs_to — это уже паттерн. Ваш код — ещеещё нет.
 
===Кодировки===
Строка 230:
* XML/HTML-шаблоны в Rails
* фикстуры в Rails (test/fixtures/*.yml)
* где угодно ещеещё, где вы пожелаете прогнать некий текст через шаблонизатор.
 
 
Строка 300:
'''Зачем'''
 
Едж хорош тем, что туда попадают разные полезные шутки, которые всем разработчикам сразу хочется использовать. Полушутка. Некоторые важные исправления не всегда идут в обновление стабильных веток, но зато появляются в едже. Сейчас Core team достаточно организован, и код новой ревизии, как правило, не ломает серьезносерьёзно ваше готовое приложение.
 
Если вы не покрываете свой код тестами на 99,99%, то использовать едж-рельсу вам будет очень страшно.