Newsgroup: it.comp.lang.c
Titolo: Cominciare da zero. K&R?

Ciao a tutti,

fin dall'infanzia ho sempre avuto una grande attrazione per la 

programmazione, che però non sono mai riuscito a concretizzare escludendo 

qualche piccolo esperimento. Ora sono al primo anno di ingegneria chimica 

e sono seriamente intenzionato a colmare le mie lacune nel campo tanto 

per passione quanto per una sicura futura utilità nella mia professione.



Ho parlato con un mio amico che studia informatica e mi ha consigliato il 

"nuovo" approccio alla programmazione: tutorial sul web, prova e impara 

ecc... insomma, il nuovo tipo di apprendimento basato sul web. Io invece 

pensavo ad un approccio diverso, meno superficiale, partendo da qualche 

buon libro.

Vorrei cominciare dal C, mi ha sempre affascinato e mi sembra il 

linguaggio più utile per comprendere il funzionamento dei software, oltre 

che di grande eleganza. Pensavo quindi di acquistare il K&R, ma mi 

sovviene un dubbio: tutti ne parlano come un ottimo libro per imparare 

"il C" ma lo è anche per imparare a programmare? Ci sono dei prerequisiti 

non legati al codice necessari prima di imparare un linguaggio? Vorrei 

evitare di impararmi righe di codice asetticamente senza capire la 

"logica" che c'è dietro la progettazione di un software. Sempre questo 

mio amico dice che la logica non si impara sui libri ma con la pratica, 

cosa che mi ha lasciato un po' perplesso, dite anche voi che è così? 

Per cominciare a programmare basta un libro come il K&R o servono nozioni 

teoriche in più?



L'obiettivo che mi sono posto sarebbe quello di riuscire entro l'estate 

ad avere le competenze necessarie per sviluppare un semplice risolutore 

di problemi di algebra lineare (matrici, rango, determinante, 

diagonalizzazioni...), credete sia un obiettivo praticabile con diciamo 

un paio d'ore di studio a settimana?



Altra cosa, vorrei comprare il libro in inglese, pensate sia una buona 

idea con una conoscenza della lingua da studente italiano medio-buono?



Grazie.



Il K&R se ricordo bene (sono moltissimi anni che non lo prendo in mano) 

non insegna a programmare quindi devi rivolgerti ad altro.

I concetti di programmazione strutturata (alla pascal per intenderci) 

vanno bene anche per il C.

Per un neofita,comunque vedrei di piu un C++ che un C in quanto il C e' 

solo un assembler portabile,non offre molto di piu.

Con C++ puoi iniziare dalla programmazione strutturata classica ma usare 

le sue librerie molto piu comode di quelle del C e poi volendo si puo 

crescere per apprendere la programmazione ad oggetti e quella generica.

Sia per K&R che per C++ esistono molti libri anche in italiano se 

l'inglese fosse un problema o si preferisce la lingua madre.






 



Sempre perché sei a ingegneria, sì. Comincia da subito a leggere solo cose in

inglese: è la lingua internazionale de-facto, e più vai avanti meno cose in

italiano troverai.





Ciao!






Appunto perché il C è più vicino alla macchina mi sembra un linguaggio migliore

per imparare.

Iniziare con il C++ secondo me è un bagno di sangue... Si può fare (a ing.inf.

a Pisa così faceva il mio professore) ma per forza di cose devi iniziare con il

sottoinsieme del C++ che è semplicemente il C... Quindi sarebbe come impare

prima il C e poi il C++ :)

A meno di non volere iniziare il primo esempio con std::cout << "Hello world!";

e dire "guardate, per capire quella roba dovete aspettare la fine del corso

(se va bene)!" :)



Ciao!


 medio-buono?



Secondo me sì. L'inglese non lo si sa mai abbastanza. Ed è uno strumento 

estremamente utile.



EMG



--

http://www.emagsoftware.it


http://www.emagsoftware.it/emgmusic


http://www.emagsoftware.it/spectrum


http://www.emagsoftware.it/tbosg



 solo un assembler portabile,non offre molto di piu.



Beh, insomma... Comunque io sconsiglio assolutamente il C++ per imparare 

a programmare.



 di zero.



Azz, non so neanche che cos'è. Dici che non valgo niente?... :-(



 



Leggendo i tuoi interventi son sicurissimo che ne sai scrivere uno ;)

Depth-first search, ricerca in profondità in italiano.



L'ho preso come esempio perché metà degli algoritmi su grafi operano su qualche

tipo di albero che iteri con DFS, BFS o varianti, modificati a seconda del

problema che bisogna risolvere; cosa che lo rende uno dei blocchetti fondamentali

da cui non si può prescindere, e che non basta solo conoscere a memoria, ma

farlo proprio e saperlo usare con la stessa scioltezza con cui si usa un for o

un sort.

Nessuno si ricorda a memoria come scrivere algoritmi che avrà usato una/due volte

