После 20 месяцев разработки представлен (http://www.ruby-lang.org/en/news/2010/08/18/ruby-1-9-2-is-re.../) релиз языка программирования Ruby 1.9.2 (http://www.ruby-lang.org/). Ruby - относительно молодой, мощный и динамический объектно-ориентированный язык программирования, отличающийся высокой эффективностью разработки программ и вобравший в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. По заявлению разработчиков, Ruby 1.9.2 проходит более 99% тестов из набора RubySpec (http://www.rubyspec.org/), оценивающего обратную совместимость с прошлой версией языка.
В новой версии представлены следующие основные улучшения (http://svn.ruby-lang.org/repos/ruby/tags/v1_9_2_0/NEWS):- Добавлено более 60 новых методов для классов Array, Complex, Dir, Encoding, Enumerable, Enumerator, Float, File, Hash, IO, Kernel, Integer, Thread, Time и т.п.
- Представлен новый API для работы с сетевыми сокетами, поддерживающий IPv6;
- Добавлены новые кодировки, среди ко...URL: http://www.ruby-lang.org/en/news/2010/08/18/ruby-1-9-2-is-re.../
Новость: http://www.opennet.me/opennews/art.shtml?num=27660
Незнаю как другие, а я Ruby перестал использовать как раз из-за этих пресловутых 99% совместимости с прошлой версией. Обратная совместимость должна быть 99.9999%, иначе получаем раскол, с кучей людей продолжающих сидеть на 1.8.6 и 1.9.1.
1.9 -- pre-2.0 ветка, если мне склероз не изменяет. А в 2.0 заведомо обещали, что будут ломать то, что вылезло всё-таки боком из 1.6/1.8.Другое дело, что дистрибутивы потащили 1.9 вслед за разработчиками, а вот стоило ли оно того -- ой не знаю (как и apache 2.0.x, которому бы тоже лучше было называться 1.9.x).
>1.9 -- pre-2.0 ветка, если мне склероз не изменяет.1.9.0 был тестовым релизом, начиная с 1.9.1 пошли стабильные версии.
>>1.9 -- pre-2.0 ветка, если мне склероз не изменяет.
>1.9.0 был тестовым релизом, начиная с 1.9.1 пошли стабильные версии.Немного не о том пытаюсь вспомнить: 1.9 предполагался как некий переходный и не для широкого production-применения или не так, а именно как продакшн. Припоминается первое, но зуб не дам...
Использовать Ruby? Ну-ну..
Полагаю вы ничего более-менее серьезного на Ruby не написали, иначе бы знали, чем хорош Ruby.
Если бы вы что-то серьезное написали, знали бы, что такое совместимость.
А мы плавали, знаем. Похуже, чем у тикля, но и там бывает.
Угу... В конце концов мозги человеку даются, чтобы думать. Если вы бездумно на продакшн систему ставите новые версии, то вы сами себе злобный буратино. Тем более что старые версии никто не отменял...Нормальные бизнес-приложения в процессе жизненного цикла постоянно дописываются дорабатываются. Миграция на новые версии осуществляются в процессе доработки и сами по себе являются вполне себе доработкой. Если разработчик не гнушался писанием юнит-тестов и внимательно читает changelog, то перевод приложения потребует минимум усилий.
Лучший язык ,для тех кто ценит свое время и любит качественно работать, стал еще лучше
Ценить свое время в ущерб времени пользователя - большое зло. Но факт заключается в том, что на ruby вообще ничего ценного не написано. А если напишут, это будет только грустно.
Ну да... Metasploit конечно же абсолютно ненужная штука.. Говорите за себя при таких заявках.
Абсолютно ненужная, подтверждаю.
>Ценить свое время в ущерб времени пользователя - большое зло.Хм, то есть если написанный скрипт будет отрабатывать не за секунду, а за минуту, но живой человек бы провозился полдня -- то это тоже "в ущерб"? Особенно если учесть, что как правило -- "за секунду" и не надо, и писать никто в этом веке не раскачается.
Вот пример из загашника, слепленный за час или около того на коленке у заказчика и изредка пригождающийся мне и другим: http://fly.osdn.org.ua/~mike/works/misc/arp2dns+dhcp.rb
>Но факт заключается в том, что на ruby вообще ничего ценного не написано.
Факт заключается в том, что Вы врёте. Примерно так же, как MSP-остолопы, катящие бочку на линукс посредством модемов и маршрутизаторов с этим самым линуксом унутре.
>А если напишут, это будет только грустно.
У человека с таким отсутствием сразу и вкуса, и такта даже неинтересно спрашивать, что он-то сам написал не наводящего тоску. :(
> Вот пример из загашника, слепленный за час или около того на коленке у заказчика и изредка пригождающийся мне и другим: http://fly.osdn.org.ua/~mike/works/misc/arp2dns+dhcp.rbЭммм... Мне почему то кажется, что указанный скрипт можно было своять за те же полчаса и на любом другом скриптовике. Да-да - на ПХП. Это чтобы похоже наступить на больную мозоль :) Но тем не менее, безотносительно 'другого языка' - я как-то не заметил в скрипте каких-то фич, наличие которых именно в руби позволило сделать его понятным, эффективным и вообще самым-самым. Скрипт как скрипт. Таких миллион рожается каждый день..
>Мне почему то кажется, что указанный скрипт можно было своять за
>те же полчаса и на любом другом скриптовике. Да-да - на ПХП.Да разумеется. И на шелле тоже, только со структурами данных неинтересно вышло бы (там пришлось позже расширять формат вывода и наличие именно _структурированных_ сильно помогло, помнится).
А не хотите баловства ради сваять за пару минут на любом другом скриптовом языке аналог вот такого фрагмента -- открыть файл, вытащить содержимое в array (попутно обкусывая whitespace), если что не так с открытием-чтением -- внятно ругнуться?
begin
File.open(IGNORE) do |f|
f.each do |mac| ignored << mac.chomp end
end
rescue
puts "** unable to open #{IGNORE}, accepting all MACs" if DEBUG
end> Скрипт как скрипт. Таких миллион рожается каждый день..
В том-то и дело. Мне как раз для такой "подножной автоматизации" ruby является вторым после шелла выбором. Чуть сложнее цикла-пайпа -- и уже задумываюсь, стоит ли выписывать на шелле или осмысленно сразу нарубить.
PS: на всякий -- относительно регулярно пишу ещё на схеме, а хакать порой доводится более или менее всё, что горит. Так что сопоставлять есть с чем :)
> А не хотите баловства ради сваять за пару минут на любом другом скриптовом языке аналог вот такого фрагмента -- открыть файл, вытащить содержимое в array (попутно обкусывая whitespace), если что не так с открытием-чтением -- внятно ругнуться?Ммм...
$path = 'test.txt';
if (($data = file_get_contents($path)) === false) {
echo "Failed to read input file '$path'\n";
} else {
$lines = array_map('trim', explode("\n", $data));
}не? Всего лишь как пример. Впрочем, всё то-же самое можно сделать и на любом другом скриптовике с теми же самыми трудозатратами. Мало показательный тест. Вид сбоку ни чем не отличается.
>Вид сбоку ни чем не отличается.<s>whitespace не обкусили.</s> Простите, глаз к вечеру замылился :)
Для меня отличается -- потребление памяти на здоровом файле будет отличаться дословно в разы. Ну и читабельность/элегантность (кхе) кода тоже.
><s>whitespace не обкусили.</s> Простите, глаз к вечеру замылился :)array_map и trim там не просто так :)
>Для меня отличается -- потребление памяти на здоровом файле будет отличаться дословно
>в разы.А на приведенном в оригинальном примере - не будет?
PS: Добавим пару строк, поменяем file_get_contents-для-ленивых на fopen/fread и с памятью будет как минимум ни чуть не хуже. Это ещё три строки кода. Если as is.
> Ну и читабельность/элегантность (кхе) кода тоже.
И поехал флейм о фломастерах..
>><s>whitespace не обкусили.</s> Простите, глаз к вечеру замылился :)
>array_map и trim там не просто так :)Да-да, разумеется :)
>>Для меня отличается -- потребление памяти на здоровом файле будет отличаться
>>дословно в разы.
>А на приведенном в оригинальном примере - не будет?Говорю, в моём примере идёт построчное чтение, обкусывание и набивка в массив. В Вашем -- сперва всасывается весь файл, потом куда-нить небось заскладируют временно массив от explode(), потом продублируют до конца рантайма в $lines. Перед завершением чтения потребление памяти будет отличаться в (хорошо если)два..три(более вероятно) раза, и то если пробелов немного оказалось. Где-то посредине различие будет ещё больше, но в абсолютных цифрах конец важней.
>PS: Добавим пару строк, поменяем file_get_contents-для-ленивых на fopen/fread
>и с памятью будет как минимум ни чуть не хуже. Это ещё три строки кода.
>Если as is.А сделайте? Просто следом вылезет проверка ошибок, и это ещё три строки кода, а там уже и полэкрана. То есть если лениво -- выходит плохо, а если по уму -- выходит куча строчек.
>> Ну и читабельность/элегантность (кхе) кода тоже.
>И поехал флейм о фломастерах..Ну почему же, давайте приведём к одному знаменателю ТТХ сравниваемых кусочков (или свой предложите, если хотите) и спокойно сравним. Я ж не вредности ради и не чтоб оппонента ниже плинтуса вкатать. Мне оппонент дороже времени, раз оно на него находится.
А на PHP тоже можно писать красиво, но он к этому, увы, не располагает. Патчить-то тоже много чего доводилось (например, расширения и немного потроха TYPO3).
> А сделайте? Просто следом вылезет проверка ошибок, и это ещё три строки кода, а там уже и полэкрана. То есть если лениво -- выходит плохо, а если по уму -- выходит куча строчек.try {
$f = new File('test.txt');
$lines = array();
while (($line = $f->read(array('filter' => 'trim'))) !== false) {
$lines[] = $line;
}
||
$lines = $f->readAll(array('lines' => 'trim'));
||
<you name>
} catch (Exception $e) {
echo "Error: {$e->getMessage()}\n";
}Так лучше? Класс File займет ровно 30 строк. Один раз на всю последующую жизнь. При желании можно закинуть в какой-нить PECL или ещё какой порноресурс. А можно и не закидывать бо там таких творений уже и так сотни лежат - выбирай не хочу. Его нет 'в базе'? Ну что ж. >90% полезных и реально используемых вещей и так нет 'в базе'. Независимо - в руби или в пэхапэ или в в прости господи перле. Замечу, что CPAN != 'base'.
[как понимаю, s/'lines'/'filter'/]>Так лучше?
В части обработки ошибок по крайней мере уже подешовле на целый файл. :)
>Класс File займет ровно 30 строк.
Ну так и вклеили бы, как раз полтора экрана и будет... и сравнение наглядное.
>Один раз на всю последующую жизнь.
Не-а. Потому что сейчас это одна частная задача, завтра -- другая, ну и пошло-поехало -- изобретать Ruby на PHP.
>При желании можно закинуть в какой-нить PECL или ещё какой порноресурс.
...ну Вы поняли :) Можно, конечно -- но детям такое на факультативе я рассказывать не буду, стыдно. А рубишный вот всё раскачиваюсь почитать в родном lic145.kiev.ua. Разумеется, рассказывая и про слабые стороны -- всё-таки глубокие циклы на интерпретаторе крутить не стоит.
>[как понимаю, s/'lines'/'filter'/]
>
>>Так лучше?
>
>В части обработки ошибок по крайней мере уже подешовле на целый файл.
>:)
>Сигнализация об ошибках через исключение - это всего лишь один из способов сигнализации об ошибках. И совсем не в руби или пхп его 'придумали'. И совсем не всегда он подходит а уж тем более является 'единственным правильным'. Так что от того, что я чуть-чуть перевел код в плоскость ООП он, код, не стал ни на йоту лучше. Впрочем, как и хуже. Оба примера *полностью* отвечают поставленным в изначальном ТЗ условиям. И, не имея каких-то дополнительных данных, их невозможно разделить на лучше/хуже. Они оба идентичны.
>>Класс File займет ровно 30 строк.
>
>Ну так и вклеили бы, как раз полтора экрана и будет... и
>сравнение наглядное.
>>Один раз на всю последующую жизнь.
>
>Не-а. Потому что сейчас это одна частная задача, завтра -- другая,
>ну и пошло-поехало -- изобретать Ruby на PHP.Сэр хочет сказать, что RTL руби (или любого другого языка) полностью покрывает его потребности к ф-ти, заложенной в предполагаемой области применения тех или иных объектов из RTL (в данном случае - доступа к файлам)? Завидую. Мне пока что не встречалась такая всеобъемлющая RTL. Всегда есть что-то, что не в писывается или отсутствует в 'стандартном' дизайне.
>>При желании можно закинуть в какой-нить PECL или ещё какой порноресурс.
>
>...ну Вы поняли :) Можно, конечно -- но детям такое на
>факультативе я рассказывать не буду, стыдно. А рубишный вот всё
>раскачиваюсь почитать в родном lic145.kiev.ua. Разумеется, рассказывая и про слабые
>стороны -- всё-таки глубокие циклы на интерпретаторе крутить не стоит.
>>>Для меня отличается -- потребление памяти на здоровом файле будет отличаться
>>>дословно в разы.
>>А на приведенном в оригинальном примере - не будет?
>
>Говорю, в моём примере идёт построчное чтение, обкусывание и набивка в массив.
> В Вашем -- сперва всасывается весь файл, потом куда-нить небось
>заскладируют временно массив от explode(), потом продублируют до конца рантайма в
>$lines. Перед завершением чтения потребление памяти будет отличаться в (хорошо
>если)два..три(более вероятно) раза, и то если пробелов немного оказалось. Где-то
>посредине различие будет ещё больше, но в абсолютных цифрах конец важней.Вжжжжжжжик - блямс! - сказала японская пила и заглохла
Ага!!! - обрадовались русские мужики
(с) старый боянОбычно при формировании тех или иных технических заданий указываются разумные граничные условия применимости. Ну хотя бы примерные. Хотя бы эмпирические, исходя из предполагаемой предметной области. Мы вот тут файлик читаем. В массив. На руби или на пыхе - не важно. А что там за файлик? Сколько он весит? И где мы его читаем? И как первое соотносится со вторым? Мы парсим нечто подконтрольно здесь-и-сейчас? Мы делаем что-то конкретно направленное но для реюза? А может мы делаем некий универсальный инструмент с неопределенными граничными условиями ибо мы их не знаем? Или что-то другое? А может мы вообще дураки, что пытаемся впихнуть его весь в память не суть важно как ибо ну не влезет апачевский лог с гугла.ком в память КПК вне зависимости от языка?
В каждом из случаев получится совершенно разный код. К нему требования совершенно разные. Причем не зависимо от используемого языка.
Puppet вполне себе вменяемая и нужная вещь.
>Ценить свое время в ущерб времени пользователя - большое зло. Но факт
>заключается в том, что на ruby вообще ничего ценного не написано.
>А если напишут, это будет только грустно.Из того что могло быть ценным для вас, ничего. Вам можно назвать массу продуктов полезных для меня, например, только вы ничего не поймете из этого. Не доросли еще, видимо.
Мда, а как же redmine? Вроде многие используют.
> UTF8-DoCoMo, UTF8-KDDI и UTF8-SoftBankЭто что за кодировски такие? Свой UTF, ни с чем не совместимый? Зачем поощрять такую ересь её поддержкой в языке?
>Зачем поощрять такую ересь её поддержкой в языке?Правильно, задавите заодно сам UTF-8 как неосновное представление юникода, пока вышли на охоту.
>Правильно, задавите заодно сам UTF-8 как неосновное представление юникода, пока вышли на
>охоту.Задавите себя, или вникайте в суть дискусси, прежде чем бред писать.
>>Правильно, задавите заодно сам UTF-8 как неосновное представление юникода
>Задавите себя, или вникайте в суть дискусси, прежде чем бред писать.На пальцах: "штатным" является UTF-16, а UTF-8 сам по себе кровавый хак ради облегчения жизни семибитус вульгарис L. И вообще UTF-ы тоже хак по сравнению с UCS-ами. Так будете их всех мочить или попкорн возвращать придётся? :)
С одной стороны -- понимаю Ваш довод, с другой -- а шо им делать остаётся: стандарты хороши тем, что есть из чего выбрать. Мы тоже когда-то писали для каждого опсоса свой уникальный переходник, от XML-RPC до чего-то, документация к чему сквозила "настройкой бибисы". Работать-то надо.
>На пальцах: "штатным" является UTF-16, а UTF-8 сам по себе кровавый хак
>ради облегчения жизни семибитус вульгарис L. И вообще UTF-ы тоже
>хак по сравнению с UCS-ами. Так будете их всех мочить
>или попкорн возвращать придётся? :)Это все бред, от вас другого и не ожидал, собственно. Если уж говорить о штатности, штатной будет только 32битная. UTF-16 это вообще бесполезная ересь.
>Если уж говорить о штатности, штатной будет только 32битная.
>UTF-16 это вообще бесполезная ересь.Любезнейший, а идите-ка RTFM http://userguide.icu-project.org/unicode -- и прежде чем вопить "ересь", подумайте о полном адресном пространстве Unicode 2.0 в ~21 бит и о том, как часто нужны дополнительные пять, если пользоваться кодированием с переменной длиной представления символа. Ну или сразу переходите на клингон, хоть выглядеть как-то будет. :)
PS: если что, мне UTF вообще несимпатичны.
PPS: и возвращаясь к теме обсуждения -- если Вы пишете сферических коней в вакууме, которые не интероперабельны вообще ни с чем по определению, ну так и возвращайтесь к ним. А мы пожмём плечами, порадуемся за японцев и заодно -- что у нас NTT/DoCoMo нету вместе со своими кирпичами и диалектами.
>PS: если что, мне UTF вообще несимпатичны.Честно говоря, удивлен. Чем они так тебе не угодили?
Вообще мне тоже не очень понятно, в чем заключается специальная поддержка этих кодировок. Реализацией сортировки смайликов, что-ли?
>>PS: если что, мне UTF вообще несимпатичны.
>Честно говоря, удивлен. Чем они так тебе не угодили?Узостью заточки под обратную совместимость с ASCII за счёт всего остального мира.
Э-э... А как бы ты хотел? Как сделал бы ты? Только не надо про заточку под украинскую кодировку. :)))В любом случае ASCII это база для 90 процентов вычислительных платформ.
Если бы этой заточки бы небыло, то UTF-8 до сих пор был бы мертворожденной кодировкой или был бы еще одной трансазиатской кодировкой.
Понятно, что необходимость анализировать значение байта каждый раз, чтобы правильно обработать символ, это лишняя нагрузка на систему и геморрой, но это меньшее из зол на мой взгляд.
>Э-э... А как бы ты хотел? Как сделал бы ты?Глобализация на дворе! ХХ1-ый век. Пора размер байта увеличивать. До 13-14, в военное время - 15-ти. Ну и биты тож немного %) подрихтовать.
В общем-то, эти кодировки используются японскими мобильными операторами для своей работы. По большей части там описаны символы всяких смайликов дополнительно к основной UTF8 (таки да, японцы настолько упороты, что напилили три несовместимых друг с другом конкурентных стандарта смайликов). Если вспомнить, что Руби пришла из Японии, то неудивительно, что данное нововведение они рассматривают как большую фичу.
толсто
В 1.9.2 из ruby.h удалили макрос STR2CSTR (который был obsolete со времен Ruby 1.6). Из-за этого на 1.9.2 перестал собираться ruby-odbc 0.99991. Фикс тривиальный, но неприятный осадок остался. На кой хрен удалять шлак в минорном релизе? Больше 5-ти лет оно там висело и никого не трогало, почему в 1.9.0 не удалили, а только теперь?
>В 1.9.2 из ruby.h удалили макрос STR2CSTR (который был obsolete со времен
>Ruby 1.6). Из-за этого на 1.9.2 перестал собираться ruby-odbc 0.99991. Фикс
>тривиальный, но неприятный осадок остался. На кой хрен удалять шлак в
>минорном релизе? Больше 5-ти лет оно там висело и никого не
>трогало, почему в 1.9.0 не удалили, а только теперь?Все сразу не вычистишь. Тут скорее разработчику ruby-odbc надо по шапке дать. Когда он последний раз в исходники залазил?
>>В 1.9.2 из ruby.h удалили макрос STR2CSTR (который был obsolete со времен
>>Ruby 1.6). Из-за этого на 1.9.2 перестал собираться ruby-odbc 0.99991. Фикс
>>тривиальный, но неприятный осадок остался. На кой хрен удалять шлак в
>>минорном релизе? Больше 5-ти лет оно там висело и никого не
>>трогало, почему в 1.9.0 не удалили, а только теперь?
>
>Все сразу не вычистишь. Тут скорее разработчику ruby-odbc надо по шапке дать.
>Когда он последний раз в исходники залазил?ruby-odbc - это вообще отдельный разговор :(
Я сетовал на потерю совместимости в минорном релизе. Было бы классно, если бы разработчики Ruby придерживались semantic versioning (http://semver.org/)
>Я сетовал на потерю совместимости в минорном релизе. Было бы классно, если
>бы разработчики Ruby придерживались semantic versioning (http://semver.org/)Думаю, они стараются придерживаться. Имеет смысл обратить внимание разработчиков на этот косяк.
В данном случае, скорей всего, какой-нибудь вновь принятый, молодой, деятельный товарищ проявил излишнюю инициативу. Команда разработчиков это не не один человек, это группа ребят в разных концах земного шара, и зачастую говорящие на разных языках. Несогласование это обычное дело.
Актуальный релиз. С UTF'ом там до недавнего времени был легкий бардак, что мне казалось весьма странным, учитывая происхождение автора языка.
IPv6 - тоже в тему. Как раз начали потихоньку экспериментировать с IPv6 у себя в офисе. Пора уже осваивать...
>Как раз начали потихоньку экспериментировать с IPv6
>у себя в офисе. Пора уже осваивать...JFYI перед тем, как: http://netch.livejournal.com/tag/ipv6
М-да... Жесть. Будем читать вместо стивена кинга...
Кто подскажет, с чего лучше начать приобщаться к Ruby?
Сильно зависит от вашего опыта в программировании. На чем, сколько и какого рода приложения писали... Ну и от нужд собственно. Какие задачи вам нужно решать.
Настоятельно рекомендую. Мне, кстати, в свое время, сильно помогла замечательная русскоязычная статья на RSDN: Ruby - новые грани.
http://www.rsdn.ru/article/ruby/ruby_edges.xmlМне она понравилась тем, что там без лишней воды, кратко, но вполне понятно описаны основные вкусности Ruby.
>Настоятельно рекомендую. Мне, кстати, в свое время, сильно помогла замечательная русскоязычная статья
>на RSDN: Ruby - новые грани.
>http://www.rsdn.ru/article/ruby/ruby_edges.xml
>
>Мне она понравилась тем, что там без лишней воды, кратко, но вполне
>понятно описаны основные вкусности Ruby.Ага, спасибо, интересная статейка, автор сходу показывает основные фишки Ruby.
Мне вот интересно, увидел что в Ruby тоже есть фигурные скобки, можно ли вместо этого:
class MyClass
def initialize
@attr = ’value’
end
endПисать вот так:
class MyClass {
def initialize {
@attr = ’value’
}
}Или такое в Ruby не приветствуется?
Нет, так не получится,
{} используют в основном для границ блоков, хешей.
Спасибо, со скобками мне как-то привычнее
Опыт небольшой: паскаль в школе изучал, shell - немного админиские скрипты писал, как только немного вник в Perl, для себя понял, что shell - для чего-то чуть более грандиолзного, чем небольшие скрипты, адски сложен.
А вообще дело было так - хотел краем глаза глянуть Perl, в итоге ухнул с места в карьер, Вот щас изучаю Perl, пишу кое-что для себя, автоматизируюсь, на работе для начальства тоже написал полезные вещи.
И вот щас захотелось Rubi глянуть, говорят там ООП красивое, интересно , я вообще это ООП плохо понимаю, т.к. по образованию не прогаммист. =))
>как только немного вник в Perl, для себя понял, что shell
>- для чего-то чуть более грандиолзного, чем небольшие скрипты, адски сложен.Да, поскольку он не создавался как _язык_ программирования (и не умеет сколь-нибудь сложных структур данных).
Шелл хорош, когда нужно склеить уже существующие утилиты. Особенно если пайпами.
>И вот щас захотелось Rubi глянуть, говорят там ООП красивое, интересно
Правду говорят. Здесь есть такая штука как mixin'ы -- можно контролируемо наследовать свойства из нескольких мест: мы можем нарисовать модуль, в котором определены константами цвета, и другой, в котором определены формы и методы пусть нахождения площади и объёма -- и унаследовать в классе "мяч". А потом порождать объекты класса "мяч", которые могут варьироваться по цвету и форме естественным образом. И это гораздо лучше подходов как Java и прочих с простым наследованием, так и C++ и прочих с множественным :)
http://ruby.osdn.org.ua/pickaxe/html/tut_modules.html
>я вообще это ООП плохо понимаю, т.к. по образованию не прогаммист.
>=))Ну как раз рубишный стиль тогда и стоит посмотреть, он ненавязчивый и голову не раскалывает. Можете почитать эти главы для плавного введения и "поподробнее":
http://ruby.osdn.org.ua/pickaxe/html/intro.html
http://ruby.osdn.org.ua/pickaxe/html/tut_classes.html
http://ruby.osdn.org.ua/pickaxe/html/tut_methods.html(вся книжка с оглавлением -- на http://ruby.osdn.org.ua/pickaxe/)
Спасибо большое за ссылочки.
>И вот щас захотелось Rubi глянуть, говорят там ООП красивое, интересно ,
>я вообще это ООП плохо понимаю, т.к. по образованию не прогаммист.
>=))На счет ООП красивое, не знаю. Ruby это инструмент, типа топора. Можно срубить перекошенный сарай, а можно хоромы. Зависит от того в чьих руках инструмент.
Один из принципов Ruby: Красивый код - эффективный код.
С точки зрения поддержки и развития так оно и есть.Вообще, мне в свое время тяжело дался переход от процедурной парадигмы программирования к объектной. Долго перестраивал мозги...
> Один из принципов Ruby: Красивый код - эффективный код.т.е. если перевести на язык конкретики то как всегда - 'разброд и шатание'. Ведь, согласитесь, кому-то нравятся стройные а кому-то - в теле. Кому-то высокие а кто-то без ума от умеренных. А некоторые вообще любят все, что шевелится. И каждый считает, что его выбор - вполне красив. И ведь каждый из них по-своему прав и отказать ему в его правоте нельзя. Или таки ребята уже вывели универсальную формулу красоты шо fits all?
>т.е. если перевести на язык конкретики то как всегдаРазные языки и -- внимание! -- сообщества поощряют разные стили. Руби годится для довольно широкого диапазона выразительных подходов (а также и для невыразительных), некоторые пишут "по-алгольному", некоторые -- "по-перловому", но красивый код читывал и такой, и сякой. Вот совсем некрасивого не припомню (на шелле это едва ли не правило, скажем -- см. Кернигана-Пайка для сравнения со средним по больнице скриптом).
PHP поощряет неряшливость, Perl -- неразборчивость, Java -- многословность, Python так вообще загоняет в прокрустово ложе пробельных символов. Ruby действительно поощряет изящность кода и предоставляет множество хороших примеров. Культура такая. :)
PS: но не универсальная серебряная пуля, ессно.
> Разные языки и -- внимание! -- сообщества поощряют разные стили. Руби годится для довольно широкого диапазона выразительных подходов (а также и для невыразительных), некоторые пишут "по-алгольному", некоторые -- "по-перловому", но красивый код читывал и такой, и сякой. Вот совсем некрасивого не припомню (на шелле это едва ли не правило, скажем -- см. Кернигана-Пайка для сравнения со средним по больнице скриптом).Наверное было бы неплохо как-то раскрыть термин 'сообщество XXX' и в последствии как-то конкретизировать возможные пути влияния этого сообщества на конкретного индивидуума. А то у меня взгляд теряется. Все такое вкусное - даже и не знаю, за что конкретно взяться чтобы пофлеймить.
> PHP поощряет неряшливость, Perl -- неразборчивость, Java -- многословность, Python так вообще загоняет в прокрустово ложе пробельных символов. Ruby действительно поощряет изящность кода и предоставляет множество хороших примеров. Культура такая. :)
У языка программирования как такового *нет* культуры. Это всего лишь набор жестко заданных сравнительно простых правил. Термин культура лежит чуть-чуть в другой плоскости. На уровне человека. И - нет, в данном случае 'язык не определяет сознание'. Это было сказано про чуть-чуть другие языки. Разве что сознание на столько узко, что столь простые по сути вещи как правила руби или пхп могут на него серьезно влиять. Но это - клинический случай.
>> Разные языки и -- внимание! -- сообщества поощряют разные стили. Руби годится для довольно широкого диапазона выразительных подходов (а также и для невыразительных), некоторые пишут "по-алгольному", некоторые -- "по-перловому", но красивый код читывал и такой, и сякой. Вот совсем некрасивого не припомню (на шелле это едва ли не правило, скажем -- см. Кернигана-Пайка для сравнения со средним по больнице скриптом).
>
>Наверное было бы неплохо как-то раскрыть термин 'сообщество XXX' и в последствии
>как-то конкретизировать возможные пути влияния этого сообщества на конкретного индивидуума. А
>то у меня взгляд теряется. Все такое вкусное - даже и
>не знаю, за что конкретно взяться чтобы пофлеймить.А Вы попробуйте не флеймить, а подумать.
>> PHP поощряет неряшливость, Perl -- неразборчивость, Java -- многословность, Python так вообще загоняет в прокрустово ложе пробельных символов. Ruby действительно поощряет изящность кода и предоставляет множество хороших примеров. Культура такая. :)
>
>У языка программирования как такового *нет* культуры. Это всего лишь набор жестко
>заданных сравнительно простых правил. Термин культура лежит чуть-чуть в другой плоскости.
>На уровне человека. И - нет, в данном случае 'язык не
>определяет сознание'. Это было сказано про чуть-чуть другие языки. Разве что
>сознание на столько узко, что столь простые по сути вещи как
>правила руби или пхп могут на него серьезно влиять. Но это
>- клинический случай.Есть у них культура. И да, именно что "язык влияет на сознание". Пусть не определяет, как с теми, другими, языками, но существенное влияние всегда оказывает. Именно потому что культура. Ибо язык есть не просто набор правил BNF, а явление, включающее в себя прежде всего сообщество людей. А у любого достаточно большого сообщества людей всегда есть культура в некоем виде. Том или ином. Иногда само такое сообщество называют "субкультура", слыхали, наверное?
Процитирую из приводившейся тут ссылки на статью "Ruby - новые грани":
"Вначале я программировал на Ruby в стиле C++, только пользуясь Ruby-новыми конструкциями. Более того, временами это было «через силу», мне очень не хватало статической типизации — диссонанс от того, что на новый язык переносилась философия старого языка.
А потом понемногу, по чуть-чуть, я оценил остальные особенности Ruby — как раз те, которые я описываю здесь. Мне потребовалось около девяти месяцев на то, чтобы разглядеть действительно наиболее яркие грани языка. А уже после того, как они четко обозначились, я стал решать задачи на Ruby, думая уже в терминах Ruby, а не C++.
Возможно, столь много времени потребовалось еще из-за того, что Programming Ruby [2] — это очень большая книга, которая посвящает читателя во все тонкости языка, но не расставляет акцентов. Однако при переходе с C++ на Ruby (как в моем случае) не столь важны конкретные особенности синтаксиса языка. Гораздо важнее осознать, как именно должно измениться мышление, чтобы при программировании на Ruby думать именно на Ruby, а не на C++. И, по-моему, мне еще не попадалась книга о Ruby, в которой делался бы акцент именно на этом."Дополнительные иллюстрации к влиянию на мышление:
http://zay-note.blogspot.com/2008/01/blog-post.html
http://zay-note.blogspot.com/2007/05/blog-post_8260.htmlНу, а если Вы отрицаете влияние вещей такого рода на сознание, то клинический случай, скорее, представляете Вы сами.
>> Один из принципов Ruby: Красивый код - эффективный код.
>
>т.е. если перевести на язык конкретики то как всегда - 'разброд и
>шатание'. Ведь, согласитесь, кому-то нравятся стройные а кому-то - в теле.
>Кому-то высокие а кто-то без ума от умеренных. А некоторые вообще
>любят все, что шевелится. И каждый считает, что его выбор -
>вполне красив. И ведь каждый из них по-своему прав и отказать
>ему в его правоте нельзя. Или таки ребята уже вывели универсальную
>формулу красоты шо fits all?В смысле разброд и шатание? Я там приводил пример с хоромами и сараем. По вашему топор это тоже разброд и шатание? Бред...
Красивый код это тот, глядя на который вы понимаете, что он делает. В этом смысле да, у каждого своя мера понимания "красивого" кода и это сильно зависит от опыта. Иной код может оценить только тот, кто разбирается в этом.
Все по молодости оценивают по мясу. Так сказать, у каждого своя идеальная функция распределения мяса, на заданных костях.
А со временем приходит понимание, что многое добавляют ум, шарм и умение, как не странно. А это уже совсем другого рода функции. Впрочем не отменяющие первое.. :))
Хочу добавить: Понимаете без дополнительных усилий.
Топор слишком прост для такого сравнения =))
Но да, согласен, что ЯП, особенно скриптовые, это всего лишь инструменты для достижения определенных целей. И инструмент может быть красивым.
Programming Ruby 1.9
The Pragmatic Programmers’ Guide
Dave Thomas
with Chad Fowler
and Andy Hunt
Как введение - http://www.ember.co.nz/files/resources/whys-poignant-guide-t...
Дальше - rdoc (документация с комплекта поставки).
>Кто подскажет, с чего лучше начать приобщаться к Ruby?Могу порекомендовать:
http://ruby.osdn.org.ua/seminar/ (1.6, краткое, старенькое, но по-русски)
http://ruby.osdn.org.ua/ltp/ (может быть слишком простое, но переведённое)
Если читаете по-английски, литературы достаточно много. (сам осваивал в т.ч. по первому изданию Programming Ruby, купленному в 2003)
>>Кто подскажет, с чего лучше начать приобщаться к Ruby?
>
>Могу порекомендовать:
>http://ruby.osdn.org.ua/seminar/ (1.6, краткое, старенькое, но по-русски)
>http://ruby.osdn.org.ua/ltp/ (может быть слишком простое, но переведённое)
>Если читаете по-английски, литературы достаточно много. (сам осваивал в т.ч. по первому
>изданию Programming Ruby, купленному в 2003)Спасибо, вторая ссылочка для начинающих самое оно... =)
The book of Ruby тоже доставляет. Тем более она бесплатна )
Извиняюсь за оффтоп, но кто-нибудь знает как в сабже искаропки сортировать строки в не-ascii по алфавиту?
encoding у строк правильный, а руби всё-равно коллейшен не использует для них при сравнениях
>как в сабже искаропки сортировать строки в не-ascii по алфавиту?Гм, а в чём именно проблема?
$ ruby -e 'puts ["а","в","б"].sort'
а
б
в
$ ruby -v
ruby 1.9.1p376 (2009-12-07) [i586-linux-gnu]
$ echo $LC_CTYPE $LC_COLLATE
ru_RU.UTF-8 ru_RU.UTF-8
попробуйте добавить в массив букву "ё". А то в UTF-8 все русские буквы кроме "ё" ("ё" идёт в самом конце) идут по алфавиту и сортируются правильно будут даже без кооллейшена, просто по коду символа. С другими кодировками всё намного хуже.
>попробуйте добавить в массив букву "ё".Да, Вы правы, безобразие:
$ ruby -e 'puts ["ё","ж","и","к"].sort'
ж
и
к
ё
Да, и еще есть одна заминка:ruby -e 'puts ("а".."я").to_a.inspect'
["а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я"]
Буквы "ё" нет...
Соответственно:
ruby -e 'puts "Фёдоров" =~ /\A[а-я\-\s]+\Z/i ? "Русская фамилия" : "Не русская"'
вернет "Не русская"