LINUX.ORG.RU

Ruby 1.9.1

 , ,


0

0

После достаточно длительного перерыва, вышел первый стабильный релиз из ветки Ruby 1.9.x!

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

Доступен полный список нововведений, а также советы по переходу на новую версию.

>>> Подробности

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

> Гвидо наемный работник Google. Потому в Python будут необходимые Гуглу возможности, остальное вторично.

Брам тоже наемный работник Google. Когда нам ждать перевода вима на веб-2.0?

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

>> Яву в Гуглу используют наравне с Си++ :)

> откуда дро^W информация?

Косвенные данные вроде привязок к Google Protocol Buffers и болтовня в блогах. Ну вот например: "Our three main programming languages at Google are Java, Python and C++, that's just the way Google has standardized internally", http://www.artima.com/forums/flat.jsp?forum=276&thread=185564

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

> Где был бы Python, если бы его не использовали Google и Yandex.

что такого сделал гогл, без чего питону хана и кто такой уандекс?

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

> Да, болтовня в блогах - серьёзная информация.

Если это сказал в интервью senior product manager for Google developer tools, то вполне серьезная. А ты поделишься, откуда у тебя информация о том, что Гугель _не использует_ Яву и .NET?

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

> При мало-мальски приличной нагрузке сожрать всю память и впасть в кому? Да ладно, такого результата вполне легко достичь и на других ЯП. Не так легко, конечно, как на RoR, но вполне можно.

Совершенно верно. Все языки с Garbage Collection имеют один и тот же архитектурный дефект. В случае любой ошибки начинают пожирать память и все завершается ошибок OutOfMemory.

Но здесь надо понимать, что в случае сервера, написанного на C в случае ошибки появляется возможность провести удаленную атаку с заражением компьютера, а случае языков с GC появляется возможность только провести DOS атаку.

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

А как на счет Ruby vs Python vs Boo У последнего есть будущее? Как по скорости они и у кого какие плюсы?

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

>ну и то, что я могу этот же самый код у себя на нокии запустить, а с руби не смогу даже на быдлоВинСе, то нах он нужен этот руби?

Вообще-то под symbian 9 есть.

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

> Обломитесь все, руба рулит. Вот бенчмарки из поставки руби:

> (Python 2.6 / Ruby 1.9.1)

Почему сравнивается не с Python 3?

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

>> (Python 2.6 / Ruby 1.9.1)

> Почему сравнивается не с Python 3?

Python 3.0 - версия, которая пока не используется и не рекомендуется к использованию в продакшене.

tailgunner ★★★★★
()

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

У каждого интерпретируемого языка есть две важные вещи на которые следует обратить внимание:

1. threads

2. garbage collection

Итак что мы видим:

1. threads - ruby использует единственную native os thread. То есть фактически является однопоточным приложением. Надеюсь не надо объяснять, чем это плохо. Народ пытается бороться с этим при помощи fork. Но при fork возникают проблемы связанные с тем что garbage collection ruby недружествен к механизму copy on write.

2. garbage collection - я так понимаю, что при длительной работе происходит фрагментация кучи и отказ выделения памяти. Народ пытается прикрутить ptmalloc3 и что-то еще, чтобы этот хоть как-то работало. Еще по мелочи есть всякие ошибки в стандартных библиотеках, которые приводят к утечке памяти. Вроде бы эти мелкие ошибки в последних версиях активно исправляются. Но все равно проблема потребления памяти остается. Даже встретил рекомендацию при увеличении heap (например, до 1,5 Gb) просто убивать процесс ruby и запускать заново.

Возникает вопрос: а можно ли вообще писать на ruby серверные приложения? Кто имеет опыт написания прилоежния - поделитесь опытом. Сталкивались ли с этими проблемами или нет?

Еще я так понял, что в какой-то мере виртуальная машина Yarv должна позволить использовать более одного native os thread для выполнения программ на Ruby (нацелена на решение проблемы 1). Мне не ясно, была ли решена эта проблема или нет в версии 1.9.1? Действительно ли используются native os thread и в какой мере?

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

> Time.parse and Date.parse interprets slashed numerical dates as "dd/mm/yyyy".

Война между Японием и США продолжается на новом уровне? Теперь бъемся за формат по умолчанию. ;-)

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

>Python 3.0 - версия, которая пока не используется и не рекомендуется к использованию в продакшене.

ветка 1.9 в руби тоже считается тестовой...

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