nella vita (e.g. problema del flusso massimo, chi l'ha scritto di recente? :) ),

ma se ricorda il concetto alla base, l'implementazione (ottimizzazioni a parte)

la tira giù in dieci minuti massimo.



Ciao!



Puo darsi,ma tra C e C++ credo sia meglio iniziare con quest' ultimo 

(IMHO naturalmente)

Anche C++ e' vicino alla macchina visto che e' quasi compatibile con il 

C al 100% e supporta la stdlib del C.




 teoriche in più?



IMHO il K&R non e' proprio l'ideale, ma si puo' anche cominciare da li'. 

  Poi per approfondire ci sono altri libri, ma anche i tanti esempi e 

articoli che si trovano in rete.


 Depth-first search, ricerca in profondità in italiano.



Ah, operazioni ricorsive su alberi. Ok, sì, allora capisco il tuo punto 

di vista: bisogna saperlo fare. E non credo che il K&R insegni a farlo 

(oppure non ricordo).



 grosso, quello per cui molti abbandonano.



Sì, condivido: teoria e pratica insieme. Ma non è quello che dice 

"l'amico" (che forse tanto amico non è, visto il consiglio non molto 

valido...). Lui dice: "la logica non si impara sui libri ma con la 

pratica" che è un po' diverso, mi sembra.



Grazie a tutti per le numerose risposte!

Come linguaggio ho deciso di cominciare con il C, è da sempre quello che 

mi ha attratto più di tutti e tra l'altro mi sembra una buona base anche 

per passare ad altri linguaggi in futuro.

Riguardo teoria e pratica sono esattamente della vostra opinione: vanno 

benissimo i tutorial e le guide varie, ma anche secondo me se prima non 

getto solide fondamenta su qualche libro rischio di costruire soltanto un 

bel castello di sabbia. Ricordo che anni fa feci pure dei programmini 

carini in C scopiazzando qua e la... divertimento tanto, utilità zero.



Nonostante non abbia ancora vent'anni anch'io sono un po' "vecchio stile" 

nel metodo di studio, quindi va benissimo studiare a pc acceso per fare 

le varie prove, però i miei appunti cartacei non me li può togliere 

nessuno!



Allora, mi sembra di aver capito che alla fine comprare il K&R per 

imparare il C sia un'idea valida, vi chiedo però se occorrerebbe anche un 

altro libro più in generale sui concetti della programmazione. Ad esempio 

quando F. parlava di DBMS, bare-metal, alberi ecc... non avevo idea di 

che roba fossero. Sono conoscenze necessarie prima di cominciare oppure 

le potrò imparare su altri manuali strada facendo? Inoltre capire "come 

funziona un processore" può essere utile da sapere prima di programmare o 

posso benissimo farlo dopo aver scritto i miei primi codici?



Mi sto davvero appassionando all'idea di imparare a programmare... da 

piccolo avevo una grande passione per l'informatica: a 5 anni già 

smanettavo con l'MS-DOS sul vecchio 486 di famiglia, poi purtroppo verso 

le scuole medie a forza di sentirsi le lagne di tutta la famiglia sul 

"futuro ingegnere informatico" ho sviluppato una sorta di ribellione 

psicologica che mi ha fatto abbandonare totalmente l'informatica... spero 

di essere ancora in tempo per recuperare!



Grazie a tutti, fa davvero piacere trovare qui programmatori 

evidentemente "della vecchia scuola". In altri forum mi avrebbero già 

detto di gettare i libri e impararmi python con i video su youtube e le 

app per cellulare.





Matteo.


 



Probabilmente noi qui siamo un po' fuori dal tempo, purtroppo. :)



Comunque, se il tuo scopo è lavorare subito come schiavetto a Google hanno

ragione quelli del forum. Se invece vuoi fare la differenza non ci sono

scorciatoie, bisogna mettersi sotto con matematica, elettronica e ancora

matematica; e non mi sembra sia possibile smettere mai di vedere qualcosa di

nuovo...





Ciao!


 le app per cellulare.



Purtroppo... :-(



 pratica" che è un po' diverso, mi sembra.



Beh, in un modo o nell'altro, anche solo teoria o solo pratica, dai e 

dai ci si arriva.  Utilizzandole insieme ci si arriva meglio e prima, 

poi quanto usare una e quanto l'altra dipende dalla persona.



Ormai programmo da oltre trent'anni e adesso addirittura mi piace fare 

scorpacciate di roba teorica, ma se penso a quando ho iniziato, ero 

quasi allergico alla teoria, ma la pratica mi ha salvato. :-)


 posso benissimo farlo dopo aver scritto i miei primi codici?



Secondo me e' importante, poi dipende dall'indirizzo che scegli, i 

processori moderni, ma anche l'intera architettura di un PC, sono 

abbastanza complessi, per imparare le cose essenziali meglio scegliere 

qualcosa di semplice, ad esempio oggi ci sono sistemi di sviluppo ARM 

che si programmano in Assembler e C, e costano poco.

Oggi l'Assembler e' poco utilizzato, avendo a disposizione anche il C 

raramente si sente la necessita' di andare a livello piu' basso, pero' 

usare l'Assembler ti aiuta a capire meglio l'architettura del sistema, 

sia per quanto riguarda l'hardware, che il sistema operativo.


"il C" ma lo è anche per imparare a programmare? ...



Per programmare, ti consiglierei "algoritmi + strutture dati =

programmi", del Wirth (isbn 8870812596).



Per il linguaggio, anche se sono nato col C e il K&R, e lo uso da

almeno tre decadi, sarei propenso a consigliarti di iniziare con

Swift: è moderno, elegante e puoi fare cose raffinate.



Un altro consiglio è dare un occhio ai linguaggi funzionali: anche se

sono una nicchia li trovo utilissimi per creare una propria 'forma

mentis' su quello che vuoi fare quando programmi.

-- 

andrea - ri mi cci, name



Ho cercato informazioni su algoritmi e strutture dati e mi si è aperto un 

mondo, penso sia proprio quello che mi serve per gettare una base 

teorica. Ho trovato il libro che consigli usato a poco, credo lo 

prenderò, spero soltanto di riuscire ad affiancare senza problemi questo 

studio a quello universitario, mi sembra di aver capito che il lavoro che 

ho in mente di fare io ha la complessità di due esami di ing. 

informatica...

Non ho trovato al volo lo Swift però, ti ricordi qualche altro 

riferimento? 


 le sue librerie molto piu comode di quelle del C e poi volendo si puo 



linguaggio != librerie eh.

poi dire che le librerie del C++ siano piu' comode...mah.



Ciao Jack


 sia per quanto riguarda l'hardware, che il sistema operativo.



mah mica tanto. L'architettura di un processore e' sempre uguale: Von Neumann, una volta che hai capito come funziona (fetch decode execute), avere pipeline, cache ecc. non cambia nulla.

E' interessante scrivere una volta qualcosa in Assembler per capire come funzionano i loop, i salti condizionali (if), ecc. ma una volta fatto rifarlo e' un po' stupido, a meno di voler scrivere codice ultra ottimizzato che magari fa uso di istruzioni che il compilatore non e' in grado di gestire.



Ciao Jack


Il 21/02/2017 12:17, manalog ha scritto:


ultima cosa: le universita' hanno le BIBLIOTECHE, vai e consulta!



e, se lo fanno ancora, c'e' anche il prestito dei libri



e dopo i wirth (*), ma solo dopo che lo hai digerito, c'e' il knuth ( 

non e' un gioco di parole ma un altro autore )





(*) dei suoi libri c'e' anche qualcosa gratuito in pdf


 mah mica tanto.



ROTFL! Vabbe', ciao.


 



Incredibilmente datato, e non so quanto ancora valido al giorno d'oggi.

Ma Wirth come persona è... beh... un mostro sacro, ad essere cattivi! :) Il suo

libro andrebbe letto solo per quello! :)



Putroppo non sono aggiornato sui libri "da principianti" usciti ultimamente,

visto che non ho più a che fare con quel tipo di cose.



Il Knuth (suggerito nel seguito del thread) lo lascierei da parte: anche quello

*bisogna* leggerlo ma, non so voi, io l'ho letto in anni e dopo aver iniziato a

lavorare; gli esercizi sono molto complicati (alcuni erano/sono problemi teorici

irrisolti) e lo stampo è più enciclopedico che didattico.



Se proprio dovessi dare un consiglio... ci sono online varie guide/tutorial di

strutture dati e algoritmi: prendersi la scaletta, vedere cosa dicono, e per

ciascun punto che interessa approfondire come si può. Del resto, quando

s'impara, si vuole sapere com'è fatto un albero, magari implementare un B*, ma

tra il vedere una struttura con due puntatori dentro, e l'avere la descrizione

teorica e l'implementazione di ogni tipo di albero conosciuto ad oggi, ci sono

molti livelli in mezzo...



M2C,

Ciao!






No, vai tranquillo: per un po' d'operazioni di AL non c'è bisogno di chissà

quali conoscenze... Ancora vale la regola del: se lo so fare a mano, posso farlo

fare tale-quale ad una macchina! ;)



Ciao!




 



Sempre non abbiano tornelli ;)



Ciao!


 Quindi in totale pochissimo.



quanti sistemi embedded pensi ci siano in casa tua? o sulla tua auto?



Ciao Jack


 quanti sistemi embedded pensi ci siano in casa tua? o sulla tua auto?



Vero! Vediamo un po':



- la radio digitale in cucina

- la radio digitale mobile

- la lavatrice

- la sveglia digitale

- il telefono cordless

- il router



Giusto?



Poi non so se si possono considerare embedded anche le console (tipo 

Wii) e i tablet (tipo iPad), forse no.



- il router



Possiamo anche aggiungere la chiave per aprire la macchina, le

chiavette usb, le schede SD :)



 Giusto?



frigorifero, freezer, per chi l'ha stufa e forno elettrici (vetroceramica, induzione,ecc), spazzolino elettrico, citofono, le lampadine a led (che magari cambiano colore), TV, stereo, robot da cucina, telefono wireless, e chi piu' ne ha piu' ne metta.



Fai conto che nelle auto high end ci possono essere fino a 200 "smart actuator", collegati alla centralina da bus di comunicazione (CAN, LIN) che fanno cose: finestrini, specchietti, sedili, sistema ventilazione motorizzati, valvole per il sistema di raffreddamento del motore, ecc.



quindi si, ce ne sono un sacco, che per lo piu' non si vedono, e che praticamente tutti hanno almeno la routine di bootstrap scritta in assembler  (cioe' tutto quello che avviene prima che venga chiamato il main()).



Ciao Jack


 chiavette usb, le schede SD :)



Azz! Siamo circondati, non c'è più speranza! :-D



 stereo,



Non il mio. E' degli anni '70. :-)



Tutto questo però fa venire da pensare che forse ci può essere lavoro in 

quel campo...



 chiavette usb, le schede SD :)



mmh le schede SD non saprei, non e' che hanno una CPU con un programma che gira.

Se le mettiamo nel mazzo allora anche tutte le carte di credito, bancomat, RFID ecc. sono da considerare.



Ciao Jack


 quel campo...



di lavoro ce n'e', ma bisogna sapere un po' anche di elettronica, visto che la cpu si interfaccia direttamente con l'hw.



Ciao Jack


 visto che la cpu si interfaccia direttamente con l'hw.



Chiaro. E quella ce l'avrei, anche se forse un po' arrugginita.



Ma secondo te a chi bisogna rivolgersi? C'è la possibilità di lavorare 

nel campo anche per liberi professionisti?



 nel campo anche per liberi professionisti?



cerca su linkedin: embedded engineer o roba cosi.

come libero professionista c'e' lavoro, ma devi essere pronto a fornire il prodotto completo, o almeno l'elettronica, difficile che si cerchi qualcuno solo per il sw.

