LINUX.ORG.RU

Вышел Ruby 1.8.7

 ,


0

0

Вышло очередное обновление ветки 1.8 языка программирования Ruby.

Данное обновление содержит большое количество исправлений, а так же заимствований из ветки 1.9. Но при этом сохраняет высокий уровень стабильности и обратной совместимости с предыдущими релизами 1.8.*

Список изменений: http://svn.ruby-lang.org/repos/ruby/t...

Скачать можно отсюда: ftp://ftp.ruby-lang.org/pub/ruby/1.8

Ответ на: комментарий от anonymous

$ cat fib.rb
#!/usr/bin/env ruby

require 'matrix'

def fib n
    if n < 2
        n
    else
        x = Matrix[[1, 0], [0, 1]]
        y = Matrix[[1, 1], [1, 0]]
        while n > 0
            if n[0].zero?
                n >>= 1
                y *= y
            else
                n -= 1
                x *= y
            end
        end
        x[0, 1]
    end
end

puts fib(ARGV[0].to_i)

anonymous
()

руби до питона ещё пилить и пилить... Но не будем ломать детские грёзы рубистов, пусть работают...

anonymous
()
Ответ на: комментарий от anonymous

> fib = lambda n: reduce((lambda (a,b),_: (b,(a+b))), range(n), (1,0))[1]

> fib = Proc.new{|n| (0..n-1).inject([0,1]){|a,b | [a[1], a[0]+a[1]]}[0]}

Вы долбанутые на голову создания. Чтобы вам всю жизнь такой код поддерживать пришлось. Индусы и то проще.

Код такого уровня выносится в Си библиотеку, вызов пишется на Питоне, и все довольны.

anonymous
()

вот мы и подошли к главному. руби не такой уж и тормозной язык. но самый популярный фреймворк на руби сделал ему плохую репутацию.

а здесь мы подходим к следующему выводу. неважно, насколько хорош язык. важно какие массово икспользуемые библиотеки для него есть. и тут уж руби сосет не по детски...

anonymous
()
Ответ на: комментарий от anonymous

2anonymous (*) (01.06.2008 23:09:03):

>> руби до питона ещё пилить и пилить... Но не будем ломать детские грёзы рубистов, пусть работают...

Это правда. Кто следит за разработкой Ruby, знает, там достаточно бардачно. И до модели разработки Python им далеко. Чего стоит отсутствие штуки наподобие PEPs и сильная завязанность на японских программистов. Ну Matz сам признавался, что разработчик из него средненький, он, мол, силён в дизайне языка. Хотя и здесь можно поспорить. С Perlовщиной он перестарался, замусорив изрядно язык.

Кто-то там выше в комментах про медленность Python3K упомянул. Так не стоит. Python3K ещё не готов, и разработчики прекрасно знают, где и почему тормозит. Их задача сейчас заключается в другом. Python3K очень хорош. На мой взгляд Python правильно эволюционирует. Изначально красивый, уникальный по своей простоте и мощи язык становится ещё лучше.

Ruby же только-только выбирается из детских болезней. Постепенно отходит от Perlовской синтаксической чертовщины, избавляется от убогой интерпретации кода и т.д. Ну и над документацией им ещё работать и работать.

anonymous
()
Ответ на: комментарий от anonymous

2anonymous (*) (02.06.2008 7:33:02):

> вот мы и подошли к главному. руби не такой уж и тормозной язык. но самый популярный фреймворк на руби сделал ему плохую репутацию.

Этот несчастный фреймворк выжимали, как лимон, чтобы он выглядел более-менее достойно. Какой язык, такой и фреймворк, несмотря на коммерческую раскрутку.

> а здесь мы подходим к следующему выводу. неважно, насколько хорош язык. важно какие массово икспользуемые библиотеки для него есть. и тут уж руби сосет не по детски...

Ruby не то, чтобы сосёт. Язык вполне хорош, но если есть Python, Ruby не особенно интересен. Ну есть у него пара-тройка фишек, с которыми носятся, как с откровением. Другие языки имеют другие фишки. Каждому своё. Но особенно прогрессивного он ничего не привнёс. Читабельность у Python бесспорно выше, скорость выполнения кода как правило выше или сравнима, скорость разработки, думаю, тоже сравнима.

