Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

package management system #432

Closed
shabbychef opened this issue Feb 21, 2012 · 15 comments
Closed

package management system #432

shabbychef opened this issue Feb 21, 2012 · 15 comments
Assignees
Labels
priority This should be addressed urgently
Milestone

Comments

@shabbychef
Copy link
Contributor

This is probably v 2.0 or beyond, but a good system for contributing/installing/maintaining packages (or modules, libraries, whatever they are called in Julia), like that in R via CRAN, would allow developers to contribute to the project without having to touch the core repo. Making the package system frictionless goes a long way towards growing the community. (Compare R to Matlab in this regard, where the Mathworks has a vested interest in selling toolboxes, so community packages take a back seat.)

@StefanKarpinski
Copy link
Member

Yes, absolutely. We're not quite at that point yet, but when we are, we most definitely need this. I would actually like for this to be git-based. Not because git is the end-all-be-all, but because it's what we use, it's popular, and it allows much easier management of different versions.

@ViralBShah
Copy link
Member

We need to decide if the package management is source-based or binary-based or both. Source based is perhaps easiest, but requires the user to have compilers installed, and you can base it on git.

Also, I think it would be great if pure julia packages can simply be loaded using a URL and cached. For example:
load("http://foo.com/bar.j")

The bar package can then be cached locally, so that you don't need to load it remotely every single time.

@ViralBShah
Copy link
Member

It would be nice to have remote loading of modules as well. We can even have rules, so that the package provider can provide binary versions as well, but if a certain binary package is not available, the source gets pulled and compiled.

Also, we'd need good dependency management, like Debian's APT.

@o-jasper
Copy link

I think it might be a good idea to allow users to say what their dependencies are, and maybe then have checked. If methods are extended in other modules than they are created would probably make this impossible though.

Another idea is to allow users to make modules point to where tests/guied versions/documentation is. If namespacing/modules are hierarchical, some-module/test could be a way. (just ftr Made a mention here)

Also probably a good idea to (optionally) add a version of julia. (somewhat stupidly)i failed at running some python programs because i didnt realize i needed python2.

@adamramadhan
Copy link

but why in git? why don't make something new like julia? i love git, i use git. but i think a good and strong language should be independent.

@StefanKarpinski
Copy link
Member

@adamramadhan: git already solves the problem we want to solve (distributed version control) and using it allows us to leverage amazing tools like github to accelerate the pace of development. If a Julia package is a git repo by definition, then people are forced to use the de facto standard distributed version control system for Julia packages. Submitting improvements and fixes to packages becomes trivial and friction-free. I'm also certainly not about to invent my own version control system when a perfectly good one is already does everything I want.

@johnmyleswhite
Copy link
Member

I'm totally on board with the Git strategy for managing packages, but I think the community will need to force people to use tags to create a useful version system. It's really helpful to be able to tell people to use a version of your package that's 0.5-7 or higher. Having to use commit hashes seems a lot uglier.

@StefanKarpinski
Copy link
Member

Indeed. We have full support of semantic version numbers — see base/version.jl. This is how Julia packages will be numbered and tagged.

@edwindj
Copy link

edwindj commented Jun 4, 2012

Another source of inspiration imho is npm (node.js package manager):

It allows for:

  • per package dependencies (which can be a pain in R, having installed two packages each depending on a different version of a third package)
  • Semantic versioning
  • directory-based, local, global, tar,gz-based and git-based repositories (http://npmjs.org/doc/developers.html)

and of course a lot more.

@adamramadhan
Copy link

yes npm for node.js is quite good. i know git have all the features, but still for me, (a beginner programmer) it would be very easy to deal with. npm install x and make a folder that can we include seamlessly. its just so easy.

@adamramadhan
Copy link

thanks for the 1.0 milestone :) :octocat:

@ghost ghost assigned StefanKarpinski Jun 30, 2012
@dcampbell24
Copy link
Contributor

I would also suggest looking at how Go handles this. They have a simple yet elegant system that allows for packages to be pulled from several different version control systems and uses urls as a way of avoiding namespace clashes. The way they handle dependencies is designed to ensure fast compilation.

I also like how they determine what is and is not exported from packages, but using capitalization does not look like it will work with Julia's current conventions. Using short names for packages and never eliding the package name also seems like a really good design choice. This makes maintaining code much easier as it is easy to figure out where a function or variable came from and avoids problems that occur from having name clashes between variable names across packages.

http://golang.org/ref/spec#Packages

@adambom
Copy link
Contributor

adambom commented Oct 16, 2012

I've worked a lot with npm and a little bit with gems and they are both pretty good. Wouldn't it make sense to fork one of those systems and just use that, rather than starting from scratch?

@pao
Copy link
Member

pao commented Oct 16, 2012

@ViralBShah
Copy link
Member

Closing this since the package management system is already in place.

StefanKarpinski pushed a commit that referenced this issue Feb 8, 2018
* Add Compat.Unicode for standard library Unicode

* Define titlecase only on Julia 0.5

* Remove normalize and isassigned from exports

* Add textwidth deprecation
cmcaine pushed a commit to cmcaine/julia that referenced this issue Nov 11, 2022
vtjnash pushed a commit that referenced this issue Sep 1, 2023
Stdlib: SparseArrays
URL: https://github.com/JuliaSparse/SparseArrays.jl.git
Stdlib branch: main
Julia branch: master
Old commit: 54f4b39
New commit: 4e6776a
Julia version: 1.11.0-DEV
SparseArrays version: 1.11.0
Bump invoked by: @KristofferC
Powered by:
[BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl)

Diff:
JuliaSparse/SparseArrays.jl@54f4b39...4e6776a

```
$ git log --oneline 54f4b39..4e6776a
4e6776a faster cat performance (#432)
```

Co-authored-by: Dilum Aluthge <dilum@aluthge.com>
Keno pushed a commit that referenced this issue Oct 9, 2023
* Fixes #432 ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
priority This should be addressed urgently
Projects
None yet
Development

No branches or pull requests

10 participants