Il linguaggio C++
 

Announce of new C++ library to handle measures

Carlo Milanesi 28 Set 2014 19:06
I am developing an open-source header-only multi-platform C++11 library
to handle physical measures and angles.
Now it has reached a good-enough maturation level to need some real user
feedback.

You can browse or ******* sources here:
https://github.com/carlomilanesi/cpp-measures

You can browse do*****entation here:
https://github.com/carlomilanesi/cpp-measures/wiki
and parti*****arly here:
https://github.com/carlomilanesi/cpp-measures/wiki/Tutorial

--

Carlo Milanesi
http://carlomilanesi.wordpress.com/
fmassei@gmail.com 29 Set 2014 10:19
On Sunday, September 28, 2014 7:06:08 PM UTC+2, Carlo Milanesi wrote:
> I am developing an open-source header-only multi-platform C++11 library
> to handle physical measures and angles.
> Now it has reached a good-enough maturation level to need some real user
> feedback.
>

Ciao,

visto che siamo un un NG italiano rispondo in italiano :)

Come prima cosa complimenti per aver messo la lib online: so per esperienza
quanto sudore e fatica bisogna fare anche per la più *****cola stupidaggine,
non parliamo delle cose che abbiamo a cuore. Averle messe open su github è
meglio ancora ;)

Da qui in poi ti parlo da sviluppatore, senza troppi giri di parole, come se
stessi parlando della libreria di qualcun'altro - so che non hai bisogno
di complimenti ma di critiche costruttive.

Inizio da due cose veramente stupide, ma che danno noia a chi come me vede
il progetto nei primi cinque minuti:
- nell'albero del progetto son mischiati header (la lib) e i test: non si
capisce cos'è cosa, e, anche se c'è nella do*****entazione, molti (tipo me)
prima
ancora di leggere i doc provano a leggere il codice!
- c'è il build dei test solo per Win! Qui su linux ho provato a compilare un
test ma mi da un errore su un parametro di una open ifstream, che fa pensare
al fatto che potrebbe non essere troppo compatibile (ma, come ti ho detto, non
ho provato, per cui non so)

Per quanto riguarda il concetto.. boh, prendi tutto quelle che viene con le
pinze, perché è un mio parere personale.
Lavorare con una libreria del genere per me sarebbe impossibile, perché mette
dei paletti assurdi sia su algoritmi sia conti comuni.
- le unità di misura sono utili per i fisici quando fanno *****isi
dimensionali,
ma normalmente chiunque le lascia perdere, per i motivi che seguono (senza
contare che e anche a mano i fisici spesso mettono a 1 le dimensioni che gli
"danno noia" - in relatività speciale, ad esempio le lunghezze son numeri
puri!)
- la maggior parte dei conti che devi fare con un calcolatore sono, a parte
i conti base, roba di derivazione e integrazione: ma visto che solo dai conti
non è possibile sapere "cos'è quella moltiplicazione lì" significa che
bisogna fare cast a mano delle unità di misura ogni volta, che rende inutile
l'enforcing delle unità da parte del compilatore in primo luogo
- per un programmatore è più che comune avere a che fare con errori in
virgola mobile dovuti alla perdita di precisione: moltiplicare o dividere per
qualche costante non basta, a volte è necessario lavorare in più riferimenti
diversi con unità diverse, e vedere un listatone di unità senza significato
fisico sarebbe illeggibile.
- lavorare con matrici per rotazioni o traslazioni, diventa un incubo, anche
perché
- avere una struttura non "standard" per i vettori comporta un lavoro solo
per far parlare la tua libreria con altre!

Come ho detto, questo è il pensiero mio, e magari hai già pensato a come
risolvere tutte le cose che ho scritto sopra, ma questa è l'impressione ad
una prima lettura.

M2C
Ciao!
Carlo Milanesi 29 Set 2014 18:26
Il 29/09/2014 10:19, fmassei@gmail.com ha scritto:
> stessi parlando della libreria di qualcun'altro - so che non hai bisogno
> di complimenti ma di critiche costruttive.

Ti ringrazio.

> - nell'albero del progetto son mischiati header (la lib) e i test ...
> - c'è il build dei test solo per Win! ...

