RubyCocoa - RubyCocoa
tento článek ne uvést žádný Zdroje.Květen 2010) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
RubyCocoa je Operační Systém Mac rámec který poskytuje most mezi Rubín a Cíl-C programovací jazyky umožňující uživateli manipulovat s Objective-C předměty od Ruby a naopak. Umožňuje napsat a Kakao aplikace úplně v Ruby a také psát aplikaci, která kombinuje Ruby a Objective-C kód. Volal projekt Apple MacRuby byl vyvíjen, aby nahradil RubyCocoa v roce 2008. Volal vlastní spin-off RubyMotion byl následně vydán v roce 2012 a je k dispozici pro iOS, macOS a Android.
Některé užitečné aplikace RubyCocoa jsou zkoumání funkcí objektu Cocoa pomocí irb interaktivně, prototypování aplikace Cocoa, psaní aplikace Cocoa, která kombinuje funkce Ruby a Objective-C a zabalení nativního macOS GUI pro Ruby skript.
RubyCocoa je svobodný software, vydané pod oběma Ruby licence a LGPL.
Dějiny
RubyCocoa byl založen v roce 2001 Hisakuni Fujimoto, když implementoval rozšiřující modul Ruby pro zabalení funkcí NSObject a NSClassFromString. Později to bylo integrováno s Project Builder (který se později stal Xcode V roce 2002 byl projekt zaregistrován SourceForge a vývojový tým začal růst.
V roce 2006 se k seznamu komisařů poprvé připojil vývojář z Jablko, Laurenta Sansonettiho, a poté se během roku uskutečnila prezentace RubyCocoa WWDC. Apple uvedl, že RubyCocoa bude zahrnut a podporován v Mac OS X v10.5 "Leopard".
V srpnu 2008 to Sansonetti potvrdil MacRuby "má nahradit RubyCocoa. " v budoucnu.
Jak funguje most?
RubyCocoa se někdy interpretuje jako sada vazeb na kakaové rámce, což je nepravdivé. RubyCocoa je skutečný most mezi programovacími jazyky Objective-C a Ruby.
Líný import třídy
RubyCocoa na požádání importuje třídy Objective-C do světa Ruby. Například při přístupu OSX :: NSTableView
vůbec poprvé ve vašem kódu RubyCocoa načte všechny potřebné informace týkající se této třídy z modulu runtime Objective-C a vytvoří třídu Ruby se stejným názvem, která bude fungovat jako proxy. Bude také importovat stejným způsobem všechny zděděné třídy.
Předávání zpráv
Jak již bylo řečeno, RubyCocoa vytváří speciální objekty proxy. Pokaždé, když odešlete zprávu Ruby do objektu proxy, pokusí se RubyCocoa předat ji do vložené instance Objective-C, a to tak, že přeloží název zprávy na selektor Objective-C a požádá běhové prostředí Objective-C o její předání.
Pokud je ze světa Objective-C vyvolána výjimka, RubyCocoa ji převede na výjimku Ruby a předá vám ji.
RubyCocoa používá libffi knihovna pro volání implementace metod Objective-C.
Automatické přepsání metody
RubyCocoa usnadňuje přepsání metody Objective-C od Ruby, ať už v podtřídě nebo přímo do třídy (jako byste to dělali v Objective-C pomocí kategorie).
Jakmile je vaše metoda vložena, RubyCocoa načte podpis existující metody Objective-C a vloží novou do runtime Objective-C, stejného podpisu, který ale nyní odkazuje na váš kód.
K dosažení tohoto cíle používá RubyCocoa libffi knihovna pro dynamické vytvoření uzávěru, který bude volat metodu Ruby, a pouze předá ukazatel na toto nové uzavření modulu runtime Objective-C.
Přístup k bitům C.
Vzhledem k povaze jazyka Objective-C můžete volně používat C z kódu Objective-C. Za účelem přemostění příslušných C částí rámce Objective-C, jako jsou C struktury, funkce, výčty, konstanty a další, RubyCocoa spoléhá na BridgeSupport projekt.
RubyCocoa bude za běhu interpretovat soubory BridgeSupport (velmi rychle libXML 2's xmlTextReader) a podle toho zpracovat jejich obsah. Bude například konstruovat třídy proxy Ruby pro struktury C a také vytvářet funkce.
Všimněte si, že nákladné operace, jako je lokalizace symbolů, se provádějí na vyžádání a samozřejmě pouze jednou.
Formátovat řetězce
RubyCocoa dokáže detekovat API, která používají formátovací řetězce, jako je NSLog nebo NSString.stringWithFormat, a vhodně převést argumenty proměnných na typy uvedené ve formátovacím řetězci.
Ukazatele funkcí
RubyCocoa vám umožňuje projít Ruby Proc
objekty jako argumenty ukazatele funkce. Poté použije libffi knihovna dynamicky vytvořit uzávěr a předat ji základní funkci / metodě.
Tvorba kakaových aplikací napsaných v Ruby
Instalace RubyCocoa také automaticky nainstaluje odpovídající Xcode šablony. To umožňuje vývojářům vybrat jako typ projektu Xcode „Cocoa-Ruby Application“ a Xcode pro ně vygeneruje všechny potřebné soubory.
Jak volat metody Objective-C z Ruby
Chcete-li vyvolat metodu Objective-C, nahradíte každé dvojtečky v názvu metody kromě posledního podtržítkem. Tedy například metoda instance NSWindow initWithContentRect: styleMask: backing: defer:
se stává initWithContentRect_styleMask_backing_defer
.
Všechny třídy a funkce kakaa patří OSX
modul, takže například kód Objective-C:
[[NSWindow alokace] initWithContentRect:rám styleMask:NSTitledWindowMask podpora:NSBackingStoreBuffered odložit:NE]
bude:
OSX::NSWindow.alokace.initWithContentRect_styleMask_backing_defer(rám, OSX::NSTitledWindowMask, OSX::NSBackingStoreBuffered, Nepravdivé)
Jak vidíte, toto snižuje čitelnost kódu tím, že vykreslení parametru Objective-C pojmenování zbytečné. Existuje tedy další pohodlný způsob zápisu volání metod - objc_send
metoda, která přijímá symboly Ruby jako názvy parametrů. Například předchozí kód lze také zapsat jako:
OSX::NSWindow.alokace.objc_send(: initWithContentRect, rám, : styleMask, OSX::NSTitledWindowMask, : podpora, OSX::NSBackingStoreBuffered, :odložit, Nepravdivé)
Výhody RubyCocoa
- Protože Ruby je interpretovaný jazyk, není nutné během vývoje často překompilovat aplikaci.
- Některé z bohatých funkcí Ruby, například vestavěné regulární výraz podpora, rychlejší psaní kódu a také RubyCocoa ideální nástroj pro prototypování.
Nevýhody
- Ignorování rychlosti tlumočníka Ruby, aplikace RubyCocoa budou vždy pomalejší než aplikace Objective-C / Cocoa kvůli přidané režii převodu objektu.
- Protože Ruby není bezpečný pro vlákna, není možné odeslat více nativních vláken pro spuštění kódu RubyCocoa. Emulovaná vlákna Ruby však lze použít.