Mostra notizie nelle discussioni
  • Avatar
    ☺
    Scritto da
    altg
    utente che non utiene
    il 2014-09-18 04:56:55.0 alle 2014-09-18 04:56:55.0
    Trollate totali: 11540
    4.00 pre-alpha hello world
    L.in.oleum 4: ci sto lavorando.
    Si lascia alle spalle molte scelte sbagliate di ben 13 anni fa.

    A partire dal numero di registri, che con la loro emulazione dove non ce ne sono abbastanza passa dai miseri 5 delle altre versioni ai 26 attuali (uno per ogni lettera dell'alfabeto).

    Il compilatore comprende poi un assembler interno, invece del pacchetto d'istruzioni preassemblate con gli operandi da riempire, e la sintassi, meno permissiva ma appunto per questo piu` canonizzabile (si dira` poi cosi?), ha subito cambiamenti notevoli. Adesso e` piu` pulita e discorsiva. E` inoltre un linguaggio almeno parzialmente strutturato, con cicli e blocchi condizionali complessi (c'e` perfino un equivalente di switch-case, per giunta molto piu` flessibile: un costrutto che ho chiamato when...then).

    Ma la cosa buffa e` che il kickstart compiler, cioe` il compilatore che viene prima di quello scritto nel suo stesso linguaggio, e` scritto in... Javascript! E gira in un browser come front-end di un server NodeJS. Il server provvede a rispondere alle richieste del compilatore quando deve caricare una libreria, nonche` al link dell'eseguibile che poi fornisce in risposta al browser, come file da scaricare. Qui, con un po' di scena, c'e` come appare in Firefox a schermo intero e zoom al 200%:

    Immagine postata dall'utente

    E questo e` il primissimo hello world (scritto "a crudo", in assenza di qualsiasi libreria) che e` riuscito a compilare, linkare ed eseguire:

    Immagine postata dall'utente

    Di seguito il listato. Nella finestra del compilatore si possono vedere scorci della sua traduzione, da destra a sinistra, da L.in.oleum 4 alle corrispondenti istruzioni native, al corrispondente linguaggio macchina assemblato.

            message = 8 : { Hello_world! \}
            messageBytes eq 12
            messageUnits eq 4
    
    
            to Enter Text Mode
    
                    r = ik
                    r . displayStatus | engage
                    r . exec
    
                    leave
    
    
            to Swap n Units At p
    
                    --> m                                   (save register m)
    
                    n times
    
                            m = P           (11223344)      (put copy #1 of sample value into m)
                            r = m           (11223344)      (put copy #2 of sample value into q)
                            m [ 8           (22334411)      (copy #1 rotates 8 bits left)
                            r ] 8           (44112233)      (copy #2 rotates 8 bits right)
                            m & 00FF00FFh   (00330011)      (bytes #1 and #3 are zeroed in copy #1)
                            r & FF00FF00h   (44002200)      (bytes #2 and #4 are zeroed in copy #2)
                            m | r           (44332211)      (merge copies with a bit-wise OR)
                            P = m           (44332211)      (write back sample value)
                            p + 1                           (access next unit to reverse bytes of)
    
                    <-- m                                   (restore register m)
    
                    leave
    
    
            to Print Message m Of n Bytes
    
                    r = ik
                    r . fileCommand = writeFile
                    r . fileName = stdOut
                    r . fileBlockPointer = m
                    r . fileBlockSize = n
                    r . exec
    
                    leave
    
    
            to Wait n Milliseconds
    
                    r = n
                    n = ik
                    n . suspend
    
                    leave
    
    
            to Begin
    
                    Enter Text Mode
                    Swap messageUnits Units At message
                    Print Message message Of messageBytes Bytes
                    Wait 10000 Milliseconds
    


    Non vi sto a spiegare tutto nei dettagli senno` finisco di scrivere l'anno prossimo. Comunque e` per dire: pian pianino, sta procedendo. Ma poi neanche tanto pianino, visto che ho ripreso a lavorarci da un paio di settimane... pero` e` ancora lunghetta. Piu` o meno a livello di parser c'e` tutto, il "canovaccio" e` pronto: manca solo una fraccata di funzioni per l'assemblaggio di istruzioni, e qualche modifica alla gestione dei threads nel modulo di runtime.
    • Avatar
      Scritto da
      Non Autenticato
      il 2014-09-18 09:21:13.0 alle 2014-09-18 09:21:13.0
      Re: 4.00 pre-alpha hello world
      Scritto da: altg
      >
      > Non vi sto a spiegare tutto nei dettagli senno` finisco di scrivere l'anno prossimo. Comunque e` per dire: pian pianino, sta procedendo. Ma poi neanche tanto pianino, visto che ho ripreso a lavorarci da un paio di settimane... pero` e` ancora lunghetta. Piu` o meno a livello di parser c'e` tutto, il "canovaccio" e` pronto: manca solo una fraccata di funzioni per l'assemblaggio di istruzioni, e qualche modifica alla gestione dei threads nel modulo di runtime.

      A quanto pare la stanzetta iphone style con illiminazione chirurgica da i suoi frutti.
      • Avatar
        ☺
        Scritto da
        altg
        utente che non utiene
        il 2014-09-18 16:07:57.0 alle 2014-09-18 16:07:57.0
        Trollate totali: 11540
        Re: 4.00 pre-alpha hello world
        > > Non vi sto a spiegare tutto nei dettagli senno` finisco di scrivere l'anno prossimo. Comunque e` per dire: pian pianino, sta procedendo. Ma poi neanche tanto pianino, visto che ho ripreso a lavorarci da un paio di settimane... pero` e` ancora lunghetta. Piu` o meno a livello di parser c'e` tutto, il "canovaccio" e` pronto: manca solo una fraccata di funzioni per l'assemblaggio di istruzioni, e qualche modifica alla gestione dei threads nel modulo di runtime.
        >
        > A quanto pare la stanzetta iphone style con illiminazione chirurgica da i suoi frutti.

        Ah, dici che e` quella? Newbie, inesperto
        • Avatar
          Scritto da
          Non Autenticato
          il 2014-09-18 16:29:49.0 alle 2014-09-18 16:29:49.0
          Re: 4.00 pre-alpha hello world
          Scritto da: altg
          > > > Non vi sto a spiegare tutto nei dettagli senno` finisco di scrivere l'anno prossimo. Comunque e` per dire: pian pianino, sta procedendo. Ma poi neanche tanto pianino, visto che ho ripreso a lavorarci da un paio di settimane... pero` e` ancora lunghetta. Piu` o meno a livello di parser c'e` tutto, il "canovaccio" e` pronto: manca solo una fraccata di funzioni per l'assemblaggio di istruzioni, e qualche modifica alla gestione dei threads nel modulo di runtime.
          > >
          > > A quanto pare la stanzetta iphone style con illiminazione chirurgica da i suoi frutti.
          >
          > Ah, dici che e` quella? Newbie, inesperto


          Oh chi si vede, il michael knight di pisa Ficoso
          • Avatar
            ☺
            Scritto da
            altg
            utente che non utiene
            il 2014-09-18 18:37:33.0 alle 2014-09-18 18:37:33.0
            Trollate totali: 11540
            Re: 4.00 pre-alpha hello world
            > > > > Non vi sto a spiegare tutto nei dettagli senno` finisco di scrivere l'anno prossimo. Comunque e` per dire: pian pianino, sta procedendo. Ma poi neanche tanto pianino, visto che ho ripreso a lavorarci da un paio di settimane... pero` e` ancora lunghetta. Piu` o meno a livello di parser c'e` tutto, il "canovaccio" e` pronto: manca solo una fraccata di funzioni per l'assemblaggio di istruzioni, e qualche modifica alla gestione dei threads nel modulo di runtime.
            > > >
            > > > A quanto pare la stanzetta iphone style con illiminazione chirurgica da i suoi frutti.
            > >
            > > Ah, dici che e` quella? Newbie, inesperto
            >
            >
            > Oh chi si vede, il michael knight di pisa Ficoso

            Wow, come fai a sapere che ho ripiegato su una MX-5 perche` sarebbe stato un casino importare una Pontiac Trans-Am dell'82? Fantasma
    • Avatar
      Scritto da
      Non Autenticato
      il 2014-09-18 19:04:00.0 alle 2014-09-18 19:04:00.0
      Re: 4.00 pre-alpha hello world
      Scritto da: altg
      > L.in.oleum 4: ci sto lavorando.
      > Si lascia alle spalle molte scelte sbagliate di ben 13 anni fa.
      >
      > A partire dal numero di registri, che con la loro emulazione dove non ce ne sono abbastanza passa dai miseri 5 delle altre versioni ai 26 attuali (uno per ogni lettera dell'alfabeto).
      >
      > Il compilatore comprende poi un assembler interno, invece del pacchetto d'istruzioni preassemblate con gli operandi da riempire, e la sintassi, meno permissiva ma appunto per questo piu` canonizzabile (si dira` poi cosi?), ha subito cambiamenti notevoli. Adesso e` piu` pulita e discorsiva. E` inoltre un linguaggio almeno parzialmente strutturato, con cicli e blocchi condizionali complessi (c'e` perfino un equivalente di switch-case, per giunta molto piu` flessibile: un costrutto che ho chiamato when...then).
      >
      > Ma la cosa buffa e` che il kickstart compiler, cioe` il compilatore che viene prima di quello scritto nel suo stesso linguaggio, e` scritto in... Javascript! E gira in un browser come front-end di un server NodeJS. Il server provvede a rispondere alle richieste del compilatore quando deve caricare una libreria, nonche` al link dell'eseguibile che poi fornisce in risposta al browser, come file da scaricare. Qui, con un po' di scena, c'e` come appare in Firefox a schermo intero e zoom al 200%:
      >
      > Immagine postata dall'utente
      >
      > E questo e` il primissimo hello world (scritto "a crudo", in assenza di qualsiasi libreria) che e` riuscito a compilare, linkare ed eseguire:
      >
      > Immagine postata dall'utente
      >
      > Di seguito il listato. Nella finestra del compilatore si possono vedere scorci della sua traduzione, da destra a sinistra, da L.in.oleum 4 alle corrispondenti istruzioni native, al corrispondente linguaggio macchina assemblato.
      >
      >
      > message = 8 : { Hello_world! \}
      > messageBytes eq 12
      > messageUnits eq 4
      > 
      > 
      > to Enter Text Mode
      > 
      > r = ik
      > r . displayStatus | engage
      > r . exec
      > 
      > leave
      > 
      > 
      > to Swap n Units At p
      > 
      > --> m                                   (save register m)
      > 
      > n times
      > 
      > m = P           (11223344)      (put copy #1 of sample value into m)
      > r = m           (11223344)      (put copy #2 of sample value into q)
      > m [ 8           (22334411)      (copy #1 rotates 8 bits left)
      > r ] 8           (44112233)      (copy #2 rotates 8 bits right)
      > m & 00FF00FFh   (00330011)      (bytes #1 and #3 are zeroed in copy #1)
      > r & FF00FF00h   (44002200)      (bytes #2 and #4 are zeroed in copy #2)
      > m | r           (44332211)      (merge copies with a bit-wise OR)
      > P = m           (44332211)      (write back sample value)
      > p + 1                           (access next unit to reverse bytes of)
      > 
      > <-- m                                   (restore register m)
      > 
      > leave
      > 
      > 
      > to Print Message m Of n Bytes
      > 
      > r = ik
      > r . fileCommand = writeFile
      > r . fileName = stdOut
      > r . fileBlockPointer = m
      > r . fileBlockSize = n
      > r . exec
      > 
      > leave
      > 
      > 
      > to Wait n Milliseconds
      > 
      > r = n
      > n = ik
      > n . suspend
      > 
      > leave
      > 
      > 
      > to Begin
      > 
      > Enter Text Mode
      > Swap messageUnits Units At message
      > Print Message message Of messageBytes Bytes
      > Wait 10000 Milliseconds
      > 

      >
      > Non vi sto a spiegare tutto nei dettagli senno` finisco di scrivere l'anno prossimo. Comunque e` per dire: pian pianino, sta procedendo. Ma poi neanche tanto pianino, visto che ho ripreso a lavorarci da un paio di settimane... pero` e` ancora lunghetta. Piu` o meno a livello di parser c'e` tutto, il "canovaccio" e` pronto: manca solo una fraccata di funzioni per l'assemblaggio di istruzioni, e qualche modifica alla gestione dei threads nel modulo di runtime.

      Questo post è una pietra miliare, lo salvo subito.
      • Avatar
        ☺
        Scritto da
        altg
        utente che non utiene
        il 2014-09-18 19:32:56.0 alle 2014-09-18 19:32:56.0
        Trollate totali: 11540
        Re: 4.00 pre-alpha hello world
        > Questo post è una pietra miliare, lo salvo subito.

        Potrebbe essere vero quello che dici. Ficoso
        Ah, nella "pietra miliare" c'era pero` un piccolo errore in un commento:

        dove dice "put copy #2 of sample value into q"

        in realta` lo mette nel registro r quindi dovrebbe finire con "into r". E` solo un commento (la roba tra parentesi e` un commento), sicche` non influisce sul funzionamento del programma, ma sbaglia a spiegare cosa fa l'istruzione a cui si riferisce. In origine usava il registro q, ma mentre ripensavo a scorciare un po' l'esempio m'e` venuto in mente che q doveva essere salvato (in quel caso e` un registro callee-saved perche` non e` tra gli argomenti, cioe` i registri che ricevono i parametri della chiamata, che in quel caso sono n e p ) mentre r e` il registro "spare", cioe` una specie di registro temporaneo che non c'e` mai bisogno di salvare, quindi usando r al posto di q potevo risparmiare di usare la push (--> q) all'inizio e la pop (<-- q) alla fine. Poi pero` ho corretto il codice ma mi son scordato di correggere il commento.

        I registri... be', a proposito, quelli che si trovano su tutte le architetture come registri VERI, non memory-mapped (cioe` emulati), sono m, n, p, q, r, s, v, w. I nomi sono vagamente legati alla loro funzione, ma essenzialmente per i primi 4 questo legame e` solo indicativo e i primi 4 sono in pratica general-purpose. Su x86/IA-32 le equivalenze sono:

        m = EAX (maschera o accumulatore)
        n = ECX (contatore di rotazione binaria, contatore generico)
        p = EDX (puntatore primario)
        q = EBX (puntatore secondario)
        r = ESI (riserva, ausiliario nelle indirezioni con registri emulati)
        s = ESP (stack pointer, appunto: puntatore alla cima dello stack)
        v = EBP (vicinity pointer: puntatore alla base del local frame)
        w = EDI (workbench pointer: puntatore alla base dei dati thread-local)

        Insomma v indirizza le variabili locali di una inlet (una "inlet" e` il nome generico di qualcosa che puo` essere una subroutine, funzione, o metodo d'interfaccia, a seconda di come si comporta in pratica), mentre w indirizza le variabili globali (che diventano thread-local in modo che ogni thread abbia la sua copia della variabile). Ci sono un'infinita` di alchimie e acrobazie che si possono fare come vantaggi del register naming manuale, per esempio se una inlet non ha bisogno di variabili locali (perche` gli bastano i registri) potrebbe liberare v salvandolo sullo stack e poi usarlo come registro generico; se non ha bisogno di accedere alle globali puo` liberare w e ottenere ancora un altro registro libero. Lo stack pointer ovviamente e` intoccabile, ma quello e` normale che lo sia: e` accessibile a livello di sintassi e si chiama davvero s, pero` bisogna sapere esattamente quel che si fa con quello, altrimenti il crash e` garantito. Ma in totale i registri usabili quando ne servono parecchi sono fino a 7 garantiti. Usare quelli memory-mapped (che non funzionano se si altera il registro w) e` un ripiego d'emergenza, ma su architetture piu` popolose di registri esisterebbero comunque davvero. I memory-mapped sono indicati da tutti gli altri simboli di una lettera: a, b, c, d, e, f, g, h, i, j, k, l, o, t, u, x, y, z.

        Ah, per concludere, ad r sono attribuiti un paio di altri ruoli: e` il registro in cui viene depositato il valore di ritorno di una funzione, ed e` anche il registro in cui viene caricato il puntatore al contesto di una inlet context-bound; le inlet context-bound sono chiamate in closure: assieme alla inlet viene legato un blocco di memoria, il contesto, che contiene gli upvalues.

        **Modificato dall'autore il 18.09.2014 19:47**
        • Avatar
          Scritto da
          Non Autenticato
          il 2014-09-18 19:37:50.0 alle 2014-09-18 19:37:50.0
          Re: 4.00 pre-alpha hello world
          Scritto da: altg
          > > Questo post è una pietra miliare, lo salvo subito.
          >
          > Potrebbe essere vero quello che dici. Ficoso
          > Ah, nella "pietra miliare" c'era pero` un piccolo errore in un commento:

          Ah beh, tanto non me n'ero accorto.

          > dove dice "put copy #2 of sample value into q"
          >
          > in realta` lo mette nel registro r quindi dovrebbe finire con "into r". E` solo un commento (la roba tra parentesi e` un commento), sicche` non influisce sul funzionamento del programma, ma sbaglia a spiegare cosa fa l'istruzione a cui si riferisce. In origine usava il registro q, ma mentre ripensavo a scorciare un po' l'esempio m'e` venuto in mente che q doveva essere salvato (in quel caso e` un registro callee-saved perche` non e` tra gli argomenti, cioe` i registri che ricevono i parametri della chiamata, che in quel caso sono n e Pirata mentre r e` il registro "spare", cioe` una specie di registro temporaneo che non c'e` mai bisogno di salvare, quindi usando r al posto di q potevo risparmiare di usare la push (--> q) all'inizio e la pop (<-- q) alla fine. Poi pero` ho corretto il codice ma mi son scordato di correggere il commento.
          >
          > I registri... be', a proposito, quelli che si trovano su tutte le architetture come registri VERI, non memory-mapped (cioe` emulati), sono m, n, p, q, r, s, v, w. I nomi sono vagamente legati alla loro funzione, ma essenzialmente per i primi 4 questo legame e` solo indicativo e i primi 4 sono in pratica general-purpose. Su x86/IA-32 le equivalenze sono:
          >
          > m = EAX (maschera o accumulatore)
          > n = ECX (contatore di rotazione binaria, contatore generico)
          > p = EDX (puntatore primario)
          > q = EBX (puntatore secondario)
          > r = ESI (riserva, ausiliario nelle indirezioni con registri emulati)
          > s = ESP (stack pointer, appunto: puntatore alla cima dello stack)
          > v = EBP (vicinity pointer: puntatore alla base del local frame)
          > w = EDI (workbench pointer: puntatore alla base dei dati thread-local)
          >
          > Insomma v indirizza le variabili locali di una inlet (una "inlet" e` il nome generico di qualcosa che puo` essere una subroutine, funzione, o metodo d'interfaccia, a seconda di come si comporta in pratica), mentre w indirizza le variabili globali (che diventano thread-local in modo che ogni thread abbia la sua copia della variabile). Ci sono un'infinita` di alchimie e acrobazie che si possono fare come vantaggi del register naming manuale, per esempio se una inlet non ha bisogno di variabili locali (perche` gli bastano i registri) potrebbe liberare v salvandolo sullo stack e poi usarlo come registro generico; se non ha bisogno di accedere alle globali puo` liberare w e ottenere ancora un altro registro libero. Lo stack pointer ovviamente e` intoccabile, ma quello e` normale che lo sia.

          Una volta finitolo, come pensi di diffonderlo e invadere il mondo?
          • Avatar
            ☺
            Scritto da
            altg
            utente che non utiene
            il 2014-09-18 19:50:12.0 alle 2014-09-18 19:50:12.0
            Trollate totali: 11540
            Re: 4.00 pre-alpha hello world
            > Una volta finitolo, come pensi di diffonderlo e invadere il mondo?

            Il povero L.in.oleum 1 e` sempre stato attraente, ma a forza di disfarlo e rifarlo nelle versioni successive ho scoraggiato tutti dall'usarlo, cosa che non mi stupisce ma che non considero un peccato, visto che cosi` ho potuto migliorarlo senza espanderlo a forza di rattoppi incoerenti in stile PHP. Quindi la strategia per diffonderlo una volta finito si riassume in: pubblicalo su anynowhere, aggiorna o lascia che qualcuno aggiorni l'articolo su wikipedia, attendi che si diffonda e LASCIALO STARE. A bocca aperta
            • Avatar
              Scritto da
              Non Autenticato
              il 2014-09-18 20:52:33.0 alle 2014-09-18 20:52:33.0
              Re: 4.00 pre-alpha hello world
              Scritto da: altg
              > > Una volta finitolo, come pensi di diffonderlo e invadere il mondo?
              >
              > Il povero L.in.oleum 1 e` sempre stato attraente, ma a forza di disfarlo e rifarlo nelle versioni successive ho scoraggiato tutti dall'usarlo, cosa che non mi stupisce ma che non considero un peccato, visto che cosi` ho potuto migliorarlo senza espanderlo a forza di rattoppi incoerenti in stile PHP. Quindi la strategia per diffonderlo una volta finito si riassume in: pubblicalo su anynowhere, aggiorna o lascia che qualcuno aggiorni l'articolo su wikipedia, attendi che si diffonda e LASCIALO STARE. A bocca aperta

              Accompagnalo almeno con due righe in cui giuri che si tratta di una versione definitiva e le successive saranno mere migliorie retrocompatibili.
              • Avatar
                ☺
                Scritto da
                altg
                utente che non utiene
                il 2014-09-18 22:14:07.0 alle 2014-09-18 22:14:07.0
                Trollate totali: 11540
                Re: 4.00 pre-alpha hello world
                > > > Una volta finitolo, come pensi di diffonderlo e invadere il mondo?
                > >
                > > Il povero L.in.oleum 1 e` sempre stato attraente, ma a forza di disfarlo e rifarlo nelle versioni successive ho scoraggiato tutti dall'usarlo, cosa che non mi stupisce ma che non considero un peccato, visto che cosi` ho potuto migliorarlo senza espanderlo a forza di rattoppi incoerenti in stile PHP. Quindi la strategia per diffonderlo una volta finito si riassume in: pubblicalo su anynowhere, aggiorna o lascia che qualcuno aggiorni l'articolo su wikipedia, attendi che si diffonda e LASCIALO STARE. A bocca aperta
                >
                > Accompagnalo almeno con due righe in cui giuri che si tratta di una versione definitiva e le successive saranno mere migliorie retrocompatibili.

                L'avevo gia` giurato per la versione 1, non sarei credibile. Imbarazzato
                • Avatar
                  Scritto da
                  Non Autenticato
                  il 2014-09-18 22:22:45.0 alle 2014-09-18 22:22:45.0
                  Re: 4.00 pre-alpha hello world
                  Scritto da: altg
                  > > > > Una volta finitolo, come pensi di diffonderlo e invadere il mondo?
                  > > >
                  > > > Il povero L.in.oleum 1 e` sempre stato attraente, ma a forza di disfarlo e rifarlo nelle versioni successive ho scoraggiato tutti dall'usarlo, cosa che non mi stupisce ma che non considero un peccato, visto che cosi` ho potuto migliorarlo senza espanderlo a forza di rattoppi incoerenti in stile PHP. Quindi la strategia per diffonderlo una volta finito si riassume in: pubblicalo su anynowhere, aggiorna o lascia che qualcuno aggiorni l'articolo su wikipedia, attendi che si diffonda e LASCIALO STARE. A bocca aperta
                  > >
                  > > Accompagnalo almeno con due righe in cui giuri che si tratta di una versione definitiva e le successive saranno mere migliorie retrocompatibili.
                  >
                  > L'avevo gia` giurato per la versione 1, non sarei credibile. Imbarazzato

                  La versione 1 non poteva essere retrocompatibile, a meno che non ci sia stata una versione 0.
                  • Avatar
                    Scritto da
                    Non Autenticato
                    il 2014-09-18 22:23:36.0 alle 2014-09-18 22:23:36.0
                    Re: 4.00 pre-alpha hello world
                    Scritto da:
                    > Scritto da: altg
                    > > > > > Una volta finitolo, come pensi di diffonderlo e invadere il mondo?
                    > > > >
                    > > > > Il povero L.in.oleum 1 e` sempre stato attraente, ma a forza di disfarlo e rifarlo nelle versioni successive ho scoraggiato tutti dall'usarlo, cosa che non mi stupisce ma che non considero un peccato, visto che cosi` ho potuto migliorarlo senza espanderlo a forza di rattoppi incoerenti in stile PHP. Quindi la strategia per diffonderlo una volta finito si riassume in: pubblicalo su anynowhere, aggiorna o lascia che qualcuno aggiorni l'articolo su wikipedia, attendi che si diffonda e LASCIALO STARE. A bocca aperta
                    > > >
                    > > > Accompagnalo almeno con due righe in cui giuri che si tratta di una versione definitiva e le successive saranno mere migliorie retrocompatibili.
                    > >
                    > > L'avevo gia` giurato per la versione 1, non sarei credibile. Imbarazzato
                    >
                    > La versione 1 non poteva essere retrocompatibile, a meno che non ci sia stata una versione 0.

                    Uff ho scritto un'insensaggine, è meglio che vada a dormire.
                    • Avatar
                      ☺
                      Scritto da
                      altg
                      utente che non utiene
                      il 2014-09-18 23:00:22.0 alle 2014-09-18 23:00:22.0
                      Trollate totali: 11540
                      Re: 4.00 pre-alpha hello world
                      > > > > > > Una volta finitolo, come pensi di diffonderlo e invadere il mondo?
                      > > > > >
                      > > > > > Il povero L.in.oleum 1 e` sempre stato attraente, ma a forza di disfarlo e rifarlo nelle versioni successive ho scoraggiato tutti dall'usarlo, cosa che non mi stupisce ma che non considero un peccato, visto che cosi` ho potuto migliorarlo senza espanderlo a forza di rattoppi incoerenti in stile PHP. Quindi la strategia per diffonderlo una volta finito si riassume in: pubblicalo su anynowhere, aggiorna o lascia che qualcuno aggiorni l'articolo su wikipedia, attendi che si diffonda e LASCIALO STARE. A bocca aperta
                      > > > >
                      > > > > Accompagnalo almeno con due righe in cui giuri che si tratta di una versione definitiva e le successive saranno mere migliorie retrocompatibili.
                      > > >
                      > > > L'avevo gia` giurato per la versione 1, non sarei credibile. Imbarazzato
                      > >
                      > > La versione 1 non poteva essere retrocompatibile, a meno che non ci sia stata una versione 0.
                      >
                      > Uff ho scritto un'insensaggine, è meglio che vada a dormire.

                      Non e` grave. Um... magari poi potrei anche provare a ri-giurarlo, puo` darsi che se la ribevan... che riesca anche a mantenere, stavolta.
<softv>

Pagina generata in 113 millisecondi

Utenti attivi: 9 nell'ultimo minuto, 24 negli ultimi cinque minuti, 38 negli ultimi 15 minuti