PDA

View Full Version : [Scala] Chi l'ha provato?


PGI-Bis
20-08-2009, 10:54
Come da topic. Impressioni? Io trovo il linguaggio estremamente sollazzante con la gratificazione ulteriore del poter usare tutte le librerie esistenti per la piattaforma Java.

Sono un po' perplesso di fronte ad alcune sue librerie ( a:::b non mi sembra il massimo per dire crea una lista che inizia con a e finisce con b), il plug-in per Netbeans è poco più di un coloratore di sintassi e quello per Eclipse mi crasha l'IDE ma nel complesso Scala mi da quella sensazione di arrapamento che mi mancava dai tempi di Java 1.1

Chi ha provato il linguaggio - non l'arrapamento - cosa ne pensa?

cdimauro
20-08-2009, 12:47
Mai provato. Aspetto che sia qualcun altro a farlo e fornire qualche utile informazione. :fiufiu:

P.S. ::: è veramente orrido. :stordita:

Y3PP4
20-08-2009, 15:21
Mai provato. Aspetto che sia qualcun altro a farlo e fornire qualche utile informazione. :fiufiu:

P.S. ::: è veramente orrido. :stordita:

E detto da un Pythonista è facile capire perchè :)
Nemmeno io l'ho provato ma ho visto diversi esempi di codice e mi andava di condividere una sciocchezza, scusa l'OT.

Ps. Anche io amo Python =D

PGI-Bis
20-08-2009, 17:58
Il codice che ho visto in rete tende ad essere piuttosto strambo, probabilmente per via del fatto che chi lo prova tende a guardare alle caratteristiche diverse da quelle a cui è abituato. Ad esempio si vedono molto case-class ma nessuno che dica: occhio che non c'è l'invocazione di supercostruttore alternativo - che magari per chi viene da Java è un po' più interessante come cosa da sapere.

Essendo poi un linguaggio anche funzionale si vede molto il for:

for(val i <- 0 to 1000)

ma nessuno che vada a puntualizzare:

occhio che questo crea una lista di 1000 elementi quindi non è la controparte del for imperativo.

[Edit]: in realtà non crea alcuna lista. Il degrado delle prestazione comparate al corrispondente while, nello stesso linguaggio, sembra essere dovuto all'overhead dell'invocazione di funzione che costituisce il corpo del for funzionale.

Comunque a grandi linee è un normalissimo linguaggio OO in cui le funzioni sono altrettanto normalissime istanzae di classi (scala.FunctionXYZ)

Si tratta di un linguaggio staticamente tipato con una certa propensione all'inferenza dei tipi, nello stile "se a destra dell'uguale ci va una stringa, be', direi che a la variabile a sinistra è una stringa". Ha i generici che sono volendo anche più complessi di quelli di Java ma non essendogli stati ficcati dentro a treno in corsa danno complessivamente l'idea di trovarsi a casa loro.

Ha un limitato supporto alla ricorsione in coda che permette a funzioni ricorsive di particolare fattura di non incorrere nel penalty dello stack overflow.

Nel complesso è un linguaggio piuttosto sofisticato ma, ripeto, a me fa un'ottima impressione.

Sfortunatamente ha una community a cui se chiedi come si fa un while ti risponde sull'aria del "non capisci un ca##o, il while è paleolitico, devi scrivere:

funz hk => abz (1 to TuaNonna)(){}(){}?=>!! +- __ 3 tre ciapel chel ghe' {
goto affancul'
}

def."

oppure ti dicono che già nel '300 il matematico russo de puttanienko aveva scritto un saggio di trentadue volumi sulla ricorsione in coda alla tangenziale

cioè intorno al linguaggio c'è un po' di spocchia a là "grandi scienziati dell'infomatica che se complessivamente fa schifo è perchè non la faccio io" ma non è nulla a cui non si possa rimediare con un bel "hai ragione ma vaff... lo stesso".

Y3PP4
20-08-2009, 19:00
Nel complesso è un linguaggio piuttosto sofisticato ma, ripeto, a me fa un'ottima impressione.

