I'm doing research on BRDF description and implementation techniques, and OSL is one of the main languages to do so. I'm curious about the way one could implement a new BRDF using OSL, or if it's even possible to do so without messing around with its source code.
The OSL documentation gives a set of materials that are to be expected of any renderer. Blender, for examples, provides an an extended set of implemented materials ready to be used in OSL (these materials are actually already available as nodes in Cycles). I'm interested in creating new materials (BRDFs). According to this thread, OSL is not meant to be used like this, instead the users are supposed to make use of the already available material closures (BSDFs) to create new materials. The OP in that thread was trying to implement a BRDF but couldn't progress because he couldn't find a way to obtain certain vectors needed.
Finally, my question is: in order to create new materials (BRDFs) to be used in OSL, is it necessary to implement them first in C++ and recompile OSL, to finally make them usable? I wasn't able to find a definitive answer to this question.