langthang1999
Senior Member
Project mới viết giờ ít người chọn ruby. Do vậy số lường người dùng chỉ có giảm chứ ko tăng được.
Chắc là chủ yếu là mấy cái di kèm hầm bà lăng và support 3rd party ấy nhỉ. Sinatra thì chắc cũng chỉ routingthì dùng sinatra, có chết đâu. dùng rails thì lại chả bị chối
Thử Django chưa?Theo mình thì nó sẽ không comeback được nhưng nó cũng éo thể chết được, job thì cứ tà tà chứ cũng không hot, làm crud bằng ruby on rails thì mình chưa thấy thằng nào làm nhanh bằng, còn về performance thì khỏi bàn
sinatra tương đương với expressjs của node thôi, feature có khi còn ít hơn.Chắc là chủ yếu là mấy cái di kèm hầm bà lăng và support 3rd party ấy nhỉ. Sinatra thì chắc cũng chỉ routing
Bạn đang so sánh về tốc độ build crud hay là performance. Performance của Rails chậm như rùa nên không cần so sánh cái này làm gì. Còn build CRUD thì với những library nó đã hỗ trợ trong Rails thì mình khẳng định là build nó nhanh hơn những thằng khác.Thử Django chưa?
Tôi nói về tốc độ build CRUD đó. Tôi ko làm Rails cũng gần 10 năm rồi, ko biết bây giờ nó còn có thêm những magic gì, nhưng tôi nghĩ cái CRUD bây giờ là quá đại trà rồi, Rails sẽ ko có gì nổi trội so với những thằng khác trong việc build CRUD đâu. Tôi lấy ví dụ Django nhé, 1 model Client có 3 fields: first_name, last_name, email. Code đại khái chỉ cần vầy thôi:Bạn đang so sánh về tốc độ build crud hay là performance. Performance của Rails chậm như rùa nên không cần so sánh cái này làm gì. Còn build CRUD thì với những library nó đã hỗ trợ trong Rails thì mình khẳng định là build nó nhanh hơn những thằng khác.
nói đến django lại buồn, tôi trước nghe người khác khen nức nở cũng nghĩ là django ngon ngang rails, cho nên có cái project remote làm cùng thằng bạn (mới quay lại code dc 1 2 năm), nó bảo là muốn làm BE với django thế là cho bạn làm vì nghĩ là django cũng chả vấn đề....Tôi nói về tốc độ build CRUD đó. Tôi ko làm Rails cũng gần 10 năm rồi, ko biết bây giờ nó còn có thêm những magic gì, nhưng tôi nghĩ cái CRUD bây giờ là quá đại trà rồi, Rails sẽ ko có gì nổi trội so với những thằng khác trong việc build CRUD đâu. Tôi lấy ví dụ Django nhé, 1 model Client có 3 fields: first_name, last_name, email. Code đại khái chỉ cần vầy thôi:
View attachment 342174
Là coi như xong, có ngay tất cả những endpoints cần thiết cho CRUD, tất nhiên là có sẵn luôn validations tùy theo attributes của từng model field, và nó cũng generate ra luôn cho mình cái swagger schema:
View attachment 342176
View attachment 342177
Như vậy vẫn ko đủ nhanh gọn bằng Rails sao?
Cái manual của django in ra chắc cũng hơn 2k pages, nên tôi thấy đa phần các vấn đề là do lỗi người dùng chưa kịp đọc kỹ, đặc biệt là mấy cái ông nói ở trên, đều là những cái lookup rất basic của django: exact/iexact, contains/icontains, startswith/istartswith... Nếu những cái này còn chưa nắm thì làm sao nói đến chuyện customize django admin được. Còn mấy cái db extension như citext, unaccent... cũng đều có support hết, cứ import vào là tự động có ngay SQL migration scripts up/down luôn, ko cần phải vào db để run create extension hay drop extension gì cả.nói đến django lại buồn, tôi trước nghe người khác khen nức nở cũng nghĩ là django ngon ngang rails, cho nên có cái project remote làm cùng thằng bạn (mới quay lại code dc 1 2 năm), nó bảo là muốn làm BE với django thế là cho bạn làm vì nghĩ là django cũng chả vấn đề....
kết quả thì phải nói là chán luôn, django admin thì không customize được, bảo thêm này bỏ kia thì cứ quặc "django admin chỉ đến thế thôi", case insensitive cũng không làm được, gõ cái gì cũng phải chú ý đúng case.
tôi không rõ là do django thế hay do bạn tôi mới dùng nó thế, chứ ruby/elixir thì tôi dùng citext extension từ nhiều năm trước chả thấy vấn đề vẹo gì, admin thì không tiện bằng django thật nhưng có scaffolding nó cũng hỗ trợ tương đối, chỉ gõ đúng cái câu lệnh là ra hết một đống files, sau đó thì thích sửa thế nào thì sửa.
sau vụ này có thằng nào bảo là tao dùng django chắc tôi chạy luôn
Cái customize quá nhìu thì nên tự viết React hay hơn là để cái Admin của Django(hoac bất kì fw nào cũng thế, cust nhìu thì tự làm dễ quản hơn).nói đến django lại buồn, tôi trước nghe người khác khen nức nở cũng nghĩ là django ngon ngang rails, cho nên có cái project remote làm cùng thằng bạn (mới quay lại code dc 1 2 năm), nó bảo là muốn làm BE với django thế là cho bạn làm vì nghĩ là django cũng chả vấn đề....
kết quả thì phải nói là chán luôn, django admin thì không customize được, bảo thêm này bỏ kia thì cứ quặc "django admin chỉ đến thế thôi", case insensitive cũng không làm được, gõ cái gì cũng phải chú ý đúng case.
tôi không rõ là do django thế hay do bạn tôi mới dùng nó thế, chứ ruby/elixir thì tôi dùng citext extension từ nhiều năm trước chả thấy vấn đề vẹo gì, admin thì không tiện bằng django thật nhưng có scaffolding nó cũng hỗ trợ tương đối, chỉ gõ đúng cái câu lệnh là ra hết một đống files, sau đó thì thích sửa thế nào thì sửa.
sau vụ này có thằng nào bảo là tao dùng django chắc tôi chạy luôn
Coi wiki sao mà phán Ruby già hơn Java ?già hơn java mà?
When I first declared “Ruby3x3” in the conference keynote, many including members of the core team felt “Matz is a boaster”. In fact, I felt so too. But we did. I am honored to see the core team actually accomplished to make Ruby3.0 three times faster than Ruby2.0 (in some benchmarks). – Matz
It’s multi-core age today. Concurrency is very important. With Ractor, along with Async Fiber, Ruby will be a real concurrent language. — Matz
def tarai(x, y, z) =
x <= y ? y : tarai(tarai(x-1, y, z),
tarai(y-1, z, x),
tarai(z-1, x, y))
require 'benchmark'
Benchmark.bm do |x|
# sequential version
x.report('seq'){ 4.times{ tarai(14, 7, 0) } }
# parallel version
x.report('par'){
4.times.map do
Ractor.new { tarai(14, 7, 0) }
end.each(&:take)
}
end
user system total real
seq 64.560736 0.001101 64.561837 ( 64.562194)
par 66.422010 0.015999 66.438009 ( 16.685797)
require 'async'
require 'net/http'
require 'uri'
Async do
["ruby", "rails", "async"].each do |topic|
Async do
Net::HTTP.get(URI "https://www.google.com/search?q=#{topic}")
end
end
end
2010s were an age of statically type programming languages. Ruby seeks the future with static type checking, without type declaration, using abstract interpretation. RBS & TypeProf are the first step to the future. More steps to come. — Matz
module ChatApp
VERSION: String
class Channel
attr_reader name: String
attr_reader messages: Array[Message]
attr_reader users: Array[User | Bot] #|
means union types,User
orBot
.
def initialize: (String) -> void
def post: (String, from: User | Bot) -> Message # Method overloading is supported.
| (File, from: User | Bot) -> Message
end
end
# test.rb
class User
def initialize(name:, age
@Name, @age = name, age
end
attr_reader :name, :age
end
User.new(name: "John", age: 20)
$ typeprof test.rb
# Classes
class User
attr_reader name : String
attr_reader age : Integer
def initialize : (name: String, age: Integer) -> [String, Integer]
end
irb(main):001:0> 3
=> 3
irb(main):002:0> measure
TIME is added.
=> nil
irb(main):003:0> 3
processing time: 0.000058s
=> 3
irb(main):004:0> measure ff
=> nil
irb(main):005:0> 3
=> 3
Giờ ra ver mới thì cũng chỉ cho các dự án đang chạy thôi. Dự án mới team toàn build bằng elixir.
Tôi nghĩ mà đắng lòng ko biết Ruby 3.0 nó ngon thế nhưng project mới thì ko ai dùng nó rồi. Có may ra các dự án củ migration lên thôi.Advent of Ruby 3.0 - Day 02 - Password Philosophy
https://dev.to/baweaver/advent-of-ruby-3-0-day-02-password-philosophy-3hg
Ruby 3.0 mới ra, nên Ruby on Rails 6.1 chưa có các tính năng cập nhật fend à!Tôi nghĩ mà đắng lòng ko biết Ruby 3.0 nó ngon thế nhưng project mới thì ko ai dùng nó rồi. Có may ra các dự án củ migration lên thôi.