by

Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Antonio Gelameris
    @toniogela_twitter
    HOCON è così bello rispetto a Json <3
    Francesco Nigro
    @franz1981
    @lucamolteni non ho il codice del bench!
    sparalo :)
    Luca Molteni
    @lucamolteni
    eh manco io
    :D
    Francesco Nigro
    @franz1981
    @lucamolteni Allora non so se è corretto :D

    @felicepagano

    da quello che ricordo la creazione di un'instanza di un oggetto non è un' operazione atomica

    In realtà lo è (se almeno uno dei campi dell'instanza è final), ma relativamente a successive scritture: cioè se vi sono scritture successive di qualsiasi genere (magari facenti uso di dati dalla istanza appena creata) non possono essere percepite come antecedenti la creazione dell'istanza.
    O meglio ancora:
    x = new X();
    y = x;
    La scrittura y = x non può ricevere alcun valore corrotto di nessuno dei campti di x SE almeno uno di essi è final

    Francesco Nigro
    @franz1981
    Per chi fosse amante di prog concorrente: JCTools/JCTools#245
    Se tutto va bene la migliorerò nelle settimane prossime, ma dovrebbe essere giusta....
    Qualora dovesse essere veloce come sembra dai bench, la versione single consumer (tipica da event loop) dovrebbe finire in Akka o Netty, vedremo...
    Antonio Gelameris
    @toniogela_twitter
    Hello hello
    Nessuno scrive da un sacco oramai :(
    Luca Molteni
    @lucamolteni
    veramente
    siete andati a mangiare le braciole?
    Gian Carlo Pace
    @gicappa
    YES
    una cenetta light
    costine patate e birra
    Luca Molteni
    @lucamolteni
    grandi
    Andrea Peruffo
    @andreaTP
    Buongiorno a tutti amici javisti, ieri ho visto una cosa che mi ha fortemente spaventato e credo di non sapere piu' Java quindi chiedo supporto

    allora ho una classe:

    import io.atlassian.fugue.Either;
    
    public class E1 {
      public Either<Exception, String> example() {
        return Either.right("");
      }
    }

    e la estendo come:

    import io.atlassian.fugue.Either;
    
    public class E2 extends E1 {
    
      @Override
      public Either<String, Exception> example() {
        return Either.left(new Exception());
      }
    }

    notate che in E2 la signature del tipo di ritorno ha i generici invbertiti, e tutto cio' con mia enorme sorpresa compila

    la dipendenza e':

        <dependency>
          <groupId>io.atlassian.fugue</groupId>
          <artifactId>fugue</artifactId>
          <version>4.7.1</version>
        </dependency>

    con interfacce e classi definite da me nonn riesco a riprodurre

    Bradipo Developer
    @BradipoDev_twitter
    Ciao. Dunque, se non ricordo male nell'override dei metodi è consentito cambiare il tipo di ritorno sotto certe condizioni, una delle quali è che il secondo tipo sia una specializzazione del primo. Sinceramente non so come inquadrare un caso del genere :-)
    Francesco Nigro
    @franz1981
    Bè mi fa strano compili ma non così strano se consideriamo che i generics esistono solo a compile time..hai provato ad abilitare i compiler warns?
    Mi aspetterei che perlomeno qualcosa te la dica
    Felice Pagano
    @felicepagano
    io non riesco a compilarlo quel codice
    Francesco Nigro
    @franz1981
    Ci credo..dovrebbe arrabbiarsi (in teoria)
    Però è anche vero che forse può essere forzato
    credo che Either<X,Y> lo risolva come un Either
    raw type
    Andrea Peruffo
    @andreaTP
    Il compilatore e' felice gli IDE no
    e non riesco veramente a capire

    il pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.example</groupId>
      <artifactId>example</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>example</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>io.atlassian.fugue</groupId>
          <artifactId>fugue</artifactId>
          <version>4.7.1</version>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>

    e mvn compile

    Felice Pagano
    @felicepagano
    javac MainFUgue.java -cp ~/.m2/repository/io/atlassian/fugue/fugue/4.7.1/fugue-4.7.1.jar
    MainFUgue.java:23: error: example() in E2 cannot override example() in E1
        public Either<String, Exception> example() {
                                         ^
      return type Either<String,Exception> is not compatible with Either<Exception,String>
    MainFUgue.java:22: error: method does not override or implement a method from a supertype
        @Override
        ^
    MainFUgue.java:24: error: incompatible types: inference variable L has incompatible bounds
            return Either.left(new Exception());
                              ^
        equality constraints: String
        lower bounds: Exception
      where L,R are type-variables:
        L extends Object declared in method <L,R>left(L)
        R extends Object declared in method <L,R>left(L)
    3 errors
    Felice Pagano
    @felicepagano
    credo che dipenda dal fatto che maven, configurato in quel modo, imposti il language level alla versione 5 di default
    Felice Pagano
    @felicepagano
    l’unica discriminante che mi viene in mente è quella. poi perchè java 5 te lo faccia fare non saprei :D. a memoria in java 5 i generics non erano obbligatori, magari per questo motivo è più permissivo
    Andrea Peruffo
    @andreaTP
    @felicepagano ci ho messo un po' ma sono riuscito a replicare il tuo esempio, ma avendo le due classi dichiarate al top level (e.g. in un package in file separati) l'errore non esce
    sembra quindi che non sia mvn che fa qualcosa ....
    Felice Pagano
    @felicepagano
    @andreaTP lanciando maven sempre con un clean prima del compile?
    Alessio Stalla
    @alessiostalla
    @andreaTP sarebbe interessante vedere cosa riporta javap per E1.class e E2.class
    Andrea Peruffo
    @andreaTP
    @felicepagano hai vinto ancora :-) lanciando clean prima del compile l'errore viene riportato correttamente, quindi e' un "bug" nella gestione dell'incremental compiler in Maven
    Io lavoro soprattutto con Scala, davvero non mi aspettavo che la situazione in Maven potesse essere peggiore
    Felice Pagano
    @felicepagano
    nemmeno io che “ci lavoro” :D.
    sarà che lancio sempre il clean prima delle altre fasi però in effetti oggi questa cosa ha sorpreso anche me
    Andrea Peruffo
    @andreaTP
    giusto per completezza javap riporta fedele quanto viene dai file java:
    public class com.example.E2 extends com.example.E1 {
      public com.example.E2();
      public io.atlassian.fugue.Either<java.lang.String, java.lang.Exception> example();
    }
    Felice Pagano
    @felicepagano
    l’esclamazione è stata, ma perchè sta porcata?
    Andrea Peruffo
    @andreaTP
    e' da ieri che provavo a minimizzarlo :-)
    Alessio Stalla
    @alessiostalla
    Beh, se succede con la compilazione incrementale, dubito sia colpa (solo) di Maven. Probabilmente è javac che non controlla i generics tra due diverse compilation unit in certi casi.
    Andrea Peruffo
    @andreaTP
    questo e' possibile, ma davvero ancora la gente lancia sempre clean prima dei task in maven
    soooo 80s
    no dai 90s
    Alessio Stalla
    @alessiostalla
    Io quando faccio una build solitamente do mvn clean install. Ma per l'operatività normale lascio fare all'IDE.
    Felice Pagano
    @felicepagano
    in clean parte quando le cose non vanno e dovrebbero. o in questo caso non dovrebbero e vanno :D
    Andrea Peruffo
    @andreaTP
    :+1: