Developpez.com - Rubrique PureBasic

Le Club des Développeurs et IT Pro

SpiderBasic 1.30 est sorti

Parmi les nouveautés à noter l'accès à GoogleDrive

Le 2016-03-24 19:41:40, par comtois, Responsable Purebasic
SpiderBasic 1.30 est sorti, cette version comporte les nouveautés suivantes :

23th march 2016 : Version 1.30

- Ajouté : DisableWindow(), AddKeyboardShortcut(), RemoveKeyboardShortcut()
- Ajouté : OpenFile(), GetWindowColor(), SetWindowColor()
- Ajouté : CountProgramParameters() and ProgramParameter() to get URL params
- Ajouté : #PB_Mouse_Locked and #PB_Mouse_Unlocked support for InitMouse()
- Ajouté : UseGoogleDrive() to access google drive remote files in read and write mode
- Ajouté : #PB_GoogleDriveFile support to ReadFile(), CreateFile() and OpenFileRequester()
- Ajouté : flag parameter to ExportFile() to support GoogleDrive
- Ajouté : #PB_Canvas_Transparent flag for CanvasGadget() to have transparent canvas.

- Modifié : Added a callback parameter to CreateFile()
- Modifié : in the IDE, compiler option server port now needs the server address as well.
- Modifié : NextSelectedFilename() replaced by NextSelectedFile() and SelectedFilename()/SelectedFileID()

- Mis à jour : SoundJS to 0.6.2 and PixiJS to 3.0.10

- Corrigé : divers correctifs de bogues


À noter parmi ces nouveautés l'accès à GoogleDrive.

Vous pouvez télécharger la version 1.30 sur votre compte ou tester la version démo (gratuite, complète et limitée à 800 lignes de code).

Télécharger

Source : SpiderBasic

Voir aussi

Forum SpiderBasic
  Discussion forum
