Ok... so let's try to resolve all of the confusion.
Firstly, Alloc does exactly what you think it does. While it does run faster than the standard vJASS allocators and does generate less code, people do not mainly use it for performance reasons, but rather for its improved debugging capabilities. It can use a set of optional debugging libs to track memory. It can also do analysis for things like memory leaks : ). When writing very complex libs, this is an invaluable tool. Even if you don't care about using the debug utils yourself, if you are writing a resource that could be used by others, you should still opt for them so that others can debug things using your thing.
Next, a struct that extends an array is nothing but syntax decoration. Putting Alloc into this type of struct will just give you an allocator, which is exactly what you want.
JASS:
struct MyAllocator extends array
implement Alloc
endstruct
function MyFunction takes nothing returns nothing
local integer i = MyAllocator.allocate()
call MyAllocator(i).deallocate()
endfunction
While this is unconventional, it can work. Normally, people would put variables within the struct so that they don't need to use ugly arrays. It just makes the code look nicer.
JASS:
myVariable[unitId] = 15
unitId.myVariable = 15
The post Flux had put up was just taking the basic allocation out of Alloc and putting it into a lib. The flavor used in that post is standard Alloc : ).
Finally, the reason Alloc seems to be confusing to use is because it's a macro that's made for use in structs. If you're not sure about macros, try playing with vjass textmacros a little bit to see what they do.
SpellBound, I hope I was able to clear up your confusion ^_-.
Fyi, here is likely what Flux's post should have been
JASS:
library TimerIdAlloc uses Alloc
private struct Allocator extends array
implement Alloc
endstruct
function TimerIndexDeallocate takes Allocator id returns nothing
call id.deallocate()
endfunction
function TimerIndexAllocate takes nothing returns integer
return Allocator.allocate()
endfunction
endlibrary
Alternatively, we can go for a macro
JASS:
//! textmacro CREATE_ALLOCATOR takes NAME
scope $NAME$
private struct Allocator extends array
implement Alloc
endstruct
function $NAME$Deallocate takes Allocator id returns nothing
call id.deallocate()
endfunction
function $NAME$Allocate takes nothing returns integer
return Allocator.allocate()
endfunction
endscope
//! endtextmacro
And to get the lib that Flux had written using the macro
JASS:
library TimerIdAlloc uses Alloc
//! runtextmacro CREATE_ALLOCATOR("TimerIndex")
endlibrary