Beh, anche se di java non saprei scrivere un Hello World (beh forse parlando pessimisticamente, ma siam li), ne ho sentito parlare spesso, e se un linguaggio si diffonde avrà il suo perchè. Non posso quindi giudicarlo in merito al suo utilizzo.
Ma già l'esempio Hello World sul sito ufficiale, mi intimidisce con la seguente riga:
def main(args: Array[String]) {
Ma *solo* perchè non ho mai usato approcci simili, e il primo amore è stato Python.


Sfortunatamente ha una community a cui se chiedi come si fa un while ti risponde sull'aria del "non capisci un ca##o, il while è paleolitico, devi scrivere:

funz hk => abz (1 to TuaNonna)(){}(){}?=>!! +- __ 3 tre ciapel chel ghe' {
goto affancul'
}

def."

Ahahaha... riguardo a spocchiosità mi ricorda l'atteggiamento della community di un *certo* linguaggio nei confronto di un *altro* linguaggio.

oppure ti dicono che già nel '300 il matematico russo de puttanienko aveva scritto un saggio di trentadue volumi sulla ricorsione in coda alla tangenziale

cioè intorno al linguaggio c'è un po' di spocchia a là "grandi scienziati dell'infomatica che se complessivamente fa schifo è perchè non la faccio io" ma non è nulla a cui non si possa rimediare con un bel "hai ragione ma vaff... lo stesso".
http://smiles.calshop.biz/faccine/feli/29.gifhttp://smiles.calshop.biz/faccine/feli/61.gif

PS. grazie per la chiara introduzione al linguaggio.

PGI-Bis
20-08-2009, 20:08
Mi attacco a voi perchè siete gli unici che al momento si sono fatti sotto. Ahivoi!

Il "main" è carenza di marketing. Poste le differenze esistenziali tra un linguaggio a tipi precotti come Scala rispetto al sushi del genere Python il fatto che sul sito sparino subito la cartuccia della classe su file è emblematico.

C'è anche un interprete - che è un barbatrucco ma l'abito conta come il monaco anche perchè il monaco nudo fa sempre un po' impressione.

Nulla vieta di dire, ad esempio:

println("Hello World")

