রুবি 1.8 এবং রুবি 1.9 এর মধ্যে পার্থক্য কী?


102

রুবির "বর্তমান" সংস্করণ এবং "নতুন" সংস্করণ (1.9) এর মধ্যে পার্থক্য সম্পর্কে আমি পরিষ্কার নই। পার্থক্যগুলির একটি "সহজ" বা "সাধারণ" ব্যাখ্যা আছে এবং কেন এটি এত আলাদা?


1
আমি ধরে নিলাম আপনার অর্থ রুবি 1.8.6 - রুবি 1.8.7 এর 1.9 থেকে প্রচুর গ্রন্থাগার রয়েছে।
অ্যান্ড্রু গ্রিম

এরপরে আমি 1.8 সংস্করণগুলিকে "পুরানো" সংস্করণগুলি এবং 1.9.2+ "বর্তমান" সংস্করণগুলি বিবেচনা করি। আমি কেবল সামঞ্জস্যতা পরীক্ষার জন্য 1.8.7 ব্যবহার করি তবে 1.9.2 এ বিকাশ করি।
টিন ম্যান

5
@ টেলিম্যাচাস: লিঙ্কটি ভেঙে গেছে।
অ্যান্ড্রু গ্রিম

1
@ টেলিম্যাচাস, অ্যান্ড্রু গ্রিম - এই আর্কাইভ.org লিঙ্কটি কাজ করে - web.archive.org/web/20090423003136/http://eigenclass.org/…
জে মেরিল

উত্তর:


170

স্যাম রুবির একটি দুর্দান্ত স্লাইডশো রয়েছে যা পার্থক্যের রূপরেখা দেয়

আরও সহজ রেফারেন্সের জন্য এই তথ্যটি ইনলাইন আনার স্বার্থে, এবং লিঙ্কটি যদি বিমূর্ত ভবিষ্যতে মারা যায়, স্যামের স্লাইডগুলির একটি ওভারভিউ এখানে। স্লাইডশোটি পর্যালোচনা করতে কম অপ্রতিরোধ্য, তবে এটির তালিকাগুলির মধ্যে এমনটি রাখাও সহায়ক।

রুবি 1.9 - প্রধান বৈশিষ্ট্য

  • কর্মক্ষমতা
  • টপিক / ফাইবার
  • এনকোডিং / ইউনিকোড
  • রত্নগুলি (বেশিরভাগ) এখন অন্তর্নির্মিত
  • যদি বিবৃতি রুবিতে সুযোগের পরিচয় দেয় না।

কি পরিবর্তন হয়েছে?

একক অক্ষরের স্ট্রিং।

রুবি ১.৯

irb(main):001:0> ?c
=> "c"

রুবি 1.8.6

irb(main):001:0> ?c
=> 99

স্ট্রিং সূচক।

রুবি ১.৯

irb(main):001:0> "cat"[1]
=> "a"

রুবি 1.8.6

irb(main):001:0> "cat"[1]
=> 97

