Creazione di un programma espandibile e multipiattaforma "core"

3

Fondamentalmente il brief è relativamente semplice. Abbiamo bisogno di creare un nucleo del programma. Un motore che alimenterà tutti i tipi di programmi con un gran numero di potenziali applicazioni e distribuzioni distinte.

Il core sarà un processore analitico e algoritmico che essenzialmente prenderà scenari di input e output specifici dell'utente in base alle informazioni ottenute, registrando queste informazioni per la segnalazione.

Deve essere compatibile con più piattaforme. Qualcosa che può avere livelli di piattaforma specifici messi in primo piano che possono interfacciarsi con il nucleo.

Deve anche essere in grado di essere espandibile, ad esempio modulare con gli sviluppatori che sono in grado di scrivere "componenti aggiuntivi" o "estensioni" che possono alterare la funzione del programma finale e possono utilizzare il nucleo in tutta la sua estensione .

(Ad esempio, un buon esempio di ciò che sto cercando di creare è un browser, che ha il suo nucleo principale, il motore del kit web, per esempio, e in più ha una GUI specifica per la piattaforma e può anche avere add-on e estensioni che possono modificare il comportamento del programma.)

Il nostro problema è che le estensioni devono interfacciarsi direttamente con il nucleo principale ed espandere / alterare quella funzionalità piuttosto che il "livello" specifico della piattaforma.

Quindi, dato che non ho alcuna esperienza in questo (ho un background PHP e recentemente obiettivo-c), dove dovrei iniziare, e c'è qualche conoscenza / saggezza che puoi impartire su di me per favore?

Grazie per tutto l'aiuto e i consigli che mi puoi dare. :) Se hai bisogno di ulteriori spiegazioni basta chiedere. Al momento è nelle primissime fasi di sviluppo, quindi stiamo solo ricercando tutte le possibili vie di sviluppo.

Grazie mille

    
posta Thomas Clayson 21.02.2011 - 14:02
fonte

6 risposte

3