Se conosci qualche organizzazione che aiuta startups puo' essere una buona idea presentarsi, spesso ci sono tizi che hanno un'idea, ma poi serve qualcuno che la materializzi.



Se sei pronto a trasferirti in Germania, il lavoro lo trovi sicuramente, anche come Junior, sono alla disperata ricerca di ingegneri.



Ciao Jack


>mmh le schede SD non saprei, non e' che hanno una CPU con un programma che gira.



Si anche loro ce l'hanno, quelle "raffinate" hanno nel firmware

addirittura anche il wear-leveling, vedi le SD dedicate per

l'automotive:

https://www.sandisk.com/oem-design/automotive/sd1




 Se sei pronto a trasferirti in Germania, il lavoro lo trovi sicuramente, anche come Junior, sono alla disperata ricerca di ingegneri.



Purtroppo non sono ingegnere. E in ogni caso no, non sono pronto a 

trasferirmi. Mi sa che non ho speranza...



 quanti sistemi embedded pensi ci siano in casa tua? o sulla tua auto?



Hai preso proprio l'esempio peggiore, perche' in quel campo 

(elettrodomestici a larga diffusione) la gente che ci lavora e' 

pochissima.  Milioni di device, programmatori praticamente zero.



Già, anche questo è vero. E poi immagino che i programmatori necessari 

siano nelle case produttrici.



 quel campo...



Oggi quel campo si e' allargato parecchio ed e' ancora in forte 

espansione, purtroppo pero' i posti migliori sono difficili da 

raggiungere, spesso le aziende che lavorano in questo settore hanno una 

sola persona di esperienza, magari attorniata da tante "scimmiette". :-)



ah ecco. figo, non le conoscevo. sempre usato quelle cesse.

immagino non siano in vendita per i comuni mortali, sarebbero interessanti (se non costano un rene) per le rpi ad esempio.



Ciao Jack


 fare tale-quale ad una macchina! ;)





Insomma...tale quale non so, per dire, trovare un limite

per una funzione f(x) con x->inf che sembra andare a zero

e poi per x->zillioni-di-zillioni ti fa lo scherzetto

potrebbe non essere troppo vero.

Applicando a mano con la teoria magari invece te ne accorgi.

Altrimenti ad Analisi 1 come te le inculano le

calcolatrici scientifiche? :-D




 Ciao a tutti,



Mah io inizierei duro:



C K&R

C++ Stanley Lippman C++ Primer 5th Edition

Design Patterns (GoF)

Tutti i Meyers fino all'ultimo con C++14

Qualche libro sugli algoritmi

Boost

Qt



ecco...e poi mi curerei l'esaurimento. :-D






 idea con una conoscenza della lingua da studente italiano medio-buono?





tl;dr: leggi il K&R ma leggilo tutto, dalla prima all'ultima pagina.



Ciao,

Ho letto il K&R a pezzi durante il primo anno di università e da un 

mesetto mi sono messo a rileggerlo "per bene". 



La mia motivazione è che avendolo letto a pezzi, non avevo un senso di 

"chiusura" riguardo a quel libro e questo mi urtava non poco.



Ebbene, adesso lo sto leggendo pagina per pagina, questa volta però con 

il classico "senno di poi", vale a dire dopo aver letto anche qualcosa di 

algoritmi, di strutture dati e soprattutto del perché queste due cose 

sono importanti.



Ebbene, ti posso dire: il K&R è veramente un gioiello di libro.

Se lo leggi tutto conoscerai non solo il C ad un livello molto più che 

accettabile, ma avrai anche incontrato qualche algoritmo carino (shell 

sort, insertion sort, quicksort) e qualche struttura dati (alberi binari, 

hash-table). Non sono delle spiegazioni esaurienti, ma sono comunque 

utili.



Onestamente, sono contento di essermi messo a rileggerlo e adesso vorrei 

averlo letto per bene prima, quando ero al primo anno di università.



Saluti,

-- 

rzl


 linguaggio più utile per comprendere il funzionamento dei software[...]



Arrivo a darti questa risposta un bel po' in ritardo, ma spero tu la legga ugualmente. 

Lascia perdere il C per iniziare e tantomeno - come qualcuno ha follemente suggerito - il C++.

Oggi ci sono linguaggi migliori per imparare: Rust, Go, Kotlin.



Il K&R tra l'altro non e` l miglior libro per imparare il C. E` scarno e concentrato solo su aspetti essenziali.  La prima versione e` lontana anni luce dagli ultimi standard del C, e la seconda versione ha discrepanze persino con lo standard C89 (come il cast sul valore di ritorno di malloc). Potrebbe andar bene solo se lo corredassi con altro: il Deitel&Deitel, *dicono* sia un ottimo libro, il tutorial sui puntatori di Ted Jensen, e materiali in rete. Evita come la peste i libri di Herbert Schildt.




 



Arrivi per dare dei folli a chi risponde su un gruppo

dedicato al C per un OP che chiede dritte su cosa leggere e

come iniziare a programmare in C dicendo di iniziare

con altri linguaggi.



Continui poi con un elenco di questi altri linguaggi

senza dare alcun riferimento per impararli se non i

loro nomi e nessun argomento e chiarimento all'OP

riguardo a questa sterzata verso altro rispetto a

quello che chiedeva.



Poi passi a dare consigli per sentito dire su testi

papabili per il C.



Insomma...mi sembra un intervento poco utile,

arrogante e quanto a squilibri mi sembra che te la

cavi senz'altro meglio di chiunque altro a cui tu ti

possa riferire.





P.S.

La mia risposta non sara' stata certo un gran che' ed ho

esteso al C++ perche' e' improbabile che imparato il C

si riesca, poi nella pratica, a restare nell'ambito

del solo C, ma almeno ho indicato dei testi largamente

riconosciuti come importanti riferimenti e tecnologie

usate nel mondo del lavoro nell'ambito C/C++.


 esteso al C++ 



Il C++ non e` un linguaggio che NESSUNO oggi adotterebbe per imparare (e direi che a meno di constraint molto specifiche, nessuno userebbe per iniziare progetti enterprise). Si`, consigliare il C++ ad un neofita e` semplicemente FOLLE. Se ti rode il culo per questo, ehhh non posso farci mica niente.


Addi' 21 giu 2017, 4ndre4 scrive:


Premessa: lungi da me voler fare polemiche eh, ma me lo spigate perche'

e come mai:

- a scuola fanno il pascal (sempre meglio del basic d'un tempo!);

- all'uni (mat - ing - informatica) e' /obbligatorio/ il C, mica

il pascal o il fortran o altri;



-- 

bye, Yoda

Elemento distintivo di un Vero Programmatore e' il linguaggio di

programmazione usato. Un Vero Programmatore usa il Fortran, mentre

un Mangiatore di Ciocori' usa il Pascal.

               -- "Il Vero Programmatore non usa il Pascal"






Su questo concordo. Rimane però il fatto che il K&R è un libro che prima o

poi hanno letto tutti. A che punto dello studio infilarlo è, immagino,

questione di gusti.



Ciao!


 il pascal o il fortran o altri;



quale uni?





Non è come dici: dipende dal tipo di corso e dalle preferenze del docente.



Ciao!


 Non è come dici: dipende dal tipo di corso e dalle preferenze del docente.



Boh.. avro' capito male - come non detto.

OK ciao



-- 

bye, Yoda








Io ho fatto C++, amici in altre uni Java, colleghi più anziani Fortran,

ragazzetti che ho incontrato ultimamente Python.

Ma tanto alla fine un linguaggio vale l'altro, visto che alla fine si

dovranno imparare tutti e quattro ;)



Ciao!


 - all'uni (mat - ing - informatica) e' /obbligatorio/ il C



A parte che non e` vero, quel che ti serve dall'universita` non e` la conoscenza di un linguaggio specifico, ma i fondamenti teorici. Io consiglio a tutti coloro che aspirano a diventare programmatori professionisti di laurearsi in matematica.


 poi hanno letto tutti.



