Linguaggi di programmazione visiva


35

Molti di noi hanno imparato a programmare usando linguaggi di programmazione "testuali" come Basic, C / C ++ e Java. Credo che sia più naturale ed efficiente per gli esseri umani pensare visivamente. La programmazione visiva consente agli sviluppatori di scrivere programmi manipolando elementi grafici. Immagino che l'utilizzo della programmazione visiva dovrebbe migliorare la qualità del codice e ridurre i bug di programmazione. Sono a conoscenza di alcuni linguaggi visivi come App Inventor , Scratch e LabView .

Perché non ci sono linguaggi visivi tradizionali e generici per gli sviluppatori? Quali sono i vantaggi e gli svantaggi della programmazione visiva?


7
Hai ragione: le persone pensano visivamente. Ma le immagini di codice complesso sono impossibili da cogliere in un colpo d'occhio, quindi qual è il vantaggio? Un buon programmatore ha un modello visivo del codice nella sua testa, qualunque cosa sia sullo schermo. I linguaggi visivi sono, imho, per le persone che non hanno (ancora) imparato a sottrarre dalla rappresentazione testuale di un programma. Detto questo, credo che il codice testuale debba avere un bell'aspetto, ad esempio strutture e chiare, al fine di renderlo navigabile con gli occhi.
Raffaello

@Raphael, OK, immagina questo, cosa succede se ti chiedo una descrizione testuale di un grattacielo anziché la sua stampa blu?
Mohammad Al-Turkistany,

2
I linguaggi visivi sono certamente impiegati, almeno in una certa misura, nei costruttori di interfacce utente. Si possono anche collegare pulsanti ecc. Al codice sottostante implementando la funzionalità senza scrivere alcun codice (tranne il codice sottostante).
Dave Clarke,

1
@ MohammadAl-Turkistany: questo confronto non è molto buono. Innanzitutto, i grattacieli sono costruiti "visivamente", quindi ha senso che i loro piani si adattino; il software è alla fine della giornata, quindi sembra appropriato usare il testo come modello. In secondo luogo, non credo che qualcuno voglia progetti di più grattacieli sovrapposti che infrangono le leggi della fisica; ma questo è l'aspetto del software oggi.
Raffaello

@ MohammadAl-Turkistany Penso che questo sia troppo ampio. Il tuo ultimo paragrafo contiene 4 domande. Questo è troppo.
uli

Risposte:


36

In generale, esiste un compromesso nella progettazione del linguaggio di programmazione tra facilità d'uso ed espressività (potenza). Scrivere un semplice programma "Hello, world" in una lingua per principianti, come Scratch o App Inventor, è generalmente più semplice che scriverlo in un linguaggio di programmazione generico come Java o C ++, dove è possibile scegliere tra diversi stream per output, set di caratteri diversi, possibilità di modificare la sintassi, tipi dinamici, ecc.

Durante la creazione di App Inventor (di cui facevo parte), la nostra filosofia di progettazione era di rendere la programmazione semplice per i principianti. Un esempio banale è stato quello di basare i nostri indici di array su 1, anziché su 0, anche se ciò rende i calcoli che potrebbero essere eseguiti da programmatori avanzati leggermente più complessi.

Il modo principale, tuttavia, che i linguaggi di programmazione visiva tendono ad essere progettati per i principianti è l'eliminazione della possibilità di errori di sintassi rendendo impossibile la creazione di programmi sintatticamente non validi. Ad esempio, le lingue di blocco non consentono di impostare un valore come destinazione di un'istruzione di assegnazione. Questa filosofia tende a produrre grammatiche e lingue più semplici.

Quando gli utenti iniziano a creare programmi più complessi in una lingua a blocchi, scoprono che il trascinamento dei blocchi è più lento di quanto la digitazione sarebbe. Preferiresti digitare "a * x ^ 2 + b * x + c" o crearlo con i blocchi?

Giustizia non può essere data a questo argomento (almeno da me) in alcuni paragrafi, ma alcuni dei motivi principali sono:

  1. Le lingue di blocco tendono ad essere progettate per i principianti, quindi non sono così potenti dal design.
  2. Non esiste un modo visuale piacevole per esprimere alcuni concetti complessi, come i sistemi di tipi, che trovi nei linguaggi di programmazione generici.
  3. L'uso dei blocchi è ingombrante per programmi complessi.

