2010-04-19 13 views
8

Ho appena scoperto MacRuby/HotCocoa e mi piace molto il suono di quello che stanno facendo.MacRuby/HotCocoa potrebbe soppiantare la necessità di conoscere l'Objective-C?

Avevo sostanzialmente scontato la possibilità di fare applicazioni Cocoa GUI perché ho un'avversione per trascorrere del tempo nello sforzo & imparando ancora un altro linguaggio basato su C, Objective-C. Non sto dicendo che è male, ma non per me.

È il caso ora, o nel probabile futuro, che sarà possibile rendere le applicazioni della GUI di Cocoa di natura sostanziale e di prima classe solo con MacRuby/HotCocoa ignorando completamente Objective-C?

(Edit: Desktop Mac, non iPhone)

+1

Dalla pagina dell'autore MacRuby: "Sperimentazione MacRuby fornisce un modo conveniente per sperimentare Ruby 1.9 su Mac OS X (ad esempio, provare la nuova sintassi). Allo stesso tempo, MacRuby offre un modo conveniente per sperimentare con il Mac Ad esempio, macirb consente l'accesso interattivo alle librerie Ruby e Mac OS X. Così, ad esempio, un programmatore Cocoa potrebbe trovare MacRuby come un ambiente di prototipazione congeniale, anche se il prodotto finale deve essere scritto rigorosamente in Objective -C." In breve, l'autore non vede questa come la panacea che stai immaginando. –

risposta

5

Sarà estremamente difficile creare applicazioni di prima classe attraverso un livello di traduzione. È abbastanza difficile ottenere le prestazioni e il comportamento necessari in modo nativo. Sono impressionato dall'approccio di MacRuby, e sono particolarmente colpito dal fatto che siano in grado di gestire cose come Core Animation (un pezzo chiave di app Mac di prima classe) e Core Data (che è roba dura). Sono davvero impressionato dall'uso di Ruby più idiomatico piuttosto che dalla bruttezza di RubyCocoa. Ma ci sono dei motivi per cui Apple ha "deenfatizzato" (come lo hanno chiamato) i loro linguaggi multi-linguaggio in Java, Ruby, Python, ecc. È abbastanza difficile scrivere queste cose in una sola lingua. È abbastanza difficile farlo bene quando non stai attraversando un livello di traduzione semi-supportato. In pratica, devi ancora imparare la sintassi ObjC per gestire la documentazione e tutto il codice esistente. In pratica, devi ancora imparare i modelli ObjC per sviluppare app Mac decenti.

MacRuby è interessante. Anche come programmatore esperto di objc, potrei considerare HotCocoa per hackerare prototipi e provare interfacce. Ma non è il genere di cose che userei per costruire, come dici tu, "Applicazioni di Cocoa GUI di natura sostanziale e di prima classe."

Come sviluppatori, parte del nostro lavoro è avere un sacco di strumenti. Come un buon carpentiere ha diversi martelli, più barre di leva, set di unghie, diversi tipi di quadrati e una dozzina di altri strumenti, un programmatore dovrebbe essere comodo con una varietà di linguaggi, paradigmi di programmazione, piattaforme e ambienti. Dovrebbe quindi essere in grado di scegliere gli strumenti corretti per il lavoro e impiegarli efficacemente. Nel caso della programmazione Mac, gli strumenti corretti per il lavoro includono Xcode, IB, ObjC e Cocoa. Evitarli è come un falegname che evita di incorniciare un martello e un quadrato veloce. Sono solo parte del lavoro.

+1

È interessante per me notare che (con la lingua piantata saldamente sulla guancia), qualunque tempo sia salvato scrivendo un'applicazione in un linguaggio di livello molto alto, spesso si spende più tardi nel tentativo di superare le astrazioni che perdono in quel linguaggio di alto livello. Che si tratti del Global Interpreter Lock in Python o di (insert-achilles-heel-for-Ruby-qui) di Ruby. Non ne so abbastanza di Ruby, ma dubito che sia l'unico linguaggio dinamico (interpretato) di altissimo livello, senza limitazioni e aree in cui potrebbe migliorare. Spesso l'area più debole in tale applicazione è il binding alla GUI. –

+0

Rob, grazie per il tuo contributo qui. Ripensando alla domanda originale, dicendo "sostanziale e di prima classe" ha dato un'aspettativa troppo grande a quello che avrei fatto personalmente. "Aspetto e aspetto del Mac perfetto" invece, forse! – xyz

+1

Non sono sicuro che troverai i problemi di cui parli con MacRuby. Ruby è un ambiente ideale per lavorare con gli oggetti: cose come classi aperte e blocchi danno un tocco naturale alle loro controparti di cacao. Fai una richiesta HTTP con MacRuby e ti renderai conto di quanto sia fantastico. – arbales

-1

MacRuby è progetto prediletto di qualcuno. Se qualcuno mette insieme un compilatore che sputa i binari nativi dal codice Ruby, allora è una netta possibilità che un giorno possa guadagnare terreno. Se continuano a fare quello che stanno facendo adesso, allora no, rimarrà un prodotto di nicchia fino a quando qualcuno non si licenzierà o verrà licenziato e il suo lavoro sarà sepolto insieme alle associazioni Java Cocoa e WebObjects.

+1

MacRuby è supportato da Apple e ha già un compilatore. – mckeed

+2

@mckeed "Backed by Apple" potrebbe essere una dichiarazione forte. Apple ha sicuramente bloccato la punta in acqua in Leopard, ma da allora hanno sempre fatto marcia indietro. 10.6 ha tirato tutti i modelli di Ruby e MacRuby si comporta più come un progetto laterale tollerato che qualcosa che ha il pieno sostegno di Apple. È anche autorizzato sotto licenza GPL piuttosto che APSL. Perché dici che c'è un compilatore? MacRuby scarica tutti i tuoi file .rb in Risorse e li interpreta in fase di esecuzione. C'è un compilatore che conosci? –