anonymous
()
Ответ на: комментарий от Demon37

2Demon37 ** (*) (02.06.2008 10:36:34):

> Опять членомерка началась...

Если аргументированно, то почему и нет? Это естественно. Автомобили, фотоаппараты сравнивают, почему не сравнить Ruby и Python?

anonymous
()
Ответ на: комментарий от anonymous

> Как уже давно было сказано-руби не нужен, есть питон.

Кем сказано? анонимусом?

На руби удобнее писать. Для таких вещей, как гуйни, скорость не актуальна. А вычисления надо писать на чем-то, что быстрее питона и руби.

anonymous
()
Ответ на: комментарий от tailgunner

Да как-то он адекватнее воспринимается. Ни говоря уже об исходниках, которые выложены без форматирования на форумах (или когда на странице они форматированы, а копируются в одну строку) и над которыми потом не приходится гадать к какому же if относится else ... Да и как то быстрее на нем пишется.

anonymous
()
Ответ на: комментарий от anonymous

2anonymous (*) (02.06.2008 10:48:55):

> На руби удобнее писать.

Рукоятка удобнее или что?

> Для таких вещей, как гуйни, скорость не актуальна.

Но приятно, когда она выше, а не ниже :)

> А вычисления надо писать на чем-то, что быстрее питона и руби.

Зависит от того, чем вы занимаетесь. В наших проектах критическая вычислительная часть -- это малая (хотя и важная) часть проектов. Большая часть кода на Python с критическими частями на C. Вполне классическая схема.

anonymous
()
Ответ на: комментарий от anonymous

2anonymous (*) (02.06.2008 11:01:16):

> Да как-то он адекватнее воспринимается.

В чём выражается адекватность? Конкретнее можете сказать?

> Ни говоря уже об исходниках,

Да Вы и про адекватность ещё не закончили. Какие уж тут 'ни говоря уже'.

> которые выложены без форматирования на форумах (или когда на странице они форматированы, а копируются в одну строку) и над которыми потом не приходится гадать к какому же if относится else ...

Это Вы на ЛОРе что ли набираетесь опыта программирования? Сюда народ поприкалываться приходит, не принимайте так всерьёз. Это не лучший источник знаний и примеров кода.

> Да и как то быстрее на нем пишется.

Неправда. Скорость разработки на Python ничуть не ниже, а даже и выше за счёт более ясного кода. Не требует лишних затрат на 'пересканирование'.

anonymous
()
Ответ на: комментарий от anonymous

>Это правда. Кто следит за разработкой Ruby, знает, там достаточно бардачно. И до модели разработки Python им далеко.

Ты нихрена не отличаешь разработку дизайна языка от разработки интерпретатора. Да, Matz признался что его реализацию гавеная и тормозная и пусть этим занимаются другие, он же будет заниматься дизайном языка. И это у него получается. Питону очень далеко до такой модели разработки. Над питоном надругалось школьно-красноглазое опен-соур сообщество.

> Ну есть у него пара-тройка фишек, с которыми носятся, как с откровением.

Только лишь использование нормальных блоков кода (with и lambda - барахло) и расширения объектов, отказ от непонятных функций в пользу методов и лисповская идеология метапрограммирования делает код абсолютно не похожим на питоновский. Только лишь тот факт, что на руби написан признаный лучший в мире behavior driven development фреймворк RSpec показатель абсолютного превосходства руби в сложных и красивых архитектурных решениях. Не верите - сравните с PySpec. И докажите мне что он более гибкий и читабельный.

anonymous
()
Ответ на: комментарий от anonymous

>Неправда. Скорость разработки на Python ничуть не ниже, а даже и выше за счёт более ясного кода. Не требует лишних затрат на 'пересканирование'.

С чего это он более ясный? Вам уже приводили пример:

for i in xrange(n):
  do_somth

n.times{ do_somth }