3
Puoi dire che le chicche visive non si adattano ai progressi dell'utente?
Raffaello

Bella risposta. Mi piace la menzione dei compromessi del design.
John Percival Hackworth,

7
@Raphael, penso di si. Questo è uno dei motivi per cui la progettazione di circuiti integrati è passata dallo schema (che è un linguaggio grafico) a HDL e sintesi. Penso che qualcuno interessato ai linguaggi grafici dovrebbe studiare gli usi di schemi e HDL nella progettazione dei circuiti e perché si è verificato l'interruttore e perché lo schema è ancora preferito in alcuni casi.
AProgrammer

1
@AProgrammer: interessante. Sembra "impara visivamente, padroneggia l'astrazione".
Raffaello

Penso che le persone dovrebbero provare a combinare il meglio di entrambi i mondi. Quindi per "a x ^ 2 + b x + c" lo scriverei, ma apparirebbe come blocchi (o qualsiasi altra cosa visiva), e quindi potrei trascinarlo in giro o fare collegamenti graficamente. Penso che sia tutta una questione di progettazione dell'interfaccia utente, per la quale il miglior compromesso è l'uso più efficace dei controlli grafici e della tastiera e della visualizzazione grafica e testuale, e penso che possiamo fare meglio della semplice evidenziazione della sintassi ..
guillefix

21

Perché non ci sono linguaggi visivi tradizionali e generici per gli sviluppatori? Quali sono i vantaggi e gli svantaggi della programmazione visiva?

I linguaggi visivi tendono a spezzarlo in tre grandi categorie:

  1. Strumenti non programmatori per eseguire attività di automazione di base. Pensa Automator sul Mac.
  2. Ambienti di apprendimento in cui non è pratico avere molta digitazione o in cui la struttura del programma che mostra il flusso logico è importante. Pensa a Scratch, Alice, ecc.
  3. Il problema affrontato è un problema di flusso di dati e la soluzione al problema è ben modellata da una sorta di flussi di dati tra scatole autonome che imitano il mondo fisico. LabView e Ableton vengono entrambi in mente.

Il vantaggio della programmazione visiva è che si ottiene una panoramica di alto livello della struttura del sistema. Questo porta al problema immediato che quando sei dettagliato, il tuo codice spaghetti sembra davvero spaghetti . Un componente comune dei linguaggi visivi è una sorta di blocco di codice o componente di configurazione per l'elemento visivo. Il problema è che il programmatore deve dare un senso ai blocchi di codice disconnessi che possono essere interconnessi in modi strani.

Sebbene non ci sia nulla di sbagliato nella programmazione visiva, può darsi che non sia semplicemente un buon approccio per la maggior parte delle attività.


Ho pensato di farti sapere che l'autore dell'altra risposta pensa che la tua sia buona. :-)
Ellen Spertus,

quando ti riferisci ad Ableton, intendi Max / MSP? I due sono progetti separati sviluppati da diverse organizzazioni e Max / MSP, così come il suo fratello open source PureData sono più complessi ed espressivi di quanto il tuo punto 3 dia loro credito per IMO.
sol,

11

Esistono numerosi linguaggi di programmazione visiva, come mostreranno le seguenti due bibliografie: vlib.org e oregonstate.edu .

IMHO non sono riusciti a guadagnare trazione, perché mentre fanno bene agli esempi di giocattoli, non riescono a gestire i molteplici livelli di astrazione, rappresentazione e granularità richiesti dai grandi progetti. Dovresti guardare un sistema come AutoDesk Revit (un sistema di gestione delle informazioni sugli edifici utilizzato da architetti e ingegneri) per vedere quanto può diventare complessa la gestione delle informazioni visive.

Piuttosto che guardare alla programmazione generale, è molto probabile che la programmazione visiva abbia successo come strumento di configurazione in domini specializzati.


8

Il testo è visivo.

Usiamo tutti i tipi di segnali visivi nel nostro codice. Ogni uso di spazi bianchi (rientri, nuove righe, righe vuote, spaziatura intralina) è diretto a fornire segnali visivi per la funzionalità del codice. Usiamo tutti i tipi di sintassi diversa per fornire informazioni visive su ciò che sta facendo il codice. I nostri redattori colorano il nostro codice per farlo risaltare.

