
[Musica]
ciao a tutti, grazie per essere venuti e
si il mio nome è Dmitry generale, lavoro
come capo squadra degli strumenti di cotone
squadra nell’ufficio di Monaco di jetbrain
e oggi parlerò dell’uso
cotone per lo sviluppo multipiattaforma
progetti quindi prima di tutto proprio come un
un po ‘come solo per cominciare con quanti
di te non ne hai mai visto nessuno
codice di cotone mai ok così un po ‘di gente
beh, la cattiva notizia è che non lo farò
in realtà avere il tempo di fare un improprio
introduzione alla lingua ma in
per seguire il discorso non lo farai
ho bisogno di capirlo davvero bene, così io
non si riferiranno a corsi di formazione o alberi
caratteristiche penso che la distro sia abbastanza
chiaro quindi cos’è il cotone, quindi è moderno
linguaggio di programmazione su cui abbiamo iniziato a lavorare
il progetto quasi esattamente 70 anni fa
abbiamo rilasciato la prima versione in
Febbraio dell’anno scorso e lo è stato
ottenere una buona trazione come te
probabilmente sapete che il cotone è tipizzato staticamente
i tratti chiave che solitamente evidenziamo
quando parliamo di cotone è così
conciso sicuro e pragmatico significa che
usare il cotone ti permette di scrivere di meno
il codice usando cotone ti permette di liberarti
o evitare determinate classi di errori tali
come eccezioni di puntatore nullo ed è
pragmatica quindi nel senso che viene
da parte dell’industria non dal mondo accademico
stiamo cercando di risolvere problemi reali
sperimentato da persone reali e speriamo
che il risultato è accessibile e utilizzabile
in pratica e anche il cotone è
interoperabile quindi ad esempio a differenza di elm
questione di cui parlava il discorso precedente
non stiamo cercando di costruirci da soli
universo in cui tutto vive
secondo le nostre regole invece noi
cerca di concentrarti sul montaggio senza intoppi
il più possibile
su oggi tutti gli ecosistemi che il cotone
interagisce con così su Java è il
JVM nel browser è come JavaScript
un sistema su nativo è il grande insieme di
librerie native in modo da non dover
sbarazzarsi di tutti quegli strumenti
e tutti quelli
quando inizi a usare Kotlin, semplicemente
iniziare a scrivere tanto codice in cotone come
è necessario e mantenere il resto in e
usato tutta la ricchezza dell’ecosistema
stai vivendo così quando iniziamo il
cotone era puramente un linguaggio GVM ma
da allora abbiamo visto il potenziale di
sostenere altre piattaforme in cotone e
tutte le opportunità che abbiamo con
quella
quindi ora il cotone è multipiattaforma
gestito in modo JVM è il JVM è il primo
piattaforma che abbiamo iniziato con I’m not
ne parlerò molto oggi
perché c’è molto materiale
disponibile altrove così ho intenzione di
concentrarsi sugli altri argomenti, quindi JavaScript
condivisione del codice tra piattaforme e
contenuto nativo quindi con il
attuale set di strumenti che puoi effettivamente
hai effettivamente la possibilità di costruire
utilizzo di più livelli dell’applicazione
lo stesso nella stessa lingua, quindi lo usi
bara sul server con JVM e
le strutture del server jar utilizzano cotone
Android con loro sono come regolari
Android SDK e uso costante in
browser con causa in J, quindi iniziamo
la nostra discussione con Cotton J’s quando
usi un codice compilato nel codice
JavaScript questo processo funziona fondamentalmente
come una fonte normale da cui partire
installazione in modo simile a come dattiloscritto
lo fa e quante altre lingue
quello fa così il compilatore di cotone
prende preso solo nel codice sorgente
Cotton’s non può farlo
in grado di digerire bytecode o Java o Java
qualcosa del genere solo fonti di cotone
e genera codice sorgente JavaScript
fuori di loro ora, naturalmente, si desidera
avere accesso a tutte le librerie che
esistono sulle mascelle in JavaScript
ecosistema e anche tu vuoi accedere
li in un tipo modo sicuro in modo da per
lascia fare a quello che abbiamo effettivamente costruito a
strumento che prende le definizioni dei dattiloscritti
il tipo per cui tipo nave ha una struttura per
definizione dell’edificio per esterno
biblioteche e c’è una grande comunità
repository mantenuto di tale
definizioni chiamate sicuramente digitate noi
hanno costruito uno strumento che prende quelli
definizioni e produce costi e
dichiarazioni fuori di loro e tu puoi
collega quelle dichiarazioni nel tuo
programma in modo da poter accedere a quelli
biblioteche e finalmente una volta che hai il
Schermo Java
puoi usare come uno qualsiasi dei tradizionali
Strumenti JavaScript per farne uso
codice ad esempio puoi sempre usare
webpack per pacchettizzare il contenuto generato
codice insieme con le sue dipendenze in a
singolo pacchetto di file JavaScript o è possibile
usa qualsiasi altro strumento che preferisci
utilizzare così come il cotone è un supponente in
questo riguardo, quindi puoi usare qualunque cosa
qualunque catena di strumenti che si desidera utilizzare
quindi cosa fanno queste dichiarazioni esterne
sembra così essere così in fondo se vuoi
per accedere a un’API esterna dal cotone
Accidenti , scrivi qualcosa del genere così
questa è una definizione molto semplice di a
classe come la classe della finestra che ha a
posizione proprietà e ha un avviso
funzione o un metodo di caricamento quindi ci sono
non diverso non ci sono corpi metodo
in questa classe o in tutto questo il reale
le implementazioni sono fornite dal
browser e ma ci sono tipi e il
i tipi sono ciò che ti permette di accedere
quella definizione in cotone in tipi in a
digita in modo sicuro quindi con pieno supporto per
documentazione di completamento del codice come tipo
controllando tutte queste belle funzionalità
quelle lingue tipizzate staticamente ti danno
si e anche la dichiarazione della finestra
come è come ti comporti così è a
proprietà di primo livello che ti dà accesso
a questa istanza di questa finestra di classe
ora questo è un modo possibile per interagire
con il mondo JavaScript così in molti
casi che vuoi avere questo ma in
altri casi questo non funziona esattamente
per esempio potresti avere una API JSON che
esposto da alcuni da qualche server e tu
può ovviamente anche scrivere esterno
dichiarazioni che specificano come specificare
cosa questo cosa cosa è ciò che è
valore di ritorno di questa API e di come è
strutturato e così via, ma questo può essere
un po ‘macchinoso, quindi cosa puoi fare
invece è possibile fare affidamento sulla dinamica
tipo che è supportato dal cotone J’s
compilatore appena dichiari un
variabile di tipo dinamico questo fondamentalmente
si spegne tipo pedina di cotone così una volta
una volta che hai una tale variabile tu
puoi fare qualsiasi cosa con cui puoi accedere
qualsiasi proprietà a cui è possibile accedere
metodi restituiranno anche valori di
digita dinamico in modo che tu possa essere a catena
tali accessi e cotone saranno solo
traduci questo direttamente in JavaScript
come è
quindi il codice generato avrà appena
anche la stessa risposta di codice che
messaggi parentesi quadre 0 punto testo se
questo funziona sei molto mantenere questo
non funziona bene il compilatore non lo fa
la colpa non ha verificato nulla solo
assicurati di avere tutto a posto così
come si ottiene non ottenere alcun tempo di compilazione
garanzie di sicurezza quindi quando parliamo
sviluppo di moderne applicazioni web in
cotone che ovviamente vuoi usare moderno
quadri anche e probabilmente il più
ben noto uno dei più usati
i quadri ora è reagito e per
ti consente di costruire applicazioni reattive
usando cotone abbiamo costruito un set di
legature ufficiali per cotone così
fondamentalmente è una specie di qualcosa
cosa potrebbe fare lo strumento TS 2kt
generare per te, ma è come più
lucidato più curato e appena entrato
il generale funziona meglio e puoi usarlo
che puoi usare quello per costruire reagire
applicazioni che utilizzano cotone JS e da produrre
è più facile iniziare con quello che abbiamo
ha anche creato uno strumento CLI che genera
una tale domanda per te, così puoi
installare tre NPM e quindi essenzialmente
basta eseguire questo comando per generare
l’ applicazione e imposta tutto
su di esso imposta le dipendenze necessarie
crea un intelligente che puoi aprire
nell’IDE appena creato
debug nostra fonte mappe esso imposta
ricarica a caldo quindi praticamente tutto il
Dio è necessario essere produttivi
quando si lavora con una tale applicazione
e inoltre abbiamo anche creato un plugin per
Gradle che lascia che fornisce il
l’integrazione di ciò essenzialmente fornisce
un ponte nel mondo dei contenuti e
i ruoli JavaScript così puoi ancora
usa Gradle per o costruisci il tuo contenuto
progetto e in realtà questa è la build
sistema che devi usare se costruisci
progetti multi-piattaforma che utilizzano cotone e
il plug-in di fronting in cotone crea un
ponte tra quello e il JavaScript
ecosistema che significa che hai te
può avere dipendenze dalle librerie NPM
scaricherà automaticamente Nodin e
vm per te, così non ti serve
per inquinare il tuo computer con questo
javascript brutto se non ti piace
questo come non come faccio sarà solo fare tutto
di questa roba eseguirà il pacchetto Web per
ti lascerà correre
usando karma che è un test di JavaScript
quadro e supporta anche caldo
ricarica delle modifiche per essere altrettanto presto
è proprio quello che fanno alcuni cambiamenti in
l’editor lo farà automaticamente
ricompilare e ricaricare la finestra del browser
quindi questo è un breve sguardo a ciò che possiamo fare
per JavaScript ma in realtà solo
il targeting di JavaScript non è il
parte interessante di cotone quindi cosa io
ho detto fino ad ora è paragonabile a cosa
altre lingue come il dattiloscritto
consegnarti ma non è significativo
meglio così se vuoi solo sviluppare
puramente puramente basato sul browser
l’applicazione e il cugino sono una buona scelta
ma non è come la piena forza di
cosa può offrire la piena forza
viene fornito con la possibilità di condividere il codice
tra il front-end e back-end tua
così essenzialmente quando condividi il tuo codice
ottenere un prodotto che ha modelli di
più tipi in modo da avere il comune di
essenzialmente due tipi diversi così tu
avere un modulo comune che contiene codice
questo non è specifico per nessuna piattaforma
quella sarebbe la logica aziendale condivisa
della tua domanda e tu hai
moduli di piattaforma che funzionano su uno specifico
piattaforma quindi sul GBM o
javascript o potenzialmente nativo così
nativo non è ancora supportato dalla
sistema ma sarà supportato nel
prossimo futuro quindi un punto molto importante
qui è che noi non vogliamo avere questa
a destra una volta ovunque destra eseguito ovunque un
affare in modo da eseguire il codice in modo da non farlo
scrivi il tuo codice solo nella parte del commento
hai pieno x l’ iran solo il condiviso
logica aziendale come codice comune e per
le parti specifiche della piattaforma che usi
pieno vantaggio pieno vantaggio di ciascuno
piattaforma scrivendo una comunicazione scrivendo
implementazioni dedicate utilizzando il
piattaforma nativa API così non lo siamo
andando a fornire una grande facciata
che astrae tutto il
differenze di questo ma queste piattaforme
perché questo vorrebbe anche distruggere tutto
i vantaggi unici di ciascuna piattaforma
invece ti forniamo uno strumento
ti permette di scrivere facilmente la piattaforma
implementazioni specifiche e accedervi
dal codice comune e te lo dirò
come funziona esattamente questo
quindi cosa fa il processo di compilazione
lavoro per un tale progetto di mix così abbiamo
un po ‘di codice comune e abbiamo jb su
codice specifico e abbiamo JavaScript
codice specifico ora cosa facciamo quando noi
prova a compilare il codice comune
la risposta è che non possiamo davvero
compilalo da solo perché non c’è
come una vera destinazione ad esso non possiamo farlo
lo compila alla piattaforma JavaScript
Non sa nulla di classi Java che
non posso compilarlo in GS perché possiamo
non posso fare nulla con Jas sulla JVM
quindi per compilare un tale modello tu
prendilo devi combinarlo con a
implementazione della piattaforma specifica quindi se
prendi il codice comune insieme a a
Codice JVM è possibile compilare il risultato
combinazione a un gruppo di file di classe su
la JVM se prendi codice comune con
Parte specifica di JavaScript che puoi compilare
a un gruppo di file JavaScript e
allora come quelle combinazioni che puoi eseguire
li su ogni piattaforma di cui hai bisogno ora
puoi davvero fare riferimento alla piattaforma
dichiarazioni specifiche da codice comune
e come puoi fare che la risposta sia
Certo che puoi e il modo in cui lo fai
è che il codice comune può specificarlo
si aspetta che certe dichiarazioni siano
fornito dal dato da ciascuna piattaforma
che è supportato da questo modulo così dentro
questo caso lo sto dicendo nel mio comune
codice mi aspetto che ci sia una data
classe fornita dalla piattaforma e quelli
sono i membri che mi aspetto che abbia
quindi in questo caso mi sto aspettando
per avere questo metodo per l’intero anno e
c’è probabilmente un mucchio di altri
metodi per accedere ad altri componenti
della data e su ogni specifico
piattaforma I fornire un effettivo
implementazione quindi in questo caso così
questa è l’implementazione JVM ed è in
questa implementazione GBM ho costruito un
implementazione di questa classe basata su
la classe del calendario che fa parte del
Java JDK e questo è un JavaScript
implementazione e questo è completamente
diverso perché sul lettore Java attivo
JavaScript c’è una data class
fornito dal runtime del browser e I
posso effettivamente riferirmi come mio
implementazione quindi posso dire che il
la classe data reale sulla piattaforma Java è
esterno
è fornire è fornito dal
piattaforma e ho anche specificato sì e
dal modo in cui ha tutti quei metodi che
dovrebbero essere lì e il modo in cui il
partite del compilatore previste e attuali
le dichiarazioni sono essenzialmente qualificate
nomi in modo che si aspettino e reali
le dichiarazioni devono avere lo stesso
qualità lo stesso pacchetto o in altro
parole lo stesso nome qualificato così il
il codice comune prevede una classe con a
nome qualificato naturalmente e di dati
data di essere lì e se la piattaforma
modulo fornisce questa classe fornisce un
effettiva implementazione per esso e di
Ovviamente puoi anche scrivere codice comune
quello si riferisce a queste classi previste così
questa è solo la semplice funzione di a
modulo comune che accede solo a questi
data class e fa un nome logico a
controllare due giorni sono lo stesso giorno ora
quindi questo si aspetta e lo fa davvero
sembra un po ‘come le interfacce ma non
esattamente così perché siamo venuti con il nostro
cosa proprio per questo e perché non abbiamo
basta usare le interfacce la risposta a questo
questo meccanismo è atteso e attuale
le dichiarazioni sono in realtà è molto
più flessibile quindi le interfacce sono
essenzialmente limitato ai membri della classe
quindi è necessario in qualche modo ottenere il
istanza di una classe in modo che tu
bisogno di avere una fabbrica per
ottenere l’istanza della fabbrica in
la tua iniezione di dipendenza e questo diventa
complicato abbastanza rapidamente con il nostro
meccanismo non esiste tale restrizione
quindi puoi sostanzialmente dire che ti aspetti
una lezione e ci si aspetta anche in questo
classe per avere un costruttore e una volta
fai così puoi semplicemente crearne uno nuovo
istanza di una data dal codice comune
senza preoccuparsi con qualsiasi fabbriche eventuali
iniezione di dipendenza basta andare avanti e
crea come nuovo un’istanza e anche
puoi aspettarti funzioni di alto livello o
funzioni di estensione per essere lì
quindi a Causton non siamo davvero entusiasti
sul confezionare tutto in classi noi
usa molto le funzioni di alto livello e noi
usa anche le funzioni di estensione molto
che permettono di definire il proprio
metodi su classi definite
da qualche altra parte e così questo multi
meccanismo di progetto della piattaforma che integra
molto bene con tutti quelli
caratteristiche così può essere una dichiarazione attesa
qualsiasi cosa possa essere una classe può essere un
interfaccia in realtà che non è molto
utile ma tu
fallo per qualche motivo può essere un
funzione di primo livello o può essere un
funzione di estensione e un altro
vantaggio che questo ci dà è questo
ci dà la possibilità di riutilizzare esistenti
Implementazioni Java molto facilmente così per
esempio come guardare questo test
annotazione quindi ci aspettiamo quindi c’è questo
test di classe di annotazione ci aspettiamo che sia
fornito dalla piattaforma e sul GBM
ci capita di avere un’annotazione che ha
esattamente lo stesso nome esattamente lo stesso
semantica ma vive solo in a
pacchetto diverso in modo che possiamo semplicemente dire
che l’effettiva attuazione della
prova denominata test dell’annotazione del test
sulla JVM è stato ordinato di aver bisogno del test
annotazione che non devi
reimplementare tutto ciò che non è necessario
ripeti tutto quello che hai appena detto ok così il
effettiva attuazione di questo previsto
tipo è questo in realtà la classe reale
e anche questo non funzionerebbe
interfacce perché non c’è modo in cui noi
può fare una classe esistente fornendola
per venire da una libreria di terze parti
implementare alcune interfacce che abbiamo
definito questo semplicemente non è supportato così
come una volta questo è un altro modo in cui
l’aspettativa del meccanismo attuale è di più
potente delle interfacce quindi come stai
costruisci questa cosa così come ho detto
supportato questo è supportato solo utilizzando
Gradle e abbiamo plugin speciali che
devi collegarti a un modulo comune
e in moduli specifici della piattaforma e
anche in un modulo comune è possibile
dipende da dove puoi dipendere dal comune
librerie perché sarebbe proprio no
molto utile se dovessi scrivere tutto questo
codice da zero e o semplicemente fornire
finiture previste per tutti gli API che
volevi usarlo, certo che ci sono
librerie comuni e le supportiamo e
come questo è per esempio come specifichi
dipendenza dallo standard del cotone
più leggero nella versione comune di
libreria standard di cotone sulla piattaforma
per il modulo di piattaforma fai molto
cosa simile quindi c’è un separato
plugin per compilare una piattaforma specifica
parte e tu ovviamente puoi specificare come
qualsiasi dipendenza come su Java
librerie o in comune o è possibile
specificarlo dipende dalle librerie Java e
ci aspettiamo anche questo speciale
dipendenza e questo è come il link
tra un modulo comune e una piattaforma
viene creata una parte specifica
quindi per ogni modulo comune come tutto il
moduli di piattaforma che ne implementano uno
fornire l’ effettiva implementazione per questo
le riparazioni previste devono avere questo
previsto dalla dipendenza nella compilazione o
Gradle, ma come possiamo effettivamente compilare
la biblioteca comune, così ho detto che
come quando si compila una virgola in
applicazione che non puoi semplicemente costruire a
codice comune di per sé perché non esiste
come nessun codice, nessun modo per rappresentare il
codice per esso ma per una biblioteca che vogliamo
avere qualche tipo di comune
rappresentazione quindi cosa facciamo il
la risposta è quella che quando compiliamo a
modulo comune che fa parte di a
libreria che produciamo questi metadati
file che sono essenzialmente sterilizzati
formato delle dichiarazioni disponibili in
la libreria quindi non ne contiene
codice di implementazione in qualsiasi formato tu
basta specificare fondamentalmente le firme di
tutto ciò che è disponibile nel
libreria e poi quando si compila il
stessa libreria per una piattaforma specifica noi
produrre implementazioni specifiche nel
formati normali come questo sarebbero un barattolo
file per Java to JavaScript non possiamo
produce anche file jar che contengono
JavaScript file codice sorgente JavaScript
e metadati aggiuntivi che consentono
cugino compilatore per dare un senso a loro così
praticamente sì ogni volta che costruisci un
libreria comune produce più
artefatti quindi c’è un comune
artefatto di cui fai riferimento da a
modulo comune e ci sono la piattaforma
artefatti specifici a cui fai riferimento
da ogni piattaforma quindi quali sono le librerie
c’è in realtà diverso dallo standard
biblioteca e cosa funzionale cosa
funzionalità puoi contare sul tuo multi
codice della piattaforma quindi sì
[Musica]
quindi la prima cosa è ovviamente la
biblioteca standard di cotone quindi cosa fa
contenerlo contiene come il più basilare
strutture di cui hai bisogno in ogni in
ogni progetto quindi ha le stringhe che ha
collezioni ha come utilità elevata
ordina funzioni come la larghezza e applicala
supporto ha una gerarchia di eccezioni
che Mesa Kaleem rispecchia la gerarchia
di eccezioni definite in un JDK
essenzialmente ti dà l’essenziale
strumenti senza i quali non si può davvero
costruire molto in cotone, ma è così
tutti sanno se dove c’è, ovviamente, molti
altre librerie che sono disponibili come
comune una volta così potresti aver già
indovinato che per il codice comune noi
fornire anche la possibilità di eseguire test
e questo è fornito dallo speciale
libreria test di cotone e sembra
quasi esattamente come unità g perché come
hai come ti ho mostrato il reale
implementazione di tutte queste annotazioni
è fornito da g-unit quando corri su a
GVM e su JavaScript a fine o
nativo abbiamo implementazioni personalizzate di
Certo che in sostanza non c’è niente
immagino qui ci sono annotazioni lì
sono determinati metodi e quindi puoi semplicemente
in pratica scrivi test per il tuo comune
codice ed è possibile eseguire tali test sotto
la JVM per assicurarti che il tuo codice funzioni
correttamente sulla JVM ed è possibile eseguire
loro sotto JavaScript per assicurarsi che
il tuo codice funziona correttamente in JavaScript I
ti mostrerò più avanti nella demo come questo
guarda in pratica un’altra libreria che
è disponibile come una libreria comune
cotone X dot HTML e cosa ti permette
per farlo ti permette di costruire pagine HTML
usando un cotone DSL così invece di scrivere
solo tag e attributi e contenuti
puoi usare direttamente la sintassi HTML
usare metodi fortemente tipizzati per il cotone
questo e naturalmente uno dei vantaggi
di questo è che puoi migliorare
completamento del codice forse puoi prenderti
ottenere il controllo del tempo di compilazione per essere sicuro
che ottieni i tuoi nomi di tag simili
correttamente ma in realtà non è quello
significativo il motivo principale per cui questo è
una cosa buona è un’altra cosa buona
la ragione è che puoi farlo molto facilmente
refactoring questo codice e si può molto
crea facilmente astrazioni
quindi non hai bisogno di inventare la fantasia
meccanismi nella tua lingua dei modelli
fare condizioni e cicli e include
e macro e sostituzioni e tutti
quello perché il cotone fornisce già tutto
queste caratteristiche ha cicli che ha
condizioni ha classi che puoi
ereditare da esso ha funzioni che tu
può chiamare con valori di parametro predefiniti
e in questo caso così tra questi due
diapositive che ho appena estratto
funzionalità nel metodo questo è un
la cosa molto naturale da fare può essere fatta
piace molto facilmente e facendolo tu
può facilmente comporre parti di
modelli in un modo molto manutenibile
che è alquanto migliore di quello che puoi fare
con modelli regolari simili e perché
questa è una libreria comune che puoi usare
questo sia sul client che sul
server in modo da poter se in effetti è possibile
fai il rendering isomorfo così puoi
Rendi la stessa interfaccia utente della tua applicazione
sia sul server che sul client e
il progetto demo che troverò in pochi
i minuti mostreranno esattamente come funziona
in un mi piace in un’applicazione in esecuzione ma
prima di arrivare a quello voglio menzionare
un’altra libreria in cui è catturato
Serializzazione Xcode quindi se avete
codice condiviso se hai condiviso come JD
classi di modelli che si desidera utilizzare entrambi
sul client e sul server quindi di
Ovviamente vuoi passare istanze del
classi tra il cliente e il
server in modo da poter esporre il file
resto api che include quelle classi in
JSON e accesso al resto api da
il tuo browser in modo che possa farlo
quelle lezioni e sradicare qualcosa
con loro sul browser e sul cotone
punto cotone X punto 0 Zhejiang libreria
ti fornisce esattamente quello ed è
in realtà molto semplice da usare così nel
i casi più semplici è semplice come
mettendo l’aggiunta di annotazione serializzabile
su tutte le classi che vuoi passare
tra il server e il client
e la biblioteca si prende cura di tutto il
resto la libreria è effettivamente implementata
la libreria include un plug-in per
Compilatore Kotton quindi non si affida
riflessione per capire come
guarda quali sono i campi in ogni classe e
come li serializzi effettivamente e
in questo modo offre molto meglio
prestazioni e questo in realtà lascia il
libreria eseguita su JavaScript dove noi
al momento non ho il pieno supporto per
riflessione
per il formato dei dati per supportare decente esso
supporti creati se vuoi
qualcosa di binario e supporta
qualcos’altro e puoi anche estenderlo
ovviamente per supportare i tuoi dati
formati di serializzazione e costruzione a
una più vasta gamma di librerie comuni è una
delle principali aree di interesse del kasnian
squadra in questo momento così noi vogliamo avere un po ‘
modi cross-platform da fare i oh che voglio
per incrociarsi vuoi che tu scriva un GTP
clienti e un modo multipiattaforma e
anche come socket networking come web
prese nei socket regolari del browser
sul client vogliamo avere vogliamo
avere una vera libreria comune per date e
non è come se la cura fosse iniziata
mostrando nella mia demo e ovviamente molto
di più e ci aspettiamo anche che la comunità a
costruisci molte altre librerie comuni per
i compiti che sono importanti per loro così
con quello detto procedere a una demo così
prima di tutto fammi eseguire l’applicazione
non sarà molto elegante ma di cosa si tratta
in realtà è come fa la cosa
quello che fa è in realtà molto di più
interessante di quello che fa esattamente così
Io corro questa applicazione vuole
avviarlo una sorta di server e
lo vedi così fondamentalmente solo rendering
alcuni messaggi casuali quindi non c’è
molto valore in questo specifico contenuto
mostrato lì, ma la parte interessante è
cosa vediamo se si preme view source
quindi fondamentalmente vedi qui che questo ha
solo cinque messaggi quindi i primi cinque
i messaggi che vedi nella pagina erano
reso dal server uno viene inviato il
pagina e il resto dei messaggi erano
reso sul client da JavaScript
codice e ora diamo un’occhiata al
l’implementazione di questo quindi passerò
pensare all’energia indietro e vedremo
il progetto così vedrai che questo
progetto contiene un sacco di moduli così
c’è questo modulo comune chiamato
condiviso che ha il piatto che ha
anche le parti specifiche del platino GS e
la parte specifica della JVM e ci sono anche
moduli separati che contengono il
back-end specifico e front-end
codice specifico, quindi se guardiamo la build
di Gradle per il modulo comune che tu
vedere che ha una dipendenza da esso
questo comune
Plugin Gradle
e anche il riferimento è un mucchio di
librerie comuni che sono fondamentalmente le
quelli che ho appena menzionato così là
una libreria standard hanno un XHTML
serializzazione e cotone da testare e se
guardi le bollette o maggiore per a
modulo di piattaforma quindi ha anche come
la roba che ti aspetti da questo Gradle
plug applicato il bilancio dipende
Le librerie specifiche di JVM di Angela
inclusa un’unità g che, ovviamente, è la
Libreria Java e questo previsto da
dipendenze che lo collega al condiviso
progetto quindi quale codice sarà in realtà
avendo questo progetto così prima di tutto noi
ho qui questa classe di date che io
stava mostrando nelle mie diapositive quindi è così
questo dovrebbe essere fornita dal
piattaforma dovrebbe avere un
costruzione si prevede di avere a
molti metodi e ci sono anche a
mazzo di funzioni di primo livello attese
come analizzare e convertire i giorni in
stringhe e ha due effettivi
implementazioni una per la JVM e una
per JavaScript e questo è praticamente tutto
le cose che ho che ti ho mostrato
sulle diapositive così il reale
viene fornita l’implementazione per la JVM
è implementato utilizzando punto dot util Java
calendario godetevi la semplice data del punto del testo
formato e quello per Java Script è
implementato in cima alla classe data
fornito dal browser in modo che il prossimo
cosa che mostrerò è questa
classe di messaggi quindi questo è essenzialmente il
modello di dati del nostro sistema quindi questo è un
esempio molto banale quindi il modello di dati
è così semplice come può essere così ha appena
un autore di testi e data e ancora una volta
questo è codice comune e anche nel
codice comune ho la funzione che sono
utilizzando per serializzare e deserializzare la data
casi come le istanze messaggio in modo
Ho questo a Jason e da Jason
metodi e usano la classe jason
dal punto X del punto di Cotten
libreria di serializzazione per
essenzialmente per convertire istanze in
stringhe
e per analizzarli dagli archi e io sono
anche registrando davvero personalizzato
serializzatore per la data class perché
il framework di serializzazione non funziona
tutto ciò di cui non sa nulla
date quindi mi sto solo specificando come
Voglio che siano rappresentati in JSON
e l’ultimo padre
Voglio mostrare qui è questo questo è
come effettivamente rendiamo i messaggi in HTML
quindi utilizza il cotone X dot HTML
libreria e sto usando questo DSL così è
molto semplice sono pronto sto creando un div
Sto mettendo su accodando il testo del
messaggio così questo Plus questo divertente plus
carattere significa essenzialmente accodare a
l’output è probabilmente sovraccarico unario
più operatore e sto creando un corsivo
tag che contiene anche un altro
contenuto , in questo caso, sto facendo riferimento
ancora una volta sono un riferimento un comune
funzione che ha più aspettative
implementazioni e se trovo usi
su quello vedrò che questa funzione è
usato sia dal server che dal
client in modo sul server quando ho appena può
non solo renderò la pagina iniziale solo
genera cinque messaggi casuali e rendering
come parte della pagina HTML e sul
client Sto invocando il resto dell’API per ottenere
alcuni altri messaggi che ho deserializzato il
risposta e li aggiungo al Dom così
questo è ancora una volta questo è isomorfo
rendering quindi sto usando esattamente lo stesso
codice sul server e sul client
se avessi un’applicazione più grande potrei
renderizza l’intera interfaccia utente della mia applicazione
sia sul server sia sul client
usando esattamente lo stesso codice per una coppia
altre cose che volevo mostrare così
Naturalmente l’idea fornisce un sacco di
assistenza per affrontare questa aspettativa
cose reali, ad esempio se creo
e si aspettano di funzionare i punti salienti dell’ID
che non ne ho fornito nessuno
implementazioni reali e utile
mi suggerisce di crearne un po ‘sulla JVM
Farò il dot out solo per fare
certo che tempo sulla JVM perché tu
Posso solo fare println director su cotone
e questo funziona su qualsiasi piattaforma e via
il JavaScript
Ho intenzione di fare il punto log della console e di
Ovviamente il refactoring è a cura di
anche questo così posso rinominare anche questo
Posso rinominare questo aggiornerà il
implementazioni effettive posso aggiungere a
parametro ad esso utilizzando la modifica
firma refactoring e il reale
le implementazioni saranno state aggiornate
anche così ora hanno entrambi la corda
parametro Y e un’altra cosa che io
voleva mostrare sta eseguendo test per il
codice comune quindi anche qui in questo condiviso
modulo ancora una volta questo è il codice comune I
avere questa classe di test data e avete
visto questo sulla dimensione di fondamentalmente così questo
sta usando il quadro di prova dei punti di Scozia
e se faccio clic destro su questo se seleziono
l’opzione di esecuzione nell’ID che otterrò
in realtà due possibilità su come posso correre
questo posso farlo funzionare come una moka
test o posso eseguirlo come test dell’unità g così
proviamo prima moka così come puoi vedere
ora ha iniziato a prendere nota per me e
ha iniziato questo più codice test di Josue
quadro e ha fatto un sacco di JavaScript
è dura e nel risultato ottengo a
test di successo ora lasciami cancellare questo
eseguo la configurazione che sfortunatamente ho
per fare questo per il momento a causa di
problemi e ora ho intenzione di eseguire questo
di nuovo, ma esegui di nuovo, esegui di nuovo questo
e gira sulla stessa unità g
così carino, giusto
va bene così che i progetti multipiattaforma
fondamentalmente è così che sei tu
può fare per condividere il tuo codice e il tuo
business logic tra JavaScript e
la JVM e un’altra cosa e di
Certo se hai guardato la foto che
Stavo mostrando pre che ho mostrato
precedentemente con JavaScript JVM e
Android questo è, naturalmente, non tutto il
lacrime di un’applicazione che potresti
voglio costruire c’è un altro
che si chiama iOS e le grandi notizie
è come quando abbiamo annunciato molto
recentemente così abbiamo fatto il
annuncio iniziale su cotone con 2
settimane fa a San Francisco attraverso il
nativo ora supporta lo sviluppo per iOS
pure e così il modo in cui funziona è quello
abbiamo effettivamente costruito un LLVM basato
catena di strumenti che prende il codice del cotone e
produce binari nativi in questo modo
quindi per creare l’app per iOS
che hai ancora bisogno di avere Xcode
installato che si prende cura di tutto il
firma degli imballaggi e tutto il funky
cose che devi fare per ottenere rapidamente
all’App Store ma almeno per il
processo di compilazione iniziale che stiamo usando
fondamentalmente la stessa catena di strumenti che Apple
così produciamo pienamente un nativo
normale applicazione iOS no GC no JIT no
Dinah no JVM al suo interno quindi in pratica
una normale applicazione nativa che è
la giustizia sembra esattamente uguale a quella
puoi costruire con Swift e, naturalmente
in questa applicazione hai tutti accesso
alle librerie disponibili nel
piattaforma in modo da poter accedere al core
le librerie scritte in ogg-c puoi farlo
puoi accedere alle normali librerie C che puoi
accedi alle librerie di cotone così semplicemente
tutto ciò che ti serve
è disponibile per te e il modo in cui questo
funziona è che abbiamo costruito uno speciale
lo strumento che genera ha ottenuto i metadati
File di intestazione C in modo sostanzialmente quello che tu
fai è alimentare i file di intestazione per il tuo
la biblioteca a questo è basata sul
front-end sceneline quindi è proprio come
deve essere reale, quindi non regolare
espressioni non come animali da compagnia, non solo sfocate
animale domestico immagini come i veri
supporta tutti i tipi di mare come in
compresi quelli complicati come
richiami alle funzioni che devi
passare fondamentalmente alla funzione AC o alle strutture
tutto ciò di cui hai bisogno
supporta i tipi di Objective C perché
questo è quello che ti serve per l’obiettivo C
Interop e sputa un file di metadati
con cotone fondamentalmente che cotone
deve essere in grado di chiamare queste funzioni
per sapere come chiamare queste funzioni da
codice di cotone e utilizzando questi due noi
essenzialmente generare intestazioni per tutti
le librerie della piattaforma quindi per esempio
questo è ciò che le dipendenze di
la nostra app demo ha un aspetto simile a quello che vedi
tutti i normali framework iOS sono
ci sono i dati fondamentali dell’app kit
essenzialmente tutto ciò che sono
frame obiettivo-c e hai pieno
accesso a loro da codice costante e
questo è solo in un esempio di codice che mostra
come appare un asse del genere, quindi questo è un
parte del codice dalla nostra app demo che
mostra il centro del gioco su un iPhone così
ancora una volta non è necessario essere in grado di
capisci esattamente cosa sta succedendo qui
oh non lo capisco da solo
ma la cosa fondamentale è che si ha il pieno
accesso alle API della piattaforma è scritto in
obiettivo-c, quindi che dire della memoria
gestione questo è come uno dei più
domande comuni che riceviamo quando parliamo
su questa roba così per questo tempo così io
rispondere a questo è molto preliminare
quindi è ancora come la versione 0.4 e a
molte cose cambieranno prima
la versione finale e uno di loro è il
gestione della memoria quindi per ora abbiamo a
conteggio di riferimento e collettore di cicli
il conteggio dei riferimenti funziona piuttosto
in modo efficiente perché non supportiamo
memoria condivisa tra thread così possiamo
non dobbiamo preoccuparci di atomicamente
l’aggiornamento dei contatori di riferimento lo fa proprio
è come non c’è contesa di memoria
coinvolto quando lo facciamo, ma ancora una volta
forse finiremo con il tracciamento GC
forse finiremo con qualcosa
diverso forse finiremo con
diverse soluzioni su diversi
piattaforme questo è tutto ancora
progettato e, naturalmente, Casa nativo è
non solo su iOS, quindi supportiamo noi
supporto altrettanto bene Linux e Windows
e Mac e se sei stato e
che gli altri ragazzi mi dispiace aver dimenticato il
nome discorsi
sì sì e riposare poi Andreas n’è parlato
prima di oggi su webassembly che abbiamo
appena annunciato il cotone può essere
compilato anche in webassembly e in
il futuro che esploreremo
piattaforme incorporate e fornire a
completa la catena di strumenti per lo sviluppo
applicazioni incorporate che utilizzano cotone
cotone nativo che già supportiamo come
alcune parti sono necessarie per questo, quindi supportiamo
come le cene corridore mappe per esempio, ma
c’è molto più lavoro da fare prima di noi
arrivare a una soluzione completa come per il
utensili per cotone nativo che abbiamo
ha recentemente annunciato il plugin per mare
leone che è il nostro ID per c e c ++ it
ha inviato è essenzialmente un personalizzato
versione del plug-in regolare cotone quindi
supporta tutte le funzionalità come
ispezioni codice refactoring tutti
questo è lì e il suo supporto piace
debugger specifico della piattaforma e il
prova di piattaforma specifica e io no
avere tempo per un pulsante demo completo così
Ti mostrerò solo un paio di
schermate quindi questo è il codice nativo sotto
un debugger vedi che la chiamata ti impila
vedi le variabili puoi vedere anche il
valori variabili direttamente nel debugger
come anche un normale Nintendo G e sotto
il cappuccio è alimentato da ll DB così tu
può anche usare molto EB command line se
ti piace che questo funzioni anche per il comune
codice di coordinamento e questo è solo il
risultati dei test runner in modo da mostrare il
risultato dell’esecuzione di alcuni test nativi
non lo stesso contenuto o framework di test
come mostrerò prima, così è
quello che volevo parlarne su D
quindi per riassumere il nostro obiettivo è quello di consentire
Va bene tutte le parti del tuo
applicazione nella stessa lingua Android
iOS back e front end se non altro
la piattaforma verrà supportata
anche
questo praticamente tutto ciò che vogliamo essere noi
voglio che il cugino sia davvero disponibile
ovunque e con pieno accesso a tutti
i migliori che ogni piattaforma deve
offerta così piattaforma API specifica è
applicazione specifica per piattaforma
caratteristiche della struttura che avremo pieno
accesso ad esso e questo significa che lo facciamo
Non voglio non astrarre il
differenze tra ogni piattaforma tu
avrà ancora accesso all’API completa
quale piattaforma quando si esegue questo e il
e il codice condiviso sarà solo il
logica di business della vostra applicazione che
non dipende intrinsecamente dal
piattaforma e abbiamo già rilasciato
la soluzione per l’utilizzo del codice per
tra JVM e JavaScript e
nativo si collegherà allo stesso sistema
presto quindi tutto questo è molto attivo
ha funzionato quindi sto solo parlando del
stato delle cose come sono oggi così se
vuoi saperne di più sulla tosse
il sito ufficiale è preso in quello
linea attraverso il nome dot org c’è a
blog in cui pubblichiamo molti dei nostri
annunci e parla del nuovo
cose interessanti che stiamo costruendo abbiamo
un gioco con una comunità molto amichevole
quindi puoi andare a fare domande lì
e le persone del team ci saranno
per rispondere a te e c’è anche un libro
scritto da me e il mio collega che
fondamentalmente ti dà una presentazione in
un corso nel linguaggio del cotone che fa
non parlare di nessuna di queste cose perché
questo è stato tutto sviluppato dopo il libro
è venuto fuori, ma solo come modi
iniziare con il cotone è solo un
ottimo modo per conoscere le basi
quindi grazie e arriviamo alla procedura
domande
[Applausi]
[Musica]
sì grazie mille
abbiamo circa 10 minuti e abbiamo ottenuto un
molte domande quindi iniziamo con a
molto semplice
cosa significa la Scozia per il cotone?
un’isola vicino a st. Pietroburgo dove il
La città di Kronstadt si trova e così abbiamo solo
ho visto molte lingue che prendono il nome da isole
come Java e Ceylon e abbiamo deciso che noi
deciso che va bene avremo un non un
isola nostra e quindi perché non nominare
la lingua dopo di essa e Stockland come
un’isola sì
puoi usare tipi dinamici nel comune
codice no non è possibile utilizzare i tipi dinamici in
il codice comune questo è solo un
Funzionalità JavaScript come è
teoricamente possibile sostenerlo ma
non abbiamo abbastanza casi d’uso per
quello potrebbe
Il GS di Coughlin può essere usato per scrivere
codice JavaScript lato server su cui viene eseguito
no GS sì, puoi usare un JS di cotone per correre
scrivere codice che gira su un nodo.js ma se
stai scrivendo in cotone di qualsiasi peso
allora potresti anche usare un vero e proprio
runtime che è un junior lo fa
supporto Maven invece di Gradle
grazie menzionare no, non ne sono sicuro
il cotone ha l’ intero supporto esperto
sicuramente specificamente il multi
i progetti di piattaforma sono solo su Gradle per
ora ma mi sosterremo anche più tardi come
bene quindi non c’è per favore
nessuna grande difficoltà solo qualcosa
non abbiamo ancora fatto bene allora un po ‘
più lunga domanda il tuo ciao vai a sopportare
esempio dà un comportamento diverso tra
JVM e Jas diversi output di stampa come
come facciamo a garantirlo?
implementazioni di una libreria comune
quindi rimaniamo identici , scriviamo
test di estensione per quello sì eccellente
avventura se vuoi essere qui per essere
identico allora sì scrivi i test in
in molti casi in realtà non vuoi il
comportamento per essere identico lo vuoi
essere appropriato per la piattaforma che tu
stanno correndo ma ancora il test comune
la struttura esiste esattamente in modo che tu possa
fare esattamente quel test giusto verificando il
conformità di essere due diversi
implementazioni
quindi qualcosa sul tema iOS bene
prima di tutto una domanda che ho avuto in
bada che stai solo parlando
Obiettivo-c
per quanto riguarda le librerie Swift noi di questo
tempo non supportiamo ancora Swift Interop
stiamo lavorando su che sarà come
supportato in futuro ma non lo è
lì in questo momento e poi il
la domanda qui sarebbe stata possibile
scrivere una biblioteca a Kotlin che potrebbe
essere usato da Swift si lo è anche
qualcosa su cui stiamo lavorando bene
ora va bene e lo stesso più o meno il
stessa domanda se ce ne sono
piani per la compatibilità della libreria C ++ con
Scozia nativo io così lontano come me
capisco che ci sono alcuni ABI
differenze quindi non puoi chiamare direttamente
una libreria di cotone dal C ++ ma penso
che questo è qualcosa che può essere
raddrizzato più tardi quindi non c’è
principale il motivo principale per cui questo
Non è possibile non importate questo è
qualcosa semplicemente non ancora fatto, quindi questo è
ancora una volta questo è tutto molto
anteprima e attivamente sviluppato sì
che porterebbe alla prossima domanda
è già una storia molto forte ma
quando ti aspetteresti il primo vero
applicazioni che sono sviluppate e
dall’altra parte come hai mostrato a yeah
iniziare a iniziare o sviluppare questo è un
davvero bella domanda mi aspetterei come
Non lo so all’inizio del prossimo anno, forse lì
è ancora un bel po ‘di pezzi mancanti questo
è un’esperienza molto approssimativa come se fosse
prendi il diario e non lo faccio
qualsiasi demo perché questo è solo
difficile trovare il sentiero stretto dove
tutto funziona così ma ancora una volta
questo migliorerà molto rapidamente a posto la
altre domande che penso siano state
risposto durante il discorso qualsiasi domanda
dal pubblico in questo momento appena alzare
la tua mano vengo da te oh è vero
qualsiasi dipendenza dalla versione in cotone è
è basato su cotone 1.2 o giù di lì
roba multi-piattaforma è disponibile in
cotone 1.2 il tipo di roba nativa di
vive su se stesso quindi ha il suo potere
nativo ha il suo ciclo di rilascio è
non è ancora collegato al principale è come
tipo di un progetto separato ma come
cotone it cotone nativo 0.4 include
cotone in 1,2 in modo da poter avere tutto il
stesse caratteristiche ce ne sono praticamente altre
domande sarò intorno al
ricezione degli espositori in modo da poter trovare
io e chattare con me posso chiedere solo
parlare di tutto ciò che riguarda i costi o
JetBrains si riferisce se tu solo se lo sei
curioso di iniziare stiamo facendo oh I
ne avrei avuto uno che ho appena sentito
la roba nativa del cotone è supportata in
leone marino
Yep sarà anche possibile usarlo
nella Ultimate Edition forse così questo noi
ha avuto un sacco di discussioni interne su
che non c’è ancora una decisione definitiva sì
Sarebbe bello Sì, va bene grazie mille
[Applausi]
ciao a tutti, grazie per essere venuti e
si il mio nome è Dmitry generale, lavoro
come capo squadra degli strumenti di cotone
squadra nell’ufficio di Monaco di jetbrain
e oggi parlerò dell’uso
cotone per lo sviluppo multipiattaforma
progetti quindi prima di tutto proprio come un
un po ‘come solo per cominciare con quanti
di te non ne hai mai visto nessuno
codice di cotone mai ok così un po ‘di gente
beh, la cattiva notizia è che non lo farò
in realtà avere il tempo di fare un improprio
introduzione alla lingua ma in
per seguire il discorso non lo farai
ho bisogno di capirlo davvero bene, così io
non si riferiranno a corsi di formazione o alberi
caratteristiche penso che la distro sia abbastanza
chiaro quindi cos’è il cotone, quindi è moderno
linguaggio di programmazione su cui abbiamo iniziato a lavorare
il progetto quasi esattamente 70 anni fa
abbiamo rilasciato la prima versione in
Febbraio dell’anno scorso e lo è stato
ottenere una buona trazione come te
probabilmente sapete che il cotone è tipizzato staticamente
i tratti chiave che solitamente evidenziamo
quando parliamo di cotone è così
conciso sicuro e pragmatico significa che
usare il cotone ti permette di scrivere di meno
il codice usando cotone ti permette di liberarti
o evitare determinate classi di errori tali
come eccezioni di puntatore nullo ed è
pragmatica quindi nel senso che viene
da parte dell’industria non dal mondo accademico
stiamo cercando di risolvere problemi reali
sperimentato da persone reali e speriamo
che il risultato è accessibile e utilizzabile
in pratica e anche il cotone è
interoperabile quindi ad esempio a differenza di elm
questione di cui parlava il discorso precedente
non stiamo cercando di costruirci da soli
universo in cui tutto vive
secondo le nostre regole invece noi
cerca di concentrarti sul montaggio senza intoppi
il più possibile
su oggi tutti gli ecosistemi che il cotone
interagisce con così su Java è il
JVM nel browser è come JavaScript
un sistema su nativo è il grande insieme di
librerie native in modo da non dover
sbarazzarsi di tutti quegli strumenti
e tutti quelli
quando inizi a usare Kotlin, semplicemente
iniziare a scrivere tanto codice in cotone come
è necessario e mantenere il resto in e
usato tutta la ricchezza dell’ecosistema
stai vivendo così quando iniziamo il
cotone era puramente un linguaggio GVM ma
da allora abbiamo visto il potenziale di
sostenere altre piattaforme in cotone e
tutte le opportunità che abbiamo con
quella
quindi ora il cotone è multipiattaforma
gestito in modo JVM è il JVM è il primo
piattaforma che abbiamo iniziato con I’m not
ne parlerò molto oggi
perché c’è molto materiale
disponibile altrove così ho intenzione di
concentrarsi sugli altri argomenti, quindi JavaScript
condivisione del codice tra piattaforme e
contenuto nativo quindi con il
attuale set di strumenti che puoi effettivamente
hai effettivamente la possibilità di costruire
utilizzo di più livelli dell’applicazione
lo stesso nella stessa lingua, quindi lo usi
bara sul server con JVM e
le strutture del server jar utilizzano cotone
Android con loro sono come regolari
Android SDK e uso costante in
browser con causa in J, quindi iniziamo
la nostra discussione con Cotton J’s quando
usi un codice compilato nel codice
JavaScript questo processo funziona fondamentalmente
come una fonte normale da cui partire
installazione in modo simile a come dattiloscritto
lo fa e quante altre lingue
quello fa così il compilatore di cotone
prende preso solo nel codice sorgente
Cotton’s non può farlo
in grado di digerire bytecode o Java o Java
qualcosa del genere solo fonti di cotone
e genera codice sorgente JavaScript
fuori di loro ora, naturalmente, si desidera
avere accesso a tutte le librerie che
esistono sulle mascelle in JavaScript
ecosistema e anche tu vuoi accedere
li in un tipo modo sicuro in modo da per
lascia fare a quello che abbiamo effettivamente costruito a
strumento che prende le definizioni dei dattiloscritti
il tipo per cui tipo nave ha una struttura per
definizione dell’edificio per esterno
biblioteche e c’è una grande comunità
repository mantenuto di tale
definizioni chiamate sicuramente digitate noi
hanno costruito uno strumento che prende quelli
definizioni e produce costi e
dichiarazioni fuori di loro e tu puoi
collega quelle dichiarazioni nel tuo
programma in modo da poter accedere a quelli
biblioteche e finalmente una volta che hai il
Schermo Java
puoi usare come uno qualsiasi dei tradizionali
Strumenti JavaScript per farne uso
codice ad esempio puoi sempre usare
webpack per pacchettizzare il contenuto generato
codice insieme con le sue dipendenze in a
singolo pacchetto di file JavaScript o è possibile
usa qualsiasi altro strumento che preferisci
utilizzare così come il cotone è un supponente in
questo riguardo, quindi puoi usare qualunque cosa
qualunque catena di strumenti che si desidera utilizzare
quindi cosa fanno queste dichiarazioni esterne
sembra così essere così in fondo se vuoi
per accedere a un’API esterna dal cotone
Accidenti , scrivi qualcosa del genere così
questa è una definizione molto semplice di a
classe come la classe della finestra che ha a
posizione proprietà e ha un avviso
funzione o un metodo di caricamento quindi ci sono
non diverso non ci sono corpi metodo
in questa classe o in tutto questo il reale
le implementazioni sono fornite dal
browser e ma ci sono tipi e il
i tipi sono ciò che ti permette di accedere
quella definizione in cotone in tipi in a
digita in modo sicuro quindi con pieno supporto per
documentazione di completamento del codice come tipo
controllando tutte queste belle funzionalità
quelle lingue tipizzate staticamente ti danno
si e anche la dichiarazione della finestra
come è come ti comporti così è a
proprietà di primo livello che ti dà accesso
a questa istanza di questa finestra di classe
ora questo è un modo possibile per interagire
con il mondo JavaScript così in molti
casi che vuoi avere questo ma in
altri casi questo non funziona esattamente
per esempio potresti avere una API JSON che
esposto da alcuni da qualche server e tu
può ovviamente anche scrivere esterno
dichiarazioni che specificano come specificare
cosa questo cosa cosa è ciò che è
valore di ritorno di questa API e di come è
strutturato e così via, ma questo può essere
un po ‘macchinoso, quindi cosa puoi fare
invece è possibile fare affidamento sulla dinamica
tipo che è supportato dal cotone J’s
compilatore appena dichiari un
variabile di tipo dinamico questo fondamentalmente
si spegne tipo pedina di cotone così una volta
una volta che hai una tale variabile tu
puoi fare qualsiasi cosa con cui puoi accedere
qualsiasi proprietà a cui è possibile accedere
metodi restituiranno anche valori di
digita dinamico in modo che tu possa essere a catena
tali accessi e cotone saranno solo
traduci questo direttamente in JavaScript
come è
quindi il codice generato avrà appena
anche la stessa risposta di codice che
messaggi parentesi quadre 0 punto testo se
questo funziona sei molto mantenere questo
non funziona bene il compilatore non lo fa
la colpa non ha verificato nulla solo
assicurati di avere tutto a posto così
come si ottiene non ottenere alcun tempo di compilazione
garanzie di sicurezza quindi quando parliamo
sviluppo di moderne applicazioni web in
cotone che ovviamente vuoi usare moderno
quadri anche e probabilmente il più
ben noto uno dei più usati
i quadri ora è reagito e per
ti consente di costruire applicazioni reattive
usando cotone abbiamo costruito un set di
legature ufficiali per cotone così
fondamentalmente è una specie di qualcosa
cosa potrebbe fare lo strumento TS 2kt
generare per te, ma è come più
lucidato più curato e appena entrato
il generale funziona meglio e puoi usarlo
che puoi usare quello per costruire reagire
applicazioni che utilizzano cotone JS e da produrre
è più facile iniziare con quello che abbiamo
ha anche creato uno strumento CLI che genera
una tale domanda per te, così puoi
installare tre NPM e quindi essenzialmente
basta eseguire questo comando per generare
l’ applicazione e imposta tutto
su di esso imposta le dipendenze necessarie
crea un intelligente che puoi aprire
nell’IDE appena creato
debug nostra fonte mappe esso imposta
ricarica a caldo quindi praticamente tutto il
Dio è necessario essere produttivi
quando si lavora con una tale applicazione
e inoltre abbiamo anche creato un plugin per
Gradle che lascia che fornisce il
l’integrazione di ciò essenzialmente fornisce
un ponte nel mondo dei contenuti e
i ruoli JavaScript così puoi ancora
usa Gradle per o costruisci il tuo contenuto
progetto e in realtà questa è la build
sistema che devi usare se costruisci
progetti multi-piattaforma che utilizzano cotone e
il plug-in di fronting in cotone crea un
ponte tra quello e il JavaScript
ecosistema che significa che hai te
può avere dipendenze dalle librerie NPM
scaricherà automaticamente Nodin e
vm per te, così non ti serve
per inquinare il tuo computer con questo
javascript brutto se non ti piace
questo come non come faccio sarà solo fare tutto
di questa roba eseguirà il pacchetto Web per
ti lascerà correre
usando karma che è un test di JavaScript
quadro e supporta anche caldo
ricarica delle modifiche per essere altrettanto presto
è proprio quello che fanno alcuni cambiamenti in
l’editor lo farà automaticamente
ricompilare e ricaricare la finestra del browser
quindi questo è un breve sguardo a ciò che possiamo fare
per JavaScript ma in realtà solo
il targeting di JavaScript non è il
parte interessante di cotone quindi cosa io
ho detto fino ad ora è paragonabile a cosa
altre lingue come il dattiloscritto
consegnarti ma non è significativo
meglio così se vuoi solo sviluppare
puramente puramente basato sul browser
l’applicazione e il cugino sono una buona scelta
ma non è come la piena forza di
cosa può offrire la piena forza
viene fornito con la possibilità di condividere il codice
tra il front-end e back-end tua
così essenzialmente quando condividi il tuo codice
ottenere un prodotto che ha modelli di
più tipi in modo da avere il comune di
essenzialmente due tipi diversi così tu
avere un modulo comune che contiene codice
questo non è specifico per nessuna piattaforma
quella sarebbe la logica aziendale condivisa
della tua domanda e tu hai
moduli di piattaforma che funzionano su uno specifico
piattaforma quindi sul GBM o
javascript o potenzialmente nativo così
nativo non è ancora supportato dalla
sistema ma sarà supportato nel
prossimo futuro quindi un punto molto importante
qui è che noi non vogliamo avere questa
a destra una volta ovunque destra eseguito ovunque un
affare in modo da eseguire il codice in modo da non farlo
scrivi il tuo codice solo nella parte del commento
hai pieno x l’ iran solo il condiviso
logica aziendale come codice comune e per
le parti specifiche della piattaforma che usi
pieno vantaggio pieno vantaggio di ciascuno
piattaforma scrivendo una comunicazione scrivendo
implementazioni dedicate utilizzando il
piattaforma nativa API così non lo siamo
andando a fornire una grande facciata
che astrae tutto il
differenze di questo ma queste piattaforme
perché questo vorrebbe anche distruggere tutto
i vantaggi unici di ciascuna piattaforma
invece ti forniamo uno strumento
ti permette di scrivere facilmente la piattaforma
implementazioni specifiche e accedervi
dal codice comune e te lo dirò
come funziona esattamente questo
quindi cosa fa il processo di compilazione
lavoro per un tale progetto di mix così abbiamo
un po ‘di codice comune e abbiamo jb su
codice specifico e abbiamo JavaScript
codice specifico ora cosa facciamo quando noi
prova a compilare il codice comune
la risposta è che non possiamo davvero
compilalo da solo perché non c’è
come una vera destinazione ad esso non possiamo farlo
lo compila alla piattaforma JavaScript
Non sa nulla di classi Java che
non posso compilarlo in GS perché possiamo
non posso fare nulla con Jas sulla JVM
quindi per compilare un tale modello tu
prendilo devi combinarlo con a
implementazione della piattaforma specifica quindi se
prendi il codice comune insieme a a
Codice JVM è possibile compilare il risultato
combinazione a un gruppo di file di classe su
la JVM se prendi codice comune con
Parte specifica di JavaScript che puoi compilare
a un gruppo di file JavaScript e
allora come quelle combinazioni che puoi eseguire
li su ogni piattaforma di cui hai bisogno ora
puoi davvero fare riferimento alla piattaforma
dichiarazioni specifiche da codice comune
e come puoi fare che la risposta sia
Certo che puoi e il modo in cui lo fai
è che il codice comune può specificarlo
si aspetta che certe dichiarazioni siano
fornito dal dato da ciascuna piattaforma
che è supportato da questo modulo così dentro
questo caso lo sto dicendo nel mio comune
codice mi aspetto che ci sia una data
classe fornita dalla piattaforma e quelli
sono i membri che mi aspetto che abbia
quindi in questo caso mi sto aspettando
per avere questo metodo per l’intero anno e
c’è probabilmente un mucchio di altri
metodi per accedere ad altri componenti
della data e su ogni specifico
piattaforma I fornire un effettivo
implementazione quindi in questo caso così
questa è l’implementazione JVM ed è in
questa implementazione GBM ho costruito un
implementazione di questa classe basata su
la classe del calendario che fa parte del
Java JDK e questo è un JavaScript
implementazione e questo è completamente
diverso perché sul lettore Java attivo
JavaScript c’è una data class
fornito dal runtime del browser e I
posso effettivamente riferirmi come mio
implementazione quindi posso dire che il
la classe data reale sulla piattaforma Java è
esterno
è fornire è fornito dal
piattaforma e ho anche specificato sì e
dal modo in cui ha tutti quei metodi che
dovrebbero essere lì e il modo in cui il
partite del compilatore previste e attuali
le dichiarazioni sono essenzialmente qualificate
nomi in modo che si aspettino e reali
le dichiarazioni devono avere lo stesso
qualità lo stesso pacchetto o in altro
parole lo stesso nome qualificato così il
il codice comune prevede una classe con a
nome qualificato naturalmente e di dati
data di essere lì e se la piattaforma
modulo fornisce questa classe fornisce un
effettiva implementazione per esso e di
Ovviamente puoi anche scrivere codice comune
quello si riferisce a queste classi previste così
questa è solo la semplice funzione di a
modulo comune che accede solo a questi
data class e fa un nome logico a
controllare due giorni sono lo stesso giorno ora
quindi questo si aspetta e lo fa davvero
sembra un po ‘come le interfacce ma non
esattamente così perché siamo venuti con il nostro
cosa proprio per questo e perché non abbiamo
basta usare le interfacce la risposta a questo
questo meccanismo è atteso e attuale
le dichiarazioni sono in realtà è molto
più flessibile quindi le interfacce sono
essenzialmente limitato ai membri della classe
quindi è necessario in qualche modo ottenere il
istanza di una classe in modo che tu
bisogno di avere una fabbrica per
ottenere l’istanza della fabbrica in
la tua iniezione di dipendenza e questo diventa
complicato abbastanza rapidamente con il nostro
meccanismo non esiste tale restrizione
quindi puoi sostanzialmente dire che ti aspetti
una lezione e ci si aspetta anche in questo
classe per avere un costruttore e una volta
fai così puoi semplicemente crearne uno nuovo
istanza di una data dal codice comune
senza preoccuparsi con qualsiasi fabbriche eventuali
iniezione di dipendenza basta andare avanti e
crea come nuovo un’istanza e anche
puoi aspettarti funzioni di alto livello o
funzioni di estensione per essere lì
quindi a Causton non siamo davvero entusiasti
sul confezionare tutto in classi noi
usa molto le funzioni di alto livello e noi
usa anche le funzioni di estensione molto
che permettono di definire il proprio
metodi su classi definite
da qualche altra parte e così questo multi
meccanismo di progetto della piattaforma che integra
molto bene con tutti quelli
caratteristiche così può essere una dichiarazione attesa
qualsiasi cosa possa essere una classe può essere un
interfaccia in realtà che non è molto
utile ma tu
fallo per qualche motivo può essere un
funzione di primo livello o può essere un
funzione di estensione e un altro
vantaggio che questo ci dà è questo
ci dà la possibilità di riutilizzare esistenti
Implementazioni Java molto facilmente così per
esempio come guardare questo test
annotazione quindi ci aspettiamo quindi c’è questo
test di classe di annotazione ci aspettiamo che sia
fornito dalla piattaforma e sul GBM
ci capita di avere un’annotazione che ha
esattamente lo stesso nome esattamente lo stesso
semantica ma vive solo in a
pacchetto diverso in modo che possiamo semplicemente dire
che l’effettiva attuazione della
prova denominata test dell’annotazione del test
sulla JVM è stato ordinato di aver bisogno del test
annotazione che non devi
reimplementare tutto ciò che non è necessario
ripeti tutto quello che hai appena detto ok così il
effettiva attuazione di questo previsto
tipo è questo in realtà la classe reale
e anche questo non funzionerebbe
interfacce perché non c’è modo in cui noi
può fare una classe esistente fornendola
per venire da una libreria di terze parti
implementare alcune interfacce che abbiamo
definito questo semplicemente non è supportato così
come una volta questo è un altro modo in cui
l’aspettativa del meccanismo attuale è di più
potente delle interfacce quindi come stai
costruisci questa cosa così come ho detto
supportato questo è supportato solo utilizzando
Gradle e abbiamo plugin speciali che
devi collegarti a un modulo comune
e in moduli specifici della piattaforma e
anche in un modulo comune è possibile
dipende da dove puoi dipendere dal comune
librerie perché sarebbe proprio no
molto utile se dovessi scrivere tutto questo
codice da zero e o semplicemente fornire
finiture previste per tutti gli API che
volevi usarlo, certo che ci sono
librerie comuni e le supportiamo e
come questo è per esempio come specifichi
dipendenza dallo standard del cotone
più leggero nella versione comune di
libreria standard di cotone sulla piattaforma
per il modulo di piattaforma fai molto
cosa simile quindi c’è un separato
plugin per compilare una piattaforma specifica
parte e tu ovviamente puoi specificare come
qualsiasi dipendenza come su Java
librerie o in comune o è possibile
specificarlo dipende dalle librerie Java e
ci aspettiamo anche questo speciale
dipendenza e questo è come il link
tra un modulo comune e una piattaforma
viene creata una parte specifica
quindi per ogni modulo comune come tutto il
moduli di piattaforma che ne implementano uno
fornire l’ effettiva implementazione per questo
le riparazioni previste devono avere questo
previsto dalla dipendenza nella compilazione o
Gradle, ma come possiamo effettivamente compilare
la biblioteca comune, così ho detto che
come quando si compila una virgola in
applicazione che non puoi semplicemente costruire a
codice comune di per sé perché non esiste
come nessun codice, nessun modo per rappresentare il
codice per esso ma per una biblioteca che vogliamo
avere qualche tipo di comune
rappresentazione quindi cosa facciamo il
la risposta è quella che quando compiliamo a
modulo comune che fa parte di a
libreria che produciamo questi metadati
file che sono essenzialmente sterilizzati
formato delle dichiarazioni disponibili in
la libreria quindi non ne contiene
codice di implementazione in qualsiasi formato tu
basta specificare fondamentalmente le firme di
tutto ciò che è disponibile nel
libreria e poi quando si compila il
stessa libreria per una piattaforma specifica noi
produrre implementazioni specifiche nel
formati normali come questo sarebbero un barattolo
file per Java to JavaScript non possiamo
produce anche file jar che contengono
JavaScript file codice sorgente JavaScript
e metadati aggiuntivi che consentono
cugino compilatore per dare un senso a loro così
praticamente sì ogni volta che costruisci un
libreria comune produce più
artefatti quindi c’è un comune
artefatto di cui fai riferimento da a
modulo comune e ci sono la piattaforma
artefatti specifici a cui fai riferimento
da ogni piattaforma quindi quali sono le librerie
c’è in realtà diverso dallo standard
biblioteca e cosa funzionale cosa
funzionalità puoi contare sul tuo multi
codice della piattaforma quindi sì
[Musica]
quindi la prima cosa è ovviamente la
biblioteca standard di cotone quindi cosa fa
contenerlo contiene come il più basilare
strutture di cui hai bisogno in ogni in
ogni progetto quindi ha le stringhe che ha
collezioni ha come utilità elevata
ordina funzioni come la larghezza e applicala
supporto ha una gerarchia di eccezioni
che Mesa Kaleem rispecchia la gerarchia
di eccezioni definite in un JDK
essenzialmente ti dà l’essenziale
strumenti senza i quali non si può davvero
costruire molto in cotone, ma è così
tutti sanno se dove c’è, ovviamente, molti
altre librerie che sono disponibili come
comune una volta così potresti aver già
indovinato che per il codice comune noi
fornire anche la possibilità di eseguire test
e questo è fornito dallo speciale
libreria test di cotone e sembra
quasi esattamente come unità g perché come
hai come ti ho mostrato il reale
implementazione di tutte queste annotazioni
è fornito da g-unit quando corri su a
GVM e su JavaScript a fine o
nativo abbiamo implementazioni personalizzate di
Certo che in sostanza non c’è niente
immagino qui ci sono annotazioni lì
sono determinati metodi e quindi puoi semplicemente
in pratica scrivi test per il tuo comune
codice ed è possibile eseguire tali test sotto
la JVM per assicurarti che il tuo codice funzioni
correttamente sulla JVM ed è possibile eseguire
loro sotto JavaScript per assicurarsi che
il tuo codice funziona correttamente in JavaScript I
ti mostrerò più avanti nella demo come questo
guarda in pratica un’altra libreria che
è disponibile come una libreria comune
cotone X dot HTML e cosa ti permette
per farlo ti permette di costruire pagine HTML
usando un cotone DSL così invece di scrivere
solo tag e attributi e contenuti
puoi usare direttamente la sintassi HTML
usare metodi fortemente tipizzati per il cotone
questo e naturalmente uno dei vantaggi
di questo è che puoi migliorare
completamento del codice forse puoi prenderti
ottenere il controllo del tempo di compilazione per essere sicuro
che ottieni i tuoi nomi di tag simili
correttamente ma in realtà non è quello
significativo il motivo principale per cui questo è
una cosa buona è un’altra cosa buona
la ragione è che puoi farlo molto facilmente
refactoring questo codice e si può molto
crea facilmente astrazioni
quindi non hai bisogno di inventare la fantasia
meccanismi nella tua lingua dei modelli
fare condizioni e cicli e include
e macro e sostituzioni e tutti
quello perché il cotone fornisce già tutto
queste caratteristiche ha cicli che ha
condizioni ha classi che puoi
ereditare da esso ha funzioni che tu
può chiamare con valori di parametro predefiniti
e in questo caso così tra questi due
diapositive che ho appena estratto
funzionalità nel metodo questo è un
la cosa molto naturale da fare può essere fatta
piace molto facilmente e facendolo tu
può facilmente comporre parti di
modelli in un modo molto manutenibile
che è alquanto migliore di quello che puoi fare
con modelli regolari simili e perché
questa è una libreria comune che puoi usare
questo sia sul client che sul
server in modo da poter se in effetti è possibile
fai il rendering isomorfo così puoi
Rendi la stessa interfaccia utente della tua applicazione
sia sul server che sul client e
il progetto demo che troverò in pochi
i minuti mostreranno esattamente come funziona
in un mi piace in un’applicazione in esecuzione ma
prima di arrivare a quello voglio menzionare
un’altra libreria in cui è catturato
Serializzazione Xcode quindi se avete
codice condiviso se hai condiviso come JD
classi di modelli che si desidera utilizzare entrambi
sul client e sul server quindi di
Ovviamente vuoi passare istanze del
classi tra il cliente e il
server in modo da poter esporre il file
resto api che include quelle classi in
JSON e accesso al resto api da
il tuo browser in modo che possa farlo
quelle lezioni e sradicare qualcosa
con loro sul browser e sul cotone
punto cotone X punto 0 Zhejiang libreria
ti fornisce esattamente quello ed è
in realtà molto semplice da usare così nel
i casi più semplici è semplice come
mettendo l’aggiunta di annotazione serializzabile
su tutte le classi che vuoi passare
tra il server e il client
e la biblioteca si prende cura di tutto il
resto la libreria è effettivamente implementata
la libreria include un plug-in per
Compilatore Kotton quindi non si affida
riflessione per capire come
guarda quali sono i campi in ogni classe e
come li serializzi effettivamente e
in questo modo offre molto meglio
prestazioni e questo in realtà lascia il
libreria eseguita su JavaScript dove noi
al momento non ho il pieno supporto per
riflessione
per il formato dei dati per supportare decente esso
supporti creati se vuoi
qualcosa di binario e supporta
qualcos’altro e puoi anche estenderlo
ovviamente per supportare i tuoi dati
formati di serializzazione e costruzione a
una più vasta gamma di librerie comuni è una
delle principali aree di interesse del kasnian
squadra in questo momento così noi vogliamo avere un po ‘
modi cross-platform da fare i oh che voglio
per incrociarsi vuoi che tu scriva un GTP
clienti e un modo multipiattaforma e
anche come socket networking come web
prese nei socket regolari del browser
sul client vogliamo avere vogliamo
avere una vera libreria comune per date e
non è come se la cura fosse iniziata
mostrando nella mia demo e ovviamente molto
di più e ci aspettiamo anche che la comunità a
costruisci molte altre librerie comuni per
i compiti che sono importanti per loro così
con quello detto procedere a una demo così
prima di tutto fammi eseguire l’applicazione
non sarà molto elegante ma di cosa si tratta
in realtà è come fa la cosa
quello che fa è in realtà molto di più
interessante di quello che fa esattamente così
Io corro questa applicazione vuole
avviarlo una sorta di server e
lo vedi così fondamentalmente solo rendering
alcuni messaggi casuali quindi non c’è
molto valore in questo specifico contenuto
mostrato lì, ma la parte interessante è
cosa vediamo se si preme view source
quindi fondamentalmente vedi qui che questo ha
solo cinque messaggi quindi i primi cinque
i messaggi che vedi nella pagina erano
reso dal server uno viene inviato il
pagina e il resto dei messaggi erano
reso sul client da JavaScript
codice e ora diamo un’occhiata al
l’implementazione di questo quindi passerò
pensare all’energia indietro e vedremo
il progetto così vedrai che questo
progetto contiene un sacco di moduli così
c’è questo modulo comune chiamato
condiviso che ha il piatto che ha
anche le parti specifiche del platino GS e
la parte specifica della JVM e ci sono anche
moduli separati che contengono il
back-end specifico e front-end
codice specifico, quindi se guardiamo la build
di Gradle per il modulo comune che tu
vedere che ha una dipendenza da esso
questo comune
Plugin Gradle
e anche il riferimento è un mucchio di
librerie comuni che sono fondamentalmente le
quelli che ho appena menzionato così là
una libreria standard hanno un XHTML
serializzazione e cotone da testare e se
guardi le bollette o maggiore per a
modulo di piattaforma quindi ha anche come
la roba che ti aspetti da questo Gradle
plug applicato il bilancio dipende
Le librerie specifiche di JVM di Angela
inclusa un’unità g che, ovviamente, è la
Libreria Java e questo previsto da
dipendenze che lo collega al condiviso
progetto quindi quale codice sarà in realtà
avendo questo progetto così prima di tutto noi
ho qui questa classe di date che io
stava mostrando nelle mie diapositive quindi è così
questo dovrebbe essere fornita dal
piattaforma dovrebbe avere un
costruzione si prevede di avere a
molti metodi e ci sono anche a
mazzo di funzioni di primo livello attese
come analizzare e convertire i giorni in
stringhe e ha due effettivi
implementazioni una per la JVM e una
per JavaScript e questo è praticamente tutto
le cose che ho che ti ho mostrato
sulle diapositive così il reale
viene fornita l’implementazione per la JVM
è implementato utilizzando punto dot util Java
calendario godetevi la semplice data del punto del testo
formato e quello per Java Script è
implementato in cima alla classe data
fornito dal browser in modo che il prossimo
cosa che mostrerò è questa
classe di messaggi quindi questo è essenzialmente il
modello di dati del nostro sistema quindi questo è un
esempio molto banale quindi il modello di dati
è così semplice come può essere così ha appena
un autore di testi e data e ancora una volta
questo è codice comune e anche nel
codice comune ho la funzione che sono
utilizzando per serializzare e deserializzare la data
casi come le istanze messaggio in modo
Ho questo a Jason e da Jason
metodi e usano la classe jason
dal punto X del punto di Cotten
libreria di serializzazione per
essenzialmente per convertire istanze in
stringhe
e per analizzarli dagli archi e io sono
anche registrando davvero personalizzato
serializzatore per la data class perché
il framework di serializzazione non funziona
tutto ciò di cui non sa nulla
date quindi mi sto solo specificando come
Voglio che siano rappresentati in JSON
e l’ultimo padre
Voglio mostrare qui è questo questo è
come effettivamente rendiamo i messaggi in HTML
quindi utilizza il cotone X dot HTML
libreria e sto usando questo DSL così è
molto semplice sono pronto sto creando un div
Sto mettendo su accodando il testo del
messaggio così questo Plus questo divertente plus
carattere significa essenzialmente accodare a
l’output è probabilmente sovraccarico unario
più operatore e sto creando un corsivo
tag che contiene anche un altro
contenuto , in questo caso, sto facendo riferimento
ancora una volta sono un riferimento un comune
funzione che ha più aspettative
implementazioni e se trovo usi
su quello vedrò che questa funzione è
usato sia dal server che dal
client in modo sul server quando ho appena può
non solo renderò la pagina iniziale solo
genera cinque messaggi casuali e rendering
come parte della pagina HTML e sul
client Sto invocando il resto dell’API per ottenere
alcuni altri messaggi che ho deserializzato il
risposta e li aggiungo al Dom così
questo è ancora una volta questo è isomorfo
rendering quindi sto usando esattamente lo stesso
codice sul server e sul client
se avessi un’applicazione più grande potrei
renderizza l’intera interfaccia utente della mia applicazione
sia sul server sia sul client
usando esattamente lo stesso codice per una coppia
altre cose che volevo mostrare così
Naturalmente l’idea fornisce un sacco di
assistenza per affrontare questa aspettativa
cose reali, ad esempio se creo
e si aspettano di funzionare i punti salienti dell’ID
che non ne ho fornito nessuno
implementazioni reali e utile
mi suggerisce di crearne un po ‘sulla JVM
Farò il dot out solo per fare
certo che tempo sulla JVM perché tu
Posso solo fare println director su cotone
e questo funziona su qualsiasi piattaforma e via
il JavaScript
Ho intenzione di fare il punto log della console e di
Ovviamente il refactoring è a cura di
anche questo così posso rinominare anche questo
Posso rinominare questo aggiornerà il
implementazioni effettive posso aggiungere a
parametro ad esso utilizzando la modifica
firma refactoring e il reale
le implementazioni saranno state aggiornate
anche così ora hanno entrambi la corda
parametro Y e un’altra cosa che io
voleva mostrare sta eseguendo test per il
codice comune quindi anche qui in questo condiviso
modulo ancora una volta questo è il codice comune I
avere questa classe di test data e avete
visto questo sulla dimensione di fondamentalmente così questo
sta usando il quadro di prova dei punti di Scozia
e se faccio clic destro su questo se seleziono
l’opzione di esecuzione nell’ID che otterrò
in realtà due possibilità su come posso correre
questo posso farlo funzionare come una moka
test o posso eseguirlo come test dell’unità g così
proviamo prima moka così come puoi vedere
ora ha iniziato a prendere nota per me e
ha iniziato questo più codice test di Josue
quadro e ha fatto un sacco di JavaScript
è dura e nel risultato ottengo a
test di successo ora lasciami cancellare questo
eseguo la configurazione che sfortunatamente ho
per fare questo per il momento a causa di
problemi e ora ho intenzione di eseguire questo
di nuovo, ma esegui di nuovo, esegui di nuovo questo
e gira sulla stessa unità g
così carino, giusto
va bene così che i progetti multipiattaforma
fondamentalmente è così che sei tu
può fare per condividere il tuo codice e il tuo
business logic tra JavaScript e
la JVM e un’altra cosa e di
Certo se hai guardato la foto che
Stavo mostrando pre che ho mostrato
precedentemente con JavaScript JVM e
Android questo è, naturalmente, non tutto il
lacrime di un’applicazione che potresti
voglio costruire c’è un altro
che si chiama iOS e le grandi notizie
è come quando abbiamo annunciato molto
recentemente così abbiamo fatto il
annuncio iniziale su cotone con 2
settimane fa a San Francisco attraverso il
nativo ora supporta lo sviluppo per iOS
pure e così il modo in cui funziona è quello
abbiamo effettivamente costruito un LLVM basato
catena di strumenti che prende il codice del cotone e
produce binari nativi in questo modo
quindi per creare l’app per iOS
che hai ancora bisogno di avere Xcode
installato che si prende cura di tutto il
firma degli imballaggi e tutto il funky
cose che devi fare per ottenere rapidamente
all’App Store ma almeno per il
processo di compilazione iniziale che stiamo usando
fondamentalmente la stessa catena di strumenti che Apple
così produciamo pienamente un nativo
normale applicazione iOS no GC no JIT no
Dinah no JVM al suo interno quindi in pratica
una normale applicazione nativa che è
la giustizia sembra esattamente uguale a quella
puoi costruire con Swift e, naturalmente
in questa applicazione hai tutti accesso
alle librerie disponibili nel
piattaforma in modo da poter accedere al core
le librerie scritte in ogg-c puoi farlo
puoi accedere alle normali librerie C che puoi
accedi alle librerie di cotone così semplicemente
tutto ciò che ti serve
è disponibile per te e il modo in cui questo
funziona è che abbiamo costruito uno speciale
lo strumento che genera ha ottenuto i metadati
File di intestazione C in modo sostanzialmente quello che tu
fai è alimentare i file di intestazione per il tuo
la biblioteca a questo è basata sul
front-end sceneline quindi è proprio come
deve essere reale, quindi non regolare
espressioni non come animali da compagnia, non solo sfocate
animale domestico immagini come i veri
supporta tutti i tipi di mare come in
compresi quelli complicati come
richiami alle funzioni che devi
passare fondamentalmente alla funzione AC o alle strutture
tutto ciò di cui hai bisogno
supporta i tipi di Objective C perché
questo è quello che ti serve per l’obiettivo C
Interop e sputa un file di metadati
con cotone fondamentalmente che cotone
deve essere in grado di chiamare queste funzioni
per sapere come chiamare queste funzioni da
codice di cotone e utilizzando questi due noi
essenzialmente generare intestazioni per tutti
le librerie della piattaforma quindi per esempio
questo è ciò che le dipendenze di
la nostra app demo ha un aspetto simile a quello che vedi
tutti i normali framework iOS sono
ci sono i dati fondamentali dell’app kit
essenzialmente tutto ciò che sono
frame obiettivo-c e hai pieno
accesso a loro da codice costante e
questo è solo in un esempio di codice che mostra
come appare un asse del genere, quindi questo è un
parte del codice dalla nostra app demo che
mostra il centro del gioco su un iPhone così
ancora una volta non è necessario essere in grado di
capisci esattamente cosa sta succedendo qui
oh non lo capisco da solo
ma la cosa fondamentale è che si ha il pieno
accesso alle API della piattaforma è scritto in
obiettivo-c, quindi che dire della memoria
gestione questo è come uno dei più
domande comuni che riceviamo quando parliamo
su questa roba così per questo tempo così io
rispondere a questo è molto preliminare
quindi è ancora come la versione 0.4 e a
molte cose cambieranno prima
la versione finale e uno di loro è il
gestione della memoria quindi per ora abbiamo a
conteggio di riferimento e collettore di cicli
il conteggio dei riferimenti funziona piuttosto
in modo efficiente perché non supportiamo
memoria condivisa tra thread così possiamo
non dobbiamo preoccuparci di atomicamente
l’aggiornamento dei contatori di riferimento lo fa proprio
è come non c’è contesa di memoria
coinvolto quando lo facciamo, ma ancora una volta
forse finiremo con il tracciamento GC
forse finiremo con qualcosa
diverso forse finiremo con
diverse soluzioni su diversi
piattaforme questo è tutto ancora
progettato e, naturalmente, Casa nativo è
non solo su iOS, quindi supportiamo noi
supporto altrettanto bene Linux e Windows
e Mac e se sei stato e
che gli altri ragazzi mi dispiace aver dimenticato il
nome discorsi
sì sì e riposare poi Andreas n’è parlato
prima di oggi su webassembly che abbiamo
appena annunciato il cotone può essere
compilato anche in webassembly e in
il futuro che esploreremo
piattaforme incorporate e fornire a
completa la catena di strumenti per lo sviluppo
applicazioni incorporate che utilizzano cotone
cotone nativo che già supportiamo come
alcune parti sono necessarie per questo, quindi supportiamo
come le cene corridore mappe per esempio, ma
c’è molto più lavoro da fare prima di noi
arrivare a una soluzione completa come per il
utensili per cotone nativo che abbiamo
ha recentemente annunciato il plugin per mare
leone che è il nostro ID per c e c ++ it
ha inviato è essenzialmente un personalizzato
versione del plug-in regolare cotone quindi
supporta tutte le funzionalità come
ispezioni codice refactoring tutti
questo è lì e il suo supporto piace
debugger specifico della piattaforma e il
prova di piattaforma specifica e io no
avere tempo per un pulsante demo completo così
Ti mostrerò solo un paio di
schermate quindi questo è il codice nativo sotto
un debugger vedi che la chiamata ti impila
vedi le variabili puoi vedere anche il
valori variabili direttamente nel debugger
come anche un normale Nintendo G e sotto
il cappuccio è alimentato da ll DB così tu
può anche usare molto EB command line se
ti piace che questo funzioni anche per il comune
codice di coordinamento e questo è solo il
risultati dei test runner in modo da mostrare il
risultato dell’esecuzione di alcuni test nativi
non lo stesso contenuto o framework di test
come mostrerò prima, così è
quello che volevo parlarne su D
quindi per riassumere il nostro obiettivo è quello di consentire
Va bene tutte le parti del tuo
applicazione nella stessa lingua Android
iOS back e front end se non altro
la piattaforma verrà supportata
anche
questo praticamente tutto ciò che vogliamo essere noi
voglio che il cugino sia davvero disponibile
ovunque e con pieno accesso a tutti
i migliori che ogni piattaforma deve
offerta così piattaforma API specifica è
applicazione specifica per piattaforma
caratteristiche della struttura che avremo pieno
accesso ad esso e questo significa che lo facciamo
Non voglio non astrarre il
differenze tra ogni piattaforma tu
avrà ancora accesso all’API completa
quale piattaforma quando si esegue questo e il
e il codice condiviso sarà solo il
logica di business della vostra applicazione che
non dipende intrinsecamente dal
piattaforma e abbiamo già rilasciato
la soluzione per l’utilizzo del codice per
tra JVM e JavaScript e
nativo si collegherà allo stesso sistema
presto quindi tutto questo è molto attivo
ha funzionato quindi sto solo parlando del
stato delle cose come sono oggi così se
vuoi saperne di più sulla tosse
il sito ufficiale è preso in quello
linea attraverso il nome dot org c’è a
blog in cui pubblichiamo molti dei nostri
annunci e parla del nuovo
cose interessanti che stiamo costruendo abbiamo
un gioco con una comunità molto amichevole
quindi puoi andare a fare domande lì
e le persone del team ci saranno
per rispondere a te e c’è anche un libro
scritto da me e il mio collega che
fondamentalmente ti dà una presentazione in
un corso nel linguaggio del cotone che fa
non parlare di nessuna di queste cose perché
questo è stato tutto sviluppato dopo il libro
è venuto fuori, ma solo come modi
iniziare con il cotone è solo un
ottimo modo per conoscere le basi
quindi grazie e arriviamo alla procedura
domande
[Applausi]
[Musica]
sì grazie mille
abbiamo circa 10 minuti e abbiamo ottenuto un
molte domande quindi iniziamo con a
molto semplice
cosa significa la Scozia per il cotone?
un’isola vicino a st. Pietroburgo dove il
La città di Kronstadt si trova e così abbiamo solo
ho visto molte lingue che prendono il nome da isole
come Java e Ceylon e abbiamo deciso che noi
deciso che va bene avremo un non un
isola nostra e quindi perché non nominare
la lingua dopo di essa e Stockland come
un’isola sì
puoi usare tipi dinamici nel comune
codice no non è possibile utilizzare i tipi dinamici in
il codice comune questo è solo un
Funzionalità JavaScript come è
teoricamente possibile sostenerlo ma
non abbiamo abbastanza casi d’uso per
quello potrebbe
Il GS di Coughlin può essere usato per scrivere
codice JavaScript lato server su cui viene eseguito
no GS sì, puoi usare un JS di cotone per correre
scrivere codice che gira su un nodo.js ma se
stai scrivendo in cotone di qualsiasi peso
allora potresti anche usare un vero e proprio
runtime che è un junior lo fa
supporto Maven invece di Gradle
grazie menzionare no, non ne sono sicuro
il cotone ha l’ intero supporto esperto
sicuramente specificamente il multi
i progetti di piattaforma sono solo su Gradle per
ora ma mi sosterremo anche più tardi come
bene quindi non c’è per favore
nessuna grande difficoltà solo qualcosa
non abbiamo ancora fatto bene allora un po ‘
più lunga domanda il tuo ciao vai a sopportare
esempio dà un comportamento diverso tra
JVM e Jas diversi output di stampa come
come facciamo a garantirlo?
implementazioni di una libreria comune
quindi rimaniamo identici , scriviamo
test di estensione per quello sì eccellente
avventura se vuoi essere qui per essere
identico allora sì scrivi i test in
in molti casi in realtà non vuoi il
comportamento per essere identico lo vuoi
essere appropriato per la piattaforma che tu
stanno correndo ma ancora il test comune
la struttura esiste esattamente in modo che tu possa
fare esattamente quel test giusto verificando il
conformità di essere due diversi
implementazioni
quindi qualcosa sul tema iOS bene
prima di tutto una domanda che ho avuto in
bada che stai solo parlando
Obiettivo-c
per quanto riguarda le librerie Swift noi di questo
tempo non supportiamo ancora Swift Interop
stiamo lavorando su che sarà come
supportato in futuro ma non lo è
lì in questo momento e poi il
la domanda qui sarebbe stata possibile
scrivere una biblioteca a Kotlin che potrebbe
essere usato da Swift si lo è anche
qualcosa su cui stiamo lavorando bene
ora va bene e lo stesso più o meno il
stessa domanda se ce ne sono
piani per la compatibilità della libreria C ++ con
Scozia nativo io così lontano come me
capisco che ci sono alcuni ABI
differenze quindi non puoi chiamare direttamente
una libreria di cotone dal C ++ ma penso
che questo è qualcosa che può essere
raddrizzato più tardi quindi non c’è
principale il motivo principale per cui questo
Non è possibile non importate questo è
qualcosa semplicemente non ancora fatto, quindi questo è
ancora una volta questo è tutto molto
anteprima e attivamente sviluppato sì
che porterebbe alla prossima domanda
è già una storia molto forte ma
quando ti aspetteresti il primo vero
applicazioni che sono sviluppate e
dall’altra parte come hai mostrato a yeah
iniziare a iniziare o sviluppare questo è un
davvero bella domanda mi aspetterei come
Non lo so all’inizio del prossimo anno, forse lì
è ancora un bel po ‘di pezzi mancanti questo
è un’esperienza molto approssimativa come se fosse
prendi il diario e non lo faccio
qualsiasi demo perché questo è solo
difficile trovare il sentiero stretto dove
tutto funziona così ma ancora una volta
questo migliorerà molto rapidamente a posto la
altre domande che penso siano state
risposto durante il discorso qualsiasi domanda
dal pubblico in questo momento appena alzare
la tua mano vengo da te oh è vero
qualsiasi dipendenza dalla versione in cotone è
è basato su cotone 1.2 o giù di lì
roba multi-piattaforma è disponibile in
cotone 1.2 il tipo di roba nativa di
vive su se stesso quindi ha il suo potere
nativo ha il suo ciclo di rilascio è
non è ancora collegato al principale è come
tipo di un progetto separato ma come
cotone it cotone nativo 0.4 include
cotone in 1,2 in modo da poter avere tutto il
stesse caratteristiche ce ne sono praticamente altre
domande sarò intorno al
ricezione degli espositori in modo da poter trovare
io e chattare con me posso chiedere solo
parlare di tutto ciò che riguarda i costi o
JetBrains si riferisce se tu solo se lo sei
curioso di iniziare stiamo facendo oh I
ne avrei avuto uno che ho appena sentito
la roba nativa del cotone è supportata in
leone marino
Yep sarà anche possibile usarlo
nella Ultimate Edition forse così questo noi
ha avuto un sacco di discussioni interne su
che non c’è ancora una decisione definitiva sì
Sarebbe bello Sì, va bene grazie mille
[Applausi]
Please follow and like us: