2010-07-22 22 views
7

Il grafico è probabilmente la struttura dati più versatile e di valore di tutti. Posso memorizzare singole variabili, liste, hash, ecc. E naturalmente grafici, con esso.Lingue con supporto grafico nativo/sintattico/in linea?

Detto questo, ci sono linguaggi che offrono supporto e sintassi in linea/nativi? Posso creare variabili, array, elenchi e hash in linea in Ruby, Python e Javascript, ma se voglio un grafico, devo gestire la rappresentazione da solo con una matrice/lista, o selezionare una libreria, e usare il grafico attraverso il metodo chiamate.

Perché mai è così nel 2010? E, praticamente, ci sono lingue là fuori che offrono supporto e sintassi del grafico in linea?

+0

Prova nPiet: http://www.bertnase.de/npiet/ (nota: questo è uno scherzo). –

+0

Punto interessante e valido. Sospetto che la varia natura dei grafici che le persone generalmente manipolano sia la ragione per cui non sono presenti nelle lingue come built-in (o anche parte di una libreria standard, AFAIK!). Ci sono, tuttavia, un sacco di linguaggi basati sulla riscrittura del grafico, ma questo generalmente accade dietro le quinte, non come una cosa accessibile ai programmatori. – Gian

+0

Concordo sul fatto che i grafici variano in natura, ma non che questo sia un motivo valido per non offrire un'implementazione predefinita e una sintassi in linea. –

risposta

2

Il problema principale di ciò che si sta chiedendo è che una soluzione più generale non è la migliore per un problema specifico. È solo nella media per tutti loro ma non è uno dei migliori.

Ok, è possibile memorizzare un elenco in un grafico assumendo la sua degenerazione, ma perché si dovrebbe fare qualcosa di simile? E come archivieresti una hashmap all'interno di un grafico? Perché avresti bisogno di una tale struttura?

E non dimenticare che l'implementazione del grafico deve essere scelta in base alle operazioni che si faranno su di esso, altrimenti sarebbe come usare una tabella per memorizzare un elenco di valori o un elenco per memorizzare una raccolta ordinata invece che un albero. Sai che puoi usare una matrice di adiacenza, un elenco di spigoli o elenchi di adiacenze .. ogni diversa implementazione con le sue stesse forze e debolezze.

Quindi i grafici possono avere molte proprietà rispetto ad altre raccolte di dati, ciclici, aciclici, dirette, non orientate, bipartite e così via .. e per ogni caso specifico è possibile implementarle in un modo diverso (ipotizzando qualche ipotesi sul grafico di cui hai bisogno) in modo da averli nella sintassi nativa sarebbe eccessivo, dal momento che sarebbe necessario configurarli comunque (e il linguaggio dovrebbe fornire molte implementazioni/ottimizzazioni).

Se tutto è già fatto rimuovi il divertimento dello sviluppo :) A proposito, cerca solo un linguaggio che ti permetta di scrivere il tuo grafico DSL e conviverci!

+0

Per essere onesti, penso che il mondo degli ambienti matematici programmabili sia interessante. Non ho molta esposizione ad esso, ma presumo che esistano, ed è un'idea che vale la pena esplorare, IMHO. –

+0

In Java, quando ho bisogno di un elenco, utilizzo un ArrayList per impostazione predefinita e passa a LinkedList se e quando è necessario. Perché non posso avere a portata di mano l'implementazione del grafico "best general fit" di default, costruire nella lingua, che posso aggiustare se ne ho bisogno? Non mi diverto molto a riconsiderare i dettagli di implementazione ogni volta che faccio un grafico, è un'enorme perdita di tempo. –

+0

Di solito quando hai bisogno di grafici ne hai bisogno per calcoli intensivi, ecco perché dovrai riflettere attentamente se usi una matrice o una lista di adiacenze (dato che sono opposte per alcune operazioni). La mia implementazione Java è di appena 600-700 righe di codice, l'ho scritta una volta e la uso ancora quando necessario, ma modellizza solo alcune proprietà .. comunque come la seta suggerisce che molti ambienti matematici hanno implementazioni di grafici – Jack

1

GrGen.NET (www.grgen.net) è un linguaggio di programmazione per il grafico trasformazione più un ambiente comprendente un debugger grafico. È possibile definire il modello del grafico, le regole di riscrittura e il controllo delle regole con alcuni linguaggi per scopi speciali e utilizzare il codice generato/C# generato da qualsiasi linguaggio .NET che vi piace o dalla shell fornita.

Per capire perché i linguaggi normali non offrono un'interfaccia così conveniente/incorporata ai grafici, basta dare un'occhiata alla quantità di codice scritta per quel progetto: il compilatore da solo ha diversi anni di lavoro. Questo è un prezzo troppo pesante per una struttura di caratteristiche/dati di cui solo una minoranza di programmatori ha mai bisogno, quindi non è inclusa nei linguaggi di programmazione generici.

Problemi correlati