La matematica è testuale. C'è ogni tipo di notazione, ma alla fine si riduce sostanzialmente al testo. Lo fanno da centinaia di anni.

Il mio punto: la rappresentazione testuale del codice si avvale delle capacità visive che gli umani hanno. Probabilmente possiamo usarlo meglio, ma non abbandonando il testo.


1
Bella osservazione, ma il tuo ultimo applauso è un'affermazione audace. Perché pensi che elementi visivi più elaborati di spazi bianchi e simboli diversi (e forse colori) non possano aiutare?
Raffaello

1
@Raphael, non sto dicendo che non possiamo fare uso di elementi visivi più elaborati, ecco perché ho detto "Probabilmente possiamo farne un uso migliore." Sto dicendo che non accadrà buttando via del testo. Tutti i linguaggi di programmazione "visivi" che ho visto iniziano partendo dal presupposto che il testo sia cattivo e cerca di eliminarlo e lì sono completamente sbagliati.
Winston Ewert,

6

[Per la versione PDF di questa risposta , le figure o i diagrammi sono interattivi e dinamici.]

Elementi e annotazioni netti: un linguaggio di programmazione visiva per tutti gli usi

Uso la grafica per organizzare i programmi JavaScript ™ che utilizzano l'API Acrobat® / JavaScript. Ogni oggetto grafico rappresenta un elemento Petri Net (luogo, transizione, input o output) o rappresenta più di un elemento Petri Net. Ogni oggetto grafico è in realtà un'annotazione dell'elemento netto corrispondente. Tuttavia, se ogni oggetto grafico viene mappato su un solo elemento net, può essere utilizzato per generare l'elemento net. E se un oggetto grafico si associa a più di un elemento di rete e la mappatura è ben definita, può anche essere utilizzata per generare gli elementi di rete. Gli elementi Petri Net standard sono rappresentati da alcuni tipi di grafici: un cerchio è un luogo, un quadrato o un rettangolo o una linea è una transizione, una freccia da un cerchio a un quadrato è un input e una freccia da un quadrato a un cerchio è un produzione. Inoltre,

[I tipi di annotazioni in una "Rete Petri standard" si trovano nella versione PDF di questa risposta.]