9 commentaires
  • dorian833
    Membre averti
    Heureux de voir PureBasic toujours vivant

    Le second (après le PSION basic) langage de programmation qui m'a permis de découvrir la programmation il y a une bonne dizaine d'années avant même que je puisses imaginer que j'en ferais mon metier
  • comtois
    Responsable Purebasic
    C'est dommage que tu parles de PureBasic sur le forum de SpiderBasic.
    Peu importe, tout avis est bon à prendre

    Concernant la syntaxe c'est une question de goût, donc là je n'ai rien à dire. Par contre ton exemple me semble un peu lourd , tu pourrais l'écrire ainsi (sauf erreur de ma part) :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Procedure.l BuildRequestHeader(*Buffer, DataLength, ContentType$)
      Chaine$ =   "HTTP/1.1 200 OK"+EOL$ + 
                      "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$ + 
                      "Server: Atomic Web Server 0.2b"+EOL$ + 
                      "Content-Length: "+Str(DataLength)+EOL$ +
                      "Content-Type: "+ContentType$+EOL$ +
                      EOL$
      
      PokeS(*Buffer, Chaine$)
     
      ProcedureReturn *Buffer
    EndProcedure
    Je ne comprends pas ton problème avec ton deuxième exemple, je ne vois pas ce que tu veux démontrer, la syntaxe devrait être comment pour te convenir ?

    Ensuite je ne comprends pas ta remarque sur la lecture d'un fichier Json , tu parles de javascript et de Python ? tu ne montres pas comment le faire avec PureBasic ou SpiderBasic.
    Pour info avec PureBasic ou SpiderBNasic c'est aussi simple que ça :

    Code :
    LoadJSON(#JSON, FileName$ [, Flags])
    Aide en ligne pour la bibliothèque Json PureBasic :
    http://www.purebasic.com/french/documentation/json/loadjson.html
    Aide en ligne pour la bibliothèque Json SpiderBasic :
    http://www.spiderbasic.com/documentation/json/loadjson.html
  • patmaba
    Membre actif
    C'est purebasic en mode web
  • SurferIX
    Membre chevronné
    Quel dommage que la syntaxe de PureBasic soit aussi peu lisible : j'ai pris l'habitude de lire/écrire du Python, et PureBasic est tellement rapide que je meurs d'envie de voir un PureBasic, avec toutes ses mêmes fonctionnalités, mais ayant une syntaxe "à la" python.

    Quand je lance PureBasic, j'appuie sur "entrée", hop l'éditeur est instantanément affiché (O.o)
    Je charge les programmes d'exemple, je les lance, c'est tellement rapide que je ne croyais pas que c'était compilé quand je l'ai essayé, c'est pour cela que je l'ai acheté.
    Après... dès que tu pousse et que tu veux écrire pas mal de choses, la syntaxe rend malheureusement illisible, donc impossible à maintenir, un programme. Quel dommage ! Tous les 2-3 mois, je le relance, je bave devant sa rapidité, je fais la mise à jour, je ré-essaie un ou deux exemples, et je quitte... quelle frustration, passer si près d'un truc génial et tout perdre pour ça.

    Exemple de code :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Procedure.l BuildRequestHeader(*Buffer, DataLength, ContentType$)
    
      Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length
      Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$) : *Buffer+Length
      Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$)      : *Buffer+Length
      Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length
      Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length
      Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length
    
      ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10)  , *Buffer) : *Buffer+Length
      ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$                 , *Buffer) : *Buffer+Length
      ; Length = PokeS(*Buffer, "Connection: close"+EOL$) : *Buffer+Length
    
      ProcedureReturn *Buffer
    EndProcedure
    Ou encore :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
          If RequestedFile$ = ""
            RequestedFile$ = DefaultPage$
          Else
            *t.tmp = @RequestedFile$
            While *t\a <> 0
              If *t\a = '/' : *t\a = '\' : EndIf
              *t+1
            Wend
          EndIf
    Ce n'est pas compréhensible du tout... tu me diras, pour lire un fichier json en JavaScript, et rester à la mode en utilisant ce qu'on appelle le "Functional reactive style" :

    Code :
    1
    2
    3
    var data = Bacon.fromNodeCallback(fs.readFile, "data.json", "utf8").map(function(event){
       return JSON.parse(event);
    }).toProperty();
    Là aussi on est tout de même loin, très très loin de :

    Code :
    1
    2
    3
    import json
    with open('data.json') as data_file:    
        data = json.load(data_file)
    (Non je ne suis pas avocat Python, je suis avocat de la simplicité, et je pense qu'en repensant à peine PureBasic, on peut en faire un produit exceptionnel et ça me frustre de voir qu'il est à un cheveux d'être exceptionnel, et ce cheveu fait qu'il reste "sympa".
  • SurferIX
    Membre chevronné
    Les codes PureBasic sont des copier/coller des exemples fournis avec PureBasic je n'ai rien inventé du tout, donc si le code est mauvais cela implique que le code des exemples est mauvais...

    Quant à mon deuxième exemple, le principe est :

    Code :
    1
    2
    3
    4
    5
            *t.tmp = @RequestedFile$ 
            While *t\a <> 0 
              If *t\a = '/' : *t\a = '\' : EndIf 
              *t+1 
            Wend
    Trouve tu vraiment cela lisible ? Ensuite j'ai dérivé dans le monde du Web en disant que partout on était content de trouver de nouvelles choses qui ne simplifiaient en rien la vie, alors que justement, il ne faut pas rendre les choses complexes, mais il faut les rendre simples. Et je me suis moqué d'un des livres dont je fais la revue technique, qui s'appelle "Modern JavaScript Applications" (bouquin anglais) et qui explique que c'est génial d'écrire un chargement de fichier façon "Functional reactive style" alors que bordel, NON, c'est bien plus compliqué à lire que 3 lignes Python.

    Voici le code juste au dessus écrit en Python :
    Code :
    t.a = t.a.replace('/', '\')
    J'exagère à peine, mais pas loin. Maintenant, en extrapolant avec un code de 2000 lignes, tu arrive à du code qui ressemble à ça, qui est un de mes codes C, mais tu y arriveras en moins lisible :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        tag_groupe_dst = (idx_a < idx_b ? tag_groupe_a : tag_groupe_b); 
        for (i = 0; i < psrc->len; i++) { 
            psrc->tab[i]->tag = tag_groupe_dst; 
        } 
        /* Allocation dst = (taille dst + taille src) : */ 
        tab_tmp = 
            (struct cell **) realloc(pdst->tab, 
                                     (pdst->len + psrc->len) * 
                                     sizeof(struct cell *)); 
        if (tab_tmp == NULL) { 
            snprintf(buffer_erreur, sizeof(buffer_erreur) - 1, 
                     "Erreur de ré-allocation d\'un groupe, " 
                     "plus assez de mémoire"); 
            return -1; 
        } 
        pdst->tab = tab_tmp;
    Je sais que ce code, que j'ai écris il y a un an, j'ai dû me faire plein de commentaires détaillés, et ce n'est pas suffisant, si je dois le reprendre, je vais galérer.
    En Python, voici un code qui a quatre ans :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        going = True 
        while going: 
            clock.tick(60) 
            for event in pygame.event.get(): 
                if event.type == QUIT: 
                    going = False 
                elif event.type == KEYDOWN: 
                    if event.key == K_ESCAPE: 
                        going = False 
                    elif event.key == K_q: 
                        going = False 
                    elif event.key == K_RETURN: 
                        going = False
    C'est toujours hyper lisible, et rien qu'en le relisant je comprends parfaitement ce qu'il fait. C'est dans ce sens là que j'essaie de m'exprimer : il est possible avec PureBasic et comme SpideBasic s'en inspire fortement, ça le concerne aussi, d'avoir quelque chose d'ultra puissant, mais pas maintenable, et à mon sens, c'est là que le bât blesse et c'est pour cela qu'il n'attire pas, et pour cela que je ne me penche pas plus en avant.
    Exemple : pourquoi des antislashes et pas des slashes, ou des points ? Pourquoi la première lettre en majuscule alors qu'absolument aucun autre langage n'a un mot clé avec sa première lettre en majuscule.
    Exemple d'origine :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Structure Quake3Mods 
      Alias.s 
      NomReel.s 
      Version.s 
    EndStructure 
     
    NewList Mods.Quake3Mods() 
     
    If ReadFile(0, "Quake3Launcher.prefs") 
     
      While Eof(0) = 0 
     
        AddElement(Mods()) 
        Mods()\Alias   = ReadString(0) 
        Mods()\NomReel = ReadString(0) 
        Mods()\Version = ReadString(0) 
     
      Wend
    Avec des "points" :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    structure Quake3Mods 
      Alias.s 
      NomReel.s 
      Version.s 
    ends 
     
    newList Mods.Quake3Mods() 
     
    if ReadFile(0, "Quake3Launcher.prefs") 
      while Eof(0) = 0 
        addElement(Mods()) 
        mods().Alias   = ReadString(0) 
        mods().NomReel = ReadString(0) 
        mods().Version = ReadString(0) 
     
      wend
    etc c'est juste une suggestion, mais la lisibilité d'un langage est d'abord sa nature première, et ça incite / ou pas / à aller vers ce langage. Les "->" aussi, comme en Php, C++, ou C permettent de bien séparer les éléments/structures et de les rendre plus lisibles.

    Bref je pense sincèrement que le PureBasic a un gros potentiel et qu'il est près d'être une vraie alternative à d'autres gros, mais il a ces petits problèmes, qui empêchent une pérennité du développement et cela me gêne et me fait râler à la fois.
  • comtois
    Responsable Purebasic
    Envoyé par SurferIX
    Les codes PureBasic sont des copier/coller des exemples fournis avec PureBasic je n'ai rien inventé du tout, donc si le code est mauvais cela implique que le code des exemples est mauvais...
    Il s'appelle comment l'exemple (si c'est un fichier exemple) ? Sinon si c'est un code intégré dans la doc, je le trouve dans quelle bibliothèque ? Histoire de comprendre le contexte de cet exemple. Peut-être qu'il mérite d'être corrigé ?

    Voici le code juste au dessus écrit en Python :
    Code :
    t.a = t.a.replace('/', '\')
    S'il s'agit de remplacer "/" par "\" dans une chaine, tu peux le faire comme ça avec PureBasic ou SpiderBasic :
    Code :
    UneChaine$ = ReplaceString(UneChaine$,"/","\")
    Pourquoi la première lettre en majuscule alors qu'absolument aucun autre langage n'a un mot clé avec sa première lettre en majuscule.
    Le compilo n'est pas sensible à la casse, rien ne t'oblige à le faire. L'éditeur formate le code automatiquement en mettant la première lettre en majuscule mais tu peux modifier ça dans les préférences de l'éditeur en décochant la case 'activer la correction des majuscules'. Il y une multitude de paramètres possibles pour adapter l'éditeur à ton goût (l'indentation, le pliage, l'autocomplétion, etc).

    etc c'est juste une suggestion, mais la lisibilité d'un langage est d'abord sa nature première, et ça incite / ou pas / à aller vers ce langage. Les "->" aussi, comme en Php, C++, ou C permettent de bien séparer les éléments/structures et de les rendre plus lisibles.
    Tu peux éventuellement t'écrire un préprocesseur pour adapter la syntaxe à ton goût, ou t'adapter à la syntaxe de PureBasic

    Bref je pense sincèrement que le PureBasic a un gros potentiel et qu'il est près d'être une vraie alternative à d'autres gros, mais il a ces petits problèmes, qui empêchent une pérennité du développement et cela me gêne et me fait râler à la fois.
    Ne t'arrête pas à ces petits détails, c'est le propre du programmeur que de s'adapter
  • SurferIX
    Membre chevronné
    C'est le code de "PureBasic\Examples\Sources - Advanced\Atomic Web Server"

    Quant à s'adapter, c'est un vieux qui parle, dans l'ordre de mes évolutions (je ne parle que des langages, pas de ce qu'il y a autour (rien sur Symfony, NodeJS etc)) : ADA, C, C++, Java, Visual Basic, Delphi, Php, PureBasic, JavaScript, LUA, Python
    J'ai été expert Delphi et il y a deux ans expert Php. Au travers de tout ça, pendant plus de 20 ans, j'ai évolué vers une seule chose : la lisibilité car, au final, c'est là dessus que tout se base.

    C’est la philosophie de Python qui m’a plu le plus : le langage est le plus épuré de tous les langages. Tout fonctionne à l’indentation. Terminés les points-virgules à la fin de chaque ligne, les accolades pour les boucles et conditions, et le code d'autres personnes illisible. C’est tout de suite plus lisible. Je me retrouve du coup à coder pas mal de fonctionnalités en très peu de lignes de code, et c’est très plaisant. C'est juste ce qui me manque en PureBasic.

    L'exemple de ton préprocesseur est bien, mais il ne devrait pas exister : la lisibilité par tout le monde, c'est ce qui change tout dans un langage. C'est bien, mais faire simplement un ReplaceString() c'est loin d'être pérenne (crois moi j'en ai fait des #define en C qui changent caractère par caractère jusqu'à récemment et je connais bien). En tous les cas merci pour ce commentaire, dès que je peux je reviendrai et je verrai si je peux me faire un preprocesseur et si cela devient plus lisible.
  • majikeyric
    Futur Membre du Club
    Le code PureBasic illisible ? On aura tout lu...
  • glad33bx
    Membre régulier
    de la pub pour un produit commercial !
    Super