Newsgroup: it.comp.lang.c++
Titolo: [cross] Problema di stile e multipiattaforma

Dovrei realizzare un server TCP che ascolta su una porta, il codice 
dovrebbe (deve) essere multipiattaforma, allora, i requisiti essenziali 
di questo (cosi' come qualunque altro) daemon sono :
0) Input/output da console, per la visualizzazione di messaggi (e qua ci 
   siamo, sia C che C++ offrono questo nella loro libreria std)
1) multithreading, un thread per ogni utente collegato + il listener
2) Librerie di Socket
3) Varie ed eventuali :)
Il vero problema sono il punto 1 e 2, difatti non e' stato standardizzato 
nessuno dei due requisiti, quindi, le soluzioni che ho valutato per 
risolvere questo problema sarebbero
(NB. ho escluso a priori l'utilizzo random di #ifdef....#endif...questo 
tipo di soluzioni sono a mio parere fuori dal mondo, e cmq il progetto e' 
abbastanza corposo, la manutenibilita' e un requisisto fondamentale)
1) Usare l'OOP con il C++ e incapsulare le diversita' dei vari sistemi 
operativi in delle classi polimorfiche che ereditano l'interfaccia da una 
superclasse astratta (facile per i socket: iSocket, iBSDSocket, 
IWOSASocket... un po' meno per i thread....?)
2) Implementare una libreria "cuscinetto" ...
   middlelib_NewThread(....) sotto Unix richiama fork() e sotto Win32    
CreateThread()
3) Usare Cygwin32.dll con il compilatore Cygnus GCC: in questo modo il 
codice diventa tutto posix-compilant, i socket sono SOLO BSD, le fork() 
non si contano piu' ecc ecc...e lasciare il compito di "traslare" le 
richieste appunto a cygwin32.dll
La 3 sarebbe la soluzione migliore, ma mi viene da chiedere: questa 
piattaforma e' solida? ho paura ad utilizzare un prodotto di terze parti 
e fondarci qualcosa sopra, quando poi fra qualche tempo potrebbe non 
essere piu' supportato a dovere....
Mi andrebbe benissimo anche la soluzione OOP (tantevvero che il server e' 
progettatto cmq tutto ad oggetti) , ma un thread come lo incapsulo in un 
modo degno all'interno di una classe???
Qual'e il modo migliore per affrontare in un ottica multipiattaforma il 
multithreading e l'esecuzione concorrente (oggetti di sincronizzazione, 
ecc inclusi) escludendo Java? 
help! :)
-- 
universe::earth::internet::albion->Greetz++;
 
darX...@tin.it
 
alb...@libero.it
  Fido 2:335/234.21   
http://darxstar.cjb.net
  ICQ UIN# 11151997 - eggdrop on demand
<the trees that whisper in the evening...>

]

ecc inclusi) escludendo Java? 
L'ideale sarebbe utilizzare un linguaggio che offra nativamente il
supporto alla programmazione parallela, comunque recupera
quel numero di cp, non te ne pentirai.
Paolo
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

 CreateThread()
Se ti servono thread e non processi separati, in molti
Unix c'e' pthread (posix thread).
	Mauro

Nella tua situazione metterei da parte il c++, e penserei seriamente a a
java, che in questi casi è davvero insostituibile. Inoltre ormai è un
linguaggio che ha superato le mode, dimostrando una certa maturità, almeno
nel settore del network computing.
Saluti. 
Roberto Cavada

 supporto alla programmazione parallela...
Ada ?
MM


Non ci avevo pensato, ma direi che e' una buona idea


 Ada ?
Io proverei eiffel...
Paolo
-- 
------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
 
http://www.cli.di.unipi.it/~marotta
------------------------------------------------

 Non ci avevo pensato, ma direi che e' una buona idea
Non conosco ada, ma eiffel implementa un nuovo modo di vedere
la programmazione parallela in un linguaggio OO. In pratica
gli oggetti vengono eseguiti in processori virtuali un po'
come se fossero dei processi a se stanti. Il vantaggio per il poco
che ne so e` quello di evitare che metodi diversi dello stesso oggetto
vengano eseguiti su thread differenti, questo pone molti problemi
di sincronizzazione e mutua esclusione. Eiffel pare risolvere
molto elegantemente questi problemi (in modo nativo, quindi
niente problemi per il programmatore).


la programmazione parallela in un linguaggio OO. 
[...]
Non sono la persona piu' adatta per consigliare, perche' non conosco
nulla di Eiffel e conosco ADA solo in modo indiretto... Posso solo
dire che ADA offre un buon supporto nativo per la programmazione
concorrente e l'uso di risorse condivise; in piu' imparare ADA puo'
avere il non trascurabile side effect di essere alla conoscenza di un
linguaggio che pochissimi conoscono, ma indispensabile in certi campi
(aziende in orbita Alenia fanno salti mortali per cercare qualcuno che
conosca l'ADA). Eiffel invece quanto e' usato? 


conosca l'ADA). Eiffel invece quanto e' usato? 
Non saprei, sta avendo un certo successo ma non ho
statistiche da offrire. Comunque Eiffel (che io sappia)
si inspira molto ad ADA e offre ad esempio pieno supporto
al design by contract. E` poi corredato di molti strumenti tra cui
anche un case.
Paolo
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

>quel numero di cp, non te ne pentirai.
A questo punto non mi resta che "scavarlo" da sotto le macerie della mia 
libreria ADESSO...:)


>Altrimenti fai stutto stile unix e sotto windows usi cygwin
Questo progetto dovra' essere GPL-ed...non mi pare che VxWindows sia 
molto conforme alla licenza GNU, purtroppo...


In article <01bf2bca$4a252640$ef771497@silvia>, 
cav...@libero.it
 says...

Dici che Java e' pronto ad affrontare un progetto di questo tipo? 
Teoricamente sarebbe l'ideale, il problema e' che , sinceramente, non mi 
fido molto delle performance e della scalabilita' delle JVM, anche quelle 
piu' recenti...
inoltre il client deve essere _tassativamente_ sviluppato in C++...


>
Il progetto, che si chiama Albion, ha richieste in quanto a performance 
molto stringenti, inoltre e' l'host per una applicazione interattiva (un 
videogioco online, per dirla breve) , non credo che Ada sia il massimo in 
questi casi, e cmq non mi va di impararlo solo per il supporto nativo ai 
thread....


molto conforme alla licenza GNU, purtroppo...
E' L-GPL. Direi che puoi tranquillamente usarla per un progetto GPL
http://web.ukonline.co.uk/julian.smart/wxwin/licence3.txt



Se come dici le prestazioni sono critiche scordati java
