Newsgroup: it.comp.programmare
Titolo: Linguaggio rientrante

Scusate, cosa vuol dire che un linguaggio è "rientrante"? L'ho letto 
riguardo a modalità di gestione degli interrupt in riferimento al C++.
Grazie
-- 
Per l'e-mail rimuovere la frase in maiuscolo e gli underscore.

Rientrante è riferito alle funzioni.
Una funzione si dice rientrante quando può chiamare se stessa... cioè quando
è possibile usare la ricorsione.
Ciao :)

 cioè quando è possibile usare la ricorsione.
Grazie!


> Grazie!
Prego!
Non č necessario rispondere grazie ogni volta che si risolve un problema...
:)
Ciao :)

Ma va bene per qualunque linguaggio il termine "rientrante"?

Ma va bene per qualunque linguaggio il termine "rientrante"?
Tefsom ha detto:
"
Una funzione si dice rientrante quando può chiamare se stessa... cioè
quando
è possibile usare la ricorsione.
"
Rientrante non ha senso applicato ad un linguaggio ma ad una funzione.
Quindi se il tuo linguaggio supporta funzioni rientranti sei apposto
se no niente da fare
-- 
Lawrence "Rhymes" Oluyede
http://loluyede.blogspot.com
UGIdotNET - User Group Italiano .NET  
http://www.ugidotnet.org

 ha scritto nel messaggio
news:bc2c1s$ebqmu$1...@ID-172578.news.dfncis.de...


 rientrante in questo senso?)
Possono richiamare se stesse senza creare alcun tipo di problema;
esempio di funzione NON rientrante, in C:
char* foo(char c) {
	static char buf[11];
	int i;
	for(i = 0; i < 10; i++)
		buf[i] =  c;
	buf[10] = '\0';
	return buf;
}
In generale NON e` rientrante una funzione che usa variabili globali
o membri static.
-- 
Ikitt	*** mailserver: 
freemail.it
"Se si sa usare solo il martello, tutti i problemi sembrano chiodi"
"Studiare senza pensare, inutile. Pensare senza studiare, stupido."
GNU/Linux 2003: do more with less => $ alias more=less

 se no niente da fare
Ah ok. Grazie! :)

 deve contenere strutture dati).
quella č una funzione thread-safe. Rientrante significa che, mentre c'č 
una sua istanza in esecuzione, puň esserne create un'altra prima che la 
precedente esca. Esempio: una funzione che mantiene un lock, per essere 
rientrante, deve usare un lock ricorsivo (un lock, cioč, che uno stesso 
thread puň acquisire piů di una volta senza andare in deadlock)
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.1. C, C++ and ASM developers
                               and beta testers are welcome!

 thread può acquisire più di una volta senza andare in deadlock)


 meglio avvisare anche il Tanenbaum che lo ha scritto in un suo libro)...
Eggià... sai com'è, lei ha sempre ragione... (cfr. altro post).
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

 o membri static.
Bhe, se riprendi la tua funzione di prima, dichiari la variabile statica
semplicemente locale e fai eseguire la stessa procedura da due thread avrai
comunque problemi... (dipendentemente dall'interleaving scelto dallo
scheduler per l'esecuzione dei threads del processo)

Bhe, ma non pretendo certo di aver ragione io!!! Solo che se sbaglio mi
piacerebbe saperlo, visto che penso di aver ancora tanto da imparare!!!
Ogni correzione e' SEMPRE ben accetta! (magari con qualche
giustificazione...)
Ciao!

piacerebbe saperlo, visto che penso di aver ancora tanto da imparare!!!
Mi prendo la libertà di citare e distorcere
Non curarti di lui ma guarda e passa.
Roby...Azathot non ha di meglio da fare che perdere tempo :)
-- 
Lawrence "Rhymes" Oluyede
http://loluyede.blogspot.com
UGIdotNET - User Group Italiano .NET - 
http://www.ugidotnet.org

 avvisare anche il Tanenbaum che lo ha scritto in un suo libro)...
Si può passare da un argomento a un altro? Visto che lo fanno tutti, mi
permetto di farlo anche io (visto che almeno quello che sto per dire con
tanenbaum c'entra)...
In "I moderni sistemi operativi" al paragrafo 2.2.1 pag.75 (in fondo), a 
proposito dei thread, è scritto: «Thread diversi in un processo non sono
indipendenti come processi diversi, perchè tutti i thread hanno
esattamento lo stesso spazio di indirizzamento, cioè condividono anche le
stesse variabili globali. Dal momento che ogni thread può accedere ad ogni
indirizzo di memoria nello spazio di indirizzamento del processo, un
thread può leggere, scrivere o persino cancellare completamente lo *stack*
di un altro thread: non c'è protezione tra i thread perchè (1) è 
impossibile realizzarla e (2) non dovrebbe essere necessaria».
Più avanti (pag.76) però dice: «E' importante capire che ogni thread ha il
proprio stack», e in particolare, in una tabella divisa in due colonne, in
fondo alla pag.75, mette nella colonna di sinistra le voci relative a 
ciascun processo (spazio di indirizzamento, variabili globali, file
aperti, ecc) e nella colonna di destra quelle relative ad ogni thread, 
quindi private, e tra queste c'è proprio lo stack (le altre sono il
program counter, i registri e lo stato). 
Quello che mi chiedo è: quanto scritto nella tabella e a pag.76 non è in
contraddizione con quanto scritto prima, a pag.75? Se lo stack è locale e
privato a ogni thread, perchè dice che un thread può avere accesso allo 
stack di un altro thread?

 NON rientrante in questo senso?)
Vedi sopra
C:\>iao Angelo.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 stack di un altro thread?
Io l'ho interpretata cosi`:
ogni thread ha un suo stack locale, ma non 'protetto'. 
Un thread malintenzionato o mal programmato puo` benissimo accedervi e
far danni, se lo desidera.
Con i processi, in casi del genere, si avrebbe un errore di protezione.


 ha scritto nel messaggio
news:pan.2000.01.12....@email.it...


 meglio avvisare anche il Tanenbaum che lo ha scritto in un suo libro)...
non esistono solo i threads: se stai programmando a bassissimo livello (ad
esempio se scrivi un s.o.) devi preoccuparti anche di gestire le
interruzioni: se una funzione non e` rientrante e il suo flusso di
esecuzione viene interrotto da una interruzione, devi stare attento a non
richiamarla finche` non ha terminato. Oppure, con altre parole, mentre stai
gestendo una interruzione puoi chiamare in tutta sicurezza solo funzioni
rientranti.
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 simultaneamente da piu' threads?!
una funzione rientrante deve poter essere istanziata anche mentre è già 
in esecuzione nello stesso thread. Esempio classico: malloc() è thread-
safe ma non rientrante. Se, ad esempio, chiamiamo malloc() in un signal 
handler, e malloc() viene interrotta per eseguire un altro handler che, 
a sua volta, chiama malloc(), succedono cose brutte brutte brutte (TM). 
Esempio sull'esempio: l'MTA sendmail, in una vecchia versione, chiamava 
syslog() in un signal handler non protetto, e syslog() chiama malloc(). 
Con un po' di fortuna si poteva interrompere la chiamata a malloc() con 
una seconda chiamata a malloc() e corrompere l'heap del processo
