-
Notifications
You must be signed in to change notification settings - Fork 26
Symex 2.0 Release Prep #71
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
Conversation
Hey all, hope everyone's doing great. I'm getting the ball rolling on this effort for anyone who's around to work on it 😊 I'll aim to document outstanding items more thoroughly in the coming days, but I think the Kanban board from last time should still roughly be current if you want to take a crack at anything in particular. I think we made an effort last time to keep the tasks pretty bite-sized. I'll review them more closely and update them as needed soon. Get pumped for Symex 2.0! 😉 👍 @markgdawson @anonimitoraf @pepperblue @doyougnu @dcostaras @devcarbon-com |
Thanks for reviewing the changes already in the branch @j-shilling ! Just to clarify, this branch is going to serve as the integration branch for pre-2.0 changes (including the WIP PRs #69 and #70 which will be merged here as opposed to master). This is partially as a way to organize for collaboration, and partially so that we can move faster as we only need to worry about testing everything once, at the end, rather than in depth for every PR. |
I've migrated and updated the Kanban board (added in the PR description) and converted all tickets into actual issues on the repo, and also added any relevant user bug reports to the board. I think the tasks are all ready to be worked on. For the numerous tree-sitter features, there are no descriptions in the issues as they should function analogously to the Lisp features. Happy to answer any questions or help in any way! I'm not a huge chat user nowadays but I'll aim to hang out in #emacs IRC as another communication option in case that's easier for anyone. If you are interested in contributing, feel free to shoot me a message there! |
For anyone who wants to play with the latest and greatest in this branch (there are lots of improvements already, and of course more exciting work still planned 😸 ), you could use config resembling this:
If you're interested in working on anything in particular, comment here (or find me on IRC if I happen to be there) and I'll assign the ticket to you. Help would especially be appreciated on:
|
dbcdc96
to
824be59
Compare
Is the plan to replace tsc with the built-in treesit library? |
@devcarbon-com That is the eventual goal, yes. It isn't currently planned to be changed as part of the 2.0 release, but I know @polaris64 has some WIP on this front so if he champions it or if it turns out to be a simple change we might include it. |
Okay, sounds good. A precursory look seems like it will be pretty straight forward, except for maybe |
Hey folks! In case you've been using this branch, there were some bugs that had been introduced a little while back (e.g. in emit and capture) that were recently fixed in #123 , and there were a number of performance improvements in #124 and #125 , so you should update to the latest to get these 🙂 One of the performance improvements is in the "leap branch" feature, which now executes in O(n) where formerly it was O(nlogn). This should make it pretty seamless to use and in my experience it doesn't cause noticeable delays in most cases as it used to formerly. Some other performance improvements were in (1) making traversal execution tail-recursive, which allows it to be more memory efficient (since the in-progress results are passed into recursive calls instead of retained in the calling scope to be combined with the result after recursion). And (2) the "recursive" features like recursive tidy/indent ( There are a couple of introduced bugs, however -- (1) counts/quantifiers don't work for deletion at the moment, and (2) "soar" across trees ( Enjoy, and please let me know if you run into any issues while using this branch. |
Hurray! 🎉 Also, one of the the "bugs" sounds like a feature I want - a leap-or-soar command :D |
Good to know! One of the reasons leap doesn't already soar is because accidentally crossing trees formerly had a high cost. Since the cost isn't as high now, we could potentially make leap-or-soar the default behavior, with soar being an explicit "leave this tree." |
Hi @countvajhula :) Apologies for being so quiet, it hasn't been because I'm not excited by Symex and Rigpa, work has just been nuts for the last 2 years. For better or worse that has now come to an abrupt end and I'd love to be at least a bit more involved in the projects. I'm going to start by just catching up with the developments of the last year and a half. Cheers, |
Hi @dcostaras . Congrats! This is the first step on the road to liberation from the reductive capitalist imperatives that imprison us all! 😆 Less flippantly, I'm glad to hear that. Welcome back. I'm currently taking a short break from Symex to focus on Jewel, but I'll be returning to work on 2.0 soon. Re: what you could do, I think directly helping on 2.0 release work (e.g. tree-sitter, package decomposition, DSL, refactoring, etc.) would be tricky to coordinate in the immediate timeframe, but here are some broad things on my mind that are more decoupled and could be good to work on:
I realize that's a lot of stuff to mull over but in case you can help with any of it, that would be helpful and appreciated. If you decide to work on any component, please do reach out to anyone else who may be on the relevant threads in case they are interested in collaborating or if they have any thoughts or WIP on it. Let me know if I can help clarify anything in particular! |
Hi @countvajhula haha, don't get me started on capitalism, the ultimate local maximum! Thanks for the detailed response, in reading the mentioned threads and other issues your thorough communication is beneficial :) Due to a rising sense that my Doom Emacs config and Evil/Symex hacks (which would be almost entirely solved by using Rigpa) are starting to grow a life of their own (maybe time to declare emacs config bankruptcy again!) and some issues with RSI, I've been thinking about how to do things differently. I've never managed to get Rigpa setup properly on my config; so, I think, that is where I'm going to start. But also I've been looking at other modal paradigms such as Kakoune and Helix and other Emacs model systems like Meow and Boon (@devcarbon-com, it looks like you're also currently looking at Meow specifically). This all makes me quite interested in the work towards a cleaner modal system for use in Rigpa and Symex. I know that's not a good first goal as I don't have the required experience with Evil, Symex and Rigpa and it's not an immediate priority for Symex/Rigpa anyway but that's what's tickling my pure aspirational and intellectual interest. Once I've got Rigpa and Symex WIP 2.0 working I'll have a look at the above smaller, more immediate tasks. |
BTW, is general project communication happening on GH issues/PRs and the Symex 2.0 board? |
Yes, general project communication is happening on GitHub Issues/PRs and there are no other channels in use at the moment. If you have any difficulties setting up Rigpa or if the instructions are inaccurate / non-ideal / don't work out of the box for any reason, please report that as it's a bug 🙂 |
Excited to see this come to life soon! For now, what I really only want is some vim-like navigation of the syntax tree for non-lisp languages with emacs-29 treesit, e.g. for org mode. |
Hi @RomeoV ! Being able to navigate org documents with Now re: the 2.0 effort, it's high time for a status update so here it is: I believe the 2.0 work is reasonably close, but there's only so much time in the day and lately I've been focusing on Attribution Based Economics (which Symex is one of the pilot projects for! I'm very excited about the possibilities that ABE offers for open source economic viability as there have been some very interesting breakthroughs lately that I believe resolve some questions I myself have felt were unanswered by ABE thus far), and recently gave a talk at the Foresight Institute on that subject. I will be giving another talk related to ABE at RacketCon in October, so I don't think I will have a lot of time for a deep push on 2.0, but it's silly for so many improvements to be sitting in a branch not being used. So here's what I'm thinking: I can aim to do a triage of the 2.0 work in the near future and retain anything that is a clear improvement over master, while being more conservative with changes that aren't quite there yet. The goal would be to merge as much of this into main as possible so that further work can continue on the main branch. What isn't done yet:
On next steps, I will aim to triage this branch and get it into a reasonably mergeworthy form. At that stage, we could use help with testing on both Lisp and especially Tree Sitter. I will post about that when we're there. Thanks again for your interest and support. |
Thanks for the detailed answer. Just one thought from my side: I do think with the inclusion of treesit in emacs, many people are looking to switch away from having both I think a triage for 2.0 would be useful indeed, there can always be a 3.0 release ;) Good luck also with your other work! |
Heads up: I will be rebasing this branch sometime today to bring it up to date with master. |
bab9c37
to
9c43278
Compare
This branch has been rebased! If you happened to have work in progress that was based on this branch, you could use these instructions to bring it up to date and reflect the updated base branch correctly. |
this might have been changed formerly to specifically support building the symex package using an older version of the makefile. the present makefile explicitly cd's into these folders so that should be OK on its own without modifying the workflow working directory.
also specifically build the symex-core package, for now, as that has no other dependencies.
Noticed naming inconsistencies |
- consistently use "backward" over "backwards" - use "append" consistently with Vim/Evil use (address cr)
@nairujolc OK, done. |
The former scripts use package.el to install the packages (via Cask), which looks for dependencies on configured package archives. Since Symex packages aren't on MELPA, these checks fail to find them and signal an error. These modified scripts bootstrap Straight.el and install the packages directly from their source repos, and we no longer use package.el or Cask for this purpose. This also uses a forked package-lint that recognizes the "package suite" structure (i.e., composed of subpackages) proposed by Symex.
Thank you @nairujolc for the review. If anyone else has any final feedback on this PR, please let me know. Symex has been taken down from MELPA, which was the last blocker for release (we'll continue the conversation with them on a longer timeframe). I'm currently working on getting CI to pass, and will aim to merge this as soon as that's showing as green. |
Technically, as we are guarding all calls to treesit* APIs, it should still work on older versions of Emacs, just, without treesitter support (e.g., you could still use it with Lisp languages). But attempts to tell the linter and bytecompiler to ignore these functions on older versions of Emacs (via, e.g., `declare-function`) didn't seem to have any effect, so we'll just bump the CI version tested so that the results are accurately reported (as far as we know). The actual dependency in the Symex `Package-Requires` header remains `25.1`, so we still support installing Symex on older versions of Emacs.
the lint output is dumped at the very end on CI instead of as part of the output for each package as it is linted (which does work correctly locally, somehow). it's just a minor cosmetic issue though, so leaving off on this for now.
OK folks, we're ready to roll out 🏍️ 😎 Unless there are review comments (which are very welcome), I plan to make no further changes on this branch, and will merge this, perhaps after taking a break and enjoying some ice cream this afternoon. Or I might merge it tomorrow, just to give a little more time for any last minute feedback 🙂 After merging, I have the following immediate items lined up to do on the main branch:
|
Thank you all for your incredibly valuable contributions on this long journey 🌆 🚂 💻 🐿️ 🌳 And now, please upgrade to 🥳 Symex 2.0. 👯 |
Summary of Changes
All the changes needed for a 2.0 release, including polishing the tree-sitter functionality, improvements and bug fixes.
Trying out this branch
Testing appreciated!
Put this in your Emacs init config (if you're using Straight.el --- for Elpaca you'd likely enable
use-package
integration and then specify the source via:ensure
):Note that these recipes aren't on MELPA and so point directly to GitHub.
NB: sometimes, you might have stale compiled versions of the modules that don't get updated when you just pull the fresh changes and restart Emacs, and that could result in weird behavior 🤷. So for good measure, delete these built modules each time you
git pull
. In Straight.el, this amounts tocd .emacs.d/straight/build && rm -rf symex
. You may also occasionally needcd .emacs.d/straight/build && rm -rf lithium
and likewise for the other dependencies listed above!Remaining Work
Release steps
master
→main
WIP
Already Done
(reverse-chronological, most recently completed at the top)
Release
None yet.
Development
See the ✨ Kanban Board ✨
.
) functionality (Repeat all Symex commands by default, exclude non-transformations #154 )evil
in the implementation of features (incl. eliminatingevil-surround
) (Replace evil -- first pass #118 )effect
form to be able to specify side effects to traversals (Side effect form #124 )Not Doing
Public Domain Dedication
(Why: The freely released, copyright-free work in this repository represents an investment in a better way of doing things called attribution-based economics. Attribution-based economics is based on the simple idea that we gain more by giving more, not by holding on to things that, truly, we could only create because we, in our turn, received from others. As it turns out, an economic system based on attribution -- where those who give more are more empowered -- is significantly more efficient than capitalism while also being stable and fair (unlike capitalism, on both counts), giving it transformative power to elevate the human condition and address the problems that face us today along with a host of others that have been intractable since the beginning. You can help make this a reality by releasing your work in the same way -- freely into the public domain in the simple hope of providing value. Learn more about attribution-based economics at drym.org, tell your friends, do your part.)