|
|
|
![]() |
|
Strumenti |
![]() |
#81 | |
Senior Member
Iscritto dal: Dec 2002
Città: /dev/urandom breed
Messaggi: 1689
|
Quote:
Comunque, questo e` un problema di supporto HW ![]() |
|
![]() |
![]() |
![]() |
#82 | |||
Senior Member
Iscritto dal: Jan 2003
Messaggi: 2355
|
Quote:
ECI per i modem ADSL USB, per i quali sono venute fuori battaglie legali? Quote:
della situazione attuale e delle evoluzioni che sta avendo quello che e' considerato un sistema come Linux + applicazioni GPL. In Linux non e' vietato avere driver o moduli binari (e per questo Stallman ne ha sempre dato colpa a Torlvads che non l'ha vietato), semplicemente questi non funzionano o funzionano male, per diversi motivi: perche' il sistema cambia troppo velocemente, perche' ci sono troppe distribuzioni, perche' i programmatori non rispettono le specifiche utilizzando funzioni deprecate (hai mai provato a dare un'occhiata ai driver dei moduli vmnet di VMWare?) da anni, perche' ognuno i kernel con gli allineamenti che preferisce, etc. Sul fatto che poi i driver binari hanno funzionano sempre bene, beh ho i miei dubbi, visto che non conto neanche piu' tutte le volte che i sistemi Windows si sono imballati definitivamente, perche' un driver (pensa ai VIA 4in1) e' stato aggiornato. Forse era vero per i sistemi come SCOa o DigitalUX..., dove le cose cambiavano, molto, molto lentamente. Ah, no, ecco, in Windows si sono inventati i drivers "certificati", che servono per spillare ulteriori soldi ai produttori e si piantano come quelli non certificati. L'ideale sarebbe invece avere dei driver platform indipendent (platform independent non significano i tarocchi attuali che vengono usati per far funzionare le schede Wireless con i driver e le DLL di Windows). Se non ricordo male tempo fa se n'era parlato. Quote:
nativo che starebbe fuori, direi proprio di no. |
|||
![]() |
![]() |
![]() |
#83 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
![]() Quote:
![]() Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||
![]() |
![]() |
![]() |
#84 | |||||
Senior Member
Iscritto dal: Dec 2002
Città: /dev/urandom breed
Messaggi: 1689
|
Quote:
Quote:
Quote:
![]() Quote:
Quote:
E d'altrocanto, potrei citare i casi di LVM e reiserfs, ebtrati (chi piu` chi meno) a furor di popolo... |
|||||
![]() |
![]() |
![]() |
#85 | ||
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
L'errore lo ha fatto lo sviluppatore che ha introdotto gli hook: se intendeva interfacciarsi a moduli closed source, poteva farlo. Non con degli hook, però. nb visto che sei così informato sul kernel linux, saprai anche che ora il driver ha un nuovo mantainer, e che le routine closed source che prima venivano interfacciate dagli hook sono misteriosamente diventate GPL ![]() Quote:
Linus ha quindi _provato_ il c++, e lo ha in seguito scartato. Esistono valide _motivazioni tecniche_ perché il kernel linux non può essere c++.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
![]() |
![]() |
![]() |
#86 | ||
Senior Member
Iscritto dal: May 2003
Messaggi: 380
|
Quote:
![]() (scherzo, eh...non ti arrabbiare che se no inondi il forum di post...) Quote:
ti spiego il senso del mio post: volevo mostrare con quell' esempio (il mini cluster) che è possibile usare linux (magari sbattendoci la testa) per imparare cose utili non fine a se stesse e immediatamente spendibili per risolvere problemi pratici. Dire: "con windows non avrei saputo dove mettere le mani" era un modo (auto)ironico per mettere in evidenza che la "semplicità d' uso" può essere un fatto soggettivo. per finire con questa querelle, non metto in dubbio che per windows siano presenti tutte le API e gli ambienti di sviluppo di questo mondo, i driver di tutte le periferiche passate e future e che grazie a bill il mondo è un po' migliore e che senza il suo genio imprenditoriale a quest' ora stavamo senza interfaccia grafica... Però è contrario al MIO gusto e finché potrò cercherò di farne a meno... (mannaggia per half life 2, eh...) ciao! |
||
![]() |
![]() |
![]() |
#87 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
![]() (Perche' non esiste una valida motivazione tecnica per preferire C a C++ in nessun tipo di software)
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#88 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#89 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Il c++ utilizza un layer di astrazione per la gestione della memoria, soprattutto nella gestione delle classi. Nel kernel linux, per contro, la gestione della memoria non è come in user space: esistono tecniche di allocazione diverse a seconda delle circostanze: memoria fisicamente contigua, memoria virtualmente contigua, multipli di pagina, allocazione di tanti oggetti di uguale dimensione, memoria highmem, memoria dma legacy, memoria per-cpu, memoria consistente/coerente per operazioni dma ecc, e del contesto di allocazione (contesto di interruzione, contesto utente, allocazioni atomiche/non atomiche ecc.) Voler conciliare la gestione c++ della memoria con le esigenze del kernel significa creare nuove complicazioni, invece di ridurle. 2) Gestione delle eccezioni Il kernel utilizza una propria tecnica per la gestione delle eccezioni, in nessun modo compatibile con il c++. Anzi, il codice che il c++ genera per prevedere e gestire eventuali eccezioni è un problema per il kernel. 3) Utilizzo dello stack Il kernel linux ormai viaggia con stack di 4k, e i path di codice superiori a 2.5k di consumo di stack sono ritenuti "eccessivi". Il c++ è molto più famelico di stack rispetto al c. 4) Ottimizzazione Il gcc ottimizza il codice in maniera decisamente migliore del g++ 5) Dimensione del codice Il codice c++ è inevitabilmente più "bloated" rispetto al codice in c. Questo è un problema per il kernel, in quanto la memoria in kernel space non può essere soggetta a swapping (e, possibilmente, il codice del kernel dovrebbe toccare meno cache di sistema possibile). Risolvere tutte queste complicazioni per ottenere vantaggi limitati (quali?) non è conveniente.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#90 | ||||||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
In C++ non costringe ad alcun layer per la gestione della memoria, e' possibile usare malloc e free esattamente come in C, inoltre, volendo evitare queste funzioni, ma usando allocatori custom per eventuali ottimizzazioni e' possibile overloadare gli operatori new e delete, usando un proprio sistema di allocazione (oppure rivolgendosi ad uno esattamente equivalente a quello del C), in maniera piu' semplice e concisa di quanto si possa fare in C. Qualunque tipo di allocazione che hai nominato puo' essere elegantemente implementata con overload degli operatori new e delete. Questo e' un non argomento. Quote:
La gestione delle eccezioni e' opzionale. Qualunque gestione delle eccezioni alternativa compatibile con il C e' compatibile con il C++ e puo' essere "wrappata". Esempio: le structured exceptions di Win32. Quote:
Il C++ non e' intrinsecamente piu' famelico di stack, dipende dal programmatore e dal suo uso. In tutti questi problemi vedo un pattern comunue: chi li ha esposti, non sa programmare in C++. Quote:
Quote:
Questo mito e' stato ampiamente smontato qui: http://www.amazon.co.uk/exec/obidos/...027200-9583865 Quote:
Vantaggi? Tutti quelli che un modello ad oggetti fornisce rispetto alla programmazione predicativa classica di 20 anni fa. Il mondo si e' evoluto, sarebbe ora che anche Linus si evolvesse e imparasse un nuovo linguaggio.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
||||||
![]() |
![]() |
![]() |
#91 | |
Senior Member
Iscritto dal: May 2003
Messaggi: 380
|
Quote:
generalmente il processo di configurazione di un programma, di un servizio o di una periferica con windows è un susseguirsi di clicca qui, poi li, riclicca di qua una cliccatina di la....magari tutto per editare un parametro. Dimmi quello che vuoi, però a ME 'sta cosa scoccia! Io (nella mia soggettività) preferisco l' approccio seguito da alcune distros linux: quasi sempre (e speriamo sempre più spesso) puoi "cliccare qui e la", però puoi ANCHE editare il file di configurazione appropriato (che generalmente sta in /etc ) ed impostare manualmente il parametro che ti interessa modificare. insomma certe cose si fanno più facilmente con l' interfaccia grafica, altre possono essere fatte facilmente e velocemente a riga di comando. P.S. già sento le proteste: Ah, marrano! anche con windows puoi editare i file di configurazione... Non usciremo mai vivi da questa discussione. Siamo perduti. ![]() PPS. propongo l' istituzione di un' area del forum dove il massacro win Vs linux sia finalmente libero e sfrenato. ![]() |
|
![]() |
![]() |
![]() |
#92 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#93 | ||||||||
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
Quote:
Quote:
Quote:
Per favore, non ci hai mai messo mano. Io lo faccio per lavoro. Quote:
Per tua informazione, esistono diversi driver linux closed source con core c++. Normalmente sono 10 volte più grandi dei moduli del kernel. Rivolgi le tue rimostranze (e il link) a chi scrive quei driver (che mi risulta sono gli stessi che li scrivono per windows). Quote:
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||||||||
![]() |
![]() |
![]() |
#94 | |||||||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
![]() Quote:
Quote:
Come tutti gli strumenti, bisogna essere in grado di usarlo per trarne il meglio. Quote:
Quote:
Mi fai per favore un qsort di un tipo generico in C veloce come la stessa versione che posso scrivere in C++? Per quanto ti sforzi, non arriverai a scriverla piu' di 5 volte piu' lenta (di media). Quote:
Scommetto che non fanno altro che passare oggetti per valore. Quote:
![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|||||||
![]() |
![]() |
![]() |
#95 |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
E per concludere, il kernel del BeOS era scritto interamente in C++, e' un kernel unix-like (anche se monoutente) ed in quanto a leggerezza ed efficienza e stabilita' si mangiava a colazione il kernel di Windows e quello di Linux.
Quelli sapevano programmare.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
![]() |
![]() |
![]() |
#96 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Hai un lavoro che personalmente ti invidio, ma se facessi il tuo lavoro allora invidierei il mio attuale. Dammi retta -- non c'è posto per il c++ nel kernel linux. Prima la pensavo come te, ma dopo parecchio tempo che ci lavoro, mi sono ricreduto. E non è facile riassumere in poche righe l'esperienza di svariate giornate passate davanti al codice. Ora non cambierei l'interfaccia c attuale del kernel con null'altro, neanche se scritta dal migliore programmatore c++. Per il "resto del mondo" (l'ambiente user space) è un'altra storia -- ma ci sono esigenze, strumenti e (soprattutto) vincoli diversi. Il fatto che tutte le persone che lavorano seriamente sul kernel la pensino come me, vorrà dire qualcosa? O siamo tutti vecchi babbioni senza la minima attenzione all'evoluzione dell'informatica? Dovresti passare un pò di tempo a scrivere per il kernel linux. Ti insegnerebbe parecchie cose ![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#97 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
![]() A parte gli scherzi, non e' perche' non mi fido di te (anzi, sicuramente sei fra i piu' preparati), ma non mi fido di nessuno, non c'e' alcuna motivazione tecnica per preferire il C al C++ in un Kernel, ti ho dato i motivi che smontano le ragioni che hai postato, e ti ho portato un esempio di kernel efficiente scritto in C++. Perche' dirmi che non si puo' scrivere il Kernel in C++ perche' non si possono scrivere allocatori diversi o c'e' bisogno di scriverne uno specifico per classe e' una boiata, e dimostra che chi lo pensa non e' in grado di applicare semplici concetti come l'ereditarieta e l'incapsulamento. Se mi si dice che il codice C++ e' per forza di cose bloated, mi viene da pensare che chi fa questa affermazione non ha mai scritto un progetto serio in C++ e non ha mai imparato il linguaggio, perche' e' un non argomento. Semplicemente non e' vero, e i perche' sono spiegati nel libro che ti ho postato. E' interessante, merita di essere letto, e' scritto dai due autori di CFront (il primo traduttore da C++ a C). In sintesi, nel libro, e' descritto come l'object model del C++ viene tradotto in codice C e fa capire come tutti gli argomenti contro il C++ siano solo frutto di miti. Infine, io non so se chi lavora sul Kernel Linux sia un vecchio babbione o meno, io mi baso su quello che tu hai riportato: se quelle sono le opinioni e i motivi, allora questa gente non conosce il C++. Poi puo' essere anche Dio sceso in terra. Se non programmassi in 3d, sicuramente cecherei di programmare kernel di SO, e' la mia seconda passione ![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#98 | ||
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
![]() Per il resto, non mi hai smontato molto: o mi hai confermato che alcune tecniche del c++ semplicemente non sono applicabili al kernel, o comunque che dovrei fare un lavoro aggiuntivo che con il c non è necessario. Non posso usare il c++ per programmare il kernel allo stesso modo con cui lo uso per programmare OpenOffice, in sintesi. E no, il fatto di includere i metodi nell'interfaccia "class foo" invece che "struct bar" non è un buon motivo per cambiare linguaggio, se di quel linguaggio poi posso usarne solo una parte, e un'altra la devo "adattare" opportunamente. L'equivalenza logica dei moduli del kernel agli oggetti c++ c'è: "this" non si chiamerà "this" ma avrà un altro nome; quando invochi un metodo, hai il piccolo "fastidio" di dover passare esplicitamente il reference tra i parametri (cosa che il c++ fa ma ti nasconde). L'incapsulamento c'è -- di un driver hai accesso solo ad una interfaccia ben definita. L'ereditarietà anche -- tutti gli oggetti del kernel ad esempio "derivano" da un "kobject". Ho anche un piccolo "esempio in c" di template, se ti interessa. Eppure, nonostante ciò, contiuiamo a fare tutto questo in c. E _nessuno_ fin'ora si è preso la briga di scrivere delle parti in c++ -- semplicemente, perché in un kernel non serve, e sarebbe più complicato da gestire della struttura attuale. L'unica cosa che mi hai contestato è che, volendo, è possibile. Ma non puoi nascondere che ci sono complicazioni, problemi, limiti, e del lavoro (forse inutile) in più da fare. E continuo a non vederne i vantaggi, visto che _oggi_ aggiungere un driver in più al kernel è una fesseria. Provaci!(*) Quote:
![]() (*) ehm...siamo un pò a corto di programmatori per driver 3d... ![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
![]() |
![]() |
![]() |
#99 | ||||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
![]() E' C++ con tutti i crismi, e' un missile, e' la dimostrazione vivente di due concetti: 1) se fosse stato standard al posto di Windows il mondo sarebbe forse migliore ![]() 2) si puo' scrivere un kernel efficientissimo in C++ Io parlo solo di quello che so, infatti parlo solo di due argomenti e su tutto il resto sto zitto. Quote:
Puoi usare lo stesso linguaggio, ma in C++ non puoi fare solo object oriented, puoi fare anche: - Paradigm programming - Generic programming Mi fai un po' di generic programming in C? ![]() Le mie obiezioni hanno semplicemente smontato i miti che: - il C++ e' intrinsecamente piu' lento e pesante (falso) - il C++ non permette gestori di memoria custom (incredibilmente falso) - il C++ non permette gestioni dell'eccezioni custom (e' piu' facile che gli asini volino) Quote:
Per concludere, sto contestando l'affermazione che il Kernel di Linux non possa essere scritto in C++ perche' sarebbe intrinsecamente peggiore. Non e' vero, molto probabilmente ne uscirebbe un prodotto migliore per i motivi che ho elencato. Secondo me dovrebbero fermare tutto e riscriverlo in C++ ora? Ovviamente sarebbe pura follia, richiederebbe mesi, dovrebbe essere ritestato dall'inizio, io non farei mai una tale scelta. Quote:
![]() Pero' se riuscissi a installare una distribuzione Linux funzionante, con ambiente di sviluppo in un tempo ragionevole inferiore alla settimana (ci ho provato negl'ultimi anni e non ci sono mai riuscito, sono niubbo), sarebbe anche interessante. Non fosse che non c'e' modo di avere accesso alle specifiche interne delle GPU piu' recenti.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
||||
![]() |
![]() |
![]() |
#100 | |
Member
Iscritto dal: Jun 2004
Messaggi: 44
|
Quote:
E' questo il punto ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:21.