jamii
04/30/2020, 11:31 PMKartik Agaram
jamii
05/01/2020, 12:53 AMreditingBeen a long day 😄
don't follow why public/private prevent 'rediting'The distinction I was getting at is editing something "from the outside" vs having to fork. Eg if there is a function in a libary whose behavior I want to change in... • ...Julia, then I define a new method of that function in my code • ...Rust, then I search for the repo, checkout the correct version as a git submodule, change the Cargo entry to point at my local repo, edit the code in the repo, then rebase my changes when I want to upgrade the library The end result is that same - I've changed some logic and I have to maintain that diff. But in the latter case there is a lot more busywork involved. Making forking more lightweight would definitely help, but I think there is an additional point of friction in maintaining the diff as text vs maintaining the diff as a language mechanism. Eg if the code gets moved around a bunch in the file then rebasing the diff is painful, whereas nothing has to change with the override. Also version control and package managers don't play together very well at the moment. If the original version of the package gets updated the rust package manager won't even warn me about it, let alone help me rebase my changes. I think we're agreeing in principle - we both want forking to be a lightweight mechanism. You could come at this from either end - a version control system that understands the language and helps you manage forks, or a language with built-in mechanisms for composing code with changes. This kinda sounds like http://akkartik.name/post/wart-layers - did you continue working on that idea?
jamii
05/01/2020, 12:55 AMKartik Agaram
Kartik Agaram
I search for the repo, checkout the correct version as a git submodule, change the Cargo entry to point at my local repo, edit the code in the repo, then rebase my changes when I want to upgrade the library... there is a lot more busywork involved.To me this is the lethal problem with packages: by making them easy to consume we make them harder to modify. And that seems like a hard, black-or-white, us-vs-them trade-off. And if that's right, if there's no place for compromise here, I prefer keeping it easy to modify. Even if that is a harder sell, even if it means most people will gravitate towards the competition. Same goes for binary distributions of anything. Always keep source along for the ride, have the binary rebuild automatically if the source ever changes. Anything else makes the world a worse place, IMO. (I've been feeling a lot more strongly about this in the past couple of months.)
Kartik Agaram
ibdknox
05/01/2020, 5:00 AMibdknox
05/01/2020, 5:04 AMS.M Mukarram Nainar
05/01/2020, 5:29 AMI feel very cynical/fatalistic about Emacs/Lisp/Smalltalk lately. Yes, the core design choices exhibit a high trust for users. But then it seems to be inevitable that the layers on top start chipping away at this trust. Vim's package managers introduce hurdles for anyone who wants to modify sources. (See my recent war story.) How does the Emacs eco-system compare? Is it really common for people to modify packages? Racket's raco feels the same, additional complexity between me and the libraries they want me to ‘use'.
(Responding here since I don't have a lobsters account) When I first started using emacs I had the same thought, since it's really hard to override a package with the default package manager
package.el
, but there is actually a quite sane package manager that makes modifying packages trivial, straight.el
, it's based on the nix/guix model, but it's even simpler—to edit a package, you just edit the files in the git checkout it creates, that's it. maintaining your own branch is as simple as... making a git branch, and so on. Recently I had a problem when I upgraded my packages, and to switch to an older version, I just checked an older version of the package from git, and the package manager handled rebuilding and everything automatically. It felt very nice.
In a way, it's like the package manager uses git metadata as its database, so you don't need extra cruft on top.Kartik Agaram
jamii
05/01/2020, 6:51 AMjamii
05/01/2020, 6:55 AMKonrad Hinsen
05/01/2020, 12:13 PMibdknox
05/01/2020, 3:01 PMrobenkleene
05/01/2020, 3:19 PMUser modifications in computer games are a lot more common than other software types and are even possible in some big budget proprietary software. I think this can offer some insight into how this can work for other software.
The most basic version is to move all content/assets (3d models, textures, sound files, etc.) into its own subfolder tree and give it clear human readable names. Users can then simply swap out files.
The next level is to abstract how the metadata for high level objects that use these assets is stored out to a text based format like json or xml so that the assets can be reused and new high level objects defined.
This can be extended to more and more engine content, including defining behaviours and simple functions in json/xml
robenkleene
05/01/2020, 3:28 PM