Il progetto ovviamente non è ancora completo.
In questa fase gradirei non tanto chi volesse compilare i test
(a meno che voglia collaborare all'implementazione),
ma piuttosto chi volesse leggersi il tutorial
e provare a usare la libreria per una sua applicazione,
e dirmi quali sono le operazioni necessarie alle sue esigenze
e che non riesce a fare in modo agevole usando la libreria.

So che ci sono già *****oghe librerie, sia per il C++ che per altri
linguaggi. Sarei molto interessato a sapere se qualcuno dei lettori
del newsgroup le ha mai usate per applicazioni reali.

> Lavorare con una libreria del genere per me sarebbe impossibile, perché mette
> dei paletti assurdi sia su algoritmi sia conti comuni.

I paletti sono ciò che secondo me rende più leggibile e affidabile
il codice applicativo, *****ogamente al Design-by-Contract.
I paletti assurdi sono ovviamente da rimuovere,
se scopro quali sono. Per esempio, quando mi sono reso conto
della necessità della combinazione baricentrica, ho aggiunto
le apposite funzioni.

> - le unità di misura sono utili per i fisici ...

Come ho scritto, questa libreria non è orientata alla scienza fisica,
ma all'ingegneria.

> - la maggior parte dei conti che devi fare con un calcolatore sono, a parte
> i conti base, roba di derivazione e integrazione:

La mia esperienza è diversa. Ho lavorato prevalentemente nel settore
CAD ******* in cui si manipolano solamente en*****à geometriche e velocità
costanti (le accelerazioni sono ges*****e internamente dal CNC).
In tale ambito sorge quotidianamente il problema di sapere
se le lunghezze sono in millimetri o in decimi di millimetro,
e se gli angoli sono in gradi (come richiesto dall'utente
e da alcune librerie) o in radianti (come richiesto da altre librerie).

Derivazione e integrazione sono rarissime in tali ambiti.
Comunque derivazione e integrazione simboliche esulano dall'ambito
di questa libreria, mentre derivazione e integrazione numeriche
non sono operazioni primitive in informatica,
e quindi sono riconducibili ad altre operazioni.

> ma visto che solo dai conti
> non è possibile sapere "cos'è quella moltiplicazione lì"

Avrei bisogno di chiarimenti su questa frase.

> - per un programmatore è più che comune avere a che fare con errori in
> virgola mobile dovuti alla perdita di precisione: moltiplicare o dividere per
> qualche costante non basta, a volte è necessario lavorare in più riferimenti
> diversi con unità diverse, e vedere un listatone di unità senza significato
> fisico sarebbe illeggibile.

Anche questa frase non mi e' chiara.

> - lavorare con matrici per rotazioni o traslazioni, diventa un incubo,
> - avere una struttura non "standard" per i vettori comporta un lavoro solo
> per far parlare la tua libreria con altre!

Ne deduco, ma ci stavo già pensando, che devo aggiungere delle funzioni
per far comunicare i miei oggetti con altre librerie senza essere
costretti a copiare i valori. Cioè fornire dei getter di reference.
Per testare tale comunicazione proverò a usare la mia libreria insieme
a Eigen.

> Ciao!

Ciao e grazie ancora.

--

Carlo Milanesi
http://carlomilanesi.wordpress.com/
fmassei@gmail.com 29 Set 2014 18:50
On Monday, September 29, 2014 6:26:34 PM UTC+2, Carlo Milanesi wrote:
> Il 29/09/2014 10:19, fmassei@gmail.com ha scritto:
>> stessi parlando della libreria di qualcun'altro - so che non hai bisogno
>> di complimenti ma di critiche costruttive.
>
> Ti ringrazio.
>

Non c'è bisogno di ringraziare, come ti ho detto, già ci son passato :)

>> - nell'albero del progetto son mischiati header (la lib) e i test ...
>> - c'è il build dei test solo per Win! ...
>
> Il progetto ovviamente non è ancora completo.
> In questa fase gradirei non tanto chi volesse compilare i test
> (a meno che voglia collaborare all'implementazione),
> ma piuttosto chi volesse leggersi il tutorial
> e provare a usare la libreria per una sua applicazione,
> e dirmi quali sono le operazioni necessarie alle sue esigenze
> e che non riesce a fare in modo agevole usando la libreria.
>

Capisco. Sì, chiaro, è giusto la prima cosa che ho provato a fare appena
scaricato il codice, così, per vedere che diceva il compilatore e leggermi,
in caso di successo, degli "esempi" così come scritti nei test.
Non so in quanti lo facciano, per me è come un'abitudine..

>> <snip>
> <snip>
>> - la maggior parte dei conti che devi fare con un calcolatore sono, a parte
>> i conti base, roba di derivazione e integrazione:
>
> La mia esperienza è diversa. Ho lavorato prevalentemente nel settore
> CAD ******* in cui si manipolano solamente en*****à geometriche e velocità
> costanti (le accelerazioni sono ges*****e internamente dal CNC).
>

Ok, perfetto. Ho lavorato per circa 4 anni scrivendo plugins per un CAD,
mi metterò nei miei stessi panni di qualche anno fa :)

> In tale ambito sorge quotidianamente il problema di sapere
> se le lunghezze sono in millimetri o in decimi di millimetro,
> e se gli angoli sono in gradi (come richiesto dall'utente
> e da alcune librerie) o in radianti (come richiesto da altre librerie).
>

Mamma mia quant'è vero. I peggiori grattacapi erano funzioni che prendevano
millimetri o gradi e non te lo dicevano né nella signature né sui doc...

> Derivazione e integrazione sono rarissime in tali ambiti.
> Comunque derivazione e integrazione simboliche esulano dall'ambito
> di questa libreria, mentre derivazione e integrazione numeriche
> non sono operazioni primitive in informatica,
> e quindi sono riconducibili ad altre operazioni.
>
>> ma visto che solo dai conti
>> non è possibile sapere "cos'è quella moltiplicazione lì"
>
> Avrei bisogno di chiarimenti su questa frase.
>

Immaginavo uno scenario che ultimamente m'era capitato, dove avevo una serie
di conti di per se (alla fine) facili, ma che m'avevano portato via due
giornate di calcoli su carta: quando cominci a semplificare prodotti vettoriali
o sfruttare semplificazioni fisiche la matematica è facile ma le unità di
misura vanno a farsi benedire.. Se vuoi ti riporto l'esempio: so dov'è ma
su due piedi non mi ricordo com'era.

>> - per un programmatore è più che comune avere a che fare con errori in
>> virgola mobile dovuti alla perdita di precisione: moltiplicare o dividere
>> per qualche costante non basta, a volte è necessario lavorare in più
>> riferimenti diversi con unità diverse, e vedere un listatone di unità
senza
>> significato fisico sarebbe illeggibile.
>
> Anche questa frase non mi e' chiara.
>

Ok, anche questa era mistica, faccio due esempi, uno ultimo e uno di quando
appunto lavoravo sui CAD.

La mia ultima inutile impresa era su una libreria di calcoli astronomici: se
vuoi tracciare un satellite la precisione dev'essere nell'ordine dei metri,
ma le distanze tra i corpi che lo influenzano sono nell'ordine delle migliaia
di chilometri (e spesso son moltiplicate per la massa, immaginati): va da se
che usare un double e pace non va bene. Si usano un po' di UA, un po' di metri,
un po' di quello che capita al momento, in realtà :)

Per il CADdismo più o meno succedeva lo stesso.. Erano procedure aeree, il CAD
lo settavamo sul centimetro, se non sbaglio, ma quando bisognava fare la solita
caterva di conti trigonometrici si andava molto sotto, e a video si davano
kilometri, miglia o piedi. Noi avevamo una convenzione di metri per alcuni
tipi di funzioni e poi era una moltiplicazione per una define.

>> - lavorare con matrici per rotazioni o traslazioni, diventa un incubo,
>> - avere una struttura non "standard" per i vettori comporta un lavoro solo
>> per far parlare la tua libreria con altre!
>
> Ne deduco, ma ci stavo già pensando, che devo aggiungere delle funzioni
> per far comunicare i miei oggetti con altre librerie senza essere
> costretti a copiare i valori. Cioè fornire dei getter di reference.
> Per testare tale comunicazione proverò a usare la mia libreria insieme
> a Eigen.
>

Yes, anche perché senza questo dubito che qualcuno la prenderebbe in
considerazione: in realtà basta fare qualcosa tipo mettere pubblico l'array
sottostante (un po' come poi fa gsl, senza andare a cercare robe mistiche).

>> Ciao!
>
> Ciao e grazie ancora.
>

Grazie a te della lib! Adesso che la conosco, la prossima volta che mi
capiterà un problema simile la terrò di sicuro in considerazione ;)

Ciao!
fmassei@gmail.com 29 Set 2014 20:00
On Monday, September 29, 2014 6:50:29 PM UTC+2, fma...@gmail.com wrote:
> On Monday, September 29, 2014 6:26:34 PM UTC+2, Carlo Milanesi wrote:
>>
>
> Immaginavo uno scenario che ultimamente m'era capitato, dove avevo una serie
> di conti di per se (alla fine) facili, ma che m'avevano portato via due
> giornate di calcoli su carta: quando cominci a semplificare prodotti
> vettoriali o sfruttare semplificazioni fisiche la matematica è facile ma le
> unità di misura vanno a farsi benedire.. Se vuoi ti riporto l'esempio: so
> dov'è ma su due piedi non mi ricordo com'era.
>

Ok, non ricordo il passagio, ma t'ho messo online quello che era (dimmi quando
l'hai letto che lo levo :) ):
http://technicalinsanity.org/math/05_kepler.html
ultima sezione, "a general formulation (the universal variable)", prova
a fare quei conti (alla fine c'è un listato matlab, per cui si può fare
facile,
senza tutte quella roba in mezzo) con le unità di misura: diventi pazzo!

> Yes, anche perché senza questo dubito che qualcuno la prenderebbe in
> considerazione: in realtà basta fare qualcosa tipo mettere pubblico l'array
> sottostante (un po' come poi fa gsl, senza andare a cercare robe mistiche).
>

E, aggiungo, visto che lavori con CAD pro*****ilmente avrai a che fare con tanti
algoritmi su matrici (dove devi prendere una decisione drastica per la tua
lib) e magari compilate in Fortran (dove comunque devi copiare memoria per
invertire colonne e righe)

>> Ciao e grazie ancora.
> Ciao!

Ciao di nuovo!
Carlo Milanesi 2 Ott 2014 00:22
Il 29/09/2014 20:00, fmassei@gmail.com ha scritto:
> On Monday, September 29, 2014 6:50:29 PM UTC+2, fma...@gmail.com wrote:
>> On Monday, September 29, 2014 6:26:34 PM UTC+2, Carlo Milanesi wrote:
>>>
> Ok, non ricordo il passagio, ma t'ho messo online quello che era (dimmi quando
> l'hai letto che lo levo :) ):

Puoi levarlo anche subito perché non è quello che mi serve.
A parte che ci capisco poco, mi sembra prevalentemente calcolo
simbolico, e non vedo unità di misura.
Quello che mi servirebbe è il codice sorgente di un algoritmo (non la
dimostrazione di un teorema!), dal quale si capisca,
tramite gli identificatori e i commenti, quali unità di misura
si stanno usando, e che non si riesca a implementare con variabili
dotate di unità di misura e i vincoli imposti dalla mia libreria.
In tal caso, se fattibile, potrei estendere la mia libreria
in modo da gestire anche tale caso.

>> Yes, anche perché senza questo dubito che qualcuno la prenderebbe in
>> considerazione: in realtà basta fare qualcosa tipo mettere pubblico l'array
>> sottostante (un po' come poi fa gsl, senza andare a cercare robe mistiche).

Ho aggiunto la funzione "data" per accedere direttamente
all'implementazione, e sono riuscito a usarla per passare i dati a Eigen
per puntatore.

--

Carlo Milanesi
http://carlomilanesi.wordpress.com/
fmassei@gmail.com 2 Ott 2014 01:28
On Thursday, October 2, 2014 12:22:47 AM UTC+2, Carlo Milanesi wrote:
> Il 29/09/2014 20:00, fmassei@gmail.com ha scritto:
>> On Monday, September 29, 2014 6:50:29 PM UTC+2, fma...@gmail.com wrote:
> Puoi levarlo anche subito perché non è quello che mi serve.
> A parte che ci capisco poco, mi sembra prevalentemente calcolo
> simbolico, e non vedo unità di misura.
> Quello che mi servirebbe è il codice sorgente di un algoritmo (non la
> dimostrazione di un teorema!), dal quale si capisca,
> tramite gli identificatori e i commenti, quali unità di misura
> si stanno usando, e che non si riesca a implementare con variabili
> dotate di unità di misura e i vincoli imposti dalla mia libreria.
> In tal caso, se fattibile, potrei estendere la mia libreria
> in modo da gestire anche tale caso.
>

Sì, capisco che tutta quella roba spaventi e basta - cerco di trovare un po'
di tempo per "fare porting" del codice C che ho relativo a quel pezzo sulla
tua lib - non penso (come ti ho detto) di riuscire a farcela, ma provo a
postare almeno l'inizio così che ti possa fare un'idea.
Sono un po' preso ma la cosa m'interessa: in questi giorni un po' di tempo
cerco di dedicarglielo.

>>> Yes, anche perché senza questo dubito che qualcuno la prenderebbe in
>>> considerazione: in realtà basta fare qualcosa tipo mettere pubblico
>>> l'array sottostante (un po' come poi fa gsl, senza andare a cercare robe
>>> mistiche).
>
> Ho aggiunto la funzione "data" per accedere direttamente
> all'implementazione, e sono riuscito a usarla per passare i dati a Eigen
> per puntatore.
>

Ben fatto, questa è di sicuro la notizia migliore! :)

Ciao!
fmassei@gmail.com 2 Ott 2014 01:52
On Thursday, October 2, 2014 1:28:36 AM UTC+2, fma...@gmail.com wrote:
> On Thursday, October 2, 2014 12:22:47 AM UTC+2, Carlo Milanesi wrote:
>> Puoi levarlo anche subito perché non è quello che mi serve.
>> A parte che ci capisco poco, mi sembra prevalentemente calcolo
>> simbolico, e non vedo unità di misura.
>> Quello che mi servirebbe è il codice sorgente di un algoritmo (non la
>> dimostrazione di un teorema!), dal quale si capisca,
>> tramite gli identificatori e i commenti, quali unità di misura
>> si stanno usando, e che non si riesca a implementare con variabili
>> dotate di unità di misura e i vincoli imposti dalla mia libreria.
>> In tal caso, se fattibile, potrei estendere la mia libreria
>> in modo da gestire anche tale caso.
>>
>
> Sì, capisco che tutta quella roba spaventi e basta - cerco di trovare un po'
> di tempo per "fare porting" del codice C che ho relativo a quel pezzo sulla
> tua lib - non penso (come ti ho detto) di riuscire a farcela, ma provo a
> postare almeno l'inizio così che ti possa fare un'idea.
> Sono un po' preso ma la cosa m'interessa: in questi giorni un po' di tempo
> cerco di dedicarglielo.
>

Qualcosa lo posso fare pure subito, dai:

il codice originale è:

double c2(double x) {
if (x>10e-7)
return 1-cos(sqrt(x))/x;
else if(x<-10e-7)
return 1-cosh(sqrt(-x)))/x;
else
return (double)1/2;
}

