Perché Rails è stato scritto in Ruby? [chiuso]


9

Conosco PHP e Ruby.

Usando un clone di PHP Rails (non per scelta), chiamato Symfony, (che apparentemente è il miglior framework PHP), noto che è un clone di Rails. Penso che Symfony sia stupido e che (SensioLabs sia un business intelligente) perché Rails esiste già.

A parte i progetti open source che guadagnano denaro, non capisco perché le persone stiano realizzando cloni di Rails in PHP, quando Rails esiste già. Perché non usare Rails? Sicuramente DHH ha codificato Rails con Ruby per un motivo.

Usando Symfony, noto che qualcosa non sembra giusto ma non so cosa sia. Ho imparato Rails attraverso un ebook Sitepoint di merda e l'ho dimenticato, quindi ora lo sto imparando attraverso l'ebook PragProg e adoro quell'ebook. Non conosco appieno Rails, ma capisco come funziona (grazie a Symfony). Mi piacerebbe finire di leggere l'intero ebook in modo da poter realizzare app 2 Rails. Ricordo che Rails era più divertente di Symfony usando l'ebook di Sitepoint che non riuscivo a finire e che non aveva nulla a che fare con la bella sintassi di Ruby.

  1. Perché Rails è codificato in Ruby?
  2. Cosa c'è nei cloni di PHP Rails che non si sentono bene?
  3. Che cosa sta facendo Rails, che i cloni di Rails non stanno facendo?

4
Il rubino è la salsa segreta di Rails.
Chirone,

4
Non riesco a vedere qualcosa chiamato Ruby on Railsimplementato in PHP.
alternativa il

2
Se la memoria serve, una volta ho sentito un podcast in cui DHH ha descritto che ha scelto Ruby. Penso che sia stato questo episodio di This Developer's Life.
Adam Lear

2
@ Chris G - Lo trovo incredibilmente difficile da credere. Il divario tra le lingue sottostanti è enorme: Ruby è un ingegnoso e ampiamente pensato attraverso il linguaggio di programmazione, PHP è un hack accumulato su altri hack con un mucchio di funzionalità di Ruby hackerate in ritardo nel gioco. PHP è facile da ospitare e offre prestazioni migliori, ma se quelle fossero state le priorità di DHH probabilmente non avrebbe scelto Ruby quando lo avesse fatto. PHP non è mai stato realmente progettato per essere un linguaggio di programmazione e le persone che si preoccupano della teoria dei linguaggi / CS tendono a non amarlo di conseguenza.
glenatron,

2
@Glenatron Niente di tutto ciò impedisce a qualsiasi utente PHP intelligente di scrivere applicazioni web moderne, espressive e moderne che utilizzano le funzioni chiave "Rails" come ORM. L'idea che le chiusure siano state aggiunte di recente a PHP non impedirà a nessuno di usarle!
Chris G.

Risposte:


26

1.) Perché Rails è codificato in Ruby?

Rails è stato originariamente estratto dal lavoro di DHH su Basecamp, che è stato scritto in Ruby. Nel tempo, gli sviluppatori core di Rails hanno continuato a estrarre e sviluppare più funzionalità in Rails, e alla fine è diventato un framework completo.

Da quando Ruby è cresciuto in potenza ed espressività nel corso degli anni, ha continuato ad essere una buona scelta per il framework, quindi ha anche continuato ad essere il linguaggio in cui è scritto. (Inoltre, "C # on Rails" o "Java on Rails" non avere quella bella allitterazione.)

2.) Cosa c'è nei cloni di PHP Rails che non si sentono bene?

Non si può rispondere in modo oggettivo, ma probabilmente è il numero 1. Il comportamento e gli interni di Rails sfruttano molte funzionalità esistenti in Ruby e sarebbe difficile replicarle esattamente altrove. Ad esempio, PHP non ha metaclassi, da cui Rails dipende fortemente.

A parte i progetti open source che guadagnano denaro, non capisco perché le persone stiano realizzando cloni di Rails in PHP, quando Rails esiste già. Perché non usare Rails? Sicuramente DHH ha codificato Rails con Ruby per un motivo.

Perché non tutti hanno il tempo, il budget o la propensione ad imparare una nuova lingua solo per poter imparare un nuovo framework.

Per analogia, se si è scoperto che Brainfuck aveva un framework web molto popolare, significa che dovresti abbandonare i tuoi clienti che non hanno scritto le loro applicazioni in Brainfuck? Non è un modo per gestire un'attività.

Conosco PHP e Ruby.

Dichiarazioni come "Conosco sia PHP che Ruby" suggeriscono che potresti non apprezzare ancora pienamente la profondità, la ricchezza e le idiosincrasie di entrambi.



Credo che un tentativo iniziale di Basecamp sia stato tentato in PHP e non abbia funzionato con soddisfazione di DHH. Quindi, Rails è stato codificato in Ruby.
Bryan M.,

3
+1 - c'è un posto in cui imparare una nuova lingua - un progetto immediato di qualsiasi importanza non è uno dei.
JeffO,

PHP non ha metaclass pronti all'uso, hai ragione. Tuttavia, da PHP 5.3 è possibile implementare la funzionalità metaclasse.
Chris G.

6

1. Perché Rails è codificato in Ruby?

