U
Utente 125751
Ospite
up
Segui il video qui sotto per vedere come installare il nostro sito come web app sulla tua schermata principale.
Nota: Questa funzionalità potrebbe non essere disponibile in alcuni browser.
Pubblicità
Un riassunto di tutta la domanda-argomentazione?
Non ho capito il paragone con il C che tra l' altro in passato gli avevo dato solo un' occhiattina e non è sufficiente per capire il paragone.
Il tipo di ritorno? Questa non la so.
Wiki.com dice che l' Assembly come paradigma è imperativo e non-strutturato mentre sul Dartmouth e GW-basic dice che è non-strutturato. Da questo deduco che hanno in comune il fatto che sono linguaggi non strutturati.
Un riassunto di tutta la domanda-argomentazione?
Vuoi sapere su che linguaggio focalizzarti?
Si riferisce alla rappresentazione in memoria delle stringhe. Se tu hai una stringa "Pippo", come fai a sapere quando termina? Il processore vede solo celle di memoria contigue, per cui ci dev'essere qualcosa che gli dica quando una stringa termina. In C questo qualcosa è il codice 0 ( non il simbolo che digiti sulla tastiera che ha codice 48, ma proprio il valore 00000000 binario ). Altri linguaggi invece prepongono la dimensione alla stringa. Cioè "5Pippo", 5 sempre come valore binario e non il numero 5 che si digita sulla tastiera, ovviamente ho dovuto scrivere il 5 della tastiera perchè il valore binario non verrebbe visualizzato dal csm del forum. Gw-basic riserva i primi 3 caratteri ( non so perchè abbiano fatto così, Pascal codifica la lunghezza in maniera più compatta ) per la lunghezza della stringa.
Non esistono tipi di ritorno in Gw-basic, perchè è a tipizzazione dinamica e le funzioni che supporta sono di fatto della lambda e non le classiche funzioni "typed" dei normali linguaggi. Ovviamente ritorna il valore di una variabile intera farà della funzione una funzione che ritorna un intero. Ma ripeto, il tipo di ritorno viene calcolato dal linguaggio.
Mi interessa l' assembly (sintassi Intel su cpu Intel) e piano piano lo voglio continuare però sto cercando un linguaggio di programmazione che
prenda spunto per determinate cose ad es. dall' Assembly (sintassi Intel con tasm), dal Cobol, dal Pascal, dal Dartmouth Basic/GwBasic e dal C.
non abbia i limiti del Quick Basic, del Pascal, del Cobol o di Python.
non preveda il richiamo di una o più librerie nel programma. Quindi credo che non debba avere ad es. un preprocessore.
non abbia o non preveda l' uso obbligatorio delle parentesi per aprire e chiudere un blocco di funzione ed di un prototivo della funzione o/e all' interno della funzione
non abbia un blocco di funzione con le parentesi all' interno di un altro blocco di funzione
non si aspetti che una o più funzioni debbano per forza restituire qualcosa.
non abbia la keyword "void" tra parentesi
non ci sia l' obbligo ogni volta di mettere "begin" come accade ad es. nel Pascal.
abbia le istruzioni aritmetiche e quelle di controllo uguali oppure molto simili a quelle dell' assembly sintassi Intel.
abbia anche abbreviazioni mnemoniche
sia general purpose
L' assembly ha le funzioni lambda?
Il C++ c'è l' ha mentre il C ed il Pascal?
Ho cercato su internet "funzioni typed" ma mi mostra i tipi di funzioni che ad es. in C sono 4.
In assembly ci sono le funzioni typed?
L' assembly è non strutturato?
Però il C si discosta visto che introduce anche le funzioni. Ci sono la parentesi per aprire e chiudere un blocco di funzione, un blocco di funzione all' interno di un blocco di funzione e forse anche una subroutine.
Il C è meno imperativo rispetto all' assembly e credo anche al Bobol, Dartmouth Basic/GW Basic e forse anche al Pascal giusto?
Mi pare che però tu stia cercando di incollare due estremi. Cioè l'assembly non ha nessuna delle caratteristiche che hai citato in quella lista. A questo punto non capisco ( se è l'assembly il tuo focus ) a che ti serve un altro linguaggio?
Alla fin fine prendono tutti spunto da LISP. Tranne Assembly che è una rappresentazione mnemonica del linguaggio macchina e quindi non implementa elementi astratti.
Ogni linguaggio ha dei limiti, ma con tutti i linguaggi Turing-completi si può fare di tutto. Python semmai ha un limite tecnico di non essere compilabile AOT. Ma questo non implica nulla se non in casi molto particolari.
Tranne C e C++, quasi tutti gli altri non hanno questa stramberia che è il preprocessore. E per librerie, beh, dipende da te che scrivi il programma. Una libreria è una raccolta di codice che fa delle cose e questo codice è già scritto. Se non vuoi usare librerie, semplicemente devi scrivere tu tutto il codice di cui necessiti. Ma a che pro?
Python non usa parentesi per i blocchi. Ma usa la tabulazione. Alla fin fine dev'esserci un modo per dire al compilatore/interprete che lì c'è un blocco. E no, senza blocchi hai un linguaggio non strutturato e perdi automaticamente il 90% dei meccanismi di alto livello che distinguono i linguaggi "normali" dall'assembly.
La capacità di innestare blocchi è un plus non un minus.
C e C++ usano void in questo caso.
Void tra parantesi, intendi un parametro di tipo void? Int pure va specificato tra parentesi. Ma non capisco perchè ti fissi con questi dettagli sintattici. Alla fin fine per realizzare programmi bisogna scrivere tantissimo, tanto da consumare la tastiera ( no, non scherzo ).
Ci sarà un altro modo, ma devi dirgli dove inizia e finisce un blocco. Il computer non può entrare nella tua testa ed immaginare cosa volevi fare.
Nessun linguaggio lo fa, per il semplice motivo che in assembly non esiste il concetto di tipo di variabile. Si opera su stringhe di bit, applicando delle operazioni definite dal linguaggio macchina. Il codice assembly non distingua tra int, short, long.
Why? Le istruzioni dei comuni linguaggi sono ad un livello molto più alto rispetto al linguaggio macchina ed è questo che li rende produttivi.
Ovvero Turing-completo.
No, l'assembly non ha nemmeno il concetto di funzione. In assembly salti in determinati punti della memoria, in maniera assoluta o al verificarsi di una condizione, e in quei punti l'esecuzione riprende. Puoi simulare una funzione/procedura passando i parametri tramite registri o stack, ma è una simulazione. Non esiste in assembly il concetto di funzione!
No. C e Pascal sono linguaggi strettamente procedurali. E non è un male.
Il concetto di lambda viene dalla matematica e dalla programmazione funzionale. Tutti i linguaggi moderni posseggono simili astrazioni, alcune ne posseggono molte altre.
Ma il punto è che non esiste un linguaggio che in assoluto sia migliore degli altri.
Typed significa tipizzato. E' riferito al modello di tipizzazione del linguaggio ( forte, debole ). Non c'è un riferimento diretto alle funzioni.
E' il più famoso dei linguaggi non strutturati.
No. Imperativo significa che il linguaggio esegue le istruzioni passo-passo, così come vengono elencate dal programmatore. Perchè esistono linguaggi che modificano l'ordine di esecuzione dei comandi, ovvero il programmatore specifica cosa vuole ma poi è il linguaggio a decidere come ottenere quel risultato.
I linguaggi dichiarativi ad esempio sono così.
Ma il punto centrale relativo al confronto assembly-c, è che l'assembly non è un linguaggio nel senso matematico della parola. Un linguaggio definisce un modello di programmazione, cioè una macchina virtuale immaginaria che contiene tipi di dati ( variabili ), blocchi, comandi/parole chiave, meccanismi di accesso e gestione della memoria.
L'assembly non ha assolutamente niente di tutto questo. E' una traduzione, in un qualcosa di un pò più comprensibile, del linguaggio macchina, cioè del modello di programmazione del microprocessore ( hardware ).
Per cui ogni linguaggio implementa il suo modello di programmazione, che deriva dal ramo teorico, matematico. Il modello del C è usato nella stragrande maggioranza dei linguaggi comuni, ma esistono modelli diversi implementati da linguaggi come Smalltalk ( per esempio ).
Basti notare che già se si prende il solito modello di memoria, abbiamo questa situazione http://canonical.org/~kragen/memory-models/
Ed è solo il modo per piazzare, leggere e manipolare i dati in memoria.
Credo (spero di non sbagliare alla grande) che l' assembly rispetti il punto 3, 4,5,6,7,9,10,11 e 12.
Questo linguaggio sarà adatto a me.
Ogni persona è diversa, ognuno ha esigenze, gusti e mentalità diversa.
Esistono tantissimi linguaggi di programmazione compresi anche quelli che sono conosciuti da poche forse pochissime persone nel mondo.
L' assembly e l' elettronica sono il mio focus però mi rendo conto che il percorso è molto più lungo di quanto avevo previsto e che sto trovando un po' difficoltà a capire delle cose riguardanti l' architettura del 8086
In parallelo cerco un linguaggio che non sia a basso livello come l' assembly, che sia meno complesso, che richieda meno conoscenze dell' architettura hardware, che non abbia a che fare con i bit e che richieda meno tempo prima di poter scrivere dei programmi etc...
Riguardo alla prima frase: non mi pare che tutti i linguaggi tranne l' assembly prendano spunto dal Lisp.
Anche il GW-basic ed il Quick basic sono interpretati.
Il linguaggio C non ha i limiti che hanno il Pascal, i vari Basic, Python e Cobol.
Un aspetto che mi piace del C è proprio la marea di cose che può fare. Per es. driver, bootloader ed altri programmi a basso livello (o quasi) ma anche un livello un po' più alto, poi sistemi operativi, videogiochi ed è molto usato anche nel settore embedded.
Ma io intendevo che il linguaggio che cerco non deve avere l' obbligo di inserire per forza una o più librerie per scrivere un programma.
in Python per chi vuole (la cosa non è obbligatoria) può tranquillamente importare ad es. una libreria per la GUI e quindi creare un programma con la gui oppure importare "pygame" e creare un videogioco (non ai livelli di uno creato in C++).
Anche il Dartmouth Basic e il Gw Basic non sono strutturati eppure sono linguaggi ad alto livello di cui il primo è compilato. Hanno dei meccanismi di alto livello.
Credo che anchel' assembly con l' assemblatore (es. Tasm) usa la tabulazione o/e anche l'indentazione. Giusto?
Non mi piace (è un' opinione/gusto personale) che ci sia un blocco di istruzioni all' interno di un altro blocco di istruzioni che poi in più introduce altre due parentesi (apri e chiudi)
Ho scoperto a malincuore che non basta eliminare tutte le parentesi graffe da tutte le librerie del C presenti all' interno del compilatore per poter scrivere in C un blocco di funzione senza le parentesi apri e chiudi.
Eliminare le parentesi graffe dalle librerie del C era solo il primo passo :)
Si vero. Ci può anche essere scritta un' altra istruzione al posto del void però nel linguaggio ma il punto è che: cerco se ci sono una o più funzioni non si devono per forza aspettare di restituire qualcosa.
Intendo voip come parametro, però vale anche con in t come parametro.
Poi ho visto delle volte in cui c'è il voip all' inizio della funzione e poi il void come parametro. Tutti e due nella stessa riga.
Io capisco che a moltissime persone questa cosa piace e lo rispetto. Se devo essere totalmente sincero a me non piace.
Ci sono dei dettagli sintattici di uno o più linguaggi che a te non piacciono ? :)
Un altro modo sicuramente ci sarà per dirglielo.
Nell' assembly (non mi riferisco a quello puro) non ci sono parentesi apri e chiudi oppure i marcatori per indicare dove inizia e finisce un blocco. Sarei curioso di sapere il perchè ^^
Le istruzioni aritmetiche e quelle di controllo, uguali oppure molto simili a quelle dell' assembly sintassi Intel, nel linguaggio ad alto livello che cerco saranno a differenza dell' assembly, istruzioni ad alto livello. Saranno quindi astratte e non avranno niente a che fare con i registri e con i bit.
Riguardo al discorso della variabili in assembly. Con un assemblatore, es. Tasm si dichiarano le variabili all' interno .DATA e all' interno di STARTUP si fanno le varie operazioni con le variabili ed i registri. Non si possono fare le operazioni tra 2 variabili se una delle 2 non si trova in un registro.
Nel Pascal, che è un linguaggio ad alto livello, c'è il compilato e ad es. le variabili non hanno nulla a che fare con i registri ed i bit. Ad es. non bisogna affatto preoccuparsi di dichiarare la dimensione in bit di una o più variabili cosa che invece va fatta in assembly con un assemblatore.
A) nell' assembly sono una corrispondenza 1:1 del codice esadecimale e del codice binario. Sono istruzioni a basso livello e non c'è di mezzo il compilatore oppure l' interprete. Non c'è astrazione. Hanno a che fare con i byte ed i registri. (se mi sono dimenticato altro aggiungilo pure^^).
B) nei linguaggi ad alto livello come ad es. il C, il Pascal e Gw Basic e Quick Basic la situazione è opposta rispetto al punto 1, visto che le "abbreviazione mnemoniche" (è meglio forse mettere il tutto tra virgoletta perchè probabilmente il termine non è corretto a livello informatico per quanto riguarda gli HLL) sono abbreaviazione di una o più istruzioni astratte e quindi ad alto livello, non hanno a che fare con i byte ed i registri, non c'è corrispondenza 1:1 etc... e c'è un compilatore che converte il codice in assembly e poi in codice macchina (con il compilatore) oppure prima in codice pseudo-assembly e poi in codice macchina tramite un interprete.
Nel C ci sono ad es. queste abbreviazioni:
https://stackoverflow.com/questions...-the-str-function-abbreviations-acronyms-mean
Es. nell' assembly c'è CMP però ci può essere in linguaggio ad alto livello CMP ma che a differenza nell' assembly sia un abbreviazione "mnemonica" astratta ad alto livello che non abbia a che fare con i bit ed i registri ma che fa la comparazione tra due variabili che non hanno a che fare con i registri ed i bit.
Ad es. il cobol, l' Algol ed il Fortran non sono general purpose.
In assembly a differenza degli altri linguaggi non c'è la distinzione tra procedure e funzioni.
Invece con ad es. Tasm quando si scrive un programma ci sono anche le istruzioni che non hanno parte dell' assembly puro ma appartengono all' assemblatore. In questo caso il linguaggio è sempre non strutturato?
Ad es. con il Pascal e l' Ada noto che i programmi possono essere o un po' strutturati oppure più strutturati. Nel secondo caso c'è un blocco di istruzioni all' interno di un altro blocco di istruzioni. Nell' assembly con ad es. Tasm (non assembly puro) non c'è un blocco di istruzioni all' interno di un altro blocco di istruzioni.
Nei linguaggii imperativi ci sono anche i comandi giusto?
Ho visto che il modello di programmazione è diverso in Smalltalk però come si chiama questo modello? E' dichiarativo?
Ho visto il modello di memoria nei diversi linguaggi che ci sono nel link che hai postato. Peccato che l' argomento è complesso per me :(
@pabloski complimenti.. stai riuscendo a mantenere la logica da ormai parecchi post, tempo fa mi ero imbattuto in quelle questioni pseudo-filosofiche di "chiba", ma non ne ho mai capito il senso!
Mi piace il tuo buon senso e come riesci a interpretarlo. In passato ho avuto un paio di discussioni ma poi ho sempre perso la pazienza!Beh sembra che voglia imparare. Il suo problema è che sta affrontando la programmazione in maniera troppo filosofica, segno di chi si pone troppi dubbi, troppo presto e senza motivo.
Da neofita non si rende conto che tutti i suoi grattacapi sono puramente estetici, perchè tanto una mente allenata ad utilizzare un certo linguaggio, lo userà e lo troverà produttivo aldilà di mancanze oggettive.
L'errore in cui ricade questo tipo di "studente" è leggere tantissimo ma applicarsi pochissimo. Avrai notato con quale rigidità affronta il tema dei compilatori, quasi come se fosse una proprietà magica esclusiva di alcuni linguaggi. Non avendo fatto pratica, gli sembra magico e non realizza che qualsiasi linguaggio può essere compilato, questo perchè tutto l'ambaradan del computing è solo una cascata di trasformazioni suo dati.
Sono cose su cui pure io avevo dubbi quando iniziai, dubbi svaniti man mano che mettevo le mani ( tanta pratica ) nei vari argomenti.
Mi piace il tuo buon senso e come riesci a interpretarlo. In passato ho avuto un paio di discussioni ma poi ho sempre perso la pazienza!
Il problema secondo me è che, è vero che studia e si documenta, ma poi parte per la tangente e si inerpica su sue interpretazioni e teorie scombussolate che non hanno fondamento e senso logico.
Mi riferisco per esempio a forzare l'analogia tra linguaggio di programmazione e linguaggio umano come se dovessero coincidere. E poi tutti questi riferimenti a linguaggi del passato come se fossero dei riferimenti imprescindibili (mi riferisco a quando parla di GWBasic o dorthmount basic .. se conoscesse tutte le varianti e dialetti di ogni linguaggio diventerebbe un ragionamento allucinante).. oppure quando dice di un linguaggio su misura che sia bello.da vedere e perciò senza delimitatori e parentesi graffe!?! .. per me sono considerazioni incomprensibili, forse di chi vuole sfoggiare conoscenza e terminologie saccenti?
Inviato dal mio Nexus 5 utilizzando Tapatalk
il punto 3 no, perchè pascal consente di fare qualsiasi cosa, alla pari dell'assembly
il punto 4 nemmeno, dato che il concetto di libreria non è relativo al linguaggio...esistono programmi c, pascal, rust che non richiamano nessuna libreria...voglio anche precisare che il preprocessore non c'entra niente con le librerie
il punto 12 nemmeno, perchè tutti i linguaggi che hai citato sono general purpose
Certamente. E infatti esistono vari paradigmi di programmazione. Ma le tipologie esistenti non soddisfanno appieno nessuno, questo perchè in ingegneria non esiste la perfezione ma solo i trade-off.
Se vuoi un linguaggio veramente diverso e simil-assembly in quanto ad assenza di sintassi, prova LISP.
E non ti servirà a molto, perchè in ambito elettronico/embedded/iot l'architettura x86 praticamente non esiste. E' tutto dominato da ARM e AVR.
Esistono board che supportano Python, ma in generale il linguaggio che chiedi è il C.
Molti concetti li hanno copiati da LISP. Tutta la programmazione funzionale che tanto fa figop di questi tempi è scopiazzata da LISP. Assembly è l'unico che non ha nulla di LISP, dato che non implementa astrazioni.
Quick basic ha un compilatore.
Pascal non ha i limiti ed è compilato. Era usato per la didattica perchè rigoroso non perchè scarso.
C++, D, Pascal, Rust, Ada, Nim, Swift, Red, Oberon, Modula sono tutti linguaggi che hanno out of the box le stesse capacità del C. Esistono anche sistemi operativi scritti in Java, Python, C#. Solo che i linguaggi in questione vanno adattati per poter essere utilizzati come linguaggi di programmazione di sistema.
Ma in C non hai nessun obbligo in questo senso. Se non vuoi usare librerie esterne, semplicemente devi scrivere da te tutto il codice che ti serve.
Ma stai comunque usando una libreria di terze parti.
Ovviamente. Ma pure l'HL Assembly è di alto livello ( relativamente all'Assembly ), ma certamente non è alto livello rispetto a Python. Il concetto di alto livello è relativo non assoluto.
Senza il grado di complessità possibile del software diminuisce. Esiste una ragione per cui si è fatto così.
Non ho capito. Hai modificato i sorgenti dei compilatore??? Eliminando a casaccio parentesi graffe? Cioè distruggendo completamente l'organizzazione del programmazione?
Per ottenere un software che non fa quello che dovrebbe fare. Quelle parentesi non stanno lì per ragioni estetiche.
Una funzione restituisce qualcosa. E' il concetto di funzione matematica, non lo si può modificare a casaccio. Alcuni linguaggi implementano le procedure come funzioni che non restituiscono nulla. Di questi alcuni impongono che venga specificato ciò ( tramite void ), altri gestiscono la cosa implicitamente ( python ).
E quindi? Si sta solo dicendo che la funzione restituisce un tipo void ( cioè niente ) e che uno o più parametri di input sono di tipi void ( cioè accettano qualsiasi tipo ). Non vedo che problema sia avere void in più posto nella stessa riga. Non è cacofonia.
In questo caso si opta per un altro linguaggio. Fino ad oggi non ho mai usato un linguaggio che non avesse delle brutture. Ma si può benissimo convivere con queste inconsistenze. Quello che conta è che il software scritto faccia ciò che si suppone debba fare.
Certo. E infatti altri linguaggi usano altri marcatori. Ma sono questioni di pura sintassi, non capisco perchè fissarsi così tanto su banalità del genere. Con la pratica diventa naturale e gli IDE addirittura automatizzano la definizione/manipolazione dei blocchi di codice.
Cioè ADD xx, yy invece di xx+yy? Sicuro che ti convenga? Non per dire ma quello che stai dicendo è implementato dai vari intermediate languages dei compilatori e delle macchine virtuali ( vedi LLVM, o l'IL di .NET )
Ma non sono variabili, sono locazioni di memoria riservate per metterci dentro qualcosa. Il qualcosa è noto solo al programma e non all'assemblatore. In una locazione riservata con dw ci puoi mettere un numero a 16 bit con segno, uno senza segno, 2 caratteri ASCII o un carattere Unicode UTF-16. Ma l'assemblatore non lo sa, il compilatore invece ti chiedo di specificare che cosa c'andrà messo in quei 16 bit di memoria.
Si e no. La corrispondenza tra sorgente ed eseguibile non c'è, altrimenti verrebbe meno lo scopo principale del linguaggio stesso. Ma sulla dimensione c'è, infatti Pascal supporta i tipi di dati integer ( 32 bit ), shortint ( 8 bit ), smallint ( 16 bit ), ecc... Quindi la quantità di memoria riservata dipende dal tipo della variabile specificato nel codice sorgente.
Eh magari. In realtà nei processori moderni quelle istruzioni sono nomi di procedure ( contenute nel microcodice ). Il vero linguaggio macchina è un altro ed è noto solo al produttore del processore. Ma comunque questo è un altro discorso.
Ovvio. Lo scopo di un linguaggio di programmazione ad alto livello è offrire un modello di programmazione ( una specie di macchina virtuale ) che sia più facile da usare per l'uomo e sia sufficientemente astratta da poter rendere i programmi scritti per essa portabili su diverse architetture di processori/calcolatori elettronici. Un ARMv7 non ha il set di registri di un x86, per cui se esponi i registri x86 e li rendi manipolabili direttamente, rendi il tuo linguaggio non utilizzabile su macchine ARM. Quindi a che serve un simile linguaggio?
No quelle sono un'altra cosa. Sono delle funzioni di utilità fornite dalla libreria standard del linguaggio per semplificare la vita ai programmatori. Puoi benissimo scriverti a manina tutte le funzioni per manipolare le stringhe invece di usare string.h. Poi però impiegherai 20 volte il tempo che avresti impiegato per scrivere il tuo programma.
Ma quelle funzioni non hanno nulla a che vedere col processore o col modello di programmazione del linguaggio. Il software che usiamo non è che riscrive da zero tutto, ma sfrutta pile di codice già scritto da altri per implementare funzionalità comuni.
CMP significa COMPARE, in C è ==
Non capisco perchè CMP sarebbe più semplice di ==
Quelle non sono istruzioni ma direttive per l'assemblatore. Servono perchè la piattaforma su cui il programma girerà ha determinate caratteristiche. Ad esempio un bootloader x86 ha l'entry point posto all'indirizzo 7C00, per cui tutte le istruzioni vanno codificate in modo da tenerne conto. Se non specifichi questo fatto, l'assemblatore non lo saprà e alcune istruzioni salteranno in posti sbagliati o prenderanno/memorizzeranno i dati da locazioni sbagliate.
Print "An example of a GOTO statement"
Sleep 1000
Goto program_continue
Print "This line of code will never be executed"
program_continue:
Print "We just skipped some code"
Sleep
End
with Ada.Text_IO; use Ada.Text_IO;
procedure Hello is
begin
Put_Line ("Hello, world!");
end Hello;
Ogni linguaggio ad alto livello fornisce astrazioni ma non si è obbligati ad usarle tutte. Pure in C puoi evitare di innestare blocchi, poi però la vita ti si complica.
In Assembly il problema non esiste perchè non esiste proprio il concetto di blocco. Esistono istruzioni, uno dietro l'altra che il processore esegue pedissequamente.
SEG_UNICO segment ; definizione dell’unico segmento del programma
assume CS:SEG_UNICO ; assegnazione di tutti i registri di segmento all’unico segmento
assume DS:SEG_UNICO
assume ES:SEG_UNICO
assume SS:SEG_UNICO
START: ; AREA CODICE
mov ax, 4c00h ; unica istruzione del programma: terminazione programma EXE
int 21h
ends
end START
Quelle informazioni servono per capire qual è la differenza qualitativa tra linguaggi di alto livello e linguaggio Assembly.
Che intendi di preciso con differenza qualitativa?
Per me ogni persona ha la libertà di scegliere se seguire o non seguire il mercato, se scegliere o/e evitare un determinato settore o/e indirizzo piuttosto che un altro etc...
Il settore embedded è vastissimo (per quanto riguarda i componenti da programmare). Per quelli che necessitano di un linguaggio di programmazione: si utilizza maggiormente l' assembly ed il C. Poi si utilizzano anche il Pascal. il Basic, l' Ada ed il C++ (non li ho scritti in ordine).
Quando in uno dei post sopra ho nominato l' elettronica non mi riferivo al settore embebbed oppure all' Iot ma ad es. all' elettronica analogica e alle architetture Intel: Pre X86 ed X86.
Sto cercando un linguaggio che sia più vicino al mio modo di pensare/ragionare, alle mie esigenze ed ai miei interessi/gusti personali.
Mi interessa la programmazione, imperativa, modulare ed un po' strutturata. Dico "un po'" perchè non deve avere un sub program all' interno di un altro sub program.
Non ragiono a macchinetta, non sono un calcolatore, non vedo il mondo in bianco e nero, non ragiono come un matematico o un programmatore etc...
Tipo 2 settimane fa ho scoperto che ad se un linguaggio interpretato (che ha l' interprete) ha anche un compilatore e lo si usa al posto dell' interprete il linguaggio sarà compilatore. Stessa cosa vale all' inverso.
Anche per fare i riferimenti ai diversi linguaggio mi sono dovuto documentare visto le lacune che ho.
Su quello che hai scritto, relativo al punto 3, non sono d' accordo. Poi il Pascal non è nemmeno alla pari del C.
Ho fatto ulteriori ricerche e Kernighan (uno dei creatori del C) aveva scritto un paper "Why Pascal Is Not My Favorite Programming Language ".
Ad es. dall' Ansi C in poi ogni libro, dispensa. sito web, video etc.. dicono che bisogna mettere una o più librerie per dei motivi.
Non è vero che nell' ambito elettronico l' archettura x86 praticamente non esiste.
Poi non è vero che è tutto dominato da Arm e Avr.
Forse sarà una moda del momento. Io, in generale, cerco di ragionare con la mia testa.
C'è un linguaggio imperativo, che implementa astrazioni che non ha le funzioni?
Ti riferisci a Qbasic? Se no mi piacere conoscere come si chiama il compilatore.
Che intendi con out of the box? Non mi riferisco alla traduzione.
Non so se questa tabella sia aggiornata, che ne pensi ?
https://en.wikipedia.org/wiki/System_programming_language
Non ho modificato i sorgenti dei compilatori. Non so nemmeno come si fa.
Io non faccio modifiche a casaccio.
La mia idea era ed è quella di modificare un pochino la sintassi o/e anche la semantica del C in maniera tale da poter scrivere un programma, con una sintassi un pochino diversa rispetto al C, che poi si possa compilare e che possa funzionare.
Nella mia ignoranza credevo che bastasse modificare (non a casaccio) solamente le librerie.h relative al C (il compilatore che ho ha anche le librerie relative al C++) per poter, poi, riuscire a scrivere un programma che una volta compilato potesse funzionare.
Facendo poi delle ricerche ho invece imperato e capisco che bisogna modificare (non intendo a casaccio) i sorgenti del compilatore oltre alle librerie perchè altrimenti il programma scritto in un linguaggio un pochino diverso rispetto al C, non verrà mai compilato dal compilatore.
Se mi puoi, gentilmente, spiegare oppure indicare sul web (un sito web, una dispensa etc..) come modificare (non a casaccio) i sorgenti del compilatore C mi farebbe piacere perchè mi interessa :)
Riguardo alla terza frase che hai detto dipende da persona a persona.
Se invece contasse solo che il software faccia ciò che si suppone debba fare allora io preferisco mollare il software ed relativo linguaggio (sono serio). Però capisco che ci sono invece delle persone che la pensano diversamente da me.
Ognuno sceglie i marcatori che vuole quando crea un proprio linguaggio di programmazione. Questo vale anche per i linguaggi degli anni passati.
Perchè il qualcosa è noto solo al programma? Lo chiedo perchè voglio imparare e perchè sono curioso.
Io so che il sorgente attraverso il compilatore viene tradotto in linguaggio macchina oppure prima in assembly e poi in linguaggio macchina. Nell' eseguibile c'è il codice macchina. Non so è se giusto.
Sia sull' Assembly che sul Pascal ci sono istruzioni apposite che servono per indicare la dimensione dei dati giusto? in Asm si chiamano pseudo-op.
2) In Pascal le istruzioni relative ai tipo di dati (quelle che hai menzionato) sono astratte? Se si perchè? Sono curioso e voglio impare.
Non ho capito la parte dopo la virgola e quindi anche la domanda finale.
C'è da dire che a seconda del programma che bisogna scrivere non credo che servano tutte le righe ci codice contenuto nella libreria.
Es. per il Pascal le librerie sono compilate mentre quelle che si possono inserire
In Cobol come minimo svariate cose si possono fare senza includere le librerie e senza scrivere il codice delle librerie all' interno del programma.
Dove si trovano queste pile ci codice già scritto da altri?
CMP in Asm non corrisponde a == in C. In C è If.
L' ultima frase che hai scritto se avviene su un vecchio O.S, che permette l' accesso diretto all' hardware, danneggia la cpu o c'è il rischio che si possa daneggieggiare?
Questo programma è strutturato e modulare, giusto? :
ASP.net:Print "An example of a GOTO statement" Sleep 1000 Goto program_continue Print "This line of code will never be executed" program_continue: Print "We just skipped some code" Sleep End
Questo con il linguaggio Ada:
with Ada.Text_IO; use Ada.Text_IO; procedure Hello is begin Put_Line ("Hello, world!"); end Hello;
Non c'è un sottoprogramma all' interno di un altro sottoprogramma.
Questo non lo sapevo.
Mi puoi far vedere un es. di un programma in C senza innestare blocchi?
int main() {
printf("Hello World\n");
return 0;
}
Questo qui per me è strutturato e modulare visto che non tutte le righe hanno la stessa tabulazione ed più mov ax etc.. ed Int 21H si trovano all' interno di START:; etc... di ends
Se fosse stato un programma non-strutturato ogni riga di istruzione avrebbe avuto la stessa tabulazione e non ci sarebbe nessun sottoprogramma (o come si chiama).
Da come lo dice sembra che la scelta sia personale. Non penso che tu abbia voluto dire cio', per cui rettifico: in campo professionale non si sceglie un linguaggio (o qualsiasi altra cosa) solo perche' piace, c'e' tutta una serie di fattori che occorre tenere conto. A volte c'e' piu' di una scelta, a volte la scelta perfetta non esiste. Anche nel campo amatoriale dovrebbe essere cosi', se uno conosce solo un linguaggio ovvio e' limitato a quello, altrimenti sceglie quello che meglio si appresta allo scopo. Faccio un esempio stupido: un amatore per hobby puo' decidere di costruire una sedia in legno, in casa ha un coltellino svizzero e usa quello, mentre un professionista usera' tutta una serie di strumenti diversi, usera' un martello per piantare chiodi (anche se basterebbe il tacco di una scarpa) e un cacciavite per mettere viti (anche se basta la lama di un coltello).Io non impongo al mercato di usare un determinato linguaggio o/e una determinata architettura. Per me il mercato o/e le aziende o/e startup etc... sono libere di scegliere in che direzione vogliono andare e quindi che cosa usare. ...
Scusa, con tutto il rispetto, mi pare tu sia ferrato su molti concetti ma qui hai detto troppe imprecisazioni, o non ti sei spiegato bene. Come quando precedentementi dissi che il Assembly non esistono funzioni o strutture.....
Nel caso dell'elettronica analogica c'è ben poco da programmare.
....
Il riferimento era all'ambito embedded, dove sfido chiunque a trovare un processore x86.
....
Perchè non esiste il concetto di variabile in Assembly e ogni istruzione può accedere ad aree di memoria arbitrarie. Per cui l'assemblatore non ha modo di conoscere in quali aree di memoria si trovano quali dati.
...
in Assembly si possono definire solo gli elementi nelle sezioni dati statiche. Niente è specificabile per quanto riguarda i dati nel heap.