Mengapa Rails ditulis dalam Ruby? [Tutup]

9

Saya tahu PHP dan Ruby.

Menggunakan klon PHP Rails (bukan karena pilihan), yang disebut Symfony, (yang tampaknya merupakan kerangka PHP terbaik), saya perhatikan bahwa itu adalah klon dari Rails. Saya pikir Symfony bodoh dan itu (SensioLabs adalah bisnis yang pintar) karena Rails sudah ada.

Terlepas dari proyek sumber terbuka yang menghasilkan uang, saya tidak mengerti mengapa orang membuat klon Rails di PHP, ketika Rails sudah ada. Mengapa tidak menggunakan Rails? Tentunya DHH memberi kode Rails dengan Ruby karena suatu alasan.

Menggunakan Symfony, saya perhatikan ada sesuatu yang terasa tidak benar tetapi saya tidak tahu apa itu. Saya belajar Rails melalui ebook Sitepoint omong kosong dan melupakannya, jadi sekarang saya belajar melalui ebook PragProg dan saya suka ebook itu. Saya tidak sepenuhnya tahu Rails, tapi saya mengerti cara kerjanya (terima kasih kepada Symfony). Saya akan senang menyelesaikan seluruh ebook sehingga saya bisa membuat 2 aplikasi Rails. Saya ingat Rails lebih menyenangkan daripada Symfony menggunakan ebook Sitepoint yang tidak bisa saya selesaikan, dan itu tidak ada hubungannya dengan sintaksis Ruby yang cantik.

  1. Mengapa Rails diberi kode dalam Ruby?
  2. Ada apa dengan klon PHP Rails, yang rasanya tidak benar?
  3. Apa yang dilakukan Rails, yang tidak dilakukan klon Rails?
desbest
sumber
4
Ruby adalah saus rahasia Rails.
Chiron
4
Meh, saya tidak bisa melihat sesuatu yang disebut Ruby on Railssedang diimplementasikan dalam PHP.
alternatif
2
Jika ingatanku, aku pernah mendengar podcast di mana DHH menggambarkan dia memilih Ruby. Saya pikir ini adalah episode Kehidupan Pengembang ini.
Adam Lear
2
@ Chris G - Saya merasa sangat sulit untuk percaya. Jurang pemisah antara bahasa-bahasa yang mendasarinya sangat besar- Ruby adalah seorang yang pandai dan komprehensif dalam berpikir melalui bahasa pemrograman, PHP adalah hack yang ditumpuk pada hack lain dengan banyak fitur Ruby yang diretas di akhir permainan. PHP mudah untuk di-host dan berkinerja lebih baik, tetapi jika itu adalah prioritas DHH dia mungkin tidak akan memilih Ruby kembali ketika dia melakukannya. PHP tidak pernah benar-benar dirancang untuk menjadi bahasa pemrograman dan orang-orang yang peduli tentang teori bahasa / CS cenderung tidak tertarik karenanya.
glenatron
2
@Glenatron Tidak ada yang menghentikan pengguna PHP yang cerdas untuk menulis aplikasi web yang indah, ekspresif, modern menggunakan fitur kunci "Rails" seperti ORM. Gagasan bahwa penutupan baru-baru ini ditambahkan ke PHP tidak akan menghentikan siapa pun untuk menggunakannya!
Chris G.

Jawaban:

26

1.) Mengapa Rails diberi kode dalam Ruby?

Rails awalnya diekstraksi dari karya DHH di Basecamp, yang ditulis dalam Ruby. Seiring waktu, pengembang inti Rails terus mengekstraksi dan mengembangkan lebih banyak fitur ke dalam Rails, dan akhirnya menjadi kerangka kerja yang lengkap.

Sejak Ruby tumbuh dalam kekuatan dan ekspresif selama bertahun-tahun, itu terus menjadi cocok untuk kerangka kerja, jadi itu juga terus menjadi bahasa yang ditulisnya. (Plus, "C # on Rails" atau "Java on Rails" tidak dapat memiliki aliterasi yang bagus.)

2.) Ada apa dengan klon PHP Rails, yang rasanya tidak benar?

