See below.
Daniel --- could you also drop the diagram below in the wiki page?
> On Friday, April 1, 2016 at 7:12:33 AM UTC-4, Sebastian Weber wrote:
>> Hi!
>>
>> My apologies if this has already been discussed, but I was wondering how you guys handle features which touch simultaneously the different layers. So for example, let's say I write a neat new function in stan-math. This will affect stan and potentially cmdstan.
>>
>> - Should I create now an issue in *all* repositories?
>
> I'd start with an issue in the language repo (if this is for something that ends up getting exposed in the interfaces) and get enough buy-in that you think it's going to make it through the process, then open an issue on stan-dev/math (if there's math to implement) once you know how it's going to be implemented).
> The language seems to be the gatekeeper for the interfaces.
The language isn't usually the issue, though we are picky about it
because we don't want to break people's models, so we want to be careful
with naming, etc. The language itself only interfaces through the model
class that gets generated in C++.
It's just that everything has to be consistent.
> It makes sense since the interfaces mostly expose the language rather than providing another layer and once people start using a language feature we're sort of stuck with maintenance/deprecation management.
The bigger picture is this, and you see the stan-dev/stan repo really
spans three logical layers:
stan
----------------------------------
math <- language <- algorithms <- services <- pystan
<- rstan <- rstanarm
<- rethinking
<- cmdstan <- statastan
<- matlabstan
<- stan.jl
What we are trying to do with the services refactor is make a clean
services layer between the core interfaces (pystan, rstan, cmdstan) so that
these don't have to know anything below the services layer. Ideally,
there wouldn't be any calls from pystan, rstan, or cmdstan other than
ones to the stan::services namespace. services, on the other hand, is
almost certainly going to need to know about things below the algorithms
level in language and math.
- Bob