|
|
|
|
Strumenti |
19-10-2017, 10:11 | #1 |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
[Haskell] C'è nessuno che lo usa in produzione?
Di recente ho cominciato a lavorare all'università e visto che qui ho un po' più libertà rispetto all'azienda stavo pensando di spendere del tempo per imparare Haskell e usarlo per fare analisi di dati.
Solo che è abbastanza complicato, secondo me è anche mancanza di un tutorial o di una guida fatti bene. C'è nessuno qui sul forum che lo usa o lo ha usato per lavoro? Vale davvero la pena sbattersi? (Normalmente per analizzare i dati uso python o matlab). Domanda ancora più perversa: sapete se esiste un compilatore haskell per ARM? EDIT: https://wiki.haskell.org/IPhone Holy shit!
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! |
20-10-2017, 07:21 | #2 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 3826
|
Premesso che anch'io volevo avvicinarmi ad Haskell, da alcune discussioni riguardo systemd avevo avuto il sentore che pabloski conoscesse il linguaggio.
Fermo restando che concordo su Python, che permette di arrivare al sodo abbastanza velocemente. Inviato dal mio HUAWEI VNS-L31 utilizzando Tapatalk |
20-10-2017, 14:05 | #3 |
Senior Member
Iscritto dal: Dec 2010
Messaggi: 2522
|
|
20-10-2017, 17:07 | #4 | ||
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
Quote:
Haskell e' un linguaggio di programmazione funzionale puro, l'unico che io sappia a non essere contaminato da altri paradigmi. E' la stessa esperienza che ti da' Lisp. Capovolge letteralmente il tuo modo di pensare la programmazione. Il risvolto della medaglia e' l'estrema difficolta' nel padroneggiarne le astrazioni ( perche' sono strane, a volte controintuitive, quasi sempre in opposizione al modo di fare imperativo ). Se Rust e' considerato difficile, Haskell puo' essere considerato senza dubbio impossibile. Tuttavia da' una capacita' di realizzare software corretto che imho nessun altro linguaggio offre ad oggi. L'altro risvolto negativo e' che e' di nicchia, con tutto cio' che questo comporta in termini di disponibilita' di librerie e supporto da parte della comunita'. C'e' anche da considerare che lo sviluppo non e' veloce come per gli altri linguaggi. Alcuni se ne lamentano, ma francamente non capisco il perche'. Non stiamo nemmeno parlando di un linguaggio "normale". Come risorsa per iniziare parti da qui http://learnyouahaskell.com/chapters A suo tempo mi ha aiutato a capire di fronte a cosa mi trovavo. Eh si, all'inizio si e' decisamente spaesati. |
||
21-10-2017, 14:58 | #5 | |||
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
int a=1, b=3; float x = a / b; non fa zero Quote:
Quote:
|
|||
22-10-2017, 08:58 | #6 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Per quanto mi riguarda, il casting dovrebbe avvenire soltanto dopo che il risultato della divisione sia stato elaborato. Riguardo al discorso generale, ovviamente imparare paradigmi di programmazione diversi dai soliti imperativo e a oggetti fa sempre bene alla mente, che si allena a risolvere gli stessi problemi, ma in maniera anche molto diversa. All'università ho studiato Scheme (dialetto del LISP) per la programmazione funzionale, e Prolog per quella logica, e devo dire di averne tratto giovamento, perché quando affronto dei problemi da risolvere diverse volte capita di usare dei "pattern" appresi durante quegli studi. Ma capita anche il viceversa: quando da Python passo a linguaggi a tipizzazione statica come C# o C++, mi capita di usare dei pattern che ho imparato e uso con uno dei linguaggi più (a tipizzazione) "dinamici". Tutto fa bene per allenare la mente.
__________________
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 |
|
22-10-2017, 10:18 | #7 | |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
E basta un attimo di distrazione...
Quote:
E ci si creano pure software dalla complessita' mostruosa. Questa e' irresponsabilita', al livello di un chirurgo che operi con un bisturi arrugginito. E loro diranno: "ma i programmi C sono i piu' performanti in assoluto". Per poi scoprire che un buon compilatore Fortran gli fa il pelo e contropelo in ambito matematico/numerico. E altri in ambiti diversi, tipo LuaJit che sforna codice spesso piu' performante di quello che prodotto da un compilatore C. Dunque in Italia esistono anche universita' sane di mente. Fantastiche quelle che iniziano alla programmazione col C o peggio col Java |
|
22-10-2017, 11:06 | #8 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Già. Ma d'altra parte linguaggi come Haskell richiedono tempo per poter essere padroneggiati.
Quote:
Prendi un SoC che ha uno sputo di Flash per il codice, e un ordine di grandezza meno per la RAM, e se non ti piace il C ti tocca di andare di assembly, che è di gran lunga peggio. Altro ambito, le VM. Avendo avuto esperienza con quella di Python, scriverne una "performante" viene più facile se puoi gestire alcune cose a livello più basso. Il C non è da buttare, ma purtroppo è anche vero che estenderlo troppo si finirebbe per snaturarlo, e a un certo punto forse è meglio passare a C++ o simile. Quote:
Non so se ancora oggi si studii Scheme o Prolog. Spero di sì per quanto detto prima.
__________________
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 |
||
22-10-2017, 12:33 | #9 | |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 931
|
Quote:
|
|
22-10-2017, 12:34 | #10 | |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 3826
|
Quote:
Dipende da quello che devi fare. Come ha gia' detto cdimauro, ci sono ambiti in cui il C va benissimo. Una VM la scrivi in Java? O magari e' meglio un linguaggio che ti permette una certa gestione del basso livello? Che poi, gli aborti che si fanno col C spesso sono piu' causa del fatto che certa gente dovrebbe cambiare mestiere. Un esempio: l'aritmetica dei puntatori. C'e' chi si intestardisce col voler usare il C non avendo ben chiaro cosa sia un puntatore. E gia' questo e' assurdo. A me sembra peggio l'andazzo odierno di portarsi dietro un intero browser per scrivere un insulso editor di testo. Comunque, tra C e C++ forse sarebbe meglio se morisse quest'ultimo. |
|
22-10-2017, 12:56 | #11 | ||||||
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
Quote:
Pero' questa cosa si e' capita e infatti alcuni linguaggi novelli ( Rust ad esempio ) tengono conto di queste casistiche. Certo non si puo' pretendere di cambiare tutto il C con codice Rust in pochi anni. L'importante e' che gli addetti ai lavori ne prendano nota. Anche su questo punto i linguaggi di nuova generazione hanno fatto i loro compitini. Il problema e' nato dalla corsa verso "l'alto livello" propinataci da Java e figli. Sono loro che hanno sviluppato strumenti per sviluppare software piu' robusto, ma a costo di peggioramenti non trascurabili su altri fronti. Oggi c'e' un ripensamento su quest'ultima parte. Haskell non fa parte del club pero', visto quanto complesso rende manipolare qualsiasi cosa che abbia dei side-effects. Ma Haskell non e' l'unico linguaggio funzionale! Quote:
Se questi strumenti ci fanno pagare un dazio troppo alto ( in termini di complessita' computazionale e quindi risorse hardware consumate ) finiscono per non essere adatti ad alcuni ambiti. Ma ripeto, questa trade-off e' chiaro agli addetti ai lavori e ci stanno lavorando. La comunita' Rust si sta interessando all'embedded. Ma anche altre comunita' lo stanno facendo ( vedi MicroPython ). Quindi non e' bianco o nero, semplicemente se oggi abbiamo assoluto bisogno di software corretto, magari il C perde parecchi punti perche' non ci offre nulla su questo fronte. Ma la puoi scrivere in OCaml. Quote:
Quote:
E infatti sono proprio loro a spingere la comunita' alla larga a creare strumenti di sviluppo piu' evoluti. Quote:
Quello e' un trend che va ben oltre i semplici linguaggi. Senza contare che i motori dei browser sono tra i software piu' buggati sul pianeta e Javascript e' un cavolo vestito da linguaggio di programmazione. |
||||||
22-10-2017, 13:09 | #12 | |||
Senior Member
Iscritto dal: Jan 2014
Messaggi: 3826
|
Quote:
Quote:
Quote:
Quello e' un trend dovuto alla moda di non insegnare la programmazione, e parlo della teoria che c'e' dietro. E' molto piu' semplice incollare codice usando librerie a ca**o. |
|||
22-10-2017, 15:05 | #13 | |||
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
Quote:
Quote:
Ma mi pare di capire che tu dai la colpa sempre e comunque al programmatore. E allora perche' Mozilla si sarebbe impegnata per creare Rust? Perche' e' piena di programmazione incapaci che non sanno usare il C? Oggettivamente c'e' un limite a quello che si puo' chiedere ad un essere umano limitato nel tempo, nelle capacita', nella memoria e pure nell'attenzione. Non sara' invece perche' un compilatore jit, un garbage collector sono bestie di una complessita' immonda? |
|||
22-10-2017, 15:29 | #14 | |||
Senior Member
Iscritto dal: Jan 2014
Messaggi: 3826
|
Quote:
Quote:
Il C e' un linguaggio. Non vieta di realizzare un garbage collector, o altri supporti del genere. E' un linguaggio semplicissimo con cui poi, in teoria, puoi fare qualunque cosa. Tant'e' che malloc(), calloc(), free() etc, sono funzioni di libreria, mica del C, il quale, ad essere precisi, non avrebbe funzioni native nemmeno per l'I/O. Quote:
Il punto di oggi e' che chiunque si sveglia la mattina, scrive due righe di JavaScript e si spaccia per programmatore. Magari realizza un editor di testo con GUI carina in HTML5, che pero' e' un carrozzone immondo che si sfancula appena il file da editare supera le 100 righe. |
|||
22-10-2017, 19:35 | #15 | ||||
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
Codice:
float x = 1/3; Matematicamente e' ovvio questo fatto. Solo ai progettisti del C non era ovvio. Quote:
Evidentemente il problema non e' questo, ma piuttosto la mancanza di strumenti ed astrazioni per coadiuvare l'attivita' del programmatore. E' questo il punto. Pure un palazzo si puo' costruire senza betoniera e impastando il calcestruzzo a mano, ma nessuno si sognerebbe di farlo. Quote:
C'entra che il cervello umano e' limitato e gestire la complessita' non e' il suo forte. Altrimenti, lo ripeto, programmeremmo tutti in assembly, perche' in fondo e' il piu' efficiente di tutti. Quote:
|
||||
22-10-2017, 23:20 | #16 | ||||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Fermo restando che pure in C è possibile sviluppare unit-testing, e quindi evitando di passare dal debugger. Quote:
Quote:
Quote:
Alla fine per un'azienda può essere più conveniente che un programmatore impieghi più tempo per il testing di un codice, ma potendo usare un SoC che costa meno. E quindi su migliaia e migliaia di pezzi non solo ripaga il tempo extra del programmatore, ma risparmia molti più soldi. Quote:
Vorrei provare MicroPython, ma al momento dubito che funzioni coi SoC più economici che ci sono in giro. Quote:
Quote:
Quote:
Quote:
Comunque con Python fino alla 2.7 l'operazione di cui sopra dà 0. Soltanto da Python 3 dà 0.3333 perché è stata cambiata l'operazione di divisione. Quote:
Personalmente non mi piace il cambiamento avvenuto con Python 3. 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 Ultima modifica di cdimauro : 23-10-2017 alle 07:55. Motivo: tread-off -> trade-off |
||||||||||||
23-10-2017, 09:08 | #17 | |||||
Senior Member
Iscritto dal: Jan 2014
Messaggi: 3826
|
Quote:
Quote:
Ma forse per te pure per un secchio di cemento si dovrebbe usare una betoniera enorme. Quote:
Se la tua azienda basa il suo business sul C, penso che riesca pure a farsi realizzare gli strumenti che le servono per... far soldi, no? Altrimenti arriviamo alla situazione del C++, che e' un pappone immenso in cui ogni anno si aggiunge roba, aumentandone a dismisura la complessita', fino al punto che nemmeno Stroustrup ci capira' piu' molto. Quote:
Analogamente, se un dato software deve essere realizzato in assembly, tu lo realizzi in assembly. I microcontrollori della ATMEL, per dire, li programmi in JavaScript? Che poi, uno dei motivi per cui l'assembly e' stato sostituito e' la non portabilita'. Quote:
Se usi il C per scrivere il backend di un sito web la colpa e' tua che sei un deme*te, mica del linguaggio. Il C, dopo 40 anni, va benissimo cosi', e ci sono tanti ambiti in cui e' un ottimo strumento. A patto che lo si usi bene. Il che pero' non significa che vada usato ovunque e per ogni cosa, a meno di preferenze personali, su cui non si discute. Ultima modifica di GTKM : 23-10-2017 alle 09:11. |
|||||
23-10-2017, 10:10 | #18 | ||||||||||
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
Suvvia non siamo banali. Una divisione NON INTERA ( cioe' il risultato non dev'essere intero ) tra interi e' un numero reale, non un intero. Del resto se chiedi a Python quanto fa 1/3 lui risponde 0.33333. Se poi vogliamo stravolgere pure la mamematica per difendere il C... Quote:
Quote:
Quote:
Se l'OOP si puo' implementare mandando in giro puntatori, a che serve il C++? Che e' la stessa cosa che finisce col fare col C quando sei costretto ad usare millemila librerie e wrapper per colmare le deficienze del linguaggio. Quote:
Quote:
https://www.espruino.com/ http://jerryscript.net/ Quote:
E no, avvicinarsi all'uomo non vuol dire creare un runtime da 2GB, pieno zeppo di garbage collector, compilatori jit e altre diavolerie. Esistono altre strade, quella seguita da Haskell ad esempio. Quote:
Quote:
Quote:
In ambiti dove i bug sono una cosa seria, si cerca di evitare C e compagni come la peste. Haskell e' usatissimo nell'industria finanziaria per questa ragione. I linguaggi funzionali in generale sono usati in ambiti come quello aerospaziale, medicale, industriale. I microcontrollori programmati esclusivamente in C fanno parte del passato, oggi ci si guarda intorno prima di buttarsi a capofitto su C/C++. Infatti non va usato laddove correttezza e robustezza del software sono dei must. E laddove il software e' particolarmente complesso. |
||||||||||
23-10-2017, 10:15 | #19 | |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
Alcuni effettuano implicitamente il casting, altri no. Haskell ovviamente da' errore, perche' un'operazione del genere ( dubbia ) potrebbe essere frutto di un errore di programmazione. Riguardo l'aspetto matematico, il casting e' implicito. Infatti a scuola che fai 1/3 scrivi 0.3333. |
|
23-10-2017, 11:18 | #20 | |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 3826
|
Quote:
Se operi nei reali fa 0.3333333 (con 3 periodico), altrimenti fa 0 con resto. Se stai facendo una divisione fra interi, nel campo dei numeri interi, non si scappa. Analogamente, se risolvi l'equazione x^2 + 1 = 0 nel campo dei numeri reali (come si fa alle superiori) scriverai che NON c'e' soluzione in R. Ma se consideri i numeri complessi, ossia "estendi" il campo in cui operi, dirai che quell'equazione ha due soluzioni: x = +i e x = -i Il C fa la divisione fra due interi e, GIUSTAMENTE, restituisce il risultato intero. Gli altri linguaggi possono pure permetterti di assegnare 1.3333 ad un intero senza troncare, resta il fatto che MATEMATICAMENTE 1.3333 NON e' intero. |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:27.