Alla tua prima domanda, "come lo faresti" - risposta breve, non lo farei. Non ho abbastanza teoria del parser / compilatore per riuscirci. Ma ho programmato per 25 anni, quindi ho alcune idee e opinioni da condividere.
Prima di tutto, proverei a trovare un approccio OOP che ti consenta di creare modelli veramente connessi. Ciò che intendo con ciò è che i modelli sono una delle cose più importanti in quasi tutti i tipi di progetti di programmazione - è sempre un sacco di lavoro grintoso e refactoring continuo per farlo bene, e lo biasimo per la mancanza di una vera connettività in Lingue OO.
Mi permetta di dimostrare. Diciamo che una casa di classe ha una proprietà Porta.
var door = house.Door;
Ora hai una variabile locale con un riferimento all'istanza Door.
Ma considera quello che è appena successo: hai appena strappato la porta dalla casa e ora sei abbastanza felice di passare la porta in giro, e il resto del tuo codice ignora il fatto che questa porta è effettivamente attaccata a una casa.
Per me, questo è fondamentalmente sbagliato.
E sì, lo so, questo è "facilmente" risolto caso per caso - in questo caso mantenendo un riferimento inverso da ogni porta alla casa a cui è attualmente collegato. Questo ovviamente apre il tuo modello agli errori, poiché ora è tuo dovere mantenere accuratamente due riferimenti inversi, in modo da rendere private le proprietà House.Doors e Door.House e aggiungere metodi come House.AddDoor (), House.RemoveDoor ( ), Door.SetHouse () ecc. E cablare il tutto e testarlo per accertarsi che funzioni effettivamente.
Non sta iniziando a sembrare un sacco di lavoro per modellare una relazione così diretta? Un sacco di codice da mantenere? Un sacco di codice per refactoring mentre il modello si evolve?
Il problema sono i puntatori. Ogni linguaggio OO che ho visto soffre intrinsecamente del fatto che un riferimento ad oggetto è davvero un puntatore, perché è quello che usano i computer.
I puntatori non sono un buon modo per modellare il mondo reale. Indipendentemente dal mondo che stai cercando di modellare, è quasi garantito che qualsiasi relazione in quel mondo sarà a doppio senso. I puntatori puntano solo in una direzione.
Vorrei vedere un linguaggio in cui il modello di dati fondamentale è un grafico - in cui tutte le relazioni, per impostazione predefinita, hanno due fini. Ciò fornirebbe quasi sicuramente una misura molto più naturale per modellare il mondo reale, che è davvero l'unica cosa di cui abbiamo bisogno dei computer in primo luogo. (quello e i videogiochi.)
Non ho idea di come sarebbe la sintassi di una tale lingua, o se possa anche essere plausibilmente espresso usando il testo. (Mi chiedevo se un tale linguaggio dovesse essere grafico, in qualche modo ...)
Vorrei anche vedere tutte le forme di stato accidentale eliminate.
Ad esempio, nello sviluppo web, dedichiamo molto tempo a modellare i dati da database, a modelli di business, a modelli di visualizzazione per la presentazione ... quindi alcuni di questi dati vengono presentati su moduli, il che è in realtà solo un'altra trasformazione. .. e lo stato ritorna dai post dei form, e quindi rimodelliamo quei dati e li proiettiamo di nuovo sul modello di vista, ad es. leganti del modello di vista e simili ... poi proiettiamo dal modello di vista sul business- modello ... utilizziamo quindi mappatori relazionali a oggetti (o grunt work) per trasformare i dati dal modello di visualizzazione e proiettarli su un database relazionale ...
Sta iniziando a sembrare ridondante? A che punto durante tutta questa follia abbiamo davvero realizzato qualcosa di utile? E per utile intendo qualcosa di tangibile, qualcosa che l'utente finale può capire e preoccuparsi. Alla fine della giornata, le ore che hai trascorso a costruire qualcosa che gli utenti possono persino capire, sono davvero le uniche ore ben spese. Tutto il resto è effetti collaterali.
Vorrei un linguaggio altamente dinamico. Il ciclo di scrittura / compilazione / esecuzione è una noiosa perdita di tempo. Idealmente, la lingua dovrebbe solo capire cosa è cambiato e compilare / caricare in modo trasparente, in background, se necessario.
Idealmente, non dovresti nemmeno premere "corri": le cose dovrebbero accadere sullo schermo mentre apporti le modifiche, riflettendo immediatamente le modifiche che apporti. Il problema con il ciclo di scrittura / compilazione / esecuzione, o anche per il ciclo di scrittura / esecuzione più diretto, è che sei troppo disconnesso da ciò che stai facendo - per sentirci connessi al nostro lavoro, noi bisogno di feedback immediato, risultati immediati. Ogni attesa è troppo lunga!
Ancora una volta, non so nemmeno se questo potrebbe essere realizzato con un IDE tradizionale o se ciò richiederebbe un tipo di interfaccia completamente nuovo.
Dovresti essere in grado di utilizzare un mix di digitazione debole e forte, qualunque sia la più adatta al problema su cui stai lavorando.
Lo stato in generale dovrebbe essere qualcosa che la lingua gestisce completamente per te. Perché dovresti fare affidamento su un database per la persistenza? Idealmente, vorrei essere in grado di specificare semplicemente il periodo di vita di qualsiasi variabile nel modello: una richiesta Web, una sessione, 24 ore, in modo permanente.
Perché dobbiamo scegliere tra una vasta gamma di soluzioni di archiviazione per diversi supporti e termini di vita? - per non parlare di trasformare e modellare i dati per adattarli a ciascun supporto; cache del browser, database, memoria, disco, a chi importa! I dati sono dati. Dove conservi i tuoi dati (e per quanto tempo) dovrebbe essere una scelta semplice, non una battaglia contro gli dei!
Bene, buona fortuna con quello.