Если вам первый вариант яснее, то мне вас жаль, вы отупели от своего питона.

anonymous
()
Ответ на: комментарий от anonymous

> лисповская идеология метапрограммирования делает код абсолютно не похожим на питоновский

O_o можно подробнее о том, чем Рубиновое метапрограммирование похоже на Лисповое? Может, я провел в анабиозе последние годы и пропустил новость о макросистеме для Руби?

> от факт, что на руби написан признаный лучший в мире behavior driven development фреймворк RSpec показатель абсолютного превосходства руби в сложных и красивых архитектурных решениях

...для BDD.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>O_o можно подробнее о том, чем Рубиновое метапрограммирование похоже на Лисповое? Может, я провел в анабиозе последние годы и пропустил новость о макросистеме для Руби?

А кто сказал, что метапрограммирорвание там реализуеться через макросы? http://www.randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp

anonymous
()
Ответ на: комментарий от anonymous

> В чём выражается адекватность? Конкретнее можете сказать?

Например в циклах. range и xrange это ну совсем не адекватно. в 3000 вроде уже нет xrange. И еще куча вот таких вот мелких и мелких неудобностей.

> Это Вы на ЛОРе что ли набираетесь опыта программирования? Сюда народ поприкалываться приходит, не принимайте так всерьёз. Это не лучший источник знаний и примеров кода.

pyrhon.com.ua. вот там из форума конк копировал в одну строку исходники.

> Не требует лишних затрат на 'пересканирование'.

Что такое пересканирование?

anonymous
()
Ответ на: комментарий от anonymous

>> O_o можно подробнее о том, чем Рубиновое метапрограммирование похоже на Лисповое? Может, я провел в анабиозе последние годы и пропустил новость о макросистеме для Руби?

> А кто сказал, что метапрограммирорвание там реализуеться через макросы?

Об этом сказала такая куча народу, что я даже не стану искать ссылки.

> http://www.randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp

Не смешно. Цитата со ссылки:

'At this point, the LISP hackers are saying, “A good syntax for lambda is nice, but what about macros?” And this is a good question. LISP macros are functions that:

1. Run in the compiler, and 2. Transform custom syntax into raw LISP.'

И ничего из этого в Руби невозможно. Первый пункт - это сама суть метапрограммирования, и в Руби это невозможно.

Еще оттуда же:

'Of course, there’s lots of advanced LISP macros which can’t be easily ported to Ruby. In particular, macros which actually compile mini-languages haven’t appeared yet'

P.S. Кстати, Норвиг сказал, что Python is an acceptable Lisp, и что?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Первый пункт - это сама суть метапрограммирования, и в Руби это невозможно.

Почему не возможно? Там же дальше пишут, что суть не в макросах, а в DSL, а руби с этим справляеться с этим хорошо, пусть даже и не с помощью макросов.

>The real test of any macro-like functionality is how often it gets used to build mini-languages. And Ruby scores well here: In addition to Rails, there’s Rake (for writing Makefiles), Needle (for connecting components), OptionParser (for parsing command-line options), DL (for talking to C APIs), and countless others. Ruby programmers write everything in Ruby.

А потом я видел примеры, когда пишется микро-реализация лиспа внутри руби, занимает это сотен полторы строчек кода.

anonymous
()
Ответ на: комментарий от tailgunner

Главное - возможность динамически создавать классы.


Т.е исполнять описание класса с методами как код.

c = Class.new
c.class_eval do
define_method :foo do
puts "Hello World"
end
end

Sun-ch
()
Ответ на: комментарий от anonymous

> А потом я видел примеры, когда пишется микро-реализация лиспа внутри руби

И что это доказывает? Говорят, реализация Лиспа на Лиспе - это 15 строк.

>>Первый пункт - это сама суть метапрограммирования, и в Руби это невозможно.

>Почему не возможно?

Как это сделать?

> Там же дальше пишут, что суть не в макросах, а в DSL, а руби с этим справляеться с этим хорошо, пусть даже и не с помощью макросов.

