A little while ago, I had the opportunity to come into contact with new technology at the workplace I was indebted to, so I tried using Rust. Rust has a similar world view to Ruby, and there are many parts that are easy to understand.
This time, I would like to summarize what I did in comparison with the world of Ruby/Rails.
Why did you become interested in Rust in the first place and decided to use it? Rust Official
--Advantages of compiled languages ――I will explain the impressions I have used later. --Good performance ――I will explain the impressions I have used later.
I read Rust's tutorial (The book) and programmed an example called Guessing game.
--Ownership gives you more control over the scope lifecycle of variables --Like a guide that can be written naturally when programmed conservatively and prevents careless mistakes --C language/C ++, C #, Ruby-like, grammar is not so difficult if you have a background --When compiled, references and definitions can be tracked properly. Useful for implementation and good for reading ――Since you can't do loose coding with duck typing like Ruby, compilation errors are likely to increase until you get used to it. --The speed of light if you just run what you built --Running is fast, but the binary file size is large ――I personally like it
If you understand Ruby, you can get an image by looking at this. I thought that the usability related to Gem was quite similar and easy to use.
Ruby | Rust |
---|---|
Gem | Crate |
Bundler | Cargo |
Class | Struct |
Instance method | Method |
Array | Array, Vec, etc. |
Hash | HashMap etc. |
array.each | for x in array |
Following a simple example, I implemented the Rest API server in PostgreSQL https://github.com/Samemura/rust-web-api-with-db
--There is no small scale --Fast build and execution. I think --It's possible that the library isn't as heavy as Rails. --People who are passionate about architecture seem to be easy to use --Ease of testing cannot be evaluated
This time, I looked at Official and tried using Rocket. As I was told later, it seems that Actix-web is actually popular. After that, Rocket and Rails are compared.
item | Rails | Rocket |
---|---|---|
ORM | ActiveRecord | Diesel However, it is necessary to use different libraries depending on the DB. Diesel is PostgreSQL and MySQL,SQLite only. |
Directory structure | Strictly determined | freedom You need to decide and operate the architecture and layer structure yourself |
Routing | routes.Described in rb with DSL | Pass controller-like function when mounting rocket function attribute(Something like a preprocessor)Define the path with |
Controller | Implemented in Controller class | Implemented with function. No particular restrictions Request parameters are parsed by defining Struct. It's pretty easy because parse does a good job. |
Model | Implemented in Model class | Implemented with Struct. No particular restrictions Apart from the ORM, the model used at the time of insert and the one acquired by select can be handled separately. It feels like there are a lot of Active Models. Similar things are likely to increase, but maintainability seems to be good because the range of influence is clear. |
Migration | Written in DSL | Up/Write SQL separately for Down I think it's easier to understand if you write it in SQL. Up/Down is also clear. |
I heard that it was easy to make, so I came up with something that I could use around me, so I made it. It can be used when randomly deciding the order in the order of presentation. https://github.com/Samemura/kaiten-sushi
--It was very easy to publish to crates.io --Click here for the procedure --Installers can easily install using cargo --The method of installing the binaries directly was quite difficult --Since it is listed in the procedure, it seems that you can make it lighter and try it --You need to build each platform with TravisCI so that you can install it with install.sh in a library called Trust. --Build with Travis CI, but deploy task fails --macos is not supported by Trust --Clogged? --You can make mac os binaries by building locally --Trust install.sh fetches the latest version of GitHub Release as an attachment depending on the platform --Name / upload with reference to Travis CI script example ――It was quite difficult, but I managed to do it ――It is certainly easy to install without Cargo ――When I verify it later, it seems that rustc is necessary. --The library interface is suitable for creating CLI, so it was easy to create. --It can be used with npm, and it can be called from Ruby, so it has a future (Routie)
It's a pretty rough summary, but I think it's good for experienced Ruby users to get a feel for it. I would appreciate it if you could tell me about the installation with Trust if you have certain information.
English information has been translated into Japanese, but the community seems to be mainly in English, so it seemed necessary to search for detailed information.