Carl Adam Petri ha descritto la maggior parte di queste idee (inclusi i tipi di annotazioni in una "Rete di Petri standard" nella sua tesi di dottorato (Petri, 1966). Ha anche applicato gli elementi e le annotazioni di rete alla descrizione di numerosi circuiti logici, come la Figura 6.

Vantaggi e sfide

Un linguaggio di programmazione visiva può aiutare un programmatore di computer a sviluppare programmi per computer (Menzies, 2002).

Ho almeno tre ragioni per cui trovo utili elementi di rete e annotazioni (vantaggi?).

La prima ragione. La logica di processo può essere creata un elemento alla volta. Ciò significa che una rete può essere estesa aggiungendo elementi alla rete esistente (Petri, 1966). Ad esempio, un modello di controller può essere diviso in componenti interni ed esterni. Il componente interno regola il sistema. Il componente esterno si interfaccia con l'ambiente accettando l'input dall'ambiente. La Figura 1 è un modello di Petri Net del componente interno. È possibile aggiungere un modello Petri Net del componente esterno al modello Petri Net del componente interno aggiungendo i punti appropriati e la transizione (Figura 2).

Figura 1 Un modello di Petri Net di un componente interno di un controller (Halloway, Krogh e Giua, 1997) Un modello di rete di Petri di un componente interno di un controller (Halloway, Krogh e Giua, 1997)

Figura 2 Un modello di rete di Petri di un componente interno ed esterno di un controller (Halloway, Krogh e Giua, 1997) Un modello di rete di Petri di componenti interni ed esterni di un controller (Halloway, Krogh e Giua, 1997)

Secondo motivo I codici associati a ciascun elemento di rete possono provenire da più di un "linguaggio di programmazione" (Petri, 1973). Possono provenire da un linguaggio informatico come JavaScript, COBOL, ADA e un linguaggio assembly. Possono venire da un linguaggio matematico come i simboli algebrici. Possono provenire da prosa codificata in inglese, tedesco, francese, greco, tagalog, cinese, ecc. Pertanto, può essere utilizzata come base per la comunicazione e la collaborazione durante l'intero ciclo di vita dello sviluppo del software o del sistema; e tra diversi utenti, sviluppatori e stakeholder (Petri, 1973).

Terza ragione. È possibile concentrarsi su determinati oggetti grafici nella rete e scrivere il codice o le annotazioni logiche per gli oggetti grafici correlati. Si consideri un modello di Petri Net di un gioco di carte in Figura 3. Se la freccia per l'ingresso P7  T4 è una grafica standard per un ingresso in una rete Place / Transition e se m_7 è il segno per il posto P7, allora l'annotazione logica per l'aggiornamento del segno del luogo di input è m_7 = m_7-1. Se s_9 ^ - è lo stato dell'input, l'annotazione logica per l'aggiornamento dello stato dell'input è s_9 ^ - = ((m_7 <1)? False: true).

Figura 3 Un modello di Petri Net di un gioco di carte Un modello di Petri Net di un gioco di carte

Ho almeno tre motivi per cui trovo l'applicazione delle reti di Petri stimolante (svantaggi?)

Se ci sono troppi oggetti grafici, sarebbe difficile creare o leggere la rete. La difficoltà può essere mitigata prendendo un sottoinsieme della grafica e rappresentandola usando uno, due o tre simboli grafici (Noe, 1973; Petri, 1966). Ad esempio, se si considera che il modello di Petri Net di un gioco di carte nella Figura 3 abbia troppi oggetti grafici nel diagramma, è possibile combinare alcuni elementi grafici e mantenere comunque informazioni sufficienti per mappare il diagramma in un programma per computer. Considera la Figura 4, un modello di Petri Net dello stesso gioco trovato nella Figura 3 con grafica di alto livello (Chionglo, 2016a).

Figura 4 Un modello di Petri Net di un gioco di carte usando grafica di alto livello (Chionglo, 2016a) Un modello di Petri Net di un gioco di carte che utilizza grafica di alto livello (Chionglo, 2016a)

In un altro esempio, i componenti esterni del controller nella Figura 2 possono essere combinati per creare una rappresentazione grafica più concisa, come mostrato nella Figura 5.

Figura 5 Un modello di Petri Net di un controller con grafica di alto livello per componenti esterni Un modello di Petri Net di un controller con grafica di alto livello per componenti esterni

Infine, un insieme di luoghi reciprocamente esclusivi o un insieme mutuo di transizioni esclusive possono anche essere rappresentati utilizzando un oggetto grafico di alto livello (Chionglo, 2015).

Secondo motivo Anche con la grafica standard, può essere difficile disegnare e posizionare la grafica soprattutto se ci si aspetta che il diagramma finale sia facile da usare per l'utente o per il lettore. Alcune delle decisioni per realizzare un diagramma user-friendly o di lettura includono: la corretta disposizione degli oggetti grafici, le dimensioni appropriate della tela e delle forme, la curvatura delle frecce, il tipo di punte di freccia, la dimensione e il carattere del testo, e la scelta dei colori per grafica e testo.

Terza ragione. È facile creare annotazioni di elementi di rete in modo ordinato perché ogni annotazione è direttamente o indirettamente correlata a un elemento di rete. Tuttavia, visualizzare ogni annotazione insieme alla grafica di ogni elemento di rete potrebbe non essere una buona idea perché potrebbero esserci troppe informazioni presentate nel diagramma. Ad esempio, si consideri un diagramma di un modello di Petri Net di un circuito logico che include riferimenti a tutte le annotazioni logiche e di proprietà (Figura 6). [Il modello originale includeva una condizione di prova per lo stato di per ogni uscita (figura 31 a pagina 78 di (Petri, 1966)); la condizione di prova è stata omessa qui perché è equivalente al modello originale per la marcatura iniziale data. Pertanto ogni output ha un'annotazione logica per calcolare il segno del luogo di output.]

Figura 6 Una rete di luoghi / transizioni con annotazioni - basata sulla figura 31 pagina 78 di una traduzione inglese della tesi di Petri (1966) A Place / Transition Net con annotazioni - basato sulla figura 31 pagina 78 di una traduzione inglese della tesi di Petri (1966)

Un modo per mitigare questa sfida sarebbe identificare i tipi di annotazioni utilizzate nel modello e definire oggetti grafici che includano annotazioni di questi tipi (Petri, 1966). Pertanto, quando un diagramma di Petri Net è composto da oggetti grafici dalle definizioni, l'interpretazione di questi oggetti dovrebbe includere le annotazioni "invisibili". La figura 7 deve essere interpretata come una rete di Petri standard (per le definizioni, vedere Annotazioni di una rete di Petri standard); pertanto, l'annotazione logica può essere omessa dal diagramma.

Figura 7 A Place / Transition Net - basato sulla figura 31 pagina 78 di una traduzione inglese della tesi di Petri (1966) A Place / Transition Net - basato sulla figura 31 pagina 78 di una traduzione inglese della tesi di Petri (1966)

Un altro modo per mitigare questa sfida sarebbe quello di utilizzare le viste del modulo delle annotazioni per integrare o integrare i diagrammi (Chionglo, 2016b; 2014). Le viste possono essere ulteriormente suddivise in viste più piccole e ciascuna vista può essere visualizzata e nascosta.

Riferimenti

Chionglo, JF (2016a). Una risposta a "Come progettare un flusso di stato per un gioco flashcard di reazione / redux?" Su Stack Overflow. Disponibile su https://www.academia.edu/34059934/A_Reply_to_How_to_design_a_state_flow_for_a_react_redux_flashcard_game_at_Stack_Overflow .

Chionglo, JF (2016b). Due viste in forma di una rete di Petri. Disponibile su http://www.aespen.ca/AEnswers/CAPDissF31P78-form.pdf .

Chionglo, JF (2015). Riduzione del numero di elementi grafici netti in un diagramma di Petri Net mediante grafici di alto livello. Disponibile all'indirizzo http://www.aespen.ca/AEnswers/WjTpY1429533268 .

Chionglo, JF (2014). Elementi e annotazioni netti per la programmazione di computer: calcoli e interazioni in PDF. Disponibile su https://www.academia.edu/26906314/Net_Elements_and_Annotations_for_Computer_Programming_Computations_and_Interactions_in_PDF .

Halloway, LE; Krogh, BH e Giua, A. (1997). Un sondaggio sui metodi di Petri Net per sistemi di eventi discreti controllati [versione elettronica]. Sistemi dinamici di eventi discreti: teoria e applicazioni, vol. 7. Boston: Kluwer Academic Publishers, pagg. 151-190.

Menzies, T. (2002). Problemi di valutazione per linguaggi di programmazione visiva. In SK Chang (ndr). Manuale di ingegneria del software e ingegneria della conoscenza, vol. 2 Tecnologie emergenti. World Scientific Publishing co. Pte. Ltd., pagg. 93-101.

Noe, JD e Nutt, GJ (1973). "Macro reti elettroniche per la rappresentazione di sistemi paralleli", Transazioni IEEE su computer, vol. C-22, n. 8, agosto 1973, pagg. 718 - 727.

Petri, CA (1973). Concetti di teoria della rete. In Fondamenti matematici dell'informatica: Proc. di Simposio e Summer School, Alti Tatra, 3 - 8 settembre 1973, pagine 137 - 146. Matematica. Inst. dell'Acad slovacco. of Sciences, 1973.

Petri, CA (1966). Comunicazione con Automota [trans. CF Greene, Jr.]. Supplemento I alla relazione tecnica RADC-TR-65-377 (volume I). Base aeronautica Griffiss, New York: Centro di sviluppo aereo di Roma, Divisione Ricerca e tecnologia, Comando dei sistemi aeronautici, Base aeronautica Griffiss. Estratto il 31 agosto 2011 da http://www.informatik.uni-hamburg.de/TGI/mitarbeiter/profs/petri/doc/Petri-diss-engl.pdf .


2

Johne Percival Hackworth :

Sebbene non ci sia nulla di sbagliato nella programmazione visiva, può darsi che non sia semplicemente un buon approccio per la maggior parte delle attività.

Forse fino ad oggi i linguaggi di programmazione visiva sono stati troppo immaturi? L'idea che le visualizzazioni avanzate non possano essere applicate agli artefatti del software e che siano lasciate completamente alla 'immaginazione' di ogni sviluppatore di lanciare le proprie potrebbe essere un falso presupposto. L'innalzamento del livello di astrazione in modo uniforme e automatizzato sembra ovvio, quindi finché non viene sacrificata la capacità di eseguire astrazioni di basso livello e prestazioni di esecuzione elevate. Ciò potrebbe in definitiva portare alla "programmazione" di esperti di dominio non molto diversa dal modo in cui i fogli di calcolo automatizzano il compito dei programmatori COBOL di manipolare i numeri. La differenza principale qui sta sostituendo i numeri con la manipolazione di "sistemi generali".


2

Puoi guardare la programmazione senza tecnologia di codifica (PWCT)

PWCT è un linguaggio di programmazione visiva per scopi generici che consente lo sviluppo di sistemi e applicazioni generando passaggi interattivi anziché scrivere codice.

Ecco un buon punto di partenza ed è open source .


Per un sito Web su un linguaggio di programmazione visiva quel secondo link è sicuramente troppo testuale. Non una singola pagina con schermate. E il link di Wikipedia è rotto; l'articolo è stato cancellato per non notabilità.
Wildcard il

2

una domanda difficile. la programmazione visiva o basata sul flusso è effettivamente diventata più utilizzata, ma non è ampiamente utilizzata rispetto a tutti i linguaggi di programmazione. fattori significativi sono la manutenzione e la standardizzazione. il codice del computer può essere stampato sulle pagine. non è sempre così chiaro come stampare un programma visivo.

contrariamente all'attuale risposta principale, direi che non esiste assolutamente alcuna limitazione teorica inerente al potere di programmazione visiva rispetto ai linguaggi testuali. infatti la programmazione visiva può essere vista come più facile da mantenere un giorno sulla base di una concettualizzazione umana più rapida dei molti strati di astrazione . quindi sembra che ci sia un elemento inconfondibile di inerzia / conservatorismo sociale / culturale nella sua diffusione.

gli editor visivi sono probabilmente molto più complessi nel loro codice, e questo è formidabile considerando che anche solo gli IDE basati su testo possono essere molto complessi, ad esempio Eclipse , si noti che ci sono plugin orientati alla programmazione visiva in alcuni IDE come eciplse, ad esempio per la costruzione di GUI. la programmazione visiva per la costruzione della GUI è ormai abbastanza diffusa.

mi sembra che l'uso della programmazione visiva stia aumentando in aree selezionate e che da molto tempo potrebbe diventare più comune.

non dimentichiamo che la programmazione visiva è inerente al design del chip EE per decenni in cui non è un'astrazione e i (sotto) sistemi sono disposti in progetti 2D esattamente come previsto.

il kit di brainstorms Lego , ormai diffuso e vecchio di oltre un decennio, ha sempre avuto un software di sviluppo basato sulla programmazione visiva, ora ottimizzato in modo significativo su molte versioni.

ecco un recente articolo interessante che analizza la storia e le prospettive e suggerisce che potrebbe diventare più comune per la programmazione basata sul web. La disposizione dinamica di controlli / widget in una pagina è una variante della programmazione visiva.

un altro settore chiave / emergente in cui è ampiamente utilizzato in molti strumenti è il BPM, la modellizzazione dei processi aziendali.


1

Immagino il motivo per cui queste soluzioni non sono così popolari, perché nella maggior parte dei casi possono essere non gestibili e diventare un disastro.

Quasi tutti gli strumenti di programmazione visiva disponibili oggi fanno parte di applicazioni più grandi e utilizzati per uno scopo specifico (ad esempio: Blueprint in UE4).

Ad ogni modo, uno nuovo che mi sono imbattuto di recente per la programmazione generale è Korduene che non è proprio uno scopo abbastanza generale, in quanto è più per la creazione di applicazioni Windows.


Hai delle citazioni a sostegno della tua affermazione che nella maggior parte dei casi i linguaggi visivi diventano disordinati e ingestibili?
David Richerby,

In realtà sì, ad esempio spaghetti graph, anche con il software che ho menzionato sopra, lo sviluppatore stesso ha avuto quel problema (ho seguito da vicino lo sviluppo di quell'app), per fare il backup del mio punto, dai un'occhiata a questo LINK .
NetInfo,

1

Penso che @Raphael e altri abbiano torto quando dicono che un programma è un testo. Non lo è. Sono molte cose. Sta dicendo al computer cosa fare o come farlo. (programmazione imperativa e dichiarativa) L'associazione della programmazione con l'editing del testo è un dogma storico e controintuitivo. Che è stato creato dai limitati input / output testuali dei primi computer. Le persone non sono parser di testo!

Mentre penso che la gente abbia ragione nel dire che un linguaggio completamente visivo (in cui si fa qualsiasi cosa visivamente, collegando elementi tramite mouse e simili) è poco pratico per un linguaggio generico, penso che tutte le lingue attuali potrebbero essere e dovrebbero essere spostate in un intermedio livello. Dove gli elementi del linguaggio hanno una rappresentazione visiva, che viene salvata in un file di linguaggio binario. Il programmatore non scriverebbe il testo come un matto, o vivrebbe sotto l'incantesimo di righe e rientri.

Ma inserisce elementi tramite la combinazione più produttiva di tasti di scelta rapida / comandi / elementi dell'interfaccia utente. E digita solo stringhe e altri dati e identificatori. Ciò renderebbe impossibili gli errori di sintassi e renderebbe le lingue con sicurezza e correttezza in mente (ad es. ADA) molto più produttive. E renderebbe anche gli altri più sicuri e meno buggy, rendendo impossibili intere classi di errori comuni. (Come quelli che l'ADA impedisce di essere ingombranti)

In una certa misura le cose stavano andando in questo modo. Per rientro automatico e colorazione della sintassi. Purtroppo nessuno ha capito (o curato abbastanza) che è il concetto chiave del "parser di testo umano" è ciò che è sbagliato. Gli argomenti emacs vs vim sono divertenti perché entrambi sono sbagliati. Sono "soluzioni" a un problema creato artificialmente.


1
"Le persone non sono parser di testo!" Cosa stai facendo adesso? Ma, in ogni caso, questa risposta sembra essere principalmente la tua opinione personale su quale sarebbe il modo migliore per programmare. Ci sono esempi di lingue o ricerche che puoi citare per elevare questo oltre il livello di opinione personale? Quali vantaggi vedi nella memorizzazione del codice sorgente in un formato binario? Mi sembra che questo ti metterebbe in balia dei bug nell'ambiente di sviluppo - almeno quando le cose sono memorizzate come testo, posso usare un editor di testo diverso se il mio preferito non funziona per qualche motivo.
David Richerby,

@DavidRicherby Naturalmente non ci sono esempi. Stavo parlando di cosa potrebbe essere. Il formato binario potrebbe essere adattato alla lingua. Potrebbe portare migliori prestazioni e sicurezza dei dati. "Mi sembra che questo ti metterebbe in balia di bug nell'ambiente di sviluppo" È sempre così. Dovrebbe essere privo di bug. Proprio come molti altri software.
mzso

Se il formato è standardizzato come dovrebbe, potrebbe avere editor diversi. Ho pensato che sarebbe stato molto utile se anche la parte visiva fosse standardizzata. Per quanto riguarda un programma, l'archiviazione e il recupero dei dati senza errori non è un requisito esotico. Molti software maturi ottengono questo risultato, con bug pochi e lontani tra loro.
mzso

1
Ho chiesto "esempi o ricerche"; hai detto che non ci sono esempi. Questo lascia la ricerca. Sostieni che un formato binario migliorerebbe le prestazioni e la sicurezza. Come? Abbiamo già un formato sorgente standardizzato: testo. Perché usare binario? Un linguaggio di programmazione visiva è più complicato e più specializzato di un editor di testo: sembra più probabile che sia difettoso e che ci siano già editor di testo già maturi.
David Richerby,

@DavidRicherby Il testo non è un formato di origine. È un semplice file di testo stupido, che memorizza il testo. Naturalmente sarebbe più complicato, è solo una cosa semplice modificare il testo, non per la programmazione. Sarebbe più veloce evitando l'analisi del testo, l'interpretazione. Un file di testo memorizza i caratteri, un file di lingua conterrebbe gli elementi di lingua. (più dati) Il linguaggio visivo non sarebbe più complicato, sarebbe lo stesso in una rappresentazione diversa. Senza l'handicap dell'editor di testo. PS: Non so perché o come ti aspetti esempi, ricerca di un'idea.
mzso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.