By the way, there are some cleanups under
https://github.com/andreaferretti/factor-work

But still, I am leaving
https://github.com/andreaferretti/factor-packages untouched, so that
it works as described in the previous email, in case someone wants to
try it.

Moreover, notice that https://github.com/andreaferretti/factor-work
also contains the two vocabularies that are fetched in the example, so
cloning factor-work and then trying the example will not work as
expected.

2014-12-17 17:57 GMT+01:00 Alex Vondrak <ajvond...@gmail.com>:
> Excited to see where this goes! I like the DSL - reminds me of how it feels
> to use [Bundler](http://bundler.io/), where the language for dependency
> management is the same as the language you're coding in. (Can you tell my
> day job is in Ruby?)
>
> I don't really have anything to add - I can't seem to find the time to touch
> Factor these days, and I shy away from the Big Decisions when it comes to
> package management (I understand it's a deceptively subtle problem). But I
> enjoyed reading about your work, and wanted you to know. :)
>
> On Wed, Dec 17, 2014 at 8:28 AM, John Benediktsson <mrj...@gmail.com> wrote:
>>
>> Hi Andrea,
>>
>> I want to look through this and give you a more full response, looks like
>> a pretty good start. Thank you!
>>
>> One of the benefits to the "one big tree" that we have right now is that
>> we guarantee to update your code as the standard library changes or
>> improves. This prevents bitrot and allows for some flexibility in changing
>> common words.  That matters less over time as the standard library becomes
>> more mature, but has been useful at times.  We've wanted ``extra/`` to be
>> very very easy to contribute to as a way of supporting new contributors and
>> then involving them as we keep an eye on their code.  Obviously there are
>> drawbacks to this approach too...
>>
>> Of course people can have their own repositories, and we should support
>> them as best we can (like support for adding vocab roots or through a
>> package manager), but I always want to encourage contributions when it makes
>> sense for everyone.
>>
>> Having something simple that encourages re-use of code is pretty great, we
>> could probably share our testing infrastructure to support easy continuous
>> integration for a project developed this way.
>>
>> More to come later when I have time.
>>
>> Best,
>> John.
>>
>>
>>
>> On Wed, Dec 17, 2014 at 6:20 AM, Andrea Ferretti
>> <ferrettiand...@gmail.com> wrote:
>>>
>>> Hi, following this [small
>>> discussion](https://news.ycombinator.com/item?id=8750720) I thought I
>>> might give a try at designing a simple package manager.
>>>
>>> It is inspired by [Metacello](https://code.google.com/p/metacello/)
>>> but delegates to existing source control management software such as
>>> git the actual handling of repositories, similar to
>>> [Bower](http://bower.io/).
>>>
>>> You can find the stub of a package manager
>>> [here](https://github.com/andreaferretti/factor-packages) (keep in
>>> mind: this is just the work of a day, and I am still a beginner).
>>>
>>> Outline
>>> -------
>>>
>>> The central concept is that of a *project*. A project has a name and a
>>> version, and contains some vocabularies. It can also depend on other
>>> projects. There are syntax words to define the structure of a project,
>>> which currently look like this (for a hypothetical project):
>>>
>>>
>>>     USING: packages.syntax
>>>     IN: example-project
>>>
>>>     PROJECT: example
>>>
>>>     VERSION: 0.2.0-alpha
>>>
>>>     VOCAB: example.thrift
>>>
>>>     VOCAB: example.main
>>>
>>>     DEPENDENCY: thrift
>>>       GITHUB{ "factor" "thrift" "0.2.5" }
>>>
>>> One can then do the following in the listener
>>>
>>>     IN: scratchpad
>>>     USE: packages.projects
>>>     "example-project" activate
>>>
>>> This clones the repository for each of the dependencies in a subfolder
>>> of "resource:cache" and switches to the given version. It is expected
>>> that each dependency contains a toplevel file `project.factor` as
>>> above. Then, transitive dependencies are recursively fetched.
>>>
>>> After fetching all dependencies, the vocabulary roots are adjusted,
>>> and finally all vocabularies mentioned in the project or in a
>>> dependency are `require`d.
>>>
>>> If you import the package manager in your work folder, you can see a
>>> [simple
>>> example](https://github.com/andreaferretti/factor-packages/blob/master/packages/example/example.factor)
>>> in action. Just do
>>>
>>>     IN: scratchpad
>>>     USE: packages.projects
>>>     "packages.example" activate
>>>
>>> You will then be able to use, say, the `monoid` dependency, like this
>>>
>>>     IN: scratchpad
>>>     3 5 |+|
>>>
>>> I would like to get feedback on the above design, so as to understand
>>> if it is worth the effort to develop this into something actually
>>> usable. While very simplistic, I think this approach has a couple of
>>> advantages:
>>>
>>> * it does not require any change to the Factor vocabulary system
>>> * by exploiting existing SCM (git and hg are currently supported, but
>>> it would be easy to add more) one can avoid the need to setup a
>>> repository and to develop a custom protocol.
>>>
>>> Issues
>>> ------
>>>
>>> If the above looks any good, there are a number of things one can
>>> improve. All of those seem easy enough, they just requires some time.
>>>
>>> * support other SCM (svn, darcs, bazaar, ...)
>>> * improve the DSL (for instance, should we have VOCABS: ?)
>>> * add support for publishing, as well as consuming packages. This
>>> would allow to do something like `"mypackage" publish` and
>>>   - copy the vocabularies in the cache under the appropriate subfolder
>>>   - copy the definition file as project.factor
>>>   - commit the result
>>>   - tag with the declared version
>>>   - possibly sync it with online repositories
>>> * add error reporting
>>> * add standard stuff: tests, docs...
>>> * general cleanup and refactoring
>>> * GUI tools to support the workflows
>>>
>>> There are also some issues one may want to consider:
>>>
>>> * Are there any performance problems in supporting a possibly large
>>> set of vocab-roots? (I think not, I see there is a cache for this)
>>> * What about the files `project.factor`? Currently they do not follow
>>> the standard conventions about file placement. Should I change the
>>> directory structure to put them in valid places?
>>> * In every package manager there is the issue of transitive
>>> dependencies that are included multiple times with different versions.
>>> As of now, the result of the above algorithm is that the last version
>>> mentioned wins. What could be a better policy? One issue here is that
>>> other package managers - Maven, for instance - fetch the specification
>>> (in the form of pom.xml) separately from the artifact itself. This
>>> allows them to have the complete picture *before* starting to download
>>> dependencies, hence apply any policy they choose. The way I have
>>> handled it, project.factor files coexist in the same repository as the
>>> vocabularies themselves, which complicates things a bit (I have to
>>> checkout the repositories to even look at dependencies, but later I
>>> may change idea about which versions to use).
>>> * If a package manager was used, what would be the impact on the
>>> Factor ecosystem? After all, the current model of putting everything
>>> in the main repository has some advantages:
>>>   - it is easier to discover libraries
>>>   - we avoid redundancy, which at this scale is important (no need for
>>> anyone to make another json library, as it is already there)
>>> Both points could be partially mitigated having a set of officially
>>> endorsed packages, which are one click away in the listener. On the
>>> other hand, it will not be feasible forever to have everything in the
>>> main repository, and in particular this presents issues when
>>> developing libraries which are tied to external projects whose
>>> versions (and possibly protocols) do change (MySQL, Redis, Kafka,
>>> ZeroMQ and so on).
>>>
>>> =================
>>>
>>> Well, this mail was long enough! Let me know what you think about it :-)
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
>>> from Actuate! Instantly Supercharge Your Business Reports and Dashboards
>>> with Interactivity, Sharing, Native Excel Exports, App Integration & more
>>> Get technology previously reserved for billion-dollar corporations, FREE
>>>
>>> http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
>>> _______________________________________________
>>> Factor-talk mailing list
>>> Factor-talk@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/factor-talk
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
>> from Actuate! Instantly Supercharge Your Business Reports and Dashboards
>> with Interactivity, Sharing, Native Excel Exports, App Integration & more
>> Get technology previously reserved for billion-dollar corporations, FREE
>>
>> http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
>> _______________________________________________
>> Factor-talk mailing list
>> Factor-talk@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/factor-talk
>>
>
> ------------------------------------------------------------------------------
> Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
> from Actuate! Instantly Supercharge Your Business Reports and Dashboards
> with Interactivity, Sharing, Native Excel Exports, App Integration & more
> Get technology previously reserved for billion-dollar corporations, FREE
> http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
> _______________________________________________
> Factor-talk mailing list
> Factor-talk@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to