Ciò di cui stai parlando è la costruzione di una struttura piuttosto capace. A una vista di 10.000 piedi, il concetto è semplice, ma man mano che ti avvicini all'implementazione scoprirai che sarà irto di difficoltà. Ci sono state alcune tecnologie differenti che sono state progettate per consentire il supporto linguistico multipiattaforma / di programmazione. Un paio sono elencati di seguito:

  1. Associazione linguistica personalizzata : ti dà la massima velocità e una libreria come SWIG può tradurre per te tra pochi linguaggi di basso livello e di alto livello. Il problema è che può diventare piuttosto complicato quando si tenta di elaborare specifici problemi di mangling del nome del compilatore e altri trucchi seri (come l'interfacciamento di un linguaggio non-garbage collection con un linguaggio garbage collection).
  2. CORBA - Lascia che tutti quelli che hanno incasinato CORBA inizino con la maledizione. Il concetto di CORBA è l'uso di un Interface Definition Language (IDL) per generare i binding client / server. La piattaforma CORBA codifica i messaggi come stringhe e li invia tramite il motore CORBA dal client al server e viceversa. Il vantaggio di CORBA è la possibilità di dividere client e server (utenti e implementazioni) tra le macchine. Lo svantaggio è tutto il resto - e le prestazioni.
  3. Servizi Web - È un'estensione degli stessi concetti di base di CORBA, ma con molto meno lavoro. Essenzialmente hai una struttura richiesta / risposta e due principali stili di interazione. I servizi Web basati su SOAP sono quasi identici a CORBA, tranne che per l'utilizzo di XML. I servizi Web in stile REST sono quasi esattamente come la distribuzione di pagine Web, ad eccezione del ritorno di JSON o XML (a seconda della richiesta). Questo ovviamente ti dà il minimo delle prestazioni, anche se ottieni un ciclo di vita ragionevolmente prevedibile (a differenza di CORBA).

L'altra grande complessità con cui stai lavorando è il concetto di un'interfaccia utente estensibile. In sostanza, il tuo framework deve essere in grado di mappare le funzionalità dell'interfaccia utente in modo dinamico in base alle proprietà della richiesta e all'algoritmo. Non ne so abbastanza del dominio del tuo problema per suggerire esattamente come farlo. E se lo facessi, farei pagare per il lavoro (non sono economico). In generale, si desidera esaminare quali suggerimenti sono necessari dall'algoritmo stesso, dall'input e dal tipo di query posti al framework. I componenti dell'interfaccia utente dovranno anche fornire suggerimenti su ciò a cui possono essere associati e sul tipo di oggetto che può essere visualizzato. Da lì puoi stabilire alcune regole su come abbinare i collegamenti UI ai dati dall'algoritmo.

Questo almeno ti farà pensare nella giusta direzione. Ti preghiamo di non dimenticare la sicurezza, la protezione dal servizio di terze parti e altri problemi che la maggior parte delle persone dimentica.

    
risposta data 21.02.2011 - 15:40
fonte
5

Credo che il lato tecnico pratico della tua domanda sia già stato ampiamente trattato. Ma vorrei sollevare una questione più fondamentale. Un avvertimento in anticipo: potrebbe essere che io vi abbia frainteso in modo grossolano, rendendo il mio contributo un'assurdità completa:)

<cynism>

We need to create a program core. An engine that will power all sorts of programs with a large number of distinct potential applications and deployments. The core will be an analytics and algorithmic processor which will essentially take user-specific input and output scenarios based on the information it gets, whilst recording this information for reporting.

Congratulazioni, hai appena inventato la java virtual machine.

It needs to be cross platform compatible. Something that can have platform specific layers put on top which can interface with the core. It also needs to be able to be expandable, for instance, modular with developers being able to write "add-ons" or "extensions" which can alter the function of the end program and can use the core to its full extent.

Ben fatto. Hai inventato il concetto di linguaggi di programmazione. Sei in ritardo di alcuni decenni.

</cynism>

Più serio, sembra che tu stia cercando di inventare qualcosa di così straordinariamente generico, che possa risolvere praticamente ogni problema. Mi ricorda, ma non è uguale a, il motore delle regole aziendali .

Potresti passare un'eternità a sviluppare questo "nucleo" e poi scoprire che hai creato un software estremamente generico. Tuttavia nella vita reale non abbiamo quasi problemi generici. Abbiamo serie specifiche, alcune delle quali condividono proprietà. Potresti finire con un core molto generico, che non è adatto a molti dei tuoi problemi specifici. Fondamentalmente, avrai sbagliato e avrai perso un sacco di tempo. Nel frattempo, non hai software funzionante. Inoltre, non dimenticare che i requisiti dei problemi specifici saranno cambiati nel frattempo: i requisiti non sono mai stati corretti.

Suggerisco di prendere il contrario. Scrivi la prima "cosa" che vorresti eseguire su questo core. Vittoria immediata: software di lavoro molto veloce. Quindi, scrivi la prossima cosa. Forse anche un altro. Solo a quel punto, vedi cosa ha in comune il tuo codice. Estrai quelle parti a qualcosa di generico - non generico per tutti i problemi del mondo, ma solo i due o tre che stai risolvendo in questo momento. Ciò significa che hai un software funzionante veloce e un core che fa esattamente ciò che deve fare - né più né meno. Finché scrivi il tuo codice ragionevolmente modulare, non come una grande palla di fango , e hai qualche test decente, che non dovrebbe essere molto difficile.

Nuanciandolo un po ', a volte è semplicemente ovvio quali sono le parti generiche. Vai per questi quasi subito. Ma prenditi un momento per fermarti e pensa se sei assolutamente sicuro che queste siano parti generiche. In caso di dubbio, non renderlo generico per ora: YAGNI . Puoi sempre refactoring.

    
risposta data 01.03.2011 - 20:05
fonte
2

Direi che se vuoi multipiattaforma, allora probabilmente sei saggio iniziare con Java. Non è chiaro dalla tua domanda se stai parlando di creare qualcosa di basato sul web e accessibile da diverse piattaforme o che può essere installato su piattaforme diverse dagli utenti. In quest'ultimo caso, la soluzione migliore è Java o un linguaggio di scripting disponibile su molti diversi tipi di piattaforma.

Dato il vago accenno che sembra che stiate provando a creare un tipo di macchina virtuale comunque, dato che il tipo di Java funziona già su più piattaforme (in genere funziona su una piattaforma multipiattaforma, ma spesso il diavolo è nei dettagli) che sembra un buon punto di partenza.

Mi sembra che tu stia parlando di creare un linguaggio specifico per il dominio qui. Supponendo che tu sia chiaro sui dettagli del design DSL (e sulla progettazione linguistica in generale) e che tu abbia una specifica assolutamente dettagliata e non ambigua che dovrebbe essere un progetto interessante e abbastanza realizzabile. Non necessariamente semplice, soprattutto se si spera di semplificare l'interfaccia con molte lingue diverse. Se non si dispone di competenze esistenti qui, è possibile trovare qualcuno che lo faccia e convincerli a unirsi al team. Quello che stai descrivendo sembra un'impresa considerevole, quindi ci dovrebbe essere un sacco di budget per questo.

La tua domanda non chiarisce se hai una specifica chiara, dettagliata e non ambigua, ma è una domanda piuttosto vaga - se non hai una risposta più chiara della domanda che stai facendo, allora devi correggerla prima di andare oltre.

    
risposta data 21.02.2011 - 15:24
fonte
1

Ho visto una squadra cadere in questa trappola (beh, loro corsero attivamente verso di essa e vi saltarono dentro, e successivamente morirono sulle punte).

Il problema è che c'è un sacco di reinventare la ruota. Pensa a quanto tempo occorrerà per sviluppare tutti quei plugin / elementi estendibili dall'utente che è il vero nucleo di ciò che stai cercando di fare. Ora, hai questo enorme compito di costruire un framework / core. Le tue reali esigenze di business (le prime cose) saranno ritardate di 6mos-12mos sviluppando il core. Inoltre, il tuo core sarà un nuovo codice e dovrai impegnarti a fondo per correggere bug che non si riferiscono alle tue reali esigenze di business.

Il percorso verso il successo è trovare qualcosa che sia maturo (non solo il progetto open source di un ragazzo che non è stato aggiornato in 3 anni) e già esiste e fa il 90% + di quello che vuoi. Quindi fallo fare l'altro 10% o aggiusta il tuo progetto per adattarlo ai vincoli. Per il tuo caso, se si desidera un'applicazione per l'utente finale, Java è un gioco da ragazzi, o qualcosa che si esaurisce da un browser se si desidera l'accesso remoto. In questo modo ottieni gratuitamente milioni di ore di test e maturità del prodotto. E puoi consegnare 12 mesi prima.

Il pericolo è quando le persone dicono (e vendono ai loro capi) che "non c'è niente là fuori che esattamente quello che vogliamo." Certo che no, ma questo non significa che si reinventa la ruota, si adatta. "Non mi piace (un nitpick su Linux), quindi abbiamo bisogno di scrivere un sistema operativo!" Sembra sciocco vero? Eppure i team lo fanno sempre. Non dicendo che questo è il caso del tuo gruppo, sappi solo che ci sono molti progetti morti sui picchi in quella buca.

    
risposta data 04.02.2012 - 16:05
fonte
0

Non capisco appieno cosa stai facendo, e il tuo esempio di browser web confonde di più la questione ...

Ma, a me sembra che tu abbia bisogno di una SOA (Service oriented Architecture) con un server centrale. Nel qual caso la lingua scelta fa poca differenza.

    
risposta data 21.02.2011 - 14:59
fonte
0

L'ho fatto. link Ha elenchi collegati di ogni tipo di dati nella classe principale (può avere tanti o pochi dati di cui una classe ha bisogno) Espandibile utilizzando i segmenti di memoria condivisa in modo che ogni dll possa aggiungere le proprie classi all'elenco principale di cui sono clonate le classi nel programma principale. Multicore abilitato in modo che gli elenchi di classi possano essere eseguiti parallelamente. Ho aggiunto Lua come linguaggio di scripting in modo che possa essere espanso usando codice compilato (.dll) o script. Ho intenzione di aggiungere grafica, suoni, networking e un database per ulteriori funzionalità

    
risposta data 17.08.2013 - 04:42
fonte

Leggi altre domande sui tag