Lo hanno letto tutti perche` tutti lo hanno (erroneamente) consigliato come la bibbia del C "che tutti devono assolutamente leggere".



Si va be

Tu hai delle idiosincrasie verso il C++

Ammettilo,ti piace poco e non vorresti consigliarlo.

Ma oggi, per fare sw che richiedono stabilita e performance e' 

insuperabile ed e' usatissimo nell' industria.

Rust a parte non esiste linguaggio migliore per quei tipi di sw.

Rust potrebbe essere il successore di C++,purtroppo rimane (ancora) un 

linguaggio di nicchia.

Ma se vuoi continuare a fare gestionali allora rimani pure in java o C 

sharp (battuta con sorriso)





Ma te cos'hai studiato?






 



Questa e' una cretinata apocalittica, sia che si parli di

didattica sia che si parli del mondo del lavoro.



Non porti elementi a suo suffragio, e a me non interessa

farlo a sua smentita.

Ma tu fallo se hai tempo, magari imparo qualcosa.



Poi cosa vuoi che mi roda?

Modera il linguaggio che cosi' fai proprio brutta figura.


> cosa che mi ha lasciato un po' perplesso, dite anche voi che è così?



Nutro forti dubbi, forse ha detto "logica" intendendo

colloquialmente "piu' o meno con che logica funziona una cosa",

non certo lo studio della logica propriamente detta, altrimenti

si sbaglia.


 sharp (battuta con sorriso)



I sistemi enterprise su cui lavoro io difficilmente potrebbero classificarsi come "gestionali".

Vedi, la differenza tra me e te e` che io parlo di cio` che conosco, tu no. 




 Modera il linguaggio che cosi' fai proprio brutta figura.



Io eh? LOL :)


 Ma te cos'hai studiato?



E a te che te ne frega? Che rilevanza avrebbe?




 Perche` le conoscenze dei professori di informatica delle superiori sono ferme agli anni '70.

E' anche peggio. Nella scuola (istituto tecnico) che ha frequentato mio 

figlio, quando eliminarono la materia "aggiustaggio" (sostanzialmente 

uso della lima), gli insegnanti furono riciclati per insegnare 

informatica. Per quanto tu possa immaginare il peggior risultato 

possibile, e' stato in realta' anche molto peggio.







Gia': a uno che parla di salute che rilevanza avrebbe

chiedergli se ha studiato medicina?






Ma dai, sei il Thorin che fu di it.comp.linux.iniziare,

oppure siete parenti o geneticamente vicini senza saperlo.



Vai in pace.


 oppure siete parenti o geneticamente vicini senza saperlo.



LOL! ma impossibile: Pierluigi da mo' che t'avrebbe gia' calato l'ascia

bipenne e poi non userebbe MAI quel disastro ecologico di G2/1.0 - ciao!





-- 

bye, Yoda




 realta' anche molto peggio.



:-(



EMG



--

http://www.emagsoftware.it


http://www.emagsoftware.it/emgmusic


http://www.emagsoftware.it/spectrum


http://www.emagsoftware.it/tbosg



 ridicola.



Potrebbe essere valida come ginnastica mentale, propedeutica alla 

pratica della programmazione in Cobol. :-P


 Ma dai, sei il Thorin che fu di it.comp.linux.iniziare,



Eh?!


 chiedergli se ha studiato medicina?



Almeno, prima di chiedere alcuna referenza, esci dall'anonimato, senno` ti stai dando la zappa sui piedi. Poi, gli argumenta ad verecundiam non hanno mai aiutato la dialettica di nessuno. Vuoi che ti posti il mio curriculum vitae di sviluppatore software? Non me ne frega una mazza di farlo. Se ti piace quel che dico, bene, senno` ciccia.


 possibile, e' stato in realta' anche molto peggio.



Non stento a crederlo... :-o



ciao

Giacomo


 scommetto che non glie le avrebbero date quelle cattedre ... :-(



Credo anch'io... :-(((



 figlio, quando eliminarono la materia "aggiustaggio"



Ma si`, guarda, si potrebbe discutere per ore del livello di insegnamento informatico nelle scuole (di tutti i livelli, universita` incluse). Anziche` insegnare ai ragazzi a risolvere i problemi nel modo piu` efficiente possibile, gli insegnano il Pascal. Oggi, 2017, il Pascal. 'Tacci loro. Alle medie io smanettavo gia` coi computer e quel coglione di Educazione Tecnica era fissato col regolo calcolatore (
https://it.wikipedia.org/wiki/Regolo_calcolatore
), una roba usata nel 1600, perche` secondo lui "dava le basi". Questa storia delle fantomatiche basi che ti verrebbero date se cominci dal metallo puro e` la piu` grande truffa propalata a chi si avvicini ad una qualunque materia tecnica (come si puo` vedere anche da questo thread) e che ha, come sua piu` ovvia conseguenza, quella di allontanare i neofiti una volta e per sempre. Come si fa, davvero, a consigliare di usare il C, per imparare la programmazione, che non ha nemmeno un tipo built-in per le stringhe? Che se usi due scanf() in sequenza e non svuoti il buffer di tastiera bestemmi in tutte le lingue? Che se per caso vai in buffer overflow ti sputtana una fopen() da un'altra parte del sistema? Poi ti dicono: ah no, ma lo devi saper usare. Un par de palle. Anche una bomba si deve saper usare. A che cosa serve, oggi, 2017, sapere cio` che accade dietro le quinte con l'aritmetica dei puntatori, di quanto avanza un puntatore a int, sulla macchina X con word lunga Y bits, se vi aggiungi 3? A che serve ricordarsi i casi in cui il nome di un array decade in puntatore a primo elemento e agire di conseguenza? E` roba che andava bene negli anni '60/'70/'80. Oggi ci sono altri strumenti e per insegnare e per imparare. Purtroppo molti (professori e manovali della programmazione) ripetono a pappagallo stronzate che fanno "sviluppatore cool": il K&R lo devono leggere tutti, il C e` il miglior linguaggio per imparare, le tastiere vere hanno solo 0 e 1, e altre puttanate varie. Poi, al colloquio di lavoro gli chiedi di scrivere un algoritmo di compressione in C (io chiedo sempre l'huffman) e svengono.


 <snip>



Non capisco. Prima dici che le basi non servono e poi che chiedi l'Huffman

ai colloqui. Qualcosa non quadra, a meno che non pensi che le uniche basi

utili siano quelle che piacciono a te...



Ciao!


 A che cosa serve, oggi, 2017, sapere cio` che accade dietro le quinte con l'aritmetica dei puntatori

Serve. E' propedeutico all'uso di altri linguaggi.

Ad esempio, se programmando in Java ti becchi un NullPointerException, 

non ti viene da pensare ad un cane da caccia, se conosci l'algebra dei 

puntatori.

:-)


 Serve. E' propedeutico all'uso di altri linguaggi.



Ma assolutamente no. Tutto cio` che devi sapere, quando ottieni un NullPointerException e` che c'e` stato un accesso ad un reference che ha un valore null. Non e` affatto legato all'aritmetica dei puntatori, e non serve sapere NULLA sull'aritmetica dei puntatori per capire cos'e` un NPE.





Mi basta anche cosi! :-D



Che c'entra l'anonimato poi...


 Non capisco. Prima dici che le basi non servono e poi che chiedi l'Huffman



Non capisci perche` leggi superficialmente quello che scrivo e ne deduci quel che piace a te. 

