DIP11: Automatic downloading of libraries
Jacob Carlborg
doob at me.com
Tue Jun 21 04:53:41 PDT 2011
On 2011-06-21 12:04, Dmitry Olshansky wrote:
> On 21.06.2011 13:07, Jacob Carlborg wrote:
>> "target" works like this:
>>
>> 1. You call "target" passing in the name of the target and a block
>>
>> 2. "target" then call the block passing in an instance of a Target
>> class (or similar)
>>
>> 3. In the block you then specify all the necessary settings you need
>> for this particular target.
>>
>> You should only call "target" once for each target. So, if you pass in
>> "name2" instead of "name" you would create a new target. I haven't
>> figured out what should happen if you call "target" twice with the
>> same name.
>>
>> Also note that this would be sufficient:
>>
>> target "name" do
>> flags "-l-lz"
>> end
>>
> So it's a way to _create_ instances. I suspected there could be need to
> add some extra options to existing. Imagine creating special version of
> package, IMO it's better when all this extra is packaged at one place
> not in every block.
>
> BTW this doesn't look any better then possible D version:
>
> spec = Gem::Specification.new do |s|
> s.name = 'example'
> s.version = '1.0'
> s.summary = 'Example gem specification'
> ...
> end
>
> In any case there is now instance named spec, right? So user still have
> to manage some variables...
No, no, no. Have you read my previous messages and the wiki? That above
syntax is used by Rubygems, Rake uses a similar and Orbit and Dake will
also use a similar syntax but will still be slightly different. The
concepts are the same, with calling a method and passing along a block.
The syntax used by Orbit doesn't actually need blocks at all because you
can only have one package in one orbspec. The syntax will look like this:
name "example"
version "1.0"
summary "Example gem specification"
Dake will have blocks in the syntax for its config files, this is
because multiple targets and tasks are supported within the same file.
The syntax will look like this:
target "<name>" do
flags "-L-l"
product "foobar"
type :executable
end
In this case, <name> would refer to a single D file or a directory with
multiple D files. If you want to have settings for multiple targets then
you just put that code outside any of the blocks, at the global scope
(or pass a block to a method name "global", haven't decided yet).
And similar for tasks:
task "foo" do
# do something
end
A task is just some code you can run from the command line via the tool:
dake foo
As you can see, no variables and no instances for the user to keep track
of. Seems that I actually do need to write down a complete specification
for these config/spec files.
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list