>> Python 3.0 - версия, которая пока не используется и не рекомендуется к использованию в продакшене.

> ветка 1.9 в руби тоже считается тестовой...

Только вот в Ruby 1.9 тестируется новая виртуальная машина, которая типа должнв быть быстрее, а в Питоне 3.0 такого никто не обещал.

Кстати, в shootout Ruby 1.9 сливает Python 2.6

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

> Вообще-то под symbian 9 есть.

Докажи.

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

в питоне с тредами все не тоже так гладко как хотелось бы (см. про GIL), настоящее распараллеливания получается только при fork().

но хранить GIL - это воля Гвидо. Да Будет Так.

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

Я все это знаю, и сам 2.x использую. Но рано или поздно поддержку прекратят.

satanic-mechanic
()
Ответ на: комментарий от sv75

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

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

в 2.6 есть модуль multiprocessing. на 4 ядра нормально всё размазывается. даже с мутексами не пришлось возиться

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

> Совершенно верно. Все языки с Garbage Collection имеют один и тот же архитектурный дефект. В случае любой ошибки начинают пожирать память и все завершается ошибок OutOfMemory.

Хорошая трава, отсыпешь?

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

Ruby 1.8.x

1.upto(10000000){|x| begin raise; rescue Exception => s; end;}

Расход памяти - от 3,3 до 3,1 Мб во время выполнения.

C# class A {static void Main(){for(int i=0;i<10000000;i++)try{throw new System.Exception();}catch(System.Exception){}}}

Расход памяти - от 4,26 до 4,28 Мб во время выполнения.

ЧЯДНТ? Ведь сам сказал - "архитектура GC, мол, OutOfMemory, мол" ?!

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

> начинают пожирать память

Где же таких гениев выращивают? Ну просто настоящий линуксоид!

> все завершается ошибок OutOfMemory.

А кто это такой этот "Ошибок"? Что за страшный зверь?

Bioreactor ★★★★★
()
Ответ на: Этот ЯП - просто прелесть! от anonymous

> Намедни болтал с один жабером, подсевшим на subj+RoR - он восторгался им как ребенок! :) Как SCJP, я очень доволен, что еще одним горе-"жабабыдлокодером", имеющим самое поверхностное представление о Java, стало меньше.

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

>> Совершенно верно. Все языки с Garbage Collection имеют один и тот же архитектурный дефект. В случае любой ошибки начинают пожирать память и все завершается ошибок OutOfMemory.

> Хорошая трава, отсыпешь?

А что разве не так? Или не нравится слово "дефект"?

Хорошо - напишем так: Все языки с Garbage Collection имеют одну и ту же архитектурную особенность.

Зацепиться объект за какой-нибудь static массив (хэш) и "привет". Даже, если к этому объекту никто и никогда не обратится он все равно останется в памяти.

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

Вот и получается, что одну ошибку заменили другой: вместо висячей ссылки получили OutOfMemory.

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

>1. threads - ruby использует единственную native os thread. То есть фактически является однопоточным приложением.

Изначально были некие green threads. Минус: многопроцессорность не поддерживается.

В JRuby потоки перетекли в стандартные потоки Java, которые являются native threads. Там другие проблемы.

В 1.9 fibers вместе green threads.

В версии 2.0 ждем настоящих Native threads,

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

> Как будто дело в американском формате.

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

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

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

> Вообще-то под symbian 9 есть.

Ой ли? и, конечно же, есть ссылка на сайтик нокии, откуда его можно слить? или ты имеешь ввиду порт какого безумного японца, который а: НЕ работает нормально ни на чем кроме S60FP0 и на том же N95 не заводится ни под каким предлогом. b: работает на (пробовал на E60) так, что становится всей системе тихо. Ява и то шустрее загружается и памяти жрет меньше (даже ява!)

втопку такое "есть". Вот питон для S60 есть и его поддерживает и развивает ни какой-то фанатик, а сама нокия.

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

То-то же реактор заглох на старте

anonymous
()

кстати вот интересно, а треды (не процесы) распараллеливаются на разные процессоры виндой и линуксом?

если да то выходит форк (в частности модуль multiprocessing питона) однозначно хуже с точки зрения производительности? есть бенчмарки на эту тему?

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

>>1. threads - ruby использует единственную native os thread. То есть фактически является однопоточным приложением.

> Изначально были некие green threads. Минус: многопроцессорность не поддерживается.

