As could youJ. Baker wrote:You could be right.

As could youJ. Baker wrote:You could be right.
The best example for this is probably Debian, and it shows my point exactly. Why do you think the (rather solid, but very old) stable branches are only used for servers and the like? Projects like Ubuntu pretty much only use the up to date unstable or even testing branches, because people want the latest features. And even those stable branches that have seen bugfixes only for an eternity are not 100% bugfree. The though of a software with "_all_" bugs fixed is an illusion.Ramihyn_ wrote:This problem isnt new, the discussion happened years ago already. A simple solution that other projects do, is to handle two versions. One rock-solid branch where _all_ confirmed bugs will be fixed, but no new features will be done and one branch as it is now. So the developers can still have fun introducing new stuff and the users have a version they can actually use to produce software.
I have completed the University by April and I don't have access to many reference books anymore. So for the moment, this project is halted because I don't have any money to purchase the needed reference books.PMV wrote:And where can we see that in action? Have i overseen something?![]()
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Dev-Type V3.56.188
; Project name : the project name here
; File name : File name here
; File Version : 0.0.0
; Programmation : In progress
; Programmed by : Guimauve
; Creation Date : 03-10-2011
; Last update : 03-10-2011
; Coded for PureBasic V4.60
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration <<<<<
Structure Mesh
VertexCount.l
IndiceCount.l
Vertex.i ; Data, VertexCount, Vector3
Normal.i ; Data, VertexCount, Vector3
UVMap.i ; Data, VertexCount, Vector2
Indice.i ; Data, IndiceCount, Indice3
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The observators <<<<<
Macro GetMeshVertexCount(MeshA)
MeshA\VertexCount
EndMacro
Macro GetMeshIndiceCount(MeshA)
MeshA\IndiceCount
EndMacro
Macro GetMeshVertex(MeshA)
MeshA\Vertex
EndMacro
Macro GetMeshNormal(MeshA)
MeshA\Normal
EndMacro
Macro GetMeshUVMap(MeshA)
MeshA\UVMap
EndMacro
Macro GetMeshIndice(MeshA)
MeshA\Indice
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The mutators <<<<<
Macro SetMeshVertexCount(MeshA, P_VertexCount)
GetMeshVertexCount(MeshA) = P_VertexCount
EndMacro
Macro SetMeshIndiceCount(MeshA, P_IndiceCount)
GetMeshIndiceCount(MeshA) = P_IndiceCount
EndMacro
Macro SetMeshVertex(MeshA, P_Vertex)
GetMeshVertex(MeshA) = P_Vertex
EndMacro
Macro SetMeshNormal(MeshA, P_Normal)
GetMeshNormal(MeshA) = P_Normal
EndMacro
Macro SetMeshUVMap(MeshA, P_UVMap)
GetMeshUVMap(MeshA) = P_UVMap
EndMacro
Macro SetMeshIndice(MeshA, P_Indice)
GetMeshIndice(MeshA) = P_Indice
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Complentemary Macros for Datas <<<<<
Macro ReachMeshVertex(MeshA, OffsetID)
(GetMeshVertex(MeshA) + (OffsetID) * SizeOf(Vector3))
EndMacro
Macro AllocateMeshVertexMemory(MeshA)
SetMeshVertex(MeshA, AllocateMemory(GetMeshVertexCount(MeshA) * SizeOf(Vector3)))
EndMacro
Macro MemoryMeshVertexSize(MeshA)
MemorySize(GetMeshVertex(MeshA))
EndMacro
Macro LastMeshVertex(MeshA)
((MemorySize(GetMeshVertex(MeshA)) / SizeOf(Vector3)) - 1)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Complentemary Macros for Datas <<<<<
Macro ReachMeshNormal(MeshA, OffsetID)
(GetMeshNormal(MeshA) + (OffsetID) * SizeOf(Vector3))
EndMacro
Macro AllocateMeshNormalMemory(MeshA)
SetMeshNormal(MeshA, AllocateMemory(GetMeshVertexCount(MeshA) * SizeOf(Vector3)))
EndMacro
Macro MemoryMeshNormalSize(MeshA)
MemorySize(GetMeshNormal(MeshA))
EndMacro
Macro LastMeshNormal(MeshA)
((MemorySize(GetMeshNormal(MeshA)) / SizeOf(Vector3)) - 1)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Complentemary Macros for Datas <<<<<
Macro ReachMeshUVMap(MeshA, OffsetID)
(GetMeshUVMap(MeshA) + (OffsetID) * SizeOf(Vector2))
EndMacro
Macro AllocateMeshUVMapMemory(MeshA)
SetMeshUVMap(MeshA, AllocateMemory(GetMeshVertexCount(MeshA) * SizeOf(Vector2)))
EndMacro
Macro MemoryMeshUVMapSize(MeshA)
MemorySize(GetMeshUVMap(MeshA))
EndMacro
Macro LastMeshUVMap(MeshA)
((MemorySize(GetMeshUVMap(MeshA)) / SizeOf(Vector2)) - 1)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Complentemary Macros for Datas <<<<<
Macro ReachMeshIndice(MeshA, OffsetID)
(GetMeshIndice(MeshA) + (OffsetID) * SizeOf(Indice3))
EndMacro
Macro AllocateMeshIndiceMemory(MeshA)
SetMeshIndice(MeshA, AllocateMemory(GetMeshIndiceCount(MeshA) * SizeOf(Indice3)))
EndMacro
Macro MemoryMeshIndiceSize(MeshA)
MemorySize(GetMeshIndice(MeshA))
EndMacro
Macro LastMeshIndice(MeshA)
((MemorySize(GetMeshIndice(MeshA)) / SizeOf(Indice3)) - 1)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset operator <<<<<
Macro ResetMesh(MeshA)
SetMeshVertexCount(MeshA, 0)
SetMeshIndiceCount(MeshA, 0)
If GetMeshVertex(MeshA) <> #Null
For OffsetID = 0 To GetMeshVertexCount(MeshA) - 1
*VertexA.Vector3 = ReachMeshVertex(MeshA, OffsetID)
ResetVector3(*VertexA)
Next
FreeMemory(GetMeshVertex(MeshA))
SetMeshVertex(MeshA, 0)
EndIf
If GetMeshNormal(MeshA) <> #Null
For OffsetID = 0 To GetMeshVertexCount(MeshA) - 1
*NormalA.Vector3 = ReachMeshNormal(MeshA, OffsetID)
ResetVector3(*NormalA)
Next
FreeMemory(GetMeshNormal(MeshA))
SetMeshNormal(MeshA, 0)
EndIf
If GetMeshUVMap(MeshA) <> #Null
For OffsetID = 0 To GetMeshVertexCount(MeshA) - 1
*UVMapA.Vector2 = ReachMeshUVMap(MeshA, OffsetID)
ResetVector2(*UVMapA)
Next
FreeMemory(GetMeshUVMap(MeshA))
SetMeshUVMap(MeshA, 0)
EndIf
If GetMeshIndice(MeshA) <> #Null
For OffsetID = 0 To GetMeshIndiceCount(MeshA) - 1
*IndiceA.Indice3 = ReachMeshIndice(MeshA, OffsetID)
ResetIndice3(*IndiceA)
Next
FreeMemory(GetMeshIndice(MeshA))
SetMeshIndice(MeshA, 0)
EndIf
; ClearStructure(MeshA, Mesh)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Create Binary File <<<<<
Procedure CreateMeshBinaryFile(FileID.l, FileName.s, *MeshA.Mesh)
If CreateFile(FileID, FileName)
WriteLong(FileID, GetMeshVertexCount(*MeshA))
WriteLong(FileID, GetMeshIndiceCount(*MeshA))
If GetMeshVertex(*MeshA) <> #Null
For OffsetID = 0 To GetMeshVertexCount(*MeshA) - 1
WriteVector3(FileID, ReachMeshVertex(*MeshA, OffsetID))
Next
; WriteData(FileID, GetMeshVertex(*MeshA), MemorySize(GetMeshVertex(*MeshA)))
EndIf
If GetMeshNormal(*MeshA) <> #Null
For OffsetID = 0 To GetMeshVertexCount(*MeshA) - 1
WriteVector3(FileID, ReachMeshNormal(*MeshA, OffsetID))
Next
; WriteData(FileID, GetMeshNormal(*MeshA), MemorySize(GetMeshNormal(*MeshA)))
EndIf
If GetMeshUVMap(*MeshA) <> #Null
For OffsetID = 0 To GetMeshVertexCount(*MeshA) - 1
WriteVector2(FileID, ReachMeshUVMap(*MeshA, OffsetID))
Next
; WriteData(FileID, GetMeshUVMap(*MeshA), MemorySize(GetMeshUVMap(*MeshA)))
EndIf
If GetMeshIndice(*MeshA) <> #Null
For OffsetID = 0 To GetMeshIndiceCount(*MeshA) - 1
WriteIndice3(FileID, ReachMeshIndice(*MeshA, OffsetID))
Next
; WriteData(FileID, GetMeshIndice(*MeshA), MemorySize(GetMeshIndice(*MeshA)))
EndIf
CloseFile(FileID)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read Binary File <<<<<
Procedure ReadMeshBinaryFile(FileID.l, FileName.s, *MeshA.Mesh)
If ReadFile(FileID, FileName)
SetMeshVertexCount(*MeshA, ReadLong(FileID))
SetMeshIndiceCount(*MeshA, ReadLong(FileID))
AllocateMeshVertexMemory(*MeshA)
If GetMeshVertex(*MeshA) <> #Null
For OffsetID = 0 To GetMeshVertexCount(*MeshA) - 1
ReadVector3(FileID, ReachMeshVertex(*MeshA, OffsetID))
Next
; ReadData(FileID, GetMeshVertex(*MeshA), MemorySize(GetMeshVertex(*MeshA)))
EndIf
AllocateMeshNormalMemory(*MeshA)
If GetMeshNormal(*MeshA) <> #Null
For OffsetID = 0 To GetMeshVertexCount(*MeshA) - 1
ReadVector3(FileID, ReachMeshNormal(*MeshA, OffsetID))
Next
; ReadData(FileID, GetMeshNormal(*MeshA), MemorySize(GetMeshNormal(*MeshA)))
EndIf
AllocateMeshUVMapMemory(*MeshA)
If GetMeshUVMap(*MeshA) <> #Null
For OffsetID = 0 To GetMeshVertexCount(*MeshA) - 1
ReadVector2(FileID, ReachMeshUVMap(*MeshA, OffsetID))
Next
; ReadData(FileID, GetMeshUVMap(*MeshA), MemorySize(GetMeshUVMap(*MeshA)))
EndIf
AllocateMeshIndiceMemory(*MeshA)
If GetMeshIndice(*MeshA) <> #Null
For OffsetID = 0 To GetMeshIndiceCount(*MeshA) - 1
ReadIndice3(FileID, ReachMeshIndice(*MeshA, OffsetID))
Next
; ReadData(FileID, GetMeshIndice(*MeshA), MemorySize(GetMeshIndice(*MeshA)))
EndIf
CloseFile(FileID)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 00.006 seconds (66333.33 lines/second) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 00.006 seconds (66333.33 lines/second) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Debian and Ubuntu are two very different target audiences. You picked Debian as an example because it "shows your point exactly".freak wrote:This whole "we only want bugfixes ever" argument is nonsense. We already do a bugfix-only version on every second release, precisely for people who say they do not want any new features. If you don't want new features, don't use versions like 4.60, its that simple. Just wait for the 4.61 version which is the bugfix-release of 4.60. But the truth is that very few people seem to do that, because guess what, people actually want to use the new features. What a shock.
The best example for this is probably Debian, and it shows my point exactly. Why do you think the (rather solid, but very old) stable branches are only used for servers and the like? Projects like Ubuntu pretty much only use the up to date unstable or even testing branches, because people want the latest features.Ramihyn_ wrote:This problem isnt new, the discussion happened years ago already. A simple solution that other projects do, is to handle two versions. One rock-solid branch where _all_ confirmed bugs will be fixed, but no new features will be done and one branch as it is now. So the developers can still have fun introducing new stuff and the users have a version they can actually use to produce software.
The change in release cycle was a step in the right direction and honestly it was appreciated. But sadly, it was not the best solution. As you see in the comparison with Debian, the "support timeframe" for Purebasic is very small (4.50 -> 4.51).freak wrote:Btw, yes this discussion happened years ago, and we reacted to it. The fact that we have a release cycle where every second release is for bugfixes only is the result of that. We actually have the exact model you describe: Development on 4.60 started right after 4.50 was released, while we still fixed bugs for the 4.51 version in a separate branch. It didn't use to be that way.
4.51 for windows was usable to me and a big step from 4.50. The bugs i found in 4.51 could be worked around (pausethread/createthread, thread debugging - i wrote my own PB debugging tools and rarely use the PB debugger anymore). I can't say if the linux 4.51 version is (as) stable, because i spend all time i have for PB on 4.60 (see below).freak wrote:But some people seem to never be satisfied no matter what we do. Oh, and some of you make it sound like there has never been a usable PB version so far.
I stopped using PB for any new commercial project over a year ago, currently i am just trying to port an existing project to linux.freak wrote:If that was really the case, why are you using it?
I invested a lot work and time in testing 4.6 for linux to make it better for everybody, spending many hours trying to hunt down the problems and create small easily reproducible examples to show them, finding clean and easy solutions for the webgadget, compiler switches and others, wrote an updated linux installation howto and helped in the forums when/where i could.freak wrote:Now, it is true that Linux and OSX lag behind the Windows version in bugfixes. We have limited resources and we have to spend them where they have the greatest effect, and quite frankly, the participation and feedback on the Linux and OSX side is not that great. The usage of the OSX version seems to climb only very slowly, and the amount of feedback we get on the Linux side seems to be decreasing even. If you want these versions to become better, you have to do your part: Actively use them and report the bugs you find. Just sitting back and waiting for it to magically become perfect won't change anything.
I did read that and i honestly feel with you guys. PureBasic is an enormous project and you have a lot of respect from me for that.freak wrote:Btw, in case you didn't notice: We are delaying the 4.60 release because we want to fix more bugs on the Linux and OSX side. We are not abandoning these platforms, but they cannot be the sole focus either for obvious reasons.
I need to make this more precise, in my previous reply to you i had a remark that i do not use any of the new functionality since 4.5 (likely since 4.4). It seems due to shortening the reply, this was lost.freak wrote:See, you are making my point: You claim you only want bugfixes ever, but you do like the new features as well.
My expectation is that core functionality of purebasic which was introduced years ago (4.4), actually "mostly" works on the supported platforms (windows, linux, MAC OS X).freak wrote:Maybe it is time to check how realistic your expectations really are.
Thanks freak.freak wrote:@J.Baker:
Sorry, my post was not aimed at you specifically.
I know that problem.Guimauve wrote:I have completed the University by April and I don't have access to many reference books anymore. So for the moment, this project is halted because I don't have any money to purchase the needed reference books.
It looks great. But code generation isn't important for meGuimauve wrote:And pay attention to this comment in the code :It's fast, isn't it ....Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; <<<<< Code generated in : 00.006 seconds (66333.33 lines/second) <<<<< ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
I agree. Nobody in this thread said "we only want bugfixes ever". People only said they wanted bugs fixed and concentrated on more than adding new features until the bugs are caught up.freak wrote:This whole "we only want bugfixes ever" argument is nonsense.
People have to download the 4.60 version as it contains the bug fixes that have been made since 4.51. How many times have we been told "we won't release another bug fix, this is being applied to the next release version"? Fred has told me that twice via PM since the update model changed years ago. The same thing has been said publicly on the forums several times since the update model changed years ago.freak wrote:If you don't want new features, don't use versions like 4.60, its that simple. Just wait for the 4.61 version which is the bugfix-release of 4.60. But the truth is that very few people seem to do that, because guess what, people actually want to use the new features. What a shock.
Indeed it didn't used to be that way. We used to see several bug fix releases before a new version with new features was released. 3.94 was so stable because it was 3.94 and not 3.91.freak wrote:The fact that we have a release cycle where every second release is for bugfixes only is the result of that. We actually have the exact model you describe: Development on 4.60 started right after 4.50 was released, while we still fixed bugs for the 4.51 version in a separate branch. It didn't use to be that way.
To me, it makes sense that the OSX version is the buggier of the three because OSX support is relatively new in the overall scheme of things. Linux has been pretty stable by comparison until recently. But Linux itself tends to break things between major OS releases. Unfortunately, it seems the Linux issues are a little more severe (for those experiencing them) than usual.freak wrote:Now, it is true that Linux and OSX lag behind the Windows version in bugfixes.