Ini tidak dapat benar-benar dijawab secara objektif, tetapi mungkin karena # 1. Perilaku dan internal Rails memanfaatkan banyak fitur yang ada di Ruby dan akan sulit untuk ditiru secara tepat di tempat lain. Sebagai contoh, PHP tidak memiliki metaclasses, yang sangat bergantung pada Rails.

Terlepas dari proyek sumber terbuka yang menghasilkan uang, saya tidak mengerti mengapa orang membuat klon Rails di PHP, ketika Rails sudah ada. Mengapa tidak menggunakan Rails? Tentunya DHH memberi kode Rails dengan Ruby karena suatu alasan.

Karena tidak semua orang punya waktu, anggaran, atau kecenderungan untuk belajar bahasa baru hanya supaya mereka bisa belajar kerangka kerja baru.

Sebagai analogi, jika ternyata Brainfuck memiliki kerangka kerja web yang sangat populer, apakah itu berarti Anda harus meninggalkan klien Anda yang belum menulis aplikasi mereka di Brainfuck? Itu bukan cara untuk menjalankan bisnis.

Saya tahu PHP dan Ruby.

Pernyataan seperti "Saya tahu PHP dan Ruby" menunjukkan bahwa Anda mungkin belum sepenuhnya menghargai kedalaman, kekayaan, dan keistimewaan dari keduanya.

John Feminella
sumber
(Direproduksi dari stackoverflow.com/questions/6972992/… untuk anak cucu.)
John Feminella
Saya percaya upaya awal di Basecamp dicoba dalam PHP, dan tidak berhasil untuk kepuasan DHH. Karenanya, Rails diberi kode dalam Ruby.
Bryan M.
3
+1 - ada waktu tempat untuk belajar bahasa baru - proyek langsung yang penting bukanlah salah satunya.
JeffO
PHP tidak memiliki metaclasses di luar kotak, Anda benar. Namun, karena PHP 5.3 dimungkinkan untuk mengimplementasikan fungsionalitas metaclass.
Chris G.
6

1. Mengapa Rails diberi kode dalam Ruby?

Pernah ada keputusan untuk memprogramnya di ruby. Keputusan desain ini bertahan hingga hari ini.

2. Ada apa dengan klon PHP Rails, yang rasanya tidak benar?

Perasaan yang Anda miliki, sulit untuk mengatakan pada wesbite seperti ini. Anda mungkin ingin bertanya kepada seseorang yang lebih akrab dengan Anda dan tahu lebih banyak tentang perasaan Anda atau bahkan membagikannya.

3. Apa yang dilakukan Rails, yang tidak dilakukan klon Rails?

Klon persis Rails per definisi semua yang dilakukan Rails. Jadi ini kemungkinan besar akan tergantung bagaimana tepatnya klon dilakukan. Bagian yang berbeda akan menghasilkan perilaku yang berbeda. Misalnya untuk terjemahan ke bahasa lain, bahasa lain mungkin tidak memiliki fitur bahasa yang digunakan Rails on Ruby, yang kemungkinan besar akan menghasilkan perbedaan dalam desain dan kemudian dalam perilaku.

hakre
sumber
6

Mengapa Rails diberi kode dalam Ruby?

Ruby memungkinkan banyak meta-pemrograman, dan sintaksis permisifnya memungkinkan Anda untuk membuat API yang bagus yang tidak terlihat seperti pemanggilan metode sama sekali.

Sebagai contoh, ActiveRecord, Rail's Object Relational Mapper, melakukan kedua hal ini dengan baik. Pertama, ia menggunakan kemampuan meta-pemrograman Ruby untuk membuat metode dengan cepat sesuai dengan nama bidang dalam database.

