Disclaimer: Non sono affatto un esperto di Ruby o Rails.
Come qualcuno che è stato nel settore per quasi 15 anni vedo diversi segnali di avvertimento che mi rendono particolarmente nervoso su Ruby on Rails. Qui ignorerò la lingua perché una lingua è una lingua. Il rubino è un linguaggio moderno con chiusure, eccezioni, OO, ecc. Alcuni lo criticano in termini di prestazioni. Questi problemi sono in gran parte irrilevanti dal fatto che non influiscono sulle prestazioni del mondo reale (se ci vogliono 300ms per scaricare e visualizzare una pagina Web, a chi importa che i codici server impiegano 10, 20 o anche 30 ms per funzionare?) E transitori in quanto sono corretti nelle versioni successive (come sembra essere il caso di Ruby 1.9).
Ruby on Rails è uno stack pesante e chiuso. Intendo questo come un'osservazione non un'accusa. È strettamente integrato (incluso con Prototype) molto simile a JBoss Seam nel mondo Java (essendo strettamente integrato con JBoss/Hibernate e sì so che le pubblicazioni e gli articoli recenti hanno affrontato il problema di usarlo con, per esempio, Glassfish e un altro provider JPA)
Questa può essere una buona cosa e una cosa negativa. J2EE, ad esempio, essendo uno stack abbastanza aperto è stato la causa di molte innovazioni nell'industria del software nell'ultimo decennio, poiché quasi ogni parte di esso (in particolare EJB) è stata sostituita da diversi progetti che potrebbero essere inseriti insieme. E naturalmente lo era, se non il luogo di nascita di Spring, era certamente l'incubatore.
D'altra parte si hanno più stack chiusi come .Net, dove la loro natura chiusa consente una rapida innovazione, un modello che Microsoft ha (in generale) eccelso. In pochi anni, DirextX è passato dall'essere uno scherzo a battere completamente OpenGL come piattaforma di sviluppo di giochi perché qualsiasi sistema chiuso può evolvere molto più rapidamente di un sistema di standard aperti. È così che funziona.
L'altro punto rilevante che menzionerò è che negli ultimi anni c'è stato un passaggio verso gli ORM ("mappatura oggettuale-relazionale") in Java, .Net e altrove e questo fa parte dell'impeto dietro Rails. Ho già commentato in precedenza, ad esempio "Using an ORM or plain SQL?" e non ripeterò i punti nella loro interezza.
Come molti di voi saprebbero c'è una discrepanza tra l'oggetto e il mondo relazionale che gli ORM hanno cercato di collegare. Nell'ultimo anno o due mi sono occupato principalmente di Java (in particolare JPA).
Ora, quando si ponte tra due cose che non corrispondono si finisce con "leaky abstractions" (come Joel dirla):
Tutte le astrazioni non banali, in una certa misura , sono che perde.
Ora, ciò che aggiungerò è questo: esiste una relazione inversa tra la complessità dell'astrazione e quanto l'astrazione perde. Caso in questione: ibatis. Ibatis è un framework di persistenza estremamente leggero ma potente per Java e di cui sono un grande fan. Esso racchiude SQL in file esterni e in più mette molti moderni comportamenti ORM, come ad esempio:
- Pigro-carico di relazioni;
- Mappatura dei risultati;
- Raggruppamento di risultati su più livelli (qualcosa JPA non può fare); e
- Tipi discriminati (ovvero il tipo è determinato i dati).
vorrei stima che ibatis ha il 90-95% delle funzionalità di Hibernate con la sola complessità testa essendo runtime valorizzazione bytecode per il lazy loading via cglib (JPA lo fa allo stesso modo), con l'unico aspetto negativo che si devi scrivere le tue domande (e non considero un serio svantaggio, ma le opzioni possono variare).
Confrontalo con un fornitore JPA che fa affidamento sulla strumentazione, la tessitura a tempo di caricamento e i caricatori di classe non standard per implementare quella funzionalità aggiuntiva del 5-10% (e l'astrazione continua a perdere).
cui v'è una legge dei rendimenti decrescenti, quando si tratta di fare le cose meno che perde. A un certo punto, è meglio investire in una pompa di sentina di quanto non sia nel fissare ogni perdita nella barca.
Portare questo ritorno a Rails: l'argomento di astrazione che perde è il mio più grande problema con la filosofia Rails.
Che suona anche un campanello d'allarme per me è i commenti che si ottiene in messaggi come On Derek Siver’s Return to PHP… è: "Derek ha scelto la tecnologia per le ragioni sbagliate"
- : Attendere ... Non è RoR o un framework per applicazioni Web generiche o un facsimile piuttosto vicino? Stando così le cose, perché non puoi fare un sito come CDbaby in esso?
- "Rails non in forma modello di applicazione di Derek per CD Baby": In che modo?
- "ha ignorato i suoi esperti esistenti per la nuova tecnologia.": Aspetta ... non ha fatto assumere un esperto?
- "scusa Derek, si potrebbe ancora essere sporcarsi le mani con il codice, ma sei ancora di gestione": Sono d'accordo con il commento che questa citazione è "stupido" e aggiungerà che la sua fuorviante, irrilevanti e senza dubbio un uomo di paglia ;
- "Derek si avvicinò al progetto nel suo complesso-ambiente di terra-up riscrivere con una distribuzione One Big Day": probabilmente non è consigliabile, ma se siete disposti a spendere tempo e denaro su di esso, non vedo come un motivo per cui non puoi fare il sito in RoR.
Ora 5-7 anni fa, quando è stato EJB hyped You got critiche è basata su un sacco di cose e si otterrebbe difensori risoluti sostenendo:
- "Applicazione X non funziona con la Modello EJB ";
- "Non hanno capito come funziona EJB";
- "EJB non è per tutte le applicazioni" (preferiscono ammettere la sconfitta su questo piuttosto che affrontare il problema più clamoroso che non è proprio appropriato per non parlare di una buona idea per, beh, quasi nulla);
- ecc
Così i messaggi anti-Ruby (e soprattutto le loro confutazioni) tutti i suoni molto familiare per me.
Vale la pena ricordare l'anno vecchio rant "Rails is a Ghetto" di Zed Shaw, che è una parola strana di 6000 parole ("conflagrazione" è probabilmente una parola migliore) contro Rails. Alcune citazioni notevoli:
Questo è esattamente ciò che rende Rails un ghetto .Un gruppo di idioti un po 'addestrati phon che non si prendono mai la briga di sedersi sul e imparano davvero il computer scienza, erano troppo bravi per studiare nel college .
e
Notate come mi ci sono voluti pochi secondi per risposta. Questa singola affermazione in pratica significa che siamo stati tutti ingannati. L'applicazione principale di Rails che DHH ha creato necessario riavviare _400 volte al giorno. Questa è un'applicazione di produzione che non può rimanere in piedi per più di 4 minuti in media.
e (a perdite di memoria):
Questo è un motivo in più Rails è ghetto come l'inferno. Patch importanti come lo sono ignorate in gran parte dagli sviluppatori giapponesi , e mentre loro sono ragazzi molto carini, quanto sopra solo sa di ora amatoriale.
e
La parte migliore di tutta la faccenda è c'è potenzialmente 10 nuove web quadri che possono prendere on Rails. Inferno, Mongrel generato o aiutato 5 di quelli. Il mio preferito di questi framework è Merb che è letteralmente "Mongrel plus Erb", ma ora utilizza principalmente Erubis . Quello che mi piace di Merb è che ha dimostrato che è possibile creare un framework web sicuro Ruby con tutte le stesse idee di Rails e utilizzare la maggior parte di l'ingranaggio di Rails allo stesso tempo. Tuttavia, lo scherzo è che prima di Merb i deficienti Rails Core urlavano e in basso non è possibile rendere sicuro il thread Rails . Tuttavia, Ezra ha dimostrato che erano tutti sbagliati semplicemente scrivendo un Rails migliore rispetto a Rails e tutto grazie a Mongrel essere così facile da hackerare e lavorare con.
e:
Ruby on Rails è diventato pieno di gente come Koz, con Koz il più anziano dei smarties wannabe. Koz è stato fortunato e ha iniettato la sua codifica shitty in un buon progetto, lo ha incasinato, e poi lo ha bloccato alla sicurezza come modo per ottenere più controllo . Ovviamente, in realtà, non è lo a conoscere il codice di sicurezza ed è per questo che il suo codice sembra avere molti bug (vai a controllare la merda della data . Indizio: mesi non hanno sempre 30 giorni).
E, bene, continua.
Quindi immagino di poter riassumere in questo modo: Rails smells bad.
Questo è palesemente soggettivo e polemico. Non c'è una vera risposta qui e tutto ciò che ne può derivare è qualcuno che dice "Sono d'accordo perché X!" e qualcun altro che dice "No" –
Anche così sono decisamente interessato a questo argomento - Sto cercando di decidere se compilare PHP, e poi ricostruirlo in seguito o sceglierne uno adesso. Le risposte finora mi stanno bene. – Ross
Forse dovresti riformulare la domanda come "Quali vantaggi ha Rails su PHP? (E viceversa)", dal momento che alcune delle differenze potrebbero essere molto più importanti per te rispetto ad altre. – Artelius