3 ms·
What's the use case, though? If you want config file syntax, use a config file. If you want a program, use code. Building up an object system like this for sim
by djacobs 16y ago
What's the use case, though? If you want config file syntax, use a config file. If you want a program, use code.
Building up an object system like this for simple configuration seems excessive to me.
I would do something like this:
c = YAML.load_file 'config.yml'
allowed, disallowed = c['allowed'], c['disallowed']
- tptacek 16y agoYAML is kind of confining as a config file language.
- masklinn 16y ago> What's the use case, though? If you want config file syntax, use a config file. If you want a program, use code Data is code is data, avoids having to write a parser (or even reuse an existing one), avoids having to resolve the impedance mismatch between the programming language and the configuration language, scales up infinitely in case the user needs more power (which is not that rare, especially for a rules system which is the use case here) > I would do something like this: > c = YAML.load_file 'config.yml' > allowed, disallowed = c['allowed'], c['disallowed'] Now you have two superfluous lines in your code and you have not gained anything of value.
- djacobs 16y agoI don't have any superfluous lines in my code. I wanted to load a config file into my runtime, and I did. Not superfluous at all. The (extraordinarily) superfluous code is the code used to set up the object config system where none is needed. > Data is code is data. This is hardly a case of homoiconicity, is it?
- masklinn 16y ago> Not superfluous at all. The (extraordinarily) superfluous code is the code used to set up the object config system where none is needed. You need that code to load/create rules in any case, but for you it's done from a config file which the user writes. For TFAA, the user loads his data directly into the running system. Therefore the layer you have to setup between the config file and the actual running code (parsing the config file then interpreting its values to translate them into a running ruleset) is superfluous: you can do without it. Because you know, your "example" YAML parsing is useless in and of itself, it doesn't result in a working ruleset, you skipped the whole part where you feed that data to your code and setup the stuff that actually does work. TFAA removes the parsing and interpretation from the chain and instead lets the user feed data directly to the running code without layers inbetween.
- djacobs 16y agoBecause you know, your "example" YAML parsing is useless in and of itself, it doesn't result in a working ruleset, you skipped the whole part where you feed that data to your code and setup the stuff that actually does work. Sorry, but that's not actually the case, is it? There is no "business logic" in his example. To actually use the config system he's set up, you need to evaluate Rule#charge for every rule you want to evaluate. In my example, all you could run allowed.include? or simply iterate over the allowed array.
- pygy_ 16y agoHomoiconicity has nothing to do with the Church-Turing Thesis. ____ Church: you can represent data using functions/function application. Historic example: Church encoding of the natural numbers. Day to day example: The hash table and the array are in fact pure functions. ____ Turing: the input of a machine (data) can be used to carry computations. Historic example: the Turing machine (duh :-) Day to day example: from machine language to Coffeescript.
- jules 16y agoIt's often handy to have a full blown programming language at your disposal in a configuration file. Want to pull a configuration setting out of another file? Want to loop through things to avoid repetition? Want to switch some but not all configuration settings depending on some parameter? Depending on which hardware you're running on? Easy.