Kedua, ActiveRecord memungkinkan Anda mendeklarasikan asosiasi ke objek: suatu Personkekuatan has_many :books. Itu has_many tampak seperti deklarasi, tapi itu sebenarnya pemanggilan metode. (Ruby membaca ini sebagai has_many(:books).

Ruby juga memiliki tujuan untuk membuat hidup programmer lebih mudah.

Ruby membuat hal ini mudah, jadi orang melakukannya. Bahasa lain membuat ini lebih sulit, atau hal-hal ajaib seperti ini secara eksplisit bukan bagian dari budaya. Django, kerangka kerja Python, memiliki jauh lebih sedikit meta magic karena tidak semudah itu dalam Python, dan Python sebagai bahasa yang condong ke arah "eksplisit lebih baik daripada implisit". (Saya tidak tahu banyak tentang budaya PHP atau kerangka kerja web di sisi itu.)

Saya pikir ini adalah beberapa alasan DHH jatuh cinta pada Ruby, dan dia menggunakan fitur bahasa ini dengan kekuatan di Rails.

RyanWilcox
sumber
Ini semua sangat baik menggunakan konsol untuk melakukan beberapa perancah di Rails, tetapi fitur seperti itu ada di Symfony. Bisakah Anda mengarahkan saya ke tempat saya dapat menemukan bukti bagaimana bahasa Ruby melayani pemrograman meta? Bukankah seharusnya kelas sudah mencukupi?
desbest
1
Programmer Pragmatik memiliki buku: Metaprogramming di Ruby, yang - selain menjadi pengantar Metaprogramming di Ruby - juga menghabiskan sekitar 50 halaman berbicara tentang metaprogramming di Rails. Saya tidak berpikir kelas cukup saja: misalnya, kadang-kadang metaprogramming terjadi melalui rantai metode ("ketika Anda memanggil fungsi ini, alih-alih panggil versi fungsi saya - yang mungkin atau mungkin tidak memanggil yang asli"). Ini adalah pola metaprogramming di Ruby (yang Rails membersihkan dan membuatnya lebih mudah digunakan)
RyanWilcox
Saya harus membaca itu setelah saya menguasai Rails. Semuanya terdengar membingungkan.
desbest
Saya hanya ingin menyebutkan bahwa PHP juga memiliki solusi ORM. Itu bukan sesuatu yang eksklusif untuk Ruby.
Chris G.
1
Ada implementasi PHP dari ActiveRecord yang disebut phpActiveRecord. Ia menggunakan semua hal ini. Namun, ketika DHH membangun Rails, PHP masih jauh dari kemampuan untuk melakukan itu.
Jamon Holmgren
2

Mengapa tidak menggunakan rel?

Saya akan menawarkan beberapa perspektif sebagai pengguna keduanya. Saya hobi program di Ruby / Rails dan saya menggunakan PHP secara eksklusif di tempat kerja. (Catatan: Saya tidak menganggap Ruby / Rails sebagai lingkungan penghobi, ini adalah bagaimana saya memilih untuk menggunakannya.)

Banyak orang memperlakukan Ruby / Rails sebagai grail suci pengembangan situs web karena popularitasnya dan karena 'berbeda'. Dalam banyak hal tentu saja tidak cukup untuk menganggap PHP sebagai sesuatu yang kuno.

Symfony tidak merasa seperti Rails karena PHP tidak memiliki beberapa sintaksis gula yang disediakan oleh rails. PHP membaik dalam hal ini dan penambahan penutupan 5.3 telah membuat perbedaan dalam berapa banyak dari kita menulis kode.

Jangan salah paham, saya suka Ruby dan saya suka Rails. Tetapi ketika Anda tidak ingin berurusan dengan hosting situs web yang kompleks atau mahal atau khawatir tentang kinerja atau menjadi 'pendarahan', PHP masih sangat relevan saat ini dan kerangka kerjanya juga sangat baik.

  • Redbean menawarkan fungsionalitas ORM yang hebat dengan PHP. Begitu juga Doctrine, Idiorm / Paris, dan Propel.
  • Symfony2 dan CakePHP menawarkan kerangka pengembangan web yang membengkak yang serupa dengan Rails.
  • CodeIgniter menawarkan solusi kerangka penuh tanpa mengasapi.
  • Slim menawarkan kerangka kerja seperti sinatra.

Pendapat Anda bahwa klon PHP rails tidak 'merasa benar' salah saya pikir, karena mereka bukan klon dan mereka tidak akan sama dengan Rails. Belajarlah untuk menikmati kesederhanaan dan keakraban dari solusi PHP.

Chris G.
sumber