che, in C è, oserei dire, più che b*****e.

Ora, visto che vogliamo usare la tua libreria, i valori d'entrata e uscita
devono essere con le unità di misura..

x (che sarebbe \psi, su carta) è definita come \chi^2/a.
a sono metri, \chi è... vediamo..
non lo so, però conosco la sua derivata sul tempo:
d(\chi), meglio dire d(\chi)/d(t), è sqrt(\mu)/r, ovvero sqrt(m^(-1/2))/m..
in realtà non è importante, visto che, integrando (se voglio sapere le
dimensioni), ho ben tre soluzioni..
Quindi... che dimensioni dovrò mai dare a x della mia funzione??
Io, sinceramente, su due piedi non lo so, dovrei fare un bel po' di calcoli.

Il fatto è, a stringere, che il calcolo dimensionale è parallelo al calcolo
numerico, ed è utile solo a controllare i risultati (una specie di prova del
nove, se preferisci) - per tutta la roba in mezzo è solo fasti*****.

So che il tuo target è il mondo CADdistico ma, a quel punto, la regola di
segnare le variabili con l'unità di misura (_m, _cm, _km, _mm) perché dovrebbe
essere meno seguita della regola di non fare cast su un tipo diverso? Cosa
spingerebbe mai un ingegnere che perde un giorno a far calcoli su carta a
doversi pure accollare il calcolo dimensionale solo per scrivere un test per
vedere se la sua idea funziona?

