Eh no stanno proprio così
https://stackify.com/popular-programming-languages-2018/
"C is also the most popular language for embedded systems in cars, electronics, and other devices"
Ad oggi comincia a muoversi qualcosa, con i vari micropython e javascript più o meno castrati per stare nei limiti dell'hardware embedded.
Ho letto il sito e c'è scritto quello che hai indicato però bisognerebbe vedere altri siti.
Però l' embedded non riguarda questa discussione e ne voglio fare l' errore di mettermi a cercare altre cose, visto che già ho troppa carne sul fuoco ed pure la confusione in testa.
Semplicemente non si usa. Funzioni annidate? No grazie, non le uso.
Mai sentite nominate questo tipo di funzioni quindi non lo so.
Ti dico semplicemente che non puoi. Non hai il know-how per realizzare una cosa del genere. E per acquisirlo dovrai per forza di cose studiare vari linguaggi e diventarne un discreto utilizzatore, cosa che potrebbe aprirti gli occhi sulla futilità di creare un linguaggio nuovo per sole ragioni estetiche.
Non pensavo che anche modificare un pochino un compilatore fosse così complicato.
Per me è come se uno deve modificare solo un piccola parte di un programma. Mi piacerebbe sapere a livello generale perchè.
Però ho deciso di lasciar perdere e quindi non mi metterò a modificare, nemmeno un pochino il compilatore.
Pessimo approccio. Mi sento di suggerirti quanto già scritto da rctimelines. Non puoi pretendere di imparare a programmare spiluccando qua e là sul web. Occorre uno studio serio e decine di migliaia di ore di pratica.
Non pretendo di imparare a programmare in quel mondo e non mi interessa imparare a programmare.
Voglio modificare questo approccio sbagliato che ho.
Per l' assembly sintassi Intel sto cercando di stabilire un percorso, un metodo e di trovare tutto il materiale consigliato (no disinformazione) che mi possa servire. Inizio prima ad imparare l' architettura visto che è importante. Poi dopo verrà il linguaggio.
Per imparare una cosa io trovo utile che qualcuno la spieghi. Una volta fatto questo poi si passa al/ libro/i o/e alle dispense.
L' importante è non andare a sinistra e a destra per i siti web, forum, guide, libri etc... a leggere a pezzi perchè se no è un disastro.
Per quanto riguarda un linguaggio ad alto livello ora non ancora non iniziato. Sto cercando, sto vedendo, sto leggendo, sto dando un occhiata.
Ecco perchè avevo chiesto un linguaggio simile o quasi a me da imparare.
C'è un linguaggio che si trova in mezzo tra l' assembly (non quello puro) ed il C?
Sto valutando ad es., HLA, Pascal e REXX.
E allora scordati di modificare un linguaggio o crearne uno tuo. Programmare un semplice software è fattibile anche per chi è a digiuno di teoria, ma pensare di fare lo stesso con un linguaggio è impossibile. C'è una quantità disumana di teoria ( oltretutto roba matematica di altissimo livello ) dietro un linguaggio, compilatore o interprete.
La risposta si riferiva al fatto che mi avevi detto, prima, che ero interessato ad imparare solo la teoria in particolare le nozioni.
Io ho sempre detto che non sono nemmeno immaginare a crearmi un linguaggio tutto mio ed il relativo compilatore.
Riguardo alla modifica di un linguaggio ed il relativo compilatore intendevo un pochino o un po' in maniera tale che fosse meno complesso e che mi permettesse di rendere un pochino/un po' sopportabile ad es. il C o il Pascal o il Quick Basic o il Cobol.
Ripeto: lascio perdere la modifica del compilatore.
Ma il punto è che intendi per modo di pensare o ragionare. Come dicevo LISP è il più flessibile dei linguaggi ad oggi esistenti e tramite le macro consente di creare costrutti di programmazione arbitrari. In questo senso può essere plasmato per avvicinarsi al proprio modo d'interfacciarsi ma i problemi. Ma in generale si usa questa caratteristica per rendere il linguaggio più adatto ad affrontare il tipo di problema da risolvere. Riguardo il modo di pensare del programmatore, è lui a doversi adattare sia al linguaggio sia al problema.
Forse è meglio se farò un esempio.
Anche per quello che hai detto per il Lisp ci sono cose che non so, es. la programmazione arbitrari.
Riguarda all' ultima frase. Chi ha creato un suo linguaggio, (es. quelli che ho menzionato prima) indicano che la cosa è soggettiva e dipende dal linguaggio in questione.
No. Pascal non ha nessuna rigidità. Pascal offre un modello di programmazione come fa qualsiasi altro linguaggio. E' rigoroso, non rigido.
Con rigidità intendevo rigoroso. Ho sbagliato termine.
Il C veniva/viene utilizzato di più rispetto al Pascal anche per altri motivi oltre al fatto che non rigoroso quando il Pascal? Sto prendendo informazioni su Pascal.
La domanda è riferita ai pc, server e workstation.
Per Pascal non intendo Delphi oppure Object pascal.
I .h sono header file non librerie. Gli header file esistono in C e C++ allo scopo di indicare la struttura delle funzioni presenti in una libreria esterna, affinchè un programma possa utilizzarla.
Anche leggendo la bibbia del C seconda edizione, avevo capito male.
Ora ho capito.
Pure la stragrande maggioranza dei processori e dei microcontrollori usati nell'embedded sono general purpose.
Ovviamente i processori sono tutti general purpose.
I microcontrollori però non vengono utilizzati per il general computing.
Passiamo avanti XD.
ok.
Il tutto senza però voler conoscere prima il C? Come dire che uno decide di modificare una BMW senza conoscere come sono realizzati i motori BMW.
Si, è estremamente complesso e richiede una conoscenza profonda del linguaggi che si andrà a modificare e dalla codebase del compilatore su cui mettere le mani.
Assolutamente no. Senza imparare il linguaggio di programmazione che si vuole modificare non si va da nessuna parte.
No, ma tutte le funzionalità che i vari linguaggi hanno, che stanno introducendo o che introdurranno nei prossimi anni, esistono già in LISP. La programmazione funzionale è cosa nota da decenni nel mondo LISP, ma è novità assoluta nel mondo dei linguaggi mainstream.
Capito. Non so se mi devo preoccupare per questo cambiamento che ci sarà.
Ma mi pare di capire che tu non vuoi avere niente a che fare con linguaggi che ritieni inadeguati. Oltretutto li giudichi dopo averli usati per quanto tempo? Un linguaggio è un'entità complessa ed occorrono mesi ( per i più semplici ) per comprenderne la logica.
Appunto. Sono troppe le cose che non conosci per poter esprimere giudizi su linguaggi e modelli di programmazione. Non sarebbe opportuna studiare con umiltà le basi, poi fare pratica con un certo numero di linguaggi e magari solo dopo tirare le somme? Quello che voglio farti capire è che ad oggi non hai gli strumenti minimi per poter arrivare ad una conclusione. Stai mettendo il carro davanti ai buoi.
Io come ho scritto più volte sto cercando un linguaggio di programmazione da imparare, ho indicato le caratteristiche che dovrebbe avere ed ho espresso delle opinioni (non giudizi) in maniera tale che avesse tutte le informazioni necessarie per potermi aiutare e consigliare.
Questo linguaggio come tutti avrà i suoi contro però
Te poi mi avevi fatto delle domande, perchè volevi ulteriori spiegazioni ed io ti ho gentilmente risposto.
Ho pure scritto il mio percorso dal 2014 per quanto riguarda la programmazione spiegando quello che è successo in maniera tale da avere consigli visto che non vorrei mollare un altro linguaggio o addirittura mollare la programmazione per dedicarmi ad un altro interesse :(
Es. alla fine Python mi annoiato, gli esempi semplici mi annoiavano ed gli if, elife else etc... dopo un po' erano ripetitivi e mi ero stufato :(
Stessa cosa è successa anche con Qbasic.
Certo che un linguaggio è una lingua, formale e matematica ma sempre lingua è. E ogni lingua è creata per esprimere determinati concetti in maniera non ambigua, efficiente e completa. Ma questo significa che il rapporto esiste tra linguaggio e problema, non tra linguaggio e mentalità del programmatore. Quest'ultimo deve studiare, capire entrambe le entità e sfruttare il linguaggio per risolvere al meglio il problema. Cioè il programmatore dev'essere flessibile, non può irrigidirsi e buttare a mare linguaggio dopo linguaggio solo perchè non gli piace.
La sintassi è francamente questione di lana caprina. Non stiamo dipingendo quadri, stiamo creando opere ingegneristiche. La semantica è questione più significativa, ma una semantica inadeguata ti porta solo a fare il giro più lungo, ma siccome i linguaggi comuni sono tutti Turing completi, comunque ti consentono di implementare la soluzione per qualsiasi tipo di problema.
Invece secondo me il rapporto che esiste dipende da persona a persona, considerando anche che non esistono nel mondo solo i programmatori, dipende anche dal tipo linguaggio ed anche dalla sintassi che c'è.
Esistono anche altri motivi oltre al "non gli piace".
Io come ho scritto più di una volta, non sono un programmatore e non ragiono come un programmatore :)
Secondo me esiste sia il rapporto tra mentalità/personalità della persona ed il linguaggio e il rapporto tra la mentalità/personalità della persona e quello che sta programmando/quello che deve fare.
Solo in determinate condizioni/situazioni c'è il problema.
Concordo sul fatto che la semantica è più significativa.
Mi hai fatto ricordare che esiste una materia chiamata ingegneria del software e serve ad es. per grandi/grandissimi progetti.
Es. per l' assembly ci cose che non mi stanno bene/che vanno contro al mio modo di pensare però ci sono dei motivi positivi che mi spingono ad andare avanti, ad abituarmi, ad impararlo compresa anche la relativa architettura.
Sintassi nel campo dei linguaggi formali ha uno specifico significato. Nel caso di LISP si parla di s-espressioni e il linguaggio non fa differenza tra statement, espressioni, dati e codice.
Non ho presente lo statement in questo momento.
Tipo convertire il tutto in C e poi compilarlo con un compilatore C tradizionale. Oppure usare ( cosa che fanno tutti i linguaggi moderni ) un'intermediate representation. I compilatori tradizionali invece usano gli AST. In ogni caso nessuno trasforma istruzioni mnemomiche direttamente in codice macchina ( tranne l'assembly ).
Per quanto riguarda la prima frase credo che sia quello che mi ha consigliato "RTCtimelines" e la cosa mi interessa. Si può invece convertire il tutto in Pascal oppure in Gw Basic o in Cobol e poi compilarlo con il loro rispettivo compilatore?
Perchè hanno l' intermediate representation e non l' assembly? Che vantaggi/svantaggi ci sono?
Poi sono indeciso se trasformare il programma 1 che avrò creato, usando un mio linguaggio, in assembly oppure in IR di un programma creato con un mio. Non so il livello di difficoltà. Vale anche a livello didattico.
A fine didattici e per smettere di credere alla magia pensavo di convertire qualsiasi programma in C oppure in Pascal oppure in Quich Basic oppure in Cobolo in IR per vedere il passaggio intermedio. Quant' è il livello difficoltà?
Ma non si chiama variabile, perchè non porta appiccicate informazioni sul tipo dei dati. La variabile assembly è un alias di un'area di memoria, cioè una stringa che viene trasformata in fase di assembling in un numero che indica una locazione in memoria.
Perchè non esiste il concetto di tipo di dato in Assembly.
E Assembly? Perchè non sarebbe astratto? Ma dopotutto tutto quello che gira in un computer è astratto, visto che non si tratta di oggetti fisici. Come vedi certi termini non hanno alcun significato nell'ambito informatico.
Intendi la memoria ram?
Il Pascal è un linguaggio astratto rispetto a quello macchina.
Nel caso del computer ci sono vari livelli di astrazione.
Chi fa un linguaggio in genere non lo crei in modo che possa girare solo su x86.
Non sono informato sulle statistiche.
Il che sarebbe una follia.
ok
No. C'è la libreria standard che è inclusa automaticamente, anche dai compilatori C. Le altre sono a carico del programmatore.
La libreria standard del C, se ho capito bene contiene meno firme delle funzioni visto che che le altre sono contenute negli altri header file che bisogna includere nel programma.
E possibile inserire il contenuto degli header file piu utilizzati in assoluto all' interno della libreria standard del C?
Quanto sarebbe la difficoltà? Non mi interessa fare una cosa del genere ma lo chiedo solo per curiosità.
Lo vedi che ti mancano le basi? Perchè cerchi di risolvere un non problema con una furbata? Un header file contiene sono le firme delle funzioni e poco altro. Il codice sta altrove. E questo codice potrebbe include altro codice ( tramite il meccanismo del linking ) presenti in altri file e librerie. Quindi che fai? Vai in giro a copia-incollare roba? E per risolvere cosa? Levare un paio di #include?
Ho ancora molto cose da imparare. In questo caso non voglio risolvere un non problema. Hai frainteso.
Volevo solo imparare e capire a livello didattico il contenuto di determinati header e a scrivere quello che serve direttamente nel programma ma solo all' inizio per fini didattici e per fare pratica.
Premesso che in stdio.h non c'è il codice ( come già detto sopra ). Ma poi perchè tutta? Se usi una funzione ti serve una funziona non tutte le millemila che ci sono nella libreria standard.
Quello che c'è scritto nel file stdio.h se ad es. viene copiato all' interno del programma serve tutto oppure una parte che varia a seconda del programma che si scrive? E' per curiosità e per fini didattici.
Veramente era per semplificare la vita dei programmatori e rendere possibile la creazione di software più complesso.
Vero.
Non saltare di sito in sito. Hai idea di cos'è una sycall? Ecco, quel programma usa le syscall direttamente. E poi perchè fissarsi con questa cosa della lunghezza? Che poi il programma Assembly che hai postato usa i servizi del DOS per visualizzare del testo. Un tipico programma C usa una serie di funzioni offerte dalla libc, che è creata in modo da poter girare su vari OS. Il programma C che hai postato richiama le system call di un non meglio specificato sistema operativo. Cioè stai confrontando pere con ananas. Che senso può mai avere una cosa del genere?
Non conosco syscall. Spinto dalla curiosità di sapere ed imparare come fosse un programma Hello world in C senza includere le librerie ho fatto una ricerca e mi sono apparsi un po' di risultati tra cui quell' programma scritto da un utente.
Non credo che sia stata una buona idea linkare questo programma con sycall visto non so c'è.
Il fatto della lunghezza non è una fissazione ma è solo un dubbio/curiosità che ho. Nulla di più :)
Invece un programma in C su Ms-dos 6.22?
No, gli assembler non includono niente automaticamente. Ma queste perchè l'Assembly non è un linguaggio dotato di una libreria standard.
Meno male^^
No, non è così. Non è meno difficile, fa un'altra cosa. Il preprocessore è quello che trovi in C/C++ e che, tra le altre cose, si occupa dell'espansione delle macro. Riprendendo il tuo codice precedente:
Il preprocessore espande quelle #define, che sono solo delle "etichette", trasformandolo in:
Però nel primo programma c'è già scritto quello che hai scritto nel secondo programma.
Ma poi: perchè scrivere un programma che converta da linguaggio X ad assembly? Posto che è completamente inutile, è anche complesso; se il linguaggio X è ad oggetti, che fai? Per non parlare del modo in cui scegliere registri e/o memoria...
Inoltre il compilatore, tra le tante cose, ottimizza il codice prima di generare il codice macchina. E' più ottimizzato il codice di un compilatore (specialmente utilizzando opportuni flags) rispetto a quello generato da un assembler e scritto da un programmatore.
E' più facile scrivere un programma che converta un programma, scritto nel linguaggio X, in assembly piuttosto che in codice macchina?
Pensavo che fosse più facile e poi per capire/imparare come si passati dall' assembly ad un determinato linguaggio ad alto livello.
Capire il tutto, che significa?
Intendo il passaggio dall' assembly ai linguaggi ad alto livello.
Oppure il passaggio tra il binario e l' assembly oppure il passaggio tra i linguaggi ad alto livello ed il codice macchina.
Ora scopro che c'è anche IR quindi anche questo mi interessa.
C++ è C-like, così come Java, C# ed altri ancora.
Partire dall'elettronica non è tutto. L'elettronica è utile per avere alcuni fondamenti, e questi vanno appresi - normalmente - prima di assembly stesso. Stesso discorso per le basi di numerazione. Dovessi anche studiare il Millman, non implicherebbe facilità nell'apprendimento di assembly o di altri aspetti collegati alla programmazione.
Capito.
Se hai trovato subito ostacoli, significa che hai fatto il passo più lungo della gamba. Non è una buona idea, se non si conosce la programmazione, partire direttamente da assembly.
Avevo trovato ostacoli* Poi ero ritornato ad un linguaggio ad alto livello.
Inoltre lascia che mi ripeta: va bene studiare asm 8086 per iniziare ad avvicinarsi ad asm e prendere un pò di confidenza con il linguaggio; tuttavia scrivere programmi per 8086 seri, al giorno d'oggi, e che girano su DOS, va ben oltre l'inutilità. Riguardati l'esempio che ti ho mostrato sopra.
C'è anche l' architettura Pre X86. Ad es. l' 8008 è es. è più semplice anche a livello di architettura, anch' esso mi interessa ed ho un progetto per il futuro. Ho trovato l' emulatore su internet e stessa cosa per l' Intel 4004. ^^
Ho visto l' esempio sopra su Masm32.
Per concludere, nel caso dell'hello world in C, il compilatore (GCC, usando MinGW), genera questo:
Codice:
CPU Disasm
Address Hex dump Command Comments
004013C0 /$ 55 PUSH EBP ; helloworld.004013C0(guessed void)
004013C1 |. 89E5 MOV EBP,ESP
004013C3 |. 83E4 F0 AND ESP,FFFFFFF0 ; DQWORD (16.-byte) stack alignment
004013C6 |. 83EC 10 SUB ESP,10
004013C9 |. E8 42060000 CALL 00401A10
004013CE |. C70424 643040 MOV DWORD PTR SS:[LOCAL.4],OFFSET 004030 ; /format => "Hello World!"
004013D5 |. E8 A6080000 CALL <JMP.&msvcrt.printf> ; \MSVCRT.printf
004013DA |. B8 00000000 MOV EAX,0
004013DF |. C9 LEAVE
004013E0 \. C3 RETN
e come puoi vedere usa la funzione printf di MSVCRT.
Come mai il compilatore converte in assembly?
Cos'è MSVCRT?
L' Asm è a 32 bit?
Però non è che gli autori dei linguaggi li scrivano "a sentimento". Un nuovo linguaggio nasce per risolvere un problema ingegneristico importante e sentito. Rust, ad esempio, è nato per consentire la scrittura di codice nel quale siano assenti alcune classi di bug.
La riguarda alla prima frase si riferisce tipo ad un poeta.
Per quanto riguarda la seconda frase, secondo me, dipende da persona a persona.
Ci sono diversi motivi per cui è nato Rust.
Giorni fa avevo visto questo linguaggio. Ora non vado a cercare su google perchè se aggiungo altre carne al fuoco, altre info insieme ad altra confusione.
Per curiosità, quali sono? A parte gli header file.
A parte 1 forse 2 gli altri li ho scritti nel corso della discussione e tu mi avevi pure risposto.
Riguardo agli header file quelli mi vanno bene da quando mi hai spiegato che i linguaggi come Quick Basic, Python, Cobol e Pascal includono forzatamente una libreria standard che comprende tutto il necessario ed inganna chi va a programmare.
Pure la matematica risulta fastidiosa e richiede sforzo. Però poi ne vale la pena.
Certe argomenti mi piacciono della matematica.
Questa frase non si applica nel mio caso con il linguaggio C o in altre cose.
Però nel mio caso ad es. si applica per altri linguaggi.
"Esistono due tipi di linguaggi: quelli di cui tutti si lamentano e quelli che nessuno usa", Stroustrup, creatore del C++. Non esiste un programmatore che ama ogni singola caratteristica di un dato linguaggio.
E se ti dicessi che si può rendere C# o Java o anche Python vicini all'hardware?
Ed è questo che ti sta fregando.
Lo so.
Voglio avere una scaletta, un metodo ed un percorso ^^
Ci vuole pratica per capire certi argomenti, ma bisogna scrivere programmi per fare pratica e ci vuole una buona conoscenza degli algoritmi e delle strutture dati per scrivere programmi.
La struttura dei dati e gli algoritmi riguardano l' assembly sintassi Intel il Pascal, il Quick Basic ed HLA?
In passato ci avevo dato più volte una letta ma non c'è l' ho mai fatta a continuare.
Poi non so se magari c'è un approccio meno teorico.
Ma il resto che hai citato rientra nell'ambito della programmazione e quindi
https://www.amazon.it/Introduzione-agli-algoritmi-strutture-dati&tag=tomsforum-21[/QUOTE]
Il primo libro c'è l' ho :)
Non ho capito cosa c' entrano gli algoritmi e la struttura dei dati sul capire come si è passati dalla sintassi del linguaggio assembly a quella di uno dei linguaggi alto livello anni 70/80.
Sbagli. Modificare un software di quella complessità richiede l'averne studiato e compreso l'architettura e quindi letto il codice. In molti casi scrivere un software da zero è più semplice.
Sbaliando si impara. Ho capito quello che hai scritto.
Se hai quest'intenzione, allora serviti di LLVM. Ma ritorniamo sempre alle solite, cioè non hai le basi per poter fare una cosa del genere. E il C e C++ sono dei must know per questo genere di attività.
https://www.amazon.it/Compilers-Principles-Techniques-International-Economy&tag=tomsforum-21
https://www.amazon.it/Linkers-Loaders-John-R-Levine&tag=tomsforum-21
Inoltre stai mettendo troppa carne al fuoco. Se fai il saltimbanco ti confondi solamente. Scegli una tecnologia ed esplorala a fondo. Ti piace l'embedded? Bene microPython o Espruino. Ma ancora meglio compra una board Raspberry e programmala in Python. Hai bisogno di conoscere praticamente queste tecnologie, non basta leggere articoli e blog post. Bisogna fare.
Grazie per i libri ^^
Al posto del C/C++:
L' assembly?
Rust?
Pascal?
Basic?
Se scelgo un linguaggio alto livello vorrei almeno capire a livello generale come la sintassi sia arrivata a quel punto partendo da quella Intel dell' assembly,
"In matematica non esistono vie regie", Euclide. Per l'informatica vale lo stesso.
Ok, però disse geometria e non matematica.
E hai sbagliato. Non devi saltare di palo in frasca e non devi abbandonare al primo ostacolo.
Lo so che ho sbagliato.
Per quanto riguarda ad es. Python e Basic non ho avuto ostacoli. Alla fine mi avevano stufato ed annoiato. Successivamente li avevo ripresi, forse per togliermi lo sfizio, e poi per stessi motivi li ho rilasciati perdere :(
Altrimenti perchè sono stati inventati altri linguaggi?
Perchè svariate persone non sono riuscite ad abituarsi all' assembly :D
Decisione sensata. Ma devi fare pratica.
Straquoto.
Appena arriverò al linguaggio chiederò consigli sulla pratica. Non voglio fare solo gli esercizi proposti dai libri o dai 3 siti web consigliati.
Pensi che l' architettura 8008 sia più facile per me? Mi piace anche quella Pre X86 ed il relativo assembly ed ho un progetto futuro da realizzare.
Non so se fare tutte e due le cpu (8008 e 8086) oppure prima una e poi l' altra. L' 8080 è più complicato dell' 8008.