C'era una volta la decisione di programmarlo in ruby. Questa decisione progettuale dura fino ad oggi.

2. Cosa c'è nei cloni di PHP Rails che non si sentono bene?

È una sensazione che hai, difficile da dire su un morso come questo. Potresti chiedere a una persona che è più intima con te e che ne sa di più sui tuoi sentimenti o addirittura li condivide.

3. Che cosa sta facendo Rails, che i cloni di Rails non stanno facendo?

Un clone esatto di Rails fa per definizione tutto ciò che fa Rails. Quindi molto probabilmente dipenderà da come è stato fatto esattamente un clone. Le diverse parti comporteranno comportamenti diversi. Ad esempio, per una traduzione in un'altra lingua, l'altra lingua potrebbe non avere funzionalità linguistiche utilizzate da Rails on Ruby, il che molto probabilmente comporterà differenze nella progettazione e quindi nel comportamento.


6

Perché Rails è codificato in Ruby?

Ruby consente molto una meta-programmazione e la sua sintassi permissiva ti consente di creare belle API che non assomigliano affatto alle chiamate di metodo.

Ad esempio, ActiveRecord, Object Relational Mapper di Rail, fa entrambe queste cose bene. Innanzitutto, utilizza la capacità di meta-programmazione di Ruby per creare metodi al volo corrispondenti ai nomi dei campi nel database.

In secondo luogo, ActiveRecord ti consente di dichiarare le associazioni agli oggetti: un Personpotere has_many :books. Che has_many sembra una dichiarazione, ma in realtà è una chiamata di metodo. (Ruby legge questo come has_many(:books).

Ruby ha anche l'obiettivo di rendere più facile la vita dei programmatori esperti.

Ruby rende queste cose facili, quindi le persone le fanno. Altre lingue rendono queste cose più difficili o magiche come questa non fanno esplicitamente parte della cultura. Django, il mega-framework di Python, ha molto meno metamagia perché non è così facile in Python, e Python come un linguaggio tende verso "esplicito è meglio di implicito". (Non so molto sulla cultura di PHP o sui framework web da quel lato.)

Penso che questi siano alcuni dei motivi per cui DHH si è innamorato di Ruby e usa queste funzionalità linguistiche con potenza in Rails.


Sta molto bene usando la console per eseguire alcune impalcature in Rails, ma tali funzionalità esistono in Symfony. Puoi indicarmi dove posso trovare prove di come il linguaggio di Ruby si rivolge alla meta-programmazione? Le lezioni non dovrebbero bastare?
desbest

1
I programmatori pragmatici hanno un libro: la metaprogrammazione in Ruby, che - oltre ad essere un'introduzione alla metaprogrammazione in Ruby - trascorre anche circa 50 pagine a parlare della metaprogrammazione in Rails. Non penso che le classi siano sufficienti: ad esempio, a volte la metaprogrammazione avviene tramite la catena di metodi ("quando chiami questa funzione, chiama invece la mia versione della funzione - che può o meno chiamare l'originale"). Questo è un modello di metaprogrammazione in Ruby (che Rails pulisce e rende più facile da usare)
RyanWilcox

Dovrò leggerlo dopo aver imparato Rails. Sembra tutto confuso.
desbest

Vorrei solo ricordare che PHP ha anche soluzioni ORM. Non è qualcosa che è esclusivo di Ruby.
Chris G.

1
Esiste un'implementazione PHP di ActiveRecord chiamata phpActiveRecord. Usa tutte queste cose. Tuttavia, quando DHH costruì Rails, PHP era ben lungi dall'essere in grado di farlo.
Jamon Holmgren,

2

Perché non usare le guide?

Offrirò alcune prospettive come utente di entrambi. Ho un programma di hobby in Ruby / Rails e utilizzo PHP esclusivamente al lavoro. (Nota: non rifiuto Ruby / Rails come ambiente hobbistico, è così che scelgo di usarlo.)

Molte persone trattano Ruby / Rails come il santo graal dello sviluppo di siti Web a causa della popolarità del carrozzone e della sua "diversa". In molti modi è certamente, ma non abbastanza, liquidare PHP come qualcosa di antico.

Symfony non si sente come Rails perché a PHP manca un po 'dello zucchero sintattico fornito da Rails. PHP sta migliorando a questo proposito e l'aggiunta di chiusure 5.3 ha fatto la differenza in quanti di noi scrivono codice.

Non fraintendetemi, adoro Ruby e adoro Rails. Ma quando non vuoi occuparti di hosting di siti web complessi o costosi o preoccuparti delle prestazioni o di essere "all'avanguardia", PHP è ancora oggi estremamente rilevante e i suoi framework sono anche molto buoni.

  • Redbean offre ottime funzionalità ORM con PHP. Anche Doctrine, Idiorm / Paris e Propel.
  • Symfony2 e CakePHP offrono un framework di sviluppo web gonfio simile nello spirito a Rails.
  • CodeIgniter offre una soluzione full framework senza il gonfiore.
  • Slim offre una struttura simile a sinatra.

La tua insinuazione che i cloni di PHP Rails non "si sentano bene" è sbagliata, penso, perché non sono cloni e non saranno gli stessi di Rails. Impara a crogiolarti nella semplicità e nella familiarità di una soluzione PHP.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.