salvarlo in un file script.sc (l'estensione è ad libitum)

e lanciare il tutto con

scala script.sc

Dopo un venti-trenta minuti compare la scritta "Hello World". Ma si può anche lanciare l'interprete dinamico e digitare i comandi sul prompt del dos che fa tanto anni '80 (1880 ma va di moda).

Una cosa che non mi è la mancanza delle eccezioni controllate di cui sono un particolare adoratore.

Ah, dimenticavo. La documentazione rivaluta il concetto di schifo. Ho già detto che Scala mi piace, vero? Non vorrei che sembrasse il contrario...

Y3PP4
20-08-2009, 20:58
Mi attacco a voi perchè siete gli unici che al momento si sono fatti sotto. Ahivoi!

Bah, fà sempre piacere fare quattro chiacchiere su qualcosa che non si conosce. (detto _con poca_ ironia).

Il "main" è carenza di marketing. Poste le differenze esistenziali tra un linguaggio a tipi precotti come Scala rispetto al sushi del genere Python il fatto che sul sito sparino subito la cartuccia della classe su file è emblematico.

Mah, forse puntano non vogliono dolcificare la pillola, destinando il prodotto a chi già lo conosce - o ha reale necessità -.

C'è anche un interprete - che è un barbatrucco ma l'abito conta come il monaco anche perchè il monaco nudofa sempre un po' impressione.

Per fortuna mai visto:D

Nulla vieta di dire, ad esempio:

println("Hello World")

salvarlo in un file script.sc (l'estensione è ad libitum)

e lanciare il tutto con

scala script.sc

L'estensione ad libitum è una cosa che proprio non condivido. Per chiarezza dovrebbe richiedere una certa estensione, altrimenti cercando tra migliaia (nei casi più disperati) di file, non riesci a capire perchè ogni file ha una estensione diversa e a quale linguaggio si riferisce. Non mi và proprio giù un disordine simile - anche se, potresti correttamente dirmi, ti imponi una regola e boh, ma quando cerchi online un file scala o lavori su una sola parte del progetto? -

Dopo un venti-trenta minuti compare la scritta "Hello World". Ma si può anche lanciare l'interprete dinamico e digitare i comandi sul prompt del dos che fa tanto anni '80 (1880 ma va di moda).

Venti-trenta minuti ? Uhm... ragionevole per una scritta in output :mbe:

Una cosa che non mi è la mancanza delle eccezioni controllate di cui sono un particolare adoratore.

Ne convengo pienamente, nel senso che le adoro.

Ah, dimenticavo. La documentazione rivaluta il concetto di schifo. Ho già detto che Scala mi piace, vero? Non vorrei che sembrasse il contrario...
LOL
Comunque capisco pienamente cosa passi... te lo dice uno che ha lavorato con twisted (un network engine scritto in python), bellissimo davvero, ma la documentazinoe è veramente nulla. Copre solo le basi e le varie funzioni - molte delle quali nemmeno documentate nel codice -
Ma almeno è Python - chiaro -.

Si, dovresti averlo detto - che ti piace- pochi post più sopra :D.

Byz!

cdimauro
21-08-2009, 08:33
Niente, non riesco proprio a farmela digerire la sintassi di questo linguaggio: è troppo lontana dai canoni di leggibilità a cui sono abituato.

Comunque debbo dire che è di gran lunga meno verboso rispetto a Java, anche se mi sembra una sorta di rielaborazione di questo linguaggio in chiave funzionale.

La domanda, però, sorge spontanea: come può un "purista" delle prospettive apprezzare un linguaggio che ne fonde due (per giunta così diverse)? :stordita:

PGI-Bis
21-08-2009, 13:25
Anche a Rossum non aggrada (http://neopythonic.blogspot.com/2008/11/scala.html) ma se non ho capito male per ragioni di sintassi vale a dire che il fatto di poter scrivere ad esempio:

package combinator

object Grammar {

def letter = Terminal("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") any
def digit = Terminal("1234567890") any
def identifier = letter and (letter or digit) zeroOrMoreTimes
def intLiteral = (digit and digit) zeroOrMoreTimes
def kwWhile = Terminal("while")
}

omettendo cioè un sacco di cose per un linguaggio staticamente tipato deriva da un insieme di piccole "opzioni" sintattiche ognuna delle quali è relativamente facile da capire ma che nel loro insieme formano una trama a suo dire complessa.

Circa l'aspetto funzionale pur apprezzandone la riassuntività in certe occasioni, resto dell'idea che sia una grandissima stupidata. Dubito tuttavia che questo ne limiterà la diffusione. In fondo ho sempre ritenuto Java EE una corbelleria. Direi di essere un pessimo profeta.

Apprezzo la parte di Scala che permette di creare definizioni e convivo con la restante.

cdimauro
21-08-2009, 20:48
Il problema di Scala è che ci sono davvero troppe regole di cui tener conto, che portano ad aumentare la complessità del linguaggio rendendolo anche meno leggibile e più suscettibile a commettere errori (vedi l'esempio degli effetti delle parentesi graffe e tonde).

E' il nocciolo della questione e ciò che condivido delle opinioni espresse da Guido su questo linguaggio.

arcer
21-08-2009, 21:05
Il problema di Scala è che ci sono davvero troppe regole di cui tener conto, che portano ad aumentare la complessità del linguaggio rendendolo anche meno leggibile e più suscettibile a commettere errori (vedi l'esempio degli effetti delle parentesi graffe e tonde).

E' il nocciolo della questione e ciò che condivido delle opinioni espresse da Guido su questo linguaggio.

ho una domanda ma questo scala a cosa mira?

nel senso quali potrebbero essere i suoi utilizzi? general-purpose?




fa cagare a quanto vedo dalle vostre impressioni

PGI-Bis
21-08-2009, 21:26
Io lo trovo magnifico, di gran lunga superiore a qualsiasi altra alternativa oggi disponibile nel campo dei linguaggio orientati agli oggetti.

Mira a diventare il linguaggio di punta della JVM in sostituzione di Java (che io adoro ma il peso degli anni un po' lo sente).

E lo fa... "puttaneggiando" (un po' come Java fece a suo tempo con C e C++): se uno conosce Java o C# o C++ il passaggio a Scala è immediato, si tratta semplicemente di scrivere il tipo dopo il nome delle variabili e giusto uno zic sui costruttori delle classi.

Il vantaggio è poi quello di trovarsi per le mani uno strumento che sa essere dannatamente sofisticato.

E' probabilmente vero che non si tratti di uno strumento da "bimbominchia" perchè la presenza di una caratteristica implica necessariamente la sua conoscenza - puoi decidere di non usarla ma non puoi decidere che non ti capiti di manutenere del codice che la usa.

Ma è tutto così "omogeneo", così chiaramente integrato che ha quasi una sua estetica. Io pur vedendo la programmazione funzionale come fumo negli occhi a volte con Scala ci cado dentro senza accorgermene, perchè "non sembra funzionale". Poi appena riguadagnata un po' di lucidità cerco di cavarmene fuori al volo ma intanto, quasi quasi...

Comunque, giusto per dare un'idea della lingua, se questa è una classe Java:

public class Classe {
private String message = "hello world";

public void sayHello() {
System.out.println("hello world");
}
}

Questo è il suo omologo Scala:

class Classe {
private var message : String = "hello world";

def sayHello() : Unit = {
System.out.println("hello world");
}
}

All'atto pratico si tratta semplicemente di aggiungere un jar di 3 megabyte (scala-runtime.jar) alle librerie del programma Java che viene prodotto dalla compilazione con scalac.

cdimauro
21-08-2009, 21:38
ho una domanda ma questo scala a cosa mira?

nel senso quali potrebbero essere i suoi utilizzi? general-purpose?
Gli stessi di Java.
fa cagare a quanto vedo dalle vostre impressioni
Se Scala fa cacare, allora per Perl bisogna coniare un nuovo vocabolo. :asd:

No, Scala è un linguaggio estremamente versatile e condivido l'opinione di PGI. Semplicemente, come per tutte le cose, c'è a chi piace e chi lo trova indigesto. Questione di gusti, insomma.

Pensa che c'è perfino gente che adora Perl o PHP... :asd:

arcer
21-08-2009, 22:36
Gli stessi di Java.

Se Scala fa cacare, allora per Perl bisogna coniare un nuovo vocabolo. :asd:

No, Scala è un linguaggio estremamente versatile e condivido l'opinione di PGI. Semplicemente, come per tutte le cose, c'è a chi piace e chi lo trova indigesto. Questione di gusti, insomma.

Pensa che c'è perfino gente che adora Perl o PHP... :asd:

;) grazie per la risposta magari ci darò un occhiata ma ad oggi in campo lavorativo non è utilizzato immagino

PGI-Bis
21-08-2009, 22:48
Direi che non è usato. Non entro i confini nazionali che io sappia. E non è che all'estero lo stiano consumando.

Sul sito di scala:

www.scala-lang.org

aprono in prima pagina con grandi testimonianze d'affetto. Sony usa Scala, Twitter usa Scala, SAP usa Scala ma si sa che - Twitter a parte che c'ha scommesso su e via - più sono grossi e più tendono a diversificare, magari per progetti minori. Basta vedere Google che ormai raccatta tutto quello che trova.

E' pur sempre una new entry, la prima versione è del 2003 ma quella stabile è di due anni e mezzo fa.

Al momento comunque risulto l'unico sfigato del forum che l'abbia provato.

ANTICHI!!!!

:D

ndakota
22-08-2009, 11:08
Ho appena lanciato un hello world su eclipse. posso dire di averlo provato? :O

^TiGeRShArK^
22-08-2009, 11:17
Essendo poi un linguaggio anche funzionale si vede molto il for:

for(val i <- 0 to 1000)

ma nessuno che vada a puntualizzare:

occhio che questo crea una lista di 1000 elementi quindi non è la controparte del for imperativo.

:mbe:
Ma scusa...
possibile che non ci sia niente del tipo di xrange di python o di Enumerable.Range di LINQ che creano una lista generata dinamicamente e quindi non ti caricano 1000 elementi in memoria ma solo uno? :fagiano:

PGI-Bis
22-08-2009, 15:57
MMMhhhhh... sai che forse ho detto una stronzata? (tanto per cambiare).

Non che il for(i <- 0 to MAX) abbia prestazioni migiori ma dai sorgenti di Range ( "to" è un metodo di Int che prende come argomento un Int e restituisce un Range) è chiaro che non c'è alcuna lista: l'iterazione è in effetti realizzata con un while.

Ciònondimeno l'iterazione è circa 8 volte più lenta del corrispondente while. Dev'essere l'invocazione che fa precipitare le cose... Cioè il corpo del for funzionale è una funzione la cui invocazione è chiaramente più costosa rispetto all'esecuzione delle istruzioni contenute nel corpo del while.

Insomma fa schifo ma non per via della creazione della lista. Devo aggiornare l'altro post...