{"ক", "খ" L আর দীর্ঘস্থায়ী নয়

রুবি ১.৯

irb(main):002:0> {1,2}
SyntaxError: (irb):2: syntax error, unexpected ',', expecting tASSOC

রুবি 1.8.6

irb(main):001:0> {1,2}
=> {1=>2}

ক্রিয়া: {1 => 2 to এ রূপান্তর করুন


Array.to_s এখন বিরামচিহ্ন ধারণ করে

রুবি ১.৯

irb(main):001:0> [1,2,3].to_s
=> "[1, 2, 3]"

রুবি 1.8.6

irb(main):001:0> [1,2,3].to_s
=> "123"

ক্রিয়া: পরিবর্তে .জাইন ব্যবহার করুন


বিবৃতি যখন কোন বিবরণ দীর্ঘ নেই

রুবি ১.৯

irb(main):001:0> case 'a'; when /\w/: puts 'word'; end
SyntaxError: (irb):1: syntax error, unexpected ':',
expecting keyword_then or ',' or ';' or '\n'

রুবি 1.8.6

irb(main):001:0> case 'a'; when /\w/: puts 'word'; end
word

ক্রিয়া: সেমিকোলন, তারপরে বা নিউলাইন ব্যবহার করুন


ভেরিয়েবলগুলি এখন শ্যাডো স্থানীয় ভেরিয়েবলগুলি ব্লক করুন

রুবি ১.৯

irb(main):001:0> i=0; [1,2,3].each {|i|}; i
=> 0
irb(main):002:0> i=0; for i in [1,2,3]; end; i
=> 3

রুবি 1.8.6

irb(main):001:0> i=0; [1,2,3].each {|i|}; i
=> 3

Hash.index অসমর্থিত

রুবি ১.৯

irb(main):001:0> {1=>2}.index(2)
(irb):18: warning: Hash#index is deprecated; use Hash#key
=> 1
irb(main):002:0> {1=>2}.key(2)
=> 1

রুবি 1.8.6

irb(main):001:0> {1=>2}.index(2)
=> 1

ক্রিয়া: হ্যাশ.কি ব্যবহার করুন


Fixnum.to_sym এখন গেছে

রুবি ১.৯

irb(main):001:0> 5.to_sym
NoMethodError: undefined method 'to_sym' for 5:Fixnum

রুবি 1.8.6

irb(main):001:0> 5.to_sym
=> nil

(চালিয়ে যাওয়া) রুবি ১.৯

# Find an argument value by name or index.
def [](index)
  lookup(index.to_sym)
end

svn.ruby-lang.org/repos/ruby/trunk/lib/rake.rb


হ্যাশ কী এখন আনর্ডারড

রুবি ১.৯

irb(main):001:0> {:a=>"a", :c=>"c", :b=>"b"}
=> {:a=>"a", :c=>"c", :b=>"b"}

রুবি 1.8.6

irb(main):001:0> {:a=>"a", :c=>"c", :b=>"b"}
=> {:a=>"a", :b=>"b", :c=>"c"}

অর্ডার সন্নিবেশ আদেশ হয়


কঠোর ইউনিকোড নিয়মিত অভিব্যক্তি

রুবি ১.৯

irb(main):001:0> /\x80/u
SyntaxError: (irb):2: invalid multibyte escape: /\x80/

রুবি 1.8.6

irb(main):001:0> /\x80/u
=> /\x80/u

trএবং Regexpএখন ইউনিকোড বোঝা

রুবি ১.৯

unicode(string).tr(CP1252_DIFFERENCES, UNICODE_EQUIVALENT).
  gsub(INVALID_XML_CHAR, REPLACEMENT_CHAR).
  gsub(XML_PREDEFINED) {|c| PREDEFINED[c.ord]}

pack এবং unpack

রুবি 1.8.6

def xchr(escape=true)
  n = XChar::CP1252[self] || self
  case n when *XChar::VALID
    XChar::PREDEFINED[n] or 
      (n>128 ? n.chr : (escape ? "&##{n};" : [n].pack('U*')))
  else
    Builder::XChar::REPLACEMENT_CHAR
  end
end
unpack('U*').map {|n| n.xchr(escape)}.join

BasicObject আরও নির্দয় BlankSlate

রুবি ১.৯

irb(main):001:0> class C < BasicObject; def f; Math::PI; end; end; C.new.f
NameError: uninitialized constant C::Math

রুবি 1.8.6

irb(main):001:0> require 'blankslate'
=> true
irb(main):002:0> class C < BlankSlate; def f; Math::PI; end; end; C.new.f
=> 3.14159265358979

ক্রিয়া: ব্যবহার :: গণিত :: পিআই


প্রতিনিধি দলের পরিবর্তন

রুবি ১.৯

irb(main):002:0> class C < SimpleDelegator; end
=> nil
irb(main):003:0> C.new('').class
=> String

রুবি 1.8.6

irb(main):002:0> class C < SimpleDelegator; end
=> nil
irb(main):003:0> C.new('').class
=> C
irb(main):004:0>

17700 ত্রুটি


CO কেসিওইডি ব্যবহার সতর্কতা উত্পাদন করে

রুবি ১.৯

irb(main):004:1> $KCODE = 'UTF8'
(irb):4: warning: variable $KCODE is no longer effective; ignored
=> "UTF8"

রুবি 1.8.6

irb(main):001:0> $KCODE = 'UTF8'
=> "UTF8"

instance_methods এখন প্রতীক একটি অ্যারে

রুবি ১.৯

irb(main):001:0> {}.methods.sort.last
=> :zip

রুবি 1.8.6

irb(main):001:0> {}.methods.sort.last
=> "zip"

ক্রিয়া: দৃষ্টান্ত_মাদিতগুলি প্রতিস্থাপন করুন? অন্তর্ভুক্ত করবেন? মেথড_ডাইফাইনড দিয়ে?


উত্স ফাইল এনকোডিং

মৌলিক

# coding: utf-8

এ গিয়ে emacs

# -*- encoding: utf-8 -*-

কুঁড়েঘর

#!/usr/local/rubybook/bin/ruby
# encoding: utf-8

রিয়েল থ্রেডিং

  • জাতি শর্ত
  • অন্তর্নিহিত আদেশ অনুমান
  • পরীক্ষার কোড

নতুন কি?

হ্যাশ কী হিসাবে প্রতীকটির বিকল্প সিনট্যাক্স

রুবি ১.৯

{a: b}

redirect_to action: show

রুবি 1.8.6

{:a => b}

redirect_to :action => show

স্থানীয় চলকগুলি অবরুদ্ধ করুন

রুবি ১.৯

[1,2].each {|value; t| t=value*value}

ইনজেকশন পদ্ধতি

রুবি ১.৯

[1,2].inject(:+)

রুবি 1.8.6

[1,2].inject {|a,b| a+b}

to_enum

রুবি ১.৯

short_enum = [1, 2, 3].to_enum
long_enum = ('a'..'z').to_enum
loop do
  puts "#{short_enum.next} #{long_enum.next}"
end

কোন ব্লক নেই? Enum!

রুবি ১.৯

e = [1,2,3].each

লাম্বদা শর্টহ্যান্ড

রুবি ১.৯

p = -> a,b,c {a+b+c}
puts p.(1,2,3)
puts p[1,2,3]

রুবি 1.8.6

p = lambda {|a,b,c| a+b+c}
puts p.call(1,2,3)

জটিল সংখ্যা

রুবি ১.৯

Complex(3,4) == 3 + 4.im

দশমিক এখনও ত্রুটিযুক্ত নয়

রুবি ১.৯

irb(main):001:0> 1.2-1.1
=> 0.0999999999999999

রেজেক্স "সম্পত্তি"

রুবি ১.৯

/\p{Space}/

রুবি 1.8.6

/[:space:]/

মাঝখানে স্প্ল্যাট

রুবি ১.৯

def foo(first, *middle, last)

(->a, *b, c {p a-c}).(*5.downto(1))

fibers

রুবি ১.৯

f = Fiber.new do
  a,b = 0,1
  Fiber.yield a
  Fiber.yield b
  loop do
    a,b = b,a+b
    Fiber.yield b
  end
end
10.times {puts f.resume}

ব্রেক মান

রুবি ১.৯

match =
   while line = gets
     next if line =~ /^#/
     break line if line.find('ruby')
   end

"নেস্টেড" পদ্ধতিগুলি

রুবি ১.৯

def toggle
  def toggle
    "subsequent times"
  end
  "first time"
end

আছে HTH!


3
এইচটিএইচ == "আশা করি সহায়তা করে"। আমি এটি সন্ধান করতে হবে। আপনি কি আমাকে সরবরাহ করেছেন এমন একটি উত্তরের দিকে নির্দেশ করতে পারেন, যেখানে আপনি আশা করেন নি যে এটি সাহায্য করবে?
ক্রিস ওয়েসলিং 14

বা আপনি সাহায্য করতে খুশি বলতে চাইছেন? সেই অনুযায়ী সম্পাদনা করুন। বা এটিকে সরিয়ে ফেলুন, যদি আপনার সুখ / আশাবাদীতা আপনার সমস্ত উত্তরের জন্য গণনা করে। ;-)
ক্রিস ওয়েসলিং 14

10
না, আমি এটিকে যেমন রেখে চলেছি মোট উত্তরের শতাংশ হিসাবে, এটি বিয়োগাত্মক এবং উভয়ই আমার সাথে ব্যাখ্যা ভাল। ধন্যবাদ।
টিম সুলিভান

আপনার প্রদত্ত লিঙ্ক অনুসারে, প্রতিনিধিদলের পরিবর্তনটি একটি বাগ ছিল এবং তা স্থির করা হয়েছে।
কাইল স্ট্র্যান্ড

"রেঞ্জ.ইনক্লুড?" এর মধ্যে অসঙ্গতি সম্পর্কে কী বলা যায়? পদ্ধতি? রুবি ভি 1.8.7 ভি 1.9 এর চেয়ে আলাদা ফলাফল দেয়
লুকাস পটারস্কি

12

একটি বিশাল পার্থক্য হ'ল ম্যাটজ এর দোভাষী থেকে ইএআরভি-তে স্থানান্তর করা , একটি বাইটকোড ভার্চুয়াল মেশিন যা পারফরম্যান্সে উল্লেখযোগ্যভাবে সহায়তা করে।


4

অনেকেই এখন পিক্যাক্সের উপরে রুবি প্রোগ্রামিং ল্যাঙ্গুয়েজের প্রস্তাব দিচ্ছেন - আরও উল্লেখযোগ্য বিষয় হল এতে 1.8 / 1.9 পার্থক্যের সমস্ত বিবরণ রয়েছে।


1
আমি তাদের উভয় পছন্দ। পিকাক্স বইটি কিছু বিষয় সম্পর্কে আরও সম্পূর্ণ আলোচনা করে তবে আপনি যখন কোনও কিছুর জন্য দ্রুত স্ক্যান করতে চান তখন রুবি প্রোগ্রামিং ভাষাটি ভাল। এটি একটি "সংক্ষেপে" বইয়ের কাছাকাছি।
টিন ম্যান

1

আরও কিছু পরিবর্তন:

একটি স্প্ল্যাট সিঙ্গলটন অ্যারে ফিরিয়ে দেওয়া:

def function
  return *[1]
end

a=function
  • রুবি ১.৯: [১]
  • রুবি 1.8: 1

অ্যারে আর্গুমেন্ট

def function(array)
  array.each { |v| p v }
end
function "1"
  • রুবি 1.8: "1"
  • রুবি ১.৯: অনির্ধারিত পদ্ধতি `প্রতিটি '1" এর জন্য: স্ট্রিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.