Ancora una volta, non sto cercando di sminuire il tuo lavoro, voglio solo
portarti il mio pensiero sperando ti sia utile. Tanto poi qui lo sapete tutti
che sono solo un gran rom*****o****ni! :)

Ciao!
Carlo Milanesi 2 Ott 2014 20:05
Il 02/10/2014 01:52, fmassei@gmail.com ha scritto:
>
> Il fatto è, a stringere, che il calcolo dimensionale è parallelo al calcolo
> numerico, ed è utile solo a controllare i risultati (una specie di prova del
> nove, se preferisci) - per tutta la roba in mezzo è solo fasti*****.

Se sei in condizione di non sapere nemmeno qual è la grandezza fisica
che intendi un'espressione dovrebbe avere, allora in tal frangente la
mia libreria non ti serve.
Ma io sono convinto che nella maggior parte dei casi di programmazione,
il programmatore sa benissimo qual è la grandezza fisica che sta
manipolando, e ha anche un fondato sospetto di quale sia l'unità di
misura che sta manipolando (del tipo "questa è sicuramente una
lunghezza, e suppongo che sia misurata in millimetri").
In tali casi serve la mia libreria.

> So che il tuo target è il mondo CADdistico

Anche, ma non solo. Io ho detto che ho esperienza di programmazione di
sistemi CAD ******* ma ritengo che la mia libreria possa essere utile anche
in applicazioni CAE, GIS, in videogiochi basati sulla simulazione fisica
(per esempio, quelli sportivi o quelli di combattimento), e anche in
applicazioni scientifiche, escluse quelle di fisica teorica e di matematica.

> ma, a quel punto, la regola di
> segnare le variabili con l'unità di misura (_m, _cm, _km, _mm) perché
dovrebbe
> essere meno seguita della regola di non fare cast su un tipo diverso?

Decorare un identificatore ha una serie di svantaggi rispetto a
modificarne il tipo:
- Rende l'identificatore più lungo ogni volta che lo si usa, invece che
nella sola dichiarazione.
- Costringe a fare molte modifiche se il tipo cambia.
- Se si sbaglia, il compilatore non segnala l'errore. E questo è
l'aspetto più importante.

> Cosa
> spingerebbe mai un ingegnere che perde un giorno a far calcoli su carta a
> doversi pure accollare il calcolo dimensionale solo per scrivere un test per
> vedere se la sua idea funziona?

Mi sa che non ci capiamo. Come ho detto, la libreria risulta utile nei
casi in cui non si deve "calcolare" la grandezza fisica, ma questa
risulta intuitiva.
E non ci sono test da scrivere. Si tratta solo di modificare le
dichiarazioni delle variabili e delle costanti usate dal proprio algoritmo.

--

Carlo Milanesi
http://carlomilanesi.wordpress.com/
fmassei@gmail.com 6 Ott 2014 22:34
On Thursday, October 2, 2014 8:05:57 PM UTC+2, Carlo Milanesi wrote:
> Il 02/10/2014 01:52, fmassei@gmail.com ha scritto:

Sorry se rispondo solo ora, ho avuto un po' da fare..

>> Il fatto �, a stringere, che il calcolo dimensionale � parallelo al
calcolo
>> numerico, ed � utile solo a controllare i risultati
>>
> Se sei in condizione di non sapere nemmeno qual � la grandezza fisica
> che intendi un'espressione dovrebbe avere, allora in tal frangente la
> mia libreria non ti serve.
>

E' che spesso non è così facile come sembra - nel caso di integrazioni
succede facilmente, di avere le grandezze fisiche completamente sballate:
ti do il link di un post su i.s.m che parla di unità di misura su un
semplicissimo volume di un solido di rotazione (con flame annesso, ma sono
solo una decina di post)
https://groups.google.com/forum/#!searchin/it.scienza.matematica/Volume$20del$20paraboloide$20di$20rotazione./it.scienza.matematica/6cH0IH8jPHY/LPbCyLZD80wJ

> Ma io sono convinto che nella maggior parte dei casi di programmazione,
> il programmatore sa benissimo qual � la grandezza fisica che sta
> manipolando, e ha anche un fondato sospetto di quale sia l'unit� di
> misura che sta manipolando (del tipo "questa � sicuramente una
> lunghezza, e suppongo che sia misurata in millimetri").
> In tali casi serve la mia libreria.
>

Sì, ne sono stato a lungo convinto anch'io. Ti stavo dicendo perché ho
cambiato idea nel corso degli anni.

>> So che il tuo target � il mondo CADdistico
>
> Anche, ma non solo. Io ho detto che ho esperienza di programmazione di
> sistemi CAD ******* ma ritengo che la mia libreria possa essere utile anche
> in applicazioni CAE, GIS, in videogiochi basati sulla simulazione fisica
> (per esempio, quelli sportivi o quelli di combattimento), e anche in
> applicazioni scientifiche, escluse quelle di fisica teorica e di matematica.
>

Campi in cui (me lo son tenuto, ma ora te lo dico, visto che ne stiamo
parlando) non vedo il perché dovresti dividere scalari da vettori. Voglio
dire, perché il tipo vettore ad una dimensione non basta da solo? Alla fine
che differenza c'è tra uno scalare e un 1-vettore?

>> ma, a quel punto, la regola di
>> segnare le variabili con l'unit� di misura (_m, _cm, _km, _mm) perch�
>> dovrebbe essere meno seguita della regola di non fare cast su un tipo
>> diverso?
>
> Decorare un identificatore ha una serie di svantaggi rispetto a
> modificarne il tipo:
> - Rende l'identificatore pi� lungo ogni volta che lo si usa, invece che
> nella sola dichiarazione.
> - Costringe a fare molte modifiche se il tipo cambia.
> - Se si sbaglia, il compilatore non segnala l'errore. E questo �
> l'aspetto pi� importante.
>

Ok, decorare è una roba C-istica vecchio stile, ma in C/C++ moderni con
typedef e check statici a monte del compilatore ottieni gli stessi risultati,
senza andare a scomodare i templates. Non l'ho mai visto fare, ma un
typedef int metri; non mi stupirebbe molto.

>> Cosa
>> spingerebbe mai un ingegnere che perde un giorno a far calcoli su carta a
>> doversi pure accollare il calcolo dimensionale solo per scrivere un test
>> per vedere se la sua idea funziona?
>
> Mi sa che non ci capiamo. Come ho detto, la libreria risulta utile nei
> casi in cui non si deve "calcolare" la grandezza fisica, ma questa
> risulta intuitiva.
> E non ci sono test da scrivere. Si tratta solo di modificare le
> dichiarazioni delle variabili e delle costanti usate dal proprio algoritmo.
>

Hai ragione, naturalmente; ho portato quell'esempio solo perché stavo pensando
ad un possibile caso d'uso: uno che fa due conti su un problema e vuole
provare a vedere come gli viene un risultato.

Ciao!
Carlo Milanesi 6 Ott 2014 23:15
Il 06/10/2014 22:34, fmassei@gmail.com ha scritto:
> On Thursday, October 2, 2014 8:05:57 PM UTC+2, Carlo Milanesi wrote:
>> Il 02/10/2014 01:52, fmassei@gmail.com ha scritto:
>
> Sorry se rispondo solo ora, ho avuto un po' da fare..
>
>> Ma io sono convinto che nella maggior parte dei casi di programmazione,
>> il programmatore sa benissimo qual � la grandezza fisica ...
>> In tali casi serve la mia libreria.
>
> Sì, ne sono stato a lungo convinto anch'io. Ti stavo dicendo perché ho
> cambiato idea nel corso degli anni.

Dipende dal tipo di lavoro a cui sei abituato. Penso che per tali
situazioni la mia libreria non sia utile.

Ho creato lo stesso thread anche su comp.lang.c++, dove ha avuto piu'
partecipanti, e li' mi hanno fatto capire che la mia libreria
risulterebbe particolarmente compe*****iva nel settore dei
microcontrollori, anche a 8-bit, purche' rendessi rimovibile la gestione
delle misure a unita' assegnata in fase di esecuzione, che introduce
requisiti inaccettabili.

>>> So che il tuo target � il mondo CADdistico
>>
>> Anche, ma non solo. Io ho detto che ho esperienza di programmazione di
>> sistemi CAD ******* ma ritengo che la mia libreria possa essere utile anche
>> in applicazioni CAE, GIS, in videogiochi basati sulla simulazione fisica
>> (per esempio, quelli sportivi o quelli di combattimento), e anche in
>> applicazioni scientifiche, escluse quelle di fisica teorica e di matematica.
>>
> Campi in cui (me lo son tenuto, ma ora te lo dico, visto che ne stiamo
> parlando) non vedo il perché dovresti dividere scalari da vettori. Voglio
> dire, perché il tipo vettore ad una dimensione non basta da solo? Alla fine
> che differenza c'è tra uno scalare e un 1-vettore?

Infatti, tratto gli scalari come vettori o punti a una dimensione.

>>> ma, a quel punto, la regola di
>>> segnare le variabili con l'unit� di misura (_m, _cm, _km, _mm) perch�
>>> dovrebbe essere meno seguita della regola di non fare cast su un tipo
>>> diverso?
>>
>> Decorare un identificatore ha una serie di svantaggi rispetto a
>> modificarne il tipo:
>> - Rende l'identificatore pi� lungo ogni volta che lo si usa, invece che
>> nella sola dichiarazione.
>> - Costringe a fare molte modifiche se il tipo cambia.
>> - Se si sbaglia, il compilatore non segnala l'errore. E questo �
>> l'aspetto pi� importante.
>
> Ok, decorare è una roba C-istica vecchio stile, ma in C/C++ moderni con
> typedef e check statici a monte del compilatore ottieni gli stessi risultati,
> senza andare a scomodare i templates. Non l'ho mai visto fare, ma un
> typedef int metri; non mi stupirebbe molto.

I typedef sono degli alias, e nonostante il nome non creano nuovi tipi.
Lo capisci, tra l'altro, dai messaggi d'errore del compilatore che usano
i tipi originali. Essendo alias non comportano errori di tipo.
Per esempio:

typedef int metri;
typedef int secondi;
metri a;
secondi b;
a = b; // E' legale

>>> Cosa
>>> spingerebbe mai un ingegnere che perde un giorno a far calcoli su carta a
>>> doversi pure accollare il calcolo dimensionale solo per scrivere un test
>>> per vedere se la sua idea funziona?
>>
>> Mi sa che non ci capiamo. Come ho detto, la libreria risulta utile nei
>> casi in cui non si deve "calcolare" la grandezza fisica, ma questa
>> risulta intuitiva.
>> E non ci sono test da scrivere. Si tratta solo di modificare le
>> dichiarazioni delle variabili e delle costanti usate dal proprio algoritmo.
>
> Hai ragione, naturalmente; ho portato quell'esempio solo perché stavo
pensando
> ad un possibile caso d'uso: uno che fa due conti su un problema e vuole
> provare a vedere come gli viene un risultato.

Per tale compito, non credo che farebbe bene a usare il C++ in primo
luogo, bensi' un ambiente interattivo, come Mathematica!

--

Carlo Milanesi
http://carlomilanesi.wordpress.com/
fmassei@gmail.com 6 Ott 2014 23:49
On Monday, October 6, 2014 11:15:58 PM UTC+2, Carlo Milanesi wrote:
> Il 06/10/2014 22:34, fmassei@gmail.com ha scritto:
> Ho creato lo stesso thread anche su comp.lang.c++, dove ha avuto piu'
> partecipanti, e li' mi hanno fatto capire che la mia libreria
> risulterebbe particolarmente compe*****iva nel settore dei
> microcontrollori, anche a 8-bit, purche' rendessi rimovibile la gestione
> delle misure a unita' assegnata in fase di esecuzione, che introduce
> requisiti inaccettabili.
>

Ho letto il thread, e sinceramente mi sembra che il feedback si stato
ancor più negativo del mio :(
Condivido molte delle critiche che ti hanno posto (a parte quelle su Boost,
che però, lato *****ista, non programmatore, comprendo a pieno).

>> non vedo il perché dovresti dividere scalari da vettori. Voglio
>> dire, perché il tipo vettore ad una dimensione non basta da solo? Alla fine
>> che differenza c'è tra uno scalare e un 1-vettore?
>
> Infatti, tratto gli scalari come vettori o punti a una dimensione.
>

Ho letto le tue risposte sul ramo relativo del thread sull'altro NG.
So che dovrei riassumere/chiedere/commentare ma lascio stare - per altre
domande, putacaso non venissero fuori dall'altra discussione, mi inserirò
nel thread dell'altro NG.

>> Ok, decorare è una roba C-istica vecchio stile, ma in C/C++ moderni con
>> typedef e check statici a monte del compilatore ottieni gli stessi
>> risultati, senza andare a scomodare i templates. Non l'ho mai visto fare,
>> ma un typedef int metri; non mi stupirebbe molto.
>
> I typedef sono degli alias, e nonostante il nome non creano nuovi tipi.
> Lo capisci, tra l'altro, dai messaggi d'errore del compilatore che usano
> i tipi originali. Essendo alias non comportano errori di tipo.
> Per esempio:
>

Per questo t'avevo scritto "con i check statici": a loro questo tipo di
errori non sfugge.

>> Hai ragione, naturalmente; ho portato quell'esempio solo perché stavo
>> pensando ad un possibile caso d'uso: uno che fa due conti su un problema
>> e vuole provare a vedere come gli viene un risultato.
>
> Per tale compito, non credo che farebbe bene a usare il C++ in primo
> luogo, bensi' un ambiente interattivo, come Mathematica!
>

Qui devo fare un mea *****pa, m'hai scoperto! Di solito scrivo direttamente
sul codice di produzione: se funziona ristrutturo, commento e faccio commit,
altrimenti faccio reset sul repository locale.
( Sì, fanno praticamente tutti così ;) )

Ciao!
c.milanesi.bg@gmail.com 9 Ott 2014 00:24
Il giorno lunedì 6 ottobre 2014 23:49:03 UTC+2, fma...@gmail.com ha scritto:
> On Monday, October 6, 2014 11:15:58 PM UTC+2, Carlo Milanesi wrote:
>> Il 06/10/2014 22:34, fmassei@gmail.com ha scritto:
>> Ho creato lo stesso thread anche su comp.lang.c++, ...
>
> Ho letto il thread, e sinceramente mi sembra che il feedback si stato
> ancor più negativo del mio :(
> Condivido molte delle critiche che ti hanno posto (a parte quelle su Boost,
> che però, lato *****ista, non programmatore, comprendo a pieno).

Non capisco come fai a criticare quando, da quello che scrivi, capisco che non
hai nemmeno dato un'occhiata alla do*****entazione.

>>> Ok, decorare è una roba C-istica vecchio stile, ma in C/C++ moderni con
>>> typedef e check statici a monte del compilatore ottieni gli stessi
>>> risultati, senza andare a scomodare i templates. Non l'ho mai visto fare,
>>> ma un typedef int metri; non mi stupirebbe molto.
>
>> I typedef sono degli alias, ...
>
> Per questo t'avevo scritto "con i check statici": a loro questo tipo di
> errori non sfugge.

Ti sarei grato se mi facessi capire con un esempio che cosa intendi proporre.

--
Carlo Milanesi

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio C++ | Tutti i gruppi | it.comp.lang.c++ | Notizie e discussioni lang cpp | Lang cpp Mobile | Servizio di consultazione news.