Des versions 'démo' sont également disponibles pour ceux qui n'ont pas de licence.
http://www.purebasic.com/french/download.php
Hi folks,
That's it, PureBasic 5.30 final version is out ! The beta phase was longer than usual and even if it's holiday and summer time,
it's not a valid excuse . So let's jump a bit in PureBasic development internals, so you can better understand why.
First of all, the IDE is now fully unicode. It looks like a no brainer as in PureBasic it's more or less a checkbox to enable to have your program
working in unicode, right ? Well, not this time. The (new) IDE is around for almost 10 years now (09/21/2005) and it grew out of proportion
by including tons of features. We heavily use raw pointers to process string buffers quickly, and when switching to unicode, all the strings
went to UCS-2 (16-bit character). The stuff here is Scintilla is working internally in UTF-8, so all our comparisons between PB strings and Scintilla internal
didn't work anymore as one side was UTF-8 and the other UCS-2. Also, all the Scintilla commands which needed a buffer as parameter needed to be
changed as we mostly used a pointer to a PB string for this. We also had API calls here and here which required some adaptation work, and there was
no compiling error or runtime warning, so usually a nice crash was awaiting us when missing one and reaching this code section. To be honest,
it was quite a bit depressing to see a solid IDE get back to a shacky shape. This looks brighter now, and the unicode switch allowed us to fix long standing IDE
issues which is cool. It was a needed update, especially for the internal debugger which can now handle unicode programs. There is will be probably some quicks
left but it should be ironed out in future versions.
We also made important internal compiler changes to enable runtime serialization trough the XML and new JSON lib. It doesn't seem like a big deal
from the user point of view, but actually it is. What is runtime serialization ? In a nutshell: you have your nice linked list of complex
structured elements (which can contain dynamic map, array etc.) and you want to save it, so when you quit your program, you wont loose these data.
To do that, you had mostly only one way until now: walk the list, write all the fields of your structure to either a file or a database. It can be
time consumming to write this, and if you add a new field in your structure, you have to update both your load and save routines. With
5.30 serialization functions, you can do that with only one command. The compiler will flag your structure as a runtime one so it gets all
needed information (like fieldname, fieldtype etc.) and build special information table to allow full recursive analysing and dumping of the
structure data. We made this change generic in the compiler, so any command (even user libs) can use this feature. To allow this, we needed to support
'shadow parameters' in PB function call. Basically, when we declare a command parameter as "Runtime Structure" like in InsertJSONStructure(),
one hidden parameter is added to the function call to add more information to the structure. The same is done to when a runtime list, map or
array is need like in InsertJSONList/Map/Array(). Adding such a core feature in the compiler is always tricky and can creates new hard to track issues
(like stack mis-aligment), and that's why the IDE didn't started anymore on some Windows x64 computers.
And finally, a word about LTS (Long Time Support). The 5.30 is the first version which is released in parallel than an LTS version. That means than
we had to update our build servers and deployment tools to handle 2 concurrents versions (when building and when releasing). The website
also needed some update to handle this properly. It's small things but it does add-up and it in the end, it takes time to get everything right
and properly working.
As a side note, all the doc are now updated to the new format in every languages and I would like to thank Andre and Mesa for the
huge work done on this. A programming langage without a good doc is not a good programming langage.
I hope you didn't fell asleep when reading this, enjoy the new version !
That's it, PureBasic 5.30 final version is out ! The beta phase was longer than usual and even if it's holiday and summer time,
it's not a valid excuse . So let's jump a bit in PureBasic development internals, so you can better understand why.
First of all, the IDE is now fully unicode. It looks like a no brainer as in PureBasic it's more or less a checkbox to enable to have your program
working in unicode, right ? Well, not this time. The (new) IDE is around for almost 10 years now (09/21/2005) and it grew out of proportion
by including tons of features. We heavily use raw pointers to process string buffers quickly, and when switching to unicode, all the strings
went to UCS-2 (16-bit character). The stuff here is Scintilla is working internally in UTF-8, so all our comparisons between PB strings and Scintilla internal
didn't work anymore as one side was UTF-8 and the other UCS-2. Also, all the Scintilla commands which needed a buffer as parameter needed to be
changed as we mostly used a pointer to a PB string for this. We also had API calls here and here which required some adaptation work, and there was
no compiling error or runtime warning, so usually a nice crash was awaiting us when missing one and reaching this code section. To be honest,
it was quite a bit depressing to see a solid IDE get back to a shacky shape. This looks brighter now, and the unicode switch allowed us to fix long standing IDE
issues which is cool. It was a needed update, especially for the internal debugger which can now handle unicode programs. There is will be probably some quicks
left but it should be ironed out in future versions.
We also made important internal compiler changes to enable runtime serialization trough the XML and new JSON lib. It doesn't seem like a big deal
from the user point of view, but actually it is. What is runtime serialization ? In a nutshell: you have your nice linked list of complex
structured elements (which can contain dynamic map, array etc.) and you want to save it, so when you quit your program, you wont loose these data.
To do that, you had mostly only one way until now: walk the list, write all the fields of your structure to either a file or a database. It can be
time consumming to write this, and if you add a new field in your structure, you have to update both your load and save routines. With
5.30 serialization functions, you can do that with only one command. The compiler will flag your structure as a runtime one so it gets all
needed information (like fieldname, fieldtype etc.) and build special information table to allow full recursive analysing and dumping of the
structure data. We made this change generic in the compiler, so any command (even user libs) can use this feature. To allow this, we needed to support
'shadow parameters' in PB function call. Basically, when we declare a command parameter as "Runtime Structure" like in InsertJSONStructure(),
one hidden parameter is added to the function call to add more information to the structure. The same is done to when a runtime list, map or
array is need like in InsertJSONList/Map/Array(). Adding such a core feature in the compiler is always tricky and can creates new hard to track issues
(like stack mis-aligment), and that's why the IDE didn't started anymore on some Windows x64 computers.
And finally, a word about LTS (Long Time Support). The 5.30 is the first version which is released in parallel than an LTS version. That means than
we had to update our build servers and deployment tools to handle 2 concurrents versions (when building and when releasing). The website
also needed some update to handle this properly. It's small things but it does add-up and it in the end, it takes time to get everything right
and properly working.
As a side note, all the doc are now updated to the new format in every languages and I would like to thank Andre and Mesa for the
huge work done on this. A programming langage without a good doc is not a good programming langage.
I hope you didn't fell asleep when reading this, enjoy the new version !
Envoyé par djes
- Ajouté: Nouvel outil "Note" dans l'IDE pour créer et consulter une liste de choses à faire (ToDo) ou des commentaires
- Ajouté: Bibliothèque JSON
- Ajouté: ParseXML(), ComposeXML(), InsertXMLArray/List/Map/Structure(), ExtractXMLArray/List/Map/Structure()
- Ajouté: Nouveau gadget OpenGLGadget() avec le support des commandes et constantes OpenGL natives sous Windows, OSX et Linux
- Ajouté: ExamineRegularExpression() et les commandes associées pour traiter les correspondances regex étape par étape (avec le support des groupes)
- Ajouté: ClipOutput(), UnclipOutput(), SetOrigin(), GetOriginX(), GetOriginY()
- Ajouté: GetWindowData(), SetWindowData()
- Ajouté: AllocateStructure(), FreeStructure()
- Ajouté: #PB_Default dans WindowsBounds() pour réinitialiser les tailles min/max
- Ajouté: Paramètre 'Format' dans Read/WriteProgramString(), WriteProgramStringN() et ReadProgramError()
- Ajouté: Option compilateur /PREPROCESS permet de créer un grand code source unique avec toutes les macros, les compilerif et les inclusions de fichier en clair. Peut être combiné avec /COMMENTED pour inclure les commentaires
- Ajouté: Paramètre optionnel '#Server' dans NetworkServerEvent() pour vérifier les événements sur un serveur spécifique
- Ajouté: Option #PB_String_NoZero favec PokeS() pour éviter l'écriture du caractère nul de fin de ligne
- Ajouté: Support de #PB_Enumeration avec Defined()
- Ajouté: #PB_Explorer_HiddenFiles pour afficher les fichiers cachés dans les gadgets explorateur de fichiers
- Ajouté: Paramètre optionnel 'Type' avec CreateBillboardGroup()
- Ajouté: BillboardGroupCommonDirection(), BillboardGroupCommonUpVector()
- Ajouté: #PB_Entity_MinVelocity et #PB_Entity_ForceVelocity avec SetEntityAttribute()
- Ajouté: SetMaterialAttribute() avec les constantes #PB_Material_DepthCheck et #PB_Material_DepthWrite
- Ajouté: Support de #PB_Material_DepthCheck avec GetMaterialAttribute().
- Ajouté: Engine3DStatus() avec ces constantes: #PB_Engine3D_NbRenderedTriangles, #PB_Engine3D_NbRenderedBatches, #PB_Engine3D_CurrentFPS, #PB_Engine3D_MaximumFPS, #PB_Engine3D_MinimumFPS, #PB_Engine3D_AverageFPS, #PB_Engine3D_ResetFPS
- Ajouté: Support de #PB_Absolute / #PB_Relative pour CameraDirectionX/Y/Z(), CameraX/Y/Z(), EntityX/Y/Z(), LightX/Y/Z(), LightDirectionX/Y/Z(), BillBoardGroupX/Y/Z(), NodeX/Y/Z(), ParticleEmitterX/Y/Z() et FetchOrientation()
- Ajouté: ParticleSpeedFactor(), DisableParticleEmitter()
- Ajouté: GetEntityCollisionMask(), GetEntityCollisionGroup(), SetEntityCollisionFilter()
- Ajouté: WaterHeight(), FreeWater()
- Ajouté: IDE entièrement unicode
- Ajouté: Surlignement des occurences d'un mot sélectionné dans l'IDE
- Ajouté: Mode d'édition de texte 'brut' pour modifier les fichiers non-PB dans l'IDE
- Ajouté: L'outil 'Notes' dans l'IDE pour collecter et afficher les marqueurs A FAIRE / A CORRIGER dans le code
- Ajouté: Raccourcis Ctrl+E et Ctrl+Shift+E pour aligner/décaler les commentaires dans un bloc de code sélectionné
- Ajouté: Raccourcis Ctrl+M et Ctrl+Shift+M pour sélectionner le bloc de code courant (une pression répétée, sélectionne le bloc de code suivant)
- Ajouté: PopupMenu journal d'erreur de l'IDE pour un effacer/copier
- Ajouté: Options %HOME et %PROJECT pour l'outil ligne de commande de l'IDE, ajout de PB_TOOL_Project pour les variables d'environnement
- Ajouté: Indentation du code automatique peut aligner des commentaires à la fin des lignes de code dans l'IDE
- Ajouté: Saisie semi-automatique qui se souvient de la dernière saisie des structures/Modules
- Ajouté: L'affichage des variables est sensible au contexte module/procédure dans le débogueur
- Changé: FormatXML() avec #PB_XML_ReFormat n' ajoute plus de saut de ligne à l'intérieur des éléments d'une seule ligne pour une sortie plus lisible
- Changé: DeleteElement() renvoie maintenant le pointeur de données vers le nouvel élément courant (le cas échéant)
- Changé: SetXMLAttribute() accepte les caractères de saut de ligne dans les attributs (sera encodé comme des entités de caractères)
- Changé: Ajout d'un paramètre "name" obligatoire CreateXMLNode() car certains parser en ont besoin au moment de la création d'un noeud
- Changé: La façon dont (X)IncludeFile et IncludeBinary fonctionnent: C'est maintenant par rapport au fichier qui contient ces déclarations (ce qui est plus facile à utiliser)
- Changé: #PB_Event_SizeWindow et #PB_Event_MoveWindow ne sont plus en temps réel sur Windows, utilisez BindEvent() pour obtenir une véritable mise à jour en temps réel. Cela devrait éviter le désagréable scintillement lors du redimensionnement en temps réel sous Windows
- Changé: Les étiquettes (label) DataSection à l'intérieur d'une Procedure sont désormais locales
- Changé: Les préfixes ASM des étiquettes locales passent de "l_" à "ll_" ("ll" pour le label local), afin d'éviter tout conflit avec les étiquettes du code principal.
- Changé: La constante #PB_LinkedList a été renommé en #PB_List
- Changé: Suppression du paramètre "Billboard" dans AddBillboard() car il n'a pas été utilisé. Maintenant renvoie le nouvel indice
- Changé: Mise à jour Scintilla version 3.4.2
- Supprimé: MaterialDepthWrite() remplacé par SetMaterialAttribute()
- Supprimé: CountRenderedTriangles() et Engine3DFrameRate(), remplacés par Engine3DStatus()
Et pour finir vous trouverez des informations récupérées ici et là au cours de la phase de tests.
Voir la discussion