> В JRuby потоки перетекли в стандартные потоки Java, которые являются native threads. Там другие проблемы.

> В 1.9 fibers вместе green threads.

> В версии 2.0 ждем настоящих Native threads,

Понятно. Что же будем ждать.

Как я понимаю для полноценного использования Native thread надо использовать многопоточный сборщик мусора. То есть в версии 2.0 будет новый сборщик мусора?

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

У, какой дефекатор.. Оу сорри, дефектолог

Ruby: class A def A.s() x = []; 1.upto(100000){|i| x.push(i);} x; end; end $y = nil; 1.upto(1000){|i| x=A.s(); $y=x;}

Расход оперативы от 7Мб до 4Мб. А ведь по идее 999 "висячих" массивов метров на 100.

anonymous
()
Ответ на: У, какой дефекатор.. Оу сорри, дефектолог от anonymous

не забавы ради, но все же хочется положить на лопатки Ruby именно с пресловутым дефектом Garbage Collector: Out Of Memory средствами самого языка (не привлекая биндинги и т.п. хуиту) - хочется узнать пределы своего инструмента :) "bitdies" какбы намекает, что это возможно :)

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

Забавно, в WebMoney Keeper Light при фильтрации списка, кажется, входящих счетов, есть такая бага: пишут что дату надо указывать dd/mm/yyyy, а на самом деле корректно работает только при mm/dd/yyyy.

И это энтерпрайз еще называется.

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

> По возможностям язык Ruby превосходит Python, который был взят за основу.

Не болтай ерундой. За основу Руби была взята Ява. Но сам язык был инспирирован (кто подскажет нормальное русское слово?) перлом, откуда в нём масса перлизмов. Пистон тогда очень уныло ходил пешком под стол в тени великого и могучего перла.

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

>Ой ли? и, конечно же, есть ссылка на сайтик нокии, откуда его можно слить?

На 5500 как-то работает и этого мне достаточно.

Может, тогда тебе показать ссылки для каждого языка на сайтиках всех фирм-производителей компьютерной техники?

Интересно, с чего бы это?

Понятие "официальная" - вообще смешно в формате Open Source.

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

>Не болтай ерундой. За основу Руби была взята Ява. Но сам язык был инспирирован (кто подскажет нормальное русское слово?) перлом, откуда в нём масса перлизмов. Пистон тогда очень уныло ходил пешком под стол в тени великого и могучего перла.

http://wapedia.mobi/ru/Ruby#1

Ruby родился 23 февраля 1993 года. В тот день я беседовал со своим коллегой о возможности существования объектно-ориентированного сценарного языка. Я знал Перл (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть). А объектно-ориентированный интерпретируемый язык казался многообещающим. В то время я знал Пайтон. Но он мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой над языком. Мне, как языковому маньяку и фанату объектно-ориентированного программирования с пятнадцатилетним стажем, очень, очень хотелось, чтобы был истинно объектно-ориентированный, простой в использовании язык. Я пытался найти такой язык, но его не было.

Тогда я решил его создать. Прошло несколько месяцев, прежде чем интерпретатор заработал. Я добавил в мой язык то, что мне хотелось — итераторы, обработку исключений, автоматическую сборку мусора. Затем я переорганизовал свойства Перла и реализовал их как библиотеку классов. В декабре 1995 года я опубликовал Ruby 0.95 в японских новостных группах.

Что-то java не видно.

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

>> По возможностям язык Ruby превосходит Python, который был взят за основу.

> Не болтай ерундой. За основу Руби была взята Ява. Но сам язык был инспирирован (кто подскажет нормальное русское слово?) перлом, откуда в нём масса перлизмов. Пистон тогда очень уныло ходил пешком под стол в тени великого и могучего перла.

http://ru.wikipedia.org/wiki/Ruby

Предки: Smalltalk, Лисп, Перл, Эйфель, Ада, Dylan, Python, CLU, C++

В Ruby я нашел стиль и возможности, взятые из C++, Perl и Python. Остального просто не знаю.

anonymous
()

Отстойный язык. У него начинается история разгона для убиения об стену.

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

Уши смолтолка в нем торчат отвсюду. Причем ИМХО сильно подпорченные и чужеродно выглядящие.

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

По моему скромному мнению, больше всего (идеологически, не технчески/синтаксически) Ruby взял у Perl.

Также, как Python - у Basic (официальный его предок - ABC, конечно, но этот язык остался намного менее известен, чем его предок).

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