Это "ну не можем мы запустить код в компиляторе, а нам и не надо".

> Главное - возможность динамически создавать классы.

Это любой динамический ОО язык умеет.

Из обсуждения по ссылке:

“Some may say Ruby is a bad rip-off of Lisp or Smalltalk, and I admit that. But it is nicer to ordinary people.”

- Matz, LL2

Вообще, там обсуждение интереснее статьи - в нем аффтара вежливо возят мордой по столу :)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

ave Ruby! а ваши споры никого не е**т!

AVE RUBY 1.8.7!

anonymous
()
Ответ на: комментарий от tailgunner

>> На руби удобнее писать.

>Что такого удобного в Руби?

Все есть объект.

Все динамично (в run-time меняются методы, классы).

Блоки кода.

Корректность программы не зависит от вида и количества лидирующих пробелов в строке.

Нет единственно верного пути делать что-нибудь -- обычно можно выбрать один из нескольких способов.

eao197 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Нигани. Пролан ещё более тормозно!

anonymous
()
Ответ на: комментарий от eao197

>>Что такого удобного в Руби?

>Все есть объект.

>Все динамично (в run-time меняются методы, классы).

То же и в Питоне.

> Блоки кода.

Это да, преимущество. Правда, я не уверен, что решающее - в Питоне тоже есть локальные блоки кода, только они называются функции.

> Корректность программы не зависит от вида и количества лидирующих пробелов в строке.

Да ты в жизни не написал программы с неправильными отступами :D

> Нет единственно верного пути делать что-нибудь

Это можно сказать о любом универсальном языке.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>> Блоки кода.

> Это да, преимущество. Правда, я не уверен, что решающее - в Питоне тоже есть локальные блоки кода, только они называются функции.

Для определенной вещи у меня это оказалось решающим преимуществом. А дальше привык и не было смысла менять Ruby на Python или Perl. Все равно эти все языка одного калибра. И даже разница в производительности между Ruby и Python не существенна -- если нужна действительно скорость, то есть C++.

>> Корректность программы не зависит от вида и количества лидирующих пробелов в строке.

>Да ты в жизни не написал программы с неправильными отступами :D

Зато мне приходится постоянно сталкиваться с программами, где пробелы перемешаны с табуляцией.

>> Нет единственно верного пути делать что-нибудь

> Это можно сказать о любом универсальном языке.

Тем не менее, бытует мнение, что такие языки как SmallTalk, Java и Python придерживаются принципа "there is only one way". Тогда как языки вроде C++, Perl и Ruby -- обратного (что-то типа "there isn't one true way").

PS. Я тебе письмо в пятницу писал, ответь плз.

eao197 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>ruby не нужен ...

это вопрос еще нужен или нет. а вот хамоватое быдло - фанаты питона - точно не нужны. это в каждом топике о ЯП видно. достоверно не известно связаны ли родовые травмы с выбором ЯП, но вот именно никому неинтресные выкрики фанатов питона в чуждых темах заставляют усомниться в этой достоверности.

наверное это связано с низким порогом вхождения - быдло которое бы мело улицы - сидит и кодит отрываясь изредка чтобы нагадить в темах

black7
()
Ответ на: комментарий от black7

> наверное это связано с низким порогом вхождения - быдло которое бы мело улицы - сидит и кодит отрываясь изредка чтобы нагадить в темах

Это ты не о себе ли?

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>Python3K очень хорош. На мой взгляд Python правильно эволюционирует.

неужели отступы сделали опциональными?

>Постепенно отходит от Perlовской синтаксической чертовщины

это мода что ли такая, ущербные и тупые диктуют умным как им лучше жить? не осилил - сдохни молча в корчах

black7
()
Ответ на: комментарий от tailgunner

>Это ты не о себе ли?

я вообще сейчас не программирую. хотя начинал с таких вещей как бз-34 и пмк-52. большинство быдла кричащих "руби не нужен, питон форева" наверное застрелилось бы, не осилив их. так что не про себя

если тебе тяжело мысленно прикинуть и понять что кол-во фекалей от пистонистов в чуждых им темах превосходит все мыслимые пределы - мне тебя жаль

