GLM 0.9.5 is a pretty disruptive new branch due to ideas aiming at making GLM more robust. GLM being largely used by now, the purpose of this provisional release is to ensure that it won't be too disruptive for the community when comes the final release.
First, GLM 0.9.5 removes the hvec* and the hmat* types. Half floats are useful but those types are the wrong abstraction because they let use believe that half floats are native types while they are not. For example, we can perform an addition between two hvec4 but the underlying implementation will simply convert each component to float, do the addition and convert back to half. There is probably better approach to do this addition, there is just none that will be as fast as if that instruction what supported by the CPUs. As a replacement, GLM 0.9.5 provides functions to explicitly perform the conversion from float to half and half to float with the functions packHalf1x16, unpackHalf1x16, packHalf4x16, unpackHalf4x16, included in the new GLM_GTC_packing extension and packHalf2x16, unpackHalf2x16 already available in the GLM 0.9.4 core implementation.
The problem with header only library is that they increase the compilation time of a program. One of the reason for not enabling the swizzle operators by default is that it generates a lot of code. A good strategy to avoid running in compilation time issues is to ensure that the code isn't a spaghetti plate, and relying on forward declarations. GLM 0.9.5 provides glm/fwd.hpp with a complete set of GLM types forward declarations.
Furthermore, in previous version GLM switched from including <glm/ext.hpp> to include individual extensions. With GLM 0.9.5 we can use individual headers to include only the features we need. For example: <glm/vec3.hpp> for glm::vec3, <glm/mat4x4.hpp> for glm::mat4 or <glm/geometry.hpp> for all the functions of the geometry section of the GLSL specifications.
Updating my simple raytracer from GLM 0.9.4 to GLM 0.9.5, the project can be compiled in less than half the time.
GLM 0.9.4 exposes GLSL precision qualifiers by using different native types. For example mediump_float is actually a float type and highp_float is actually a double.
in GLM 0.9.5 the precision qualifier (lowp, mediump and highp) has been redefined and now express computation precision in term of ULPs. As a conscequence for example sizeof(glm::lowp_vec2), sizeof(glm::mediump_vec2) and sizeof(glm::highp_vec2) will always return the same values. However, the effective computation can be different. For example, the implementation of inversesqrt uses fast inverse square root for lowp.
Enjoy!