+3

Non so quanto supporto ci sia per Apple, ma i crediti sul sito web dicono "progetto di Apple Inc." Non è ancora alla versione 1, quindi non puoi aspettarti che Apple la pubblicizzi. I modelli di rubini in XCode erano precedenti a MacRuby. Il compilatore è nuovo in 0.5: "Grazie a LLVM, MacRuby è in grado di trasformare il Ruby AST dal parser direttamente in un codice macchina ottimizzato, MacRuby supporta sia la compilazione JIT che AOT." (da http://www.macruby.org/blog/2009/10/07/macruby05b1.html) – mckeed

1

Ho trascorso un po 'di tempo su RubyCocoa, ma quello che mi ha fatto guardare in Obj-C era che alla fine tutta la documentazione di Cocoa e di altri framework era scritta nella sintassi Obj-C. In esso Obj-C non è un IMO di una lingua molto grande, e non dovrebbe richiedere troppo tempo per riprendersi, se si ha esperienza in qualche altro linguaggio basato su C e OOP. Ciò che è abbastanza grande è il telaio funziona però, cacao ecc. E almeno con rubyCocoa si dovrebbe ancora imparare i quadri. Oltre a questo, ho difficoltà a credere che un linguaggio di scripting come Ruby possa mai dare le stesse prestazioni di un linguaggio C compilato.

+2

rubyCocoa! = Macruby – ergosys

1

È possibile scrivere un'app Ruby utilizzando i framework Apple che assomigliano a un'app ObjC nativa.

Ma non credetemi, look here per esempi di tali app. Sembrano ed eseguono abbastanza nativi che non è possibile per un utente occasionale distinguere tra Ruby nativo e ObjC nativo.

+1

Hai colto alla testa quando hai distinto ciò che "un utente occasionale" noterà rispetto alla domanda di Frou di app Mac "di prima classe". Dieci applicazioni minori (la maggior parte delle quali sono stagnanti o morte) non dimostrano la capacità di un framework di fornire applicazioni importanti. ObjC è davvero il più basso degli ostacoli nel realizzare app Mac eccellenti. "Ottenere" l'esperienza Mac e il modo in cui le app devono funzionare e integrarsi è il vero ostacolo. È la differenza tra un'app che "sembra" come un'app Mac e una che * funge * da app Mac. –

+1

RubyCocoa non è MacRuby. –

0

Ehi, ci ho provato, e mi arrendo, perché dopo aver visto tutto è solo una sostituzione per ObjC, ObjC mi è sembrato improvvisamente un linguaggio fantastico. Imparo ObjC e mi piace.

13

"E 'l'obiettivo di MacRuby per consentire la creazione di Mac a tutti gli effetti OS X applicazioni che non sacrificano prestazioni, al fine di godere dei vantaggi di utilizzare Ruby." - README MacRuby

MacRuby non è un 'layer traduzione' come dice Rob. È Ruby sullo stesso sistema di oggetti che Cocoa sta usando. Puoi certamente creare applicazioni di "prima classe" con esso, e anche realizzare cose che sono scomode con Objective-C.

Fare attenzione a non confondere MacRuby con RubyCocoa. Apple non ha "tolto tutti i modelli" per MacRuby, perché non sono mai stati spediti per impostazione predefinita.

Inoltre, l'integrazione di LLVM con le piattaforme Apple cresce ad ogni rilascio. La prossima versione di XCode farà affidamento su LLVM per il completamento, il controllo e la compilazione di codice avanzati. Se Apple sta sottovalutando qualsiasi cosa, è il GCC.

Si potrebbe anche notare che MacRuby presenta limitazioni simili nella copertura dell'API come Objective-C: ad esempio, la creazione di app autenticate o l'accesso al portachiavi richiede classi wrapper per entrambe le lingue.

+0

È un obiettivo lodevole e spero che un giorno abbia successo. Puoi indicare tutto ciò che dimostra che esiste * oggi * in una forma che potrebbe fare ciò che l'OP ha richiesto? Stavamo discutendo di 0,5 alla volta. Anche in 0.6, vedo cose come "supporto sperimentale per il debug" e riscritture importanti nelle viscere. Sì, questo potrebbe un giorno fare tutto ciò che spera, ma la mia opinione è che * oggi * non è una lingua in cui scriverei app "di prima classe" per Mac. È impressionante; ma ha ancora una lunga strada da percorrere, e credo che giocherà sempre un lento recupero fino all'ObjC Cocoa. –

+1

Bene, innanzitutto: la domanda è nel condizionale. Non ha chiesto, "MacRuby ha soppiantato l'obiettivo-C", ma invece "Potrebbe ... nel probabile futuro". In secondo luogo, MacRuby fornisce già strumenti per il debug del codice, anche se non nel senso che penso tu intenda. E il punto non è "recuperare fino a ObjC + Cocoa", ma fornire un'alternativa ad esso. Infine, un'app di "prima classe" è definita da un'eccellente interfaccia utente e funzionalità, entrambe ottenibili con MacRuby, oggi. – arbales

+0

Si potrebbe anche guardare a questo: http://github.com/davebaldwin/Ruby-Sketch. È un esempio di una semplice app di grafica in MacRuby. Quindi, se consideri OmniGraffle, un'app di "prima classe", sembra piuttosto possibile. Detto questo, OmniGraffle non è eccezionale. – arbales

Problemi correlati