и на руби я не пишу, так что не нужно меня в пристрастности обвинять. а ты пишешь на питоне я угадал?

black7
()
Ответ на: комментарий от anonymous

>> Опять членомерка началась...

>Если аргументированно, то почему и нет? Это естественно. Автомобили, фотоаппараты сравнивают, почему не сравнить Ruby и Python?

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

black7
()
Ответ на: комментарий от tailgunner

>Что такого удобного в Руби?

а. я был прав. так ты чтоли обиделся что тебя быдлокодером обозвали? чувствуешь ведь что не зря, в точку попал, да? =) ну так перестань лить фекалии на языки которые неудобны _лично тебе_ (специально выделяю, чтоб дошло), может поумнеешь.

black7
()
Ответ на: комментарий от black7

> так что не нужно меня в пристрастности обвинять.

Пристрастности? "хамоватое быдло - фанаты питона - точно не нужны", " связаны ли родовые травмы с выбором ЯП", "быдло которое бы мело улицы" - это, уважаемый, обычное хамство, особенно жалкое тем, что хамящий типа выступает в защиту чего-то.

> а ты пишешь на питоне я угадал?

Почти - и на Питоне тоже.

tailgunner ★★★★★
()
Ответ на: комментарий от eao197

>Нет единственно верного пути делать что-нибудь -- обычно можно выбрать один из нескольких способов.

да. вот эта та фича которая неимоверно пугает тупых быдлокодеров. они привыкли чтоб им все разжевали. ну и в рот положили

black7
()
Ответ на: комментарий от black7

>хотя начинал с таких вещей как бз-34 и пмк-52. большинство быдла кричащих "руби не нужен, питон форева" наверное застрелилось бы, не осилив их.

Похоже, что с ними ты и закончил свою карьеру программиста :))

Sun-ch
()
Ответ на: комментарий от black7

>это вопрос еще нужен или нет. а вот хамоватое быдло - фанаты питона - точно не нужны. это в каждом топике о ЯП видно.

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

Отлично эту тему обыграли в известном ролике:

http://youtube.com/watch?v=PLUS00QrYWw

anonymous
()
Ответ на: комментарий от anonymous

>Культ питона тихо курит в сравнении с дебилами, поддерживающими культ рельсов

Как рубист подпишусь. Единственное, что есть полезного в РоР это его некоторые идеи, а из кода нормальное только наверное ActiveRecord, все остальное кал. Merb наше фсио.

anonymous
()
Ответ на: комментарий от anonymous

Почувствуйте разницу.

-module(fibber).

-export([calc/1, calc/2, server_calc/2, start/1, stop/0]).

start(0) ->
	ok;

start(Workers) ->
	Name = list_to_atom("worker" ++ integer_to_list(Workers)),
	pool:start(Name),
	io:format("Started ~p~n", [Name]),
	start(Workers - 1).

stop() ->
	pool:stop().

calc(N) ->
	fibber:calc(N, 10000).

calc(N, Timeout) ->
	pool:pspawn(fibber, server_calc, [self(), N]),
	receive
		{reply, Result} ->
			Result;
		Wtf ->
			io:format("Didn't expect ~p~n", [Wtf])
	after Timeout ->
		timeout
	end.

server_calc(Caller, N) ->
	Result = fib(N),
	Caller ! {reply, {node(), Result}}.

fib(1) -> 1;
fib(2) -> 1;
fib(N) when N > 2 -> fib1(N,1,1).

fib1(3,P1,P2) -> P1 + P2;
fib1(N,P1,P2) ->
    fib1(N-1,P2, P1 + P2).

Oceanborn
()
Ответ на: комментарий от anonymous

Полностью поддерживаю данного оратора.

anonymous
()
Ответ на: комментарий от black7

> это мода что ли такая, ущербные и тупые диктуют умным как им лучше жить? не осилил - сдохни молча в корчах Блин, а стадо овец с МакБуками в руках и понтами - это блин пипец какое Руби сообщество.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.