Affermare che una certa strada non ti dia le basi non vuol dire che le basi non servano - bisogna ottenerle in un altro modo: migliore. Il riferimento a Huffman era slegato da quello sulle basi. Ho detto una cosa precisa: che le (STESSE) basi, in programmazione, si acquisiscono molto piu` difficilmente in C che in qualunque altro linguaggio; ho POI detto che molti di coloro che cantano le lodi del C crollano di fronte ad un problema minimamente complesso (come l'implementazione dell'algoritmo di Huffman). Sono due cose slegate.



barba incolta, aria scazzata: algritmo di Huffman possibilmente compilabile.

stangona bionda, gonna succinta: il carattere prima di "define"... se lo 

sai, se no lo cerchiamo assieme dopo il caffè.


 Che c'entra l'anonimato poi...



C'entra col fatto che se chiedi a me di supportare quel che dico fornendo referenze, dove ho studiato, ecc.., dovresti almeno dare l'esempio e mostrare le tue. Perche` bisognerebbe accettare i tuoi consigli di "medicina" a scatola chiusa, e invece quando tocca a me io debba presentare il certificato di laurea, e` un mistero tutto da indagare.





ROTFL!! :-D

Hai ragione, forse avrebbe gia' scritto "PLONK" o "> /dev/null"

ma scemo io che non ci ho pensato: con G2/1.0 e' inequivocabile

che i geni siano altri.

Ello avrebbe avuto tin, oppure slrn (scritti in c :-P).



P.S. ricordo che all'epoca mitragliava come un forsennato

      e fui io, dopo le sue risposte nei miei

      rari post, che gli chiesi di procedere al PLONK. :-DDD



Scusate l'OT. Ciao.



Ah! Ok, non sai cosa vuol dire "anonimato".

Le superiori? :-DDD




 uso della lima),



Come sarebbe? Come ti permetti di sminuire cosi' "aggiustaggio"?!?

C'erano i torni, le frese, i contrasti, i fogli di lavorazione con

i disegni da fare in assonometria e in tre dimensioni e con

le varie fasi di lavorazione ben distinte, altro che pizza e fichi!

:-D



Per un attimo pensavo di aver dimenticato la faccina.



Cio' che dicevo era semplicemente ironico, perche' in effetti, dei 

puntatori un programmatore puo' anche non conoscerne l'esistenza, 

proprio perche' ci sono fior di linguaggi senza puntatori. A maggior 

ragione per illustrare l'algoritmo di Huffman, non c'e' bisogno dei 

puntatori, in sostanza, dal punto di vista del calcolo, basta sapere 

cosa sia una media ponderata, che si fa anche in COBOL ANSI71.



Per quanto riguarda il NPE, si trattava di una battuta, te la spiego. Se 

dico "pointer" a mia moglie, o a chiunque altro che non abbia mai avuto 

a che fare coi puntatori, e' piu' facile che capisca che si tratti di 

una razza canina.



E' necessario che ti faccio un disegno?





Continuo a non vedere come possono essere slegate, visto che dici che

Huffman è una base che serve mentre l'aritmetica dei puntatori è una base

che non serve. Comunque, non è questo il punto importante.



Ad oggi vedo un sacco di ragazzini che indicizzano con stringhe invece di

interi, usano hashmaps come se piovesse, ogni array un sort perché visto

mai. Se avessero iniziato studiando il C invece di Python o PHP certe

bestialità se le risparmierebbero.

Ribadisco: se lo scopo è andare a fare il code monkey sottopagato per

un'azienda a caso va anche bene farsi il mesetto di uno di questi

linguaggetti di moda al momento. Se si vuole diventare professionisti

tocca studiare anni di matematica, elettronica e algoritmi, come del resto

abbiamo fatto tutti qui. Almeno spero.





Ciao!


[...]

Il rodimento di culo ti fa evidentemente straparlare e finisci per scrivere idiozie. Sì, anonimato, hai capito bene. Tra l'altro ti sei scelto un nick che ne è l'emblema. Il succo del discorso è chiaro: non si sa chi tu sia, caro anonimo, ma quando parli di medicina bisogna crederti sulla parola. Non sai chi sia il tuo interlocutore ma quando parla di medicina deve mostrare i documenti. Occhio che di 'sto passp finisci per fare la figura dello scemo.



I puntatori devi sapere cosa sono in qualsiasi cosa scrivi. Vedi come

smadonna la gente che inizia nei citati "fior di linguaggi" quando non

capisce la differenza tra passaggi per valore o riferimento, o deve far

tornare più di un valore da una funzione.



Ciao!



Dimentichi le vesciche sulle mani e relativi calli.

Fortunatamente ho avuto a che fare con aggiustaggio solo all'esame 

d'integrazione per passare dal liceo scientifico all'istituto tecnico. 

Era settembre, durante gli esami di riparazione, c'ero solo io e 

l'esaminatore, un'omone dall'aria compassionevole, che si fece vedere 

smacchinare col calibro. Poi mi diede un parallelepipedo con un velo di 

ruggine dicendomi di limarlo finche' le facce non fossero piane e 

parallele. Anch'io lo misurai accuratamente col calibro, sembrava 

perfetto, quindi armeggiai con la lima piu' fine che avevo a 

disposizione e tolsi solo la ruggine. Poi consgnai e mi diede 8.

:-D


 tornare più di un valore da una funzione.

Ma anche no. Ti posso citare una fila di linguaggi dove dei puntatori 

non c'e traccia, conseguentemente non c'e' da preoccuparsi degli 

argomenti by-value o by-reference perche' ci pensa il compilatore.

Alcuni di questi, a solo titolo d'esempio: SmallTalk e Java, ma anche 

procedurali come le prime versioni di BASIC, COBOL e IBM-RPG. Pure 

l'assembly, per quanto ne so io.





Che c'entra l'assembly è un mistero. Comunque...



Non hai capito cosa volevo dire. Faccio un esempio: chi inizia in PHP ha

enormi problemi a capire perché un intero passa per valore, un oggetto per

riferimento e un array per riferimento ma con copy-on-write.

Per noi programmatori C quello che succede è ovvio. Per loro è magia nera

che va accettata, scordata dopo una settimana e chiesta nuovamente per venti

volte.





Ciao!


 :-D



Dove andavo io, un anno di lima e parallelepipedo... :-(



Anni '70, Roma, ITIS E. Fermi.



 l'assembly, per quanto ne so io.



Stai dicendo che in assembly non ci sono i puntatori? Mi sembra strano. 

Devo ammettere che io conosco solo l'assembly Z80, ma lì i puntatori ci 

sono e come. Nel senso che si usano i registri per contenere indirizzi e 

poi le istruzioni adatte che li usano come puntatori. Non posso 

escludere che gli assembly moderni siano completamente diversi ma ne 

dubito. Senza puntatori come faresti ad accedere alla memoria?



 abbiamo fatto tutti qui. Almeno spero.



Abbiamo fatto tutti CHI? Di chi parli? E cosa c'entrano gli anni di matematica, elettronica (?) e algoritmi col C in particolare?


 cosa sia una media ponderata, che si fa anche in COBOL ANSI71.



Esatto!




 tornare più di un valore da una funzione.



Ma de che. A parte che se certa gente "smadonna" su dei concetti cosi` semplici, si tratta di pessimi programmatori - hanno problemi ben piu` gravi del linguaggio che usano - sapere cos'e` un puntatore e` del tutto irrilevante per poter programmare. Un programmatore e` uno che risolve problemi in maniera efficace ed efficiente. Per farlo, ti serve una solida conoscenza di algoritmi e tecnologia. Ma le tecnologie che ci sono oggi ti consentono di risolvere problemi SENZA conoscere i dettagli implementativi di bassissimo livello. E giustamente. 



Considera, poi, che il fatto che un linguaggio ti obblighi ad avere a che fare con roba come null/NULL/nil o con operatori == che confrontano reference anziche` valori, e che ti obblighi in sostanza a sapere cosa sia il passaggio per riferimento e per valore, e` un *DIFETTO* di quel linguaggio.



Il fatto che un determinato oggetto venga passato per valore o per riferimento e` solo un dettaglio implementativo, che non dovrebbe affatto emergere. L'astrazione e` che io passo SEMPRE per valore; sotto l'astrazione c'e` il passaggio per riferimento quando serve. Ma il "quando serve" lo deve decidere l'architettura per conto proprio, senza coinvolgere il programmatore.


 si sbaglia.



Invece la tua incapacita' nel fare semplici operazioni, come ad esempio 

*quotare* e' palese.

-- 

I'm not anti-social;

I'm just not user friendly


 volte.



Ma il problema non e` quel programmatore. Il problema e` il linguaggio implementato a quel modo. Non e` che siccome tu programmatore C sai cos'e` il passaggio per riferimento e per valore, allora quella e` una base che dovrebbero avere tutti. Il punto vero e` che i linguaggi dovrebbero essere progettati per astrarre quei dettagli implementativi. Ti ricordo che i linguaggi di programmazione sono artefatti umani, non roba che casca dal cielo. Siamo noi che abbiamo il dovere di semplificarci la vita.


 l'assembly, per quanto ne so io.



Negli esempi che hai citato l'assenza dei puntatori significa dover 

ricorrere all'indirizzamento diretto, aumentando in modo esponenziale i 

rischi.



 Stai dicendo che in assembly non ci sono i puntatori?



No, perche` in assembly (in generale) non hai variabili di tipo puntatore, e un puntatore e`, per definizione, una variabile che contiene un indirizzo di memoria. Hai registri, stack e operazioni per leggere/scrivere locazioni di memoria.




 rischi.



