All streams
Search
Write a publication
Pull to refresh
46
0
iv_s @iv_s

User

Send message
Для написания расширений в Ruby есть C API. Про это — в следующей части:)
На тысячу помножить еще забыли:)
В топике — 1000 раз в цикле.
Ок, возможно потом оформлю отдельным постом.
>Тест аналогичного куска на Perl/Python/PHP в студию!
Скорость сравнить? Я исходники дал, можете попробовать. Эта статья подразумевалась не как бенчмарк, а как описание методики.
>Perl тоже умеет использовать Си
Да, эта библиотека(RubyInline) как раз из мира Perl пришла, о чем на ее сайте и сказано.
>встроенный веб-сервер(yaws.hyber.org) держит 80 000 одновременных подключений на стандартной конфигурации
Даа, Erlang — это сила!:)
Собрал себе V8. Там есть возможность читать с stdin?
Аргументы скрипту тоже не передаются, хотя в их багтреккере есть исью что должен быть массив arguments.
У меня почему-то ругается…
В мозиловском SpiderMonkey и readline и arguments есть. Здесь нетак?
С юникодом тоже просто. Если поставить пакет unicodechars
gem install unicodechars
А потом в коде:
require 'rubygems'
require 'unicodechars'
"фыва".chars[0] #=>"ф"
Да, только не сделать массив, а работать как с массивом.
Например:
"string"[1..2] #=> "tr"
"string"[4..-1] #=> "ng"
"string"[-2..-1] #=> "ng"

но это возвратит код символа!
"string"[0]#=>115
чтобы получить один символ — например так:
"string"[0..0]#=>"s"
Хотя при желании можно и массив сделать:
"string".split('')#=> ["s", "t", "r", "i", "n", "g"]
Еще повторение массивов:
a = [1,2]
a*2# [1,2,1,2]

А также операторы сравнения == и <=> работают и для массивов.
Кстати, у вас в примере немного не правильно, %w{1 2 3 4} — это массив строк, а не чисел.
nil это объект-синглтон(т.е. единственный) класса NilClass. Присваевается переменным, не имеющим значения.
Пример из статьи:
a = Array.new(3) # [nil, nil, nil] — массив пустой, значит все элементы равны nil.
В условиях приравнивается к false
a = nil
puts "nil!" unless a # напечатает nil!

У каждого объекта есть метод проверки на nil.
puts "nil!" if a.nil? # опять напечатает nil!
Есть еще такой хитрый прием:
a ||= "sting"#присвоит переменной a значение "string" только если a=nil или a=false
a &&= "sting"#наоборот, присвоит только если a!=nil и a!=false
Ну Мак Ос же BSD юникс. А в юникс системе от рута никуда не деться…
Зато вся юниксойдность там хорошо запрятана за пользовательский интерфейс.
Во-первых, в ветке Ruby 1.8 компилляции в байткод нет, только в 1.9.
Во-вторых, не в компиляции дело.
Ruby — это динамический язык, в динамических языках нет оверлоадинга.
И по скорости динамические языки всегда медленнее статических.
Если для ваших задач критична скорость — используйте тот же C#:)
В эппл еще как думают. Простому юзеру в Мак Ос уже не надо знать что такое рут и вообще терминал открывать.:)
А «поставить библиотеку для языка программирования» — это задача уже чуть более продвинутая, чем для простого юзера.
Отсутствие оверлоадинга методов — это ограничение динамических языков.
Хотите два конструктора — используйте переменное число параметров.

class Test
    def initialize *args
        if args.size == 1
            puts "first constructor"
        elsif args.size == 2
            puts "second constructor"
        else
            raise "Required 1 or 2 parameters"
        end
    end
end
Test.new("asdf") #=> first constructor"
Test.new("asdf","asdf") #=> "second constructor"
Test.new() #=> `initialize': Required 1 or 2 parameters (RuntimeError)

Такой же код для перегрузки методов.
Не скажите откуда табличка?
>That means you'll get an exception at runtime if you try to write invalid xhtml
Да, это и подразумевалось:) Спасибо, сейчас исправлю.

>что же дальше делать с этим comp…
В результате у нас получился простой язык для создания описаний. Ему можно придумать массу применений. Ну например, дописав пару методов к классу Computer мы можем, экспортировать эти описания в различные форматы.
class Computer
  def to_html; end
  def to_pdf; end
  def to_xls; end
end

А потом оформить это как небольшую консольную утилиту. Пользователь может сделать описание и экспортировать в различные форматы
conf2html my_comp.conf my_comp.html

Потом это описание в подпись на форум поставить или еще куда.
Но это просто синтетический пример для демонстрации. А вобще, DSL очень широко распространены в Ruby библиотеках. Например, тот же Rake это DSL, или как я упоминал в статье в Rails используется DSL, и тд.
То, что мы уходим от валидности, делает наш DSL более близким к человеческому языку и он уже становиться BNL'ом(Business Natural Language).
Тут я просто показал как можно просто перейти от DSL к BNL.
Но BNL не всегда так удобен, как DSL(особенно для программистов).
Так что «вкусности Ruby» для DSL все-таки вкусности:)
От заявлений о православности питона сразу хочеться холиварить:)
или просто: attr
attr :asdf, true #тоже что и attr_accessor :asdf
attr :asdf, false #тожу что и attr_reader :asdf
Да, и динамический ip, если это поможет.

Information

Rating
Does not participate
Works in
Registered
Activity