Eh?! Spiega.








Rispondo qui a tutti i tuoi messaggi.



Che non sono un troll è ovvio, scrivo qui da anni. L'atteggiamento da

troll putroppo lo stai avendo te, scrivendo decine di messaggi, quotando

male e buttandola in caciara aggiungendo argomenti sempre diversi invece

di focalizzarti sui punti che vengono fuori. Per questo, quindi, a meno

di non sentire cose nuove, non penso risponderò ancora.





- Per *chi non sa nulla* è meglio iniziare con il C o con un altro linugaggio?

Io dico C, te dici "altro". Per carità, sono punti di vista, anche se mi

piacerebbe sapere te, se dovessi fare un corso, quale linguaggio

sceglieresti.

Per me, quando si spiegano algoritmi, il C rende più chiara l'esposizione.



- "Se si comincia con un linguaggio ad alto livello si possono ignorare i

dettagli implementativi." Se si ignorano la qualità del codice ne risente.

Anche se non ci sono puntatori il programmatore deve sapere se passare

un qualcosa comporta una copia o no. Anche se la lista è un contenitore

nativo il programmatore deve sapere com'è fatta per sapere se inserire in

testa o in coda. E questa lista potrebbe andare avanti per giorni.



- I programmatori bravi scrivono bene in qualsiasi linguaggio. Giusto. Non

vedo cosa c'entri col topic.



- In assembly non ci sono puntatori. Non proprio. Ci sono istruzioni che usano

i valori dei registri come valori e altre come indirizzi di memoria. Ci sono

anche cose specifiche per ogni processore: magari ricordi negli x86 in RM, ad

esempio, i registri per indirizzare il segmento. Diversi processori hanno

simili specifiche.





Ciao!


 Eh?! Spiega.



La differenza, ad esempio tra C e Basic, e' che nel C hai un'aritmetica 

dei puntatori gia' implementata (e collaudata), se incrementi un 

puntatore ci pensa il compilatore a calcolare qual e' l'indirizzo fisico 

effettivo (in base alla dimensione del dato). Nel Basic puoi usare 

Peek/Poke per accedere alla memoria, ma devi anche calcolare gli 

indirizzi con maggiori rischi.



-- 

I'm not anti-social;

I'm just not user friendly


 Pure l'assembly, per quanto ne so io.



L'assembly e' morto, non esiste piu'! oramai e' proprieta' privata

ed esclusiva delle Macchine.. sai, forse non manca molto a Matrix!



-- 

bye, Yoda




 per leggere/scrivere locazioni di memoria.



Molto opinabile. Per me un registro che contiene un indirizzo è un 

puntatore, specialmente se ci sono istruzioni che lo usano come tale.



EMG



--

http://www.emagsoftware.it


http://www.emagsoftware.it/emgmusic


http://www.emagsoftware.it/spectrum


http://www.emagsoftware.it/tbosg



 puntatore,



Opinabile de che? E` una definizione del sostantivo "puntatore" come usato nei linguaggi che supportano "pointer-to-T" come tipo di variabile. Poi, tu, l'*aggettivo* "puntatore" (i.e. "che punta a") lo puoi affibbiare a quel che vuoi.


 La differenza, ad esempio tra C e Basic[...]



In vari Basic c'erano versioni di PEEK e POKE che consentivano di leggere 16 bit o 32 bit in una botta sola. Negli esempi citati da Ugo c'erano anche SmallTalk e Java. Spiegami cosa volevi dire con riferimento a Java, visto che hai parlato di "esempi che hai citato".


 i valori dei registri come valori e altre come indirizzi di memoria.



Ho gia` risposto ad EMG su questo: il "puntatore" (sostantivo) di alcuni linguaggi come C e C++ e` per definizione una variabile che contiene un indirizzo di memoria. Poi "puntatore", aggettivo col significato "che punta" lo puoi affibbiare a qualunque cosa "punti", anche ad un registro del processore. Il primo non esiste in Assembly, il secondo si`.


 Negli esempi citati da Ugo c'erano anche SmallTalk e Java. Spiegami cosa volevi dire con riferimento a Java, visto che hai parlato di "esempi che hai citato".



Nei linguaggi che non permettono la lettura/scrittura diretta della RAM, 

ci si mette una pezza facendo ricorso all'assembler o al C.

Non parlerei di "feature", ma di carenza.



Mi stupisce anche che si discuta di queste cose che dovrebbero essere 

scontate, per l'accesso a locazioni arbitrarie, dove non c'e' altro modo.

Capirei piuttosto una discussione sul ricorso dei puntatori da parte di 

C/C++, per gestire in modo piu' efficiente la memoria, ad esempio nel 

caso di code, b-tree, ecc. dove in pratica con C/C++ e' prassi fare 

ricorso ai puntatori, mentre con altri linguaggi no.

Piaccia o meno, e' una (IMHO ottima) caratteristica del C, che quando 

serve l'efficienza non ha rivali.







Se ti leggi un datasheet di qualsiasi processore vedrai che per certi registri

o certe operazioni il termine usato è quello.





Ciao!


 



Ovviamente non so su cosa lavori,se sai leggere tra le righe c'era 

scritto "battuta con sorriso"




 dubito. Senza puntatori come faresti ad accedere alla memoria?



Confondi. Anche nell'assembly dello zilog non c'e' traccia di puntatori. 

Il fatto che li usi "come" ne e' la prova, infatti per deferenziare sei 

costretto a leggerti il registro, stabilire che il registro contiene un 

indirizzo, stabilire che l'indirizzo e' l'indirizzo ad un dato di un 

certo tipo, leggerti i byte contenuti in quell'indirizzo, interpretare 

quei byte secondo il tipo stabilito. Se permetti c'e' la sua bella 

differenza con l'operatore & del C.


 

Ma anche no.

BASIC ed assembly a parte, negli altri linguaggi citati non c'e' traccia 

di istruzioni per l'accesso diretto alla memoria.

Se mi dici che col poke del basic puoi scrivere qualsiasi cosa, anche 

sui coperchi, la stessa cosa riesci a farla anche in C. Non e' la 

presenza dei puntatori che impedisce di fare cazzate.


 Per me, quando si spiegano algoritmi, il C rende più chiara l'esposizione.

[...]

Magari utilizzando quelle belle espressioni criptiche dense di simboli 

noti ai soli programmatori C?



Utilizzo il C da prima che fosse standard, lo uso ancora (sempre meno 

spesso) per fare "certe" cose, ma non mi verrebbe mai in mente di 

illustrare (nel senso di spiegare) qualsiasi procedura utilizzando il C.



Secondo te, quando nel 1952 Huffman illustro' il suo famoso algoritmo, 

quale linguaggio di programmazione puo' aver utilizzato?



Una bella union di puntatori a tipi differenti :)


 *quotare* e' palese.



acc, ho sbagliato a quotare, ma tu curati l'acidita' di stomaco.


 



Sei un disco rotto: :''')

Il rodimento di culo....il fatto che non sai cosa voglia dire

anonimato...



Poi non devi nulla, figurati, io ho chiesto cos'hai studiato

(e non chi sei, ecco perche' non sai cosa vuol dire anonimato),

perche' da quello che scrivi sembri saperla lunga anche

di come vanno le cose nelle scuole e nelle universita'.



Io non ho problemi e visto che me lo hai chiesto

sono un ingegnere elettronico (110/110 con lode, vecchio

ordinamento) ed ho conseguito un dottorato di ricerca

in tecnologie dell'informazione e della comunicazione.

Ho 15 anni di esperienza lavorativa in ambito informatico

e non. E anche se ho scritto queste indormazioni resto

anonimo come prima, tanto per capirci.



Se tu non vuoi rispondere avrai i tuoi motivi,

ci mancherebbe.



Ciao.


 puoi affibbiare a quel che vuoi.



Dipende da come definisci puntatore. Se lo definisci come variabile 

contenente un indirizzo allora anche l'assembly ce l'ha. Naturalmente 

puoi usare definizioni diverse per le quali l'assembly resta escluso. In 

assembly non hai il tipo e quindi ogni definizione che coinvolge il tipo 

ovviamente esclude tale linguaggio.



 serve l'efficienza non ha rivali.



Perfettamente d'accordo. Però bisogna anche tener conto che i tempi 

cambiano e con essi possono cambiare anche i concetti...



 differenza con l'operatore & del C.



Sicuramente. Però il concetto di puntatore è quello, dai. Il linguaggio 

a livello più alto ci aggiunge comodità, è il suo scopo. Ma questo non 

ci autorizza, secondo me, di dire tout court che in assembly non 

esistono i puntatori. Chi li ha sempre utilizzati ci rimane male. :-)



 Chi li ha sempre utilizzati ci rimane male. :-)



Se ne fara' una ragione! :-)


 Se ne fara' una ragione! :-)



Come qualcuno ha già detto, il termine puntatore non è stato creato nei 

linguaggi a livello più alto dell'assembly e quindi la definizione in 

assembly resta valida, o no?



assembly resta valida, o no?



Secondo me si può parlare di registro puntatore in assembler, e parlando del

mitico Z80, se uso l'istruzione



	LD	A,(HL)



sto usando HL come puntatore, o no?







-- 

ciao

  Stefano


 sto usando HL come puntatore, o no?



Sì, infatti.



 In assembly c'è solo il puntatore nativo, lo stesso che c'è in C.



In assembly non esiste qualcosa che nel programma puoi definire come 

puntatore, eventualmente ha un uso analogo se in un dato registro 

carichi un indirizzo, ma ovviamente non e' la stessa cosa.

E' vero che NULL, e' un valore convenzionale, ma dipende 

dall'implementazione del compilatore. Per il programmatore il contratto 

con NULL contiene un solo articolo: la variabile puntatore non e' stata 

assegnata.

E questa e' una differenza sostanziale, perche' i registri in assembly 

esistono a prescindere, un valore lo contengono sempre, ed e' da 

considerarsi valido oppure no, dipendentemente da cosa ci voleva fare il 

programmatore.

Altra differenza sostanziale e' la tipizzazione, che ovviamente in 

assembly non esiste in quanto i registri contengono invariabilmente byte.

Come corollario ci possiamo mettere anche l'aritmetica dei puntatori, in 

assembly non esiste, se fai INC HL, qualsiasi cosa contenga HL, anche se 

contiene un indirizzo, invariabilmente in HL ci trovi la somma di 1 ed 

il valore precedente. Ma puoi fare anche DEC HL fino ad ottenere che HL 

contenga un valore negativo passando per NULL. Ti sembra bello un 

indirizzo negativo? Ti sembra bello decrementare un puntatore NULL?




 serve l'efficienza non ha rivali.



Falso. L'efficienza non si ottiene con l'aritmetica dei puntatori. L'efficienza si ottiene con un linguaggio che sappia interpretare il codice in maniera efficiente. 


 L'efficienza si ottiene con un linguaggio che sappia interpretare il codice in maniera efficiente.



Finora no.


 di istruzioni per l'accesso diretto alla memoria.



Quindi o "non lo fai", oppure usi assembler o C, e ti faccio notare che 

quest'ultima e' prassi piuttosto comune.


 o certe operazioni il termine usato è quello.



Rileggi quel che ho scritto nel mio messaggio e sforzati di capirlo. Poi citami una qualunque implementazione Assembly in cui si usino variabili puntatore.


 scritto "battuta con sorriso"



Battuta con sorriso un par de palle. 


 acc, ho sbagliato a quotare, ma tu curati l'acidita' di stomaco.



Cioe' se ti faccio notare un errore, sono io che sbaglio?

Annamo bene!


 Io non ho problemi e visto che me lo hai chiesto



Non te l'ho chiesto. Non me ne frega un cazzo. Il tuo titolo e` irrilevante, quanto lo e` il mio.  Non siamo mica in tribunale, dove i consulenti di parte devono mostrare i titoli che li abilitano alle perizie. Ti ho semplicemente ricordato che fornire titoli e` irrilevante. E` un ng, tutti scrivono, se ti piace quel che scrivono bene, senno` la gente dorme uguale.


 contenente un indirizzo allora anche l'assembly ce l'ha. 



Okay, dimmi come ne definisci una e in quale assembly.




 Chi li ha sempre utilizzati ci rimane male. :-)



Magari sono convinti di aver usato dei puntatori (sostantivi) ma hanno solo usato dei puntatori (aggettivi). 


 Beh, in un puntatore nativo il NULL è un valore convenzionale. 



E quindi? E` una ASTRAZIONE. Il punto e` che i linguaggi simbolici forniscono ASTRAZIONI superiori a quelle dei linguaggi verso cui sono complilati/transpilati. E` proprio lo scopo della definizione di un linguaggio di programmazione. Anche le operazioni di una List Java vengono tradotte JIT in codice macchina. Vuol forse dire che in Assembly esistono le List? 

E` chiaro che usare una List per una lista di oggetti e` "solo una convenzione".

Dobbiamo dire che in Java esistono i puntatori perche` un reference puo` essere null e, in definitiva, punta ad un'area di memoria contenente un oggetto?

Il punto e` che inferire l'esistenza di certe caratteristiche per analogia e` una cazzata.


 Finora no.



Quota come Cristo comanda, per cortesia, e non spezzare i messaggi come piu` ti piace. La mia frase significava che l'efficienza non si ottiene con l'aritmetica dei puntatori *MA* con un linguaggio che sappia interpretare il codice in maniera efficiente. Finora no cosa? Stai forse dicendo che l'unico modo di scrivere codice che risolva problemi in maniera efficace ed efficiente sia usare il C? Spero proprio per te di no.


 Quindi o "non lo fai", 



Non lo fai perche` non ti serve farlo. Il linguaggio astrae in maniera tale da consentirti di compiere le stesse operazioni, con *la stessa efficienza*, senza ricorrere a marchingegni manuali.


On 23/06/2017 13:15, 4ndre4 wrote:

[...]



Ho capito perhe' parli di rodimento di culo cosi' facilmente. :-D




indirizzo negativo? Ti sembra bello decrementare un puntatore NULL?



Veramente in assembler non esistono numeri negativi, solo numeri binari (o

esadecimali), HL può legittimamente andare da 0 a 0FFFFH (o OxFFFF visto che

simo sul ng del C) e, per rimanere sullo Z80, le istuzioni;



	LD	HL,0

	LD	A,(HL)

	DEC	HL	;va a 0FFFFH

	LD	B,(HL)



sono perfettamente lecite, dipende cosa c'è in quelle locazioni e la ragione per

cui il programmatore vuole accedervi.





-- 

ciao

  Stefano


 La lettura/scrittura diretta della RAM *non serve* per la stragrande maggioranza delle applicazioni; quelle per le quali quei linguaggi sono pensati.



La RAM. :-DDDD





Che sbaglio? No, non sbagli nulla, chi lo ha detto?


On 23/06/2017 13:10, acc wrote:




 assembly resta valida, o no?



Nel C un puntatore e' piu' di un semplice indirizzo, l'implementazione 

tiene conto del tipo (e dimensione) del dato puntato, che e' slegato 

dalla lunghezza della parola.

Quello dell'assembler e' un semplice indirizzamento.



Direi proprio che sia il contrario, ovvero puo' darsi, senza troppe 

garanzie, che l'assegnazione:

*a = 1;

venga tradotta dal compilatore in un'istruzione equivalente a quella che 

dici, ovviamente se 'a' e' un puntatore non NULL di tipo int*.


 Spero proprio per te di no.



Speri e basta o hai anche una vaga idea del perche'?


 Veramente in assembler non esistono numeri negativi, 



Ovviamente, era solo per segnalare una differenza ulteriore.


 Il linguaggio astrae in maniera tale da consentirti di compiere le stesse operazioni, con *la stessa efficienza*



Questo e' falso.

Potrei essere d'accordo sul fatto che con l'hardware attuale puoi 

permetterti di rinunciare ad una parte di efficienza.



Propendo per "non lo fai" perche' non serve farlo, sempre che non ti 

cimenti nello scrivere un virus o forse un driver di non so cosa. Ma non 

e' certo un uso generalizzabile, ci sono sistemi operativi che non te lo 

permettono e basta.


 Che sbaglio? No, non sbagli nulla, chi lo ha detto?



Hai replicato a me, quotando il mio nick, ma su una frase scritta 

dall'OP (manalog), in pratica facendo credere che l'avessi scritta io.



Dal contenuto del tuo reply si evince che in realta' stai rispondendo a 

manalog, ma il reply e' (erroneamente) diretto a me.


 permettono e basta.



ROTFL! Ad esempio la maggior parte dei file system sono fatti cosi'.


 questione di gusti.



I gusti c'entrano sempre, ma introdurrei anche un elemento di 

opportunita', per le ragioni di cui sopra.


 ROTFL! Ad esempio la maggior parte dei file system sono fatti cosi'.



Mi stai dicendo che la la maggior parte dei file system e' stata scritta 

in C/Assembler?

E secondo te ha a che fare col fatto che il gestore del file-system ti 

permetta di mettere le mani nella memoria che gestisce?



Vero. Però non capisco perché una cosa venuta dopo dovrebbe rubare il 

nome ad una venuta prima...



EMG



--

http://www.emagsoftware.it


http://www.emagsoftware.it/emgmusic


http://www.emagsoftware.it/spectrum


http://www.emagsoftware.it/tbosg



 nome ad una venuta prima...



Va beh, comunque non è così importante, è solo un nome. Basta usarlo in 

modo diverso in contesti diversi. In fin dei conti è una cosa che si fa 

abitualmente con tanti termini.



 Veramente in assembler non esistono numeri negativi,



Chiaro. Il segno è una convenzione, proprio come il NULL.



 permetta di mettere le mani nella memoria che gestisce?



Il file system non c'entra, qualunque programma che alloca un pezzo di 

memoria ha libero accesso al *suo* pezzo di memoria, anche accedendovi 

tramite puntatori.


 esadecimali),



Ah no, e 1 in complemento a 2 che cosa sarebbe, se non -1 ?


 La RAM. :-DDDD



Cazzo ridi?




 Si, 



Perfetto. Questo spiega tutto: non hai la minima idea di come si tiri in piedi un sistema in un ambito informatico professionale. Per cui direi che la discussione con te puo` fermarsi qui.


 Questo e' falso.



Falso un par de palle. Tu non hai nessuna esperienza con linguaggi diversi dal C. Ormai e` chiaro. 




 manalog, ma il reply e' (erroneamente) diretto a me.



Si, del mio sbaglio ne sono accorto, grazie.


 per ovviare a queste carenze, ad esempio.



Di che diavolo stai parlando? In Java si fa un gran ricorso a C/Assembler? 


 No, mi riferisco a progetti Java che integrano parti in C/Assembler.



Citane un paio.






ha scritto:


Questo solo con operazioni aritmetiche che contemplino il caso negativo, e nei

calcoli in assembler non è sempre detto.



Non è comunque il caso di un registro di indirizzo, se chiamarlo registro

puntatore non ti piace, quello è sempre positivo da 0 a 65535





-- 

ciao

  Stefano


 Perfetto. Questo spiega tutto: non hai la minima idea di come si tiri in piedi un sistema in un ambito informatico professionale. Per cui direi che la discussione con te puo` fermarsi qui.



Non spiega nulla, ma sono d'accordo che ti possa bastare.


 Citane un paio.



No, vatteli a cercare.






Pensavo fossi solo maleducato, ma ormai è chiaro che non hai neppure idea

di quel che dici.

Buona permanenza nel tuo piccolo mondo di stupidaggini e arroganza.





Ciao!


 calcoli in assembler non è sempre detto.



Cosa sarebbero i "calcoli assembler"? LOL :) Vabbe`, *CIAONE* pure a te.


 Python?!? E io che pensavo stessimo parlando di linguaggi veri! :-P



Vedi sopra: non hai la minima idea di come si tiri in piedi un sistema in un ambito informatico professionale. 



*CIAONE*.


 No, vatteli a cercare.



LOL :) 

Cazzaro della peggior specie. 



Ricordi che AFFIRMANTI INCUMBIT PROBATIO, non il contrario.



Si`, vabbe`, ma cosa sto ancora a discutere con te, ari-*CIAONE*.




 Buona permanenza nel tuo piccolo mondo di stupidaggini e arroganza.



«Una volpe affamata, come vide dei grappoli d'uva che pendevano da una vite, desiderò afferrarli ma non ne fu in grado. Allontanandosi però disse fra sé: «Sono acerbi». Così anche alcuni tra gli uomini, che per incapacità non riescono a superare le difficoltà, accusano le circostanze.»



Tranquillo, si chiama dissonanza cognitiva. Ne sono affetti in molti. In psicologia c'e` anche una cosa chiamata "proiezione". In sostanza, dal momento che hai sparato una caterva di puttanate, per uscirne fuori, e` piu` facile accusare quel che dico io di essere "acerbo" e ribaltare su di me i *TUOI* difetti, chiuso come sei nel *TUO* mondo di stupidaggini ed arroganza.



La prossima volta che vuoi discutere di certi argomenti, assicurati di avere gli strumenti giusti. *CIAONE*.




ha scritto:


Di sicuro non problemi alla cistifellea    :-)



Ciao anche a te





Lo capiscono quelli che ne sanno piu' di te.


 Vedi sopra: non hai la minima idea di come si tiri in piedi un sistema in un ambito informatico professionale.



E' una tua idea, che sinceramente non mi interessa.

Io qua discuto di C e altri linguaggi non delle strane idee che ti fai 

su di me.


 Ricordi che AFFIRMANTI INCUMBIT PROBATIO, non il contrario.



Non ho bisogno di provare quello che chiunque puo' verificare.

Tu puoi pensare quello che ti pare, resta un problema tuo.


 tramite puntatori.



E qui non ci piove. Ma un programma Java non ha libero accesso ai 

puntatori del sistema. Gli unici puntatori a cui puo' eventualmente 

accedere, via JNA/JNI sono quelli esportati dagli entry point delle dll 

interfacciate, ed anche questi non sono modificabili.

Anche in questo caso, si tratta di librerie importate, non fanno parte 

del linguaggio.


 puntatori del sistema.



In questa parte io mi riferivo a C/C++.



-- 

I'm not anti-social;

I'm just not user friendly


 

Gia', peccato che hai scritto:

"...sopratutto in Java si fa un gran ricorso a C/Assembler..."

se dovevo capire C/C++, mi dispiace, non ci sono arrivato.



Trattando di progetti Java, diciamo che, se posso, evito di integrare 

programmi in linguaggi diversi, non e' cosi' agevole, soprattutto il 

debug. Nel qual caso, preferisco utilizzare linguaggi diversi che 

possano essere integrati in modo nativo. Ad titolo d'esempio, in 

qualsiasi linguaggio che partecipi all'ambiente ILE, C non escluso.


 possano essere integrati in modo nativo.



Questo e' normale in ogni linguaggio, e sicuramente lo e' ancora di piu' 

in linguaggi come Java, basati su VM, dove il ricorso a chiamate esterne 

aggiunge overhead.

Ad ogni modo, quando serve l'efficienza o si fa tutto in C, oppure se ne 

fa una buona parte, senza limitarsi alle chiamate di sistema dove la 

scelta sarebbe obbligata, ma implementando anche strutture (e relativa 

gestione), lasciando a Java parti a livello piu' alto.

Poi non nego che esistano anche progetti scritti completamente in Java, 

dove il buon senso lo avrebbe sconsigliato, come ad esempio sistemi 

operativi completi, database, ecc. Ma IMHO sono poco piu' che esercizi a 

scopo didattico.



 scopo didattico.

Beh, il Derby, conosciuto anche come JavaDb, e' un gran DB, ANSI e DRDA. 

Proviene da una donazione di IBM alla comunita' open-source, l'ho usato 

spessissimo, soprattutto quando un'applicazione richiede una 

configurazione particolarmente complessa. Considera che nel IBM 

Websphere Application Server c'e' il Derby (anche se si chiama ancora 

col vecchio nome CloudScape) e viene utilizzato per ogni tipo di 

persistenza. In quanto ad efficenza e prestazioni' lo provo superiore al 

MS-SqlServer, sebbene non l'abbia mai provato con grossi volumi di dati.






 



Sempre sospettoso,quando imparerai che non tutte le persone sono tue 

nemiche ?


 Buona permanenza nel tuo piccolo mondo di stupidaggini e arroganza.

Il mio sentito supporto.

Al di la' della questione in oggetto quel signore mi pare e' davvero

supponente e arrogantello...

come per i testimoni di XXXXX di varia natura non vale la pena di

perderci tempo :-)



W->W