What if the code segments were hashed by zipper coordinates instead of line-column location? I like this idea of structurally navigating the code as an AST of EDN :)
John On Mon, Dec 11, 2017 at 7:55 PM, John Newman <john...@gmail.com> wrote: > This might be a step towards a more clojury way: http://blog.datomic.com/ > 2012/10/codeq.html > > John > > On Mon, Dec 11, 2017 at 7:53 PM, Didier <didi...@gmail.com> wrote: > >> I'll have a look at all these other projects, its very interesting. >> Unison seems to embody the spirit or Richs talk about never changing >> anything too. I guess I was trying to think how could you bring some of >> this to Clojure. And in a way, if the constructs like functions had an id >> and a name, you could start building out things like that more so. Which is >> where I thought about the potential of considering the existing name as an >> id, and having something else for naming the construct. >> >> I guess, if I think about it some more, Clojure could save its code as >> the AST straight up using EDN. Someone could build an IDE on top of that, >> which never allows you to change the text, but only works directly at the >> EDN level with the clojure code as data. It would be a lot of work, but >> possible I think. >> >> >> On Monday, 11 December 2017 16:12:37 UTC-8, Eric Normand wrote: >>> >>> Hi Didier, >>> >>> Are you familiar with Unison (http://unisonweb.org/)? It has this same >>> feature. Functions are named by a hash of their code (the AST). Names refer >>> to hashes. So if you want to recompile a function, you can optionally >>> choose newer versions of all of the functions. But changing a function's >>> code does not make the old version go away. Other functions compiled >>> against the old versions will still use the old versions. It basically >>> pushes the version control down to the function level instead of the whole >>> project. >>> >>> The effect was that you could have a dynamically-recompiled language >>> experience without breaking anything that was already compiled. You could >>> redefine everything about a function (it's type signature, it's code, etc) >>> but existing stuff would keep working. Then when the function was to your >>> liking, you could recompile everything to use the new version. >>> >>> Eric >>> >>> >>> >>> On Wednesday, December 6, 2017 at 11:37:10 PM UTC-6, Didier wrote: >>>> >>>> Warning: This is the spawn of an idea, not very well refined, and that >>>> is little extravagant. >>>> >>>> I've been doing some hammock time, and I've been thinking that names in >>>> a programming language are kind of a complecting of two things, the human >>>> readable form, and the machine identifier. What if a function always had >>>> the same name, which never changed, from the moment the function was >>>> created. This would be fine, until a human finds it didn't like the name >>>> anymore, and thus a refactor of the name would occur, requiring to change >>>> all references to the function. This is also true say of a spec, if you >>>> want to change the name of the spec, its a big refactor to update all usage >>>> of it. So var names and spec names are troubling in that if humans want to >>>> refer to it differently, they also break all machine reference to them. >>>> >>>> So I thought, how awesome would it be if each named things in a >>>> programming language would be given a unique machine name, which can be >>>> used everywhere, and the name you saw was just meta-data for the programmer >>>> to have a more human readable/descriptive name. >>>> >>>> The problem is I'm not sure how to do this with a text based >>>> programming language. I can imagine a language where constructs would be >>>> first class, not based on text, and thus all construct could be assigned a >>>> unique id and a name, and the IDEs could easily hide the unique ids and >>>> project a view of the construct with the human name instead. Code would be >>>> stored in a structured format, and obviously a standard editor would not >>>> work, and an IDE of some form would be required. >>>> >>>> So right now, my idea is that maybe you can compromise. If you added >>>> support for Vars and specs, so that they can have like a doc-name. It would >>>> be like a doc-string a bit, but it expects a name instead. That name could >>>> be the human readable name, you could change it freely. The normal var name >>>> or spec name would continue to be used as normal to refer to this var/spec >>>> from other code. At its most basic it means you can have the normal name be >>>> anything, maybe a name you don't like that much, or you could go further >>>> and make it a guid if you want. Then you could make the doc-name the name >>>> you want to use when talking to other people, or when people read the code. >>>> Now IDEs could support this doc-name, so they could show the doc-name in >>>> place everywhere you have code referring to the normal name. They could >>>> auto-complete from doc-name to normal name, etc. >>>> >>>> So an IDE could still kind of hide this for you, and make it appear >>>> like everything is just doc-name pointing to each other, and refactoring >>>> would not require changing all code that refers to it, but actually its >>>> just a change of the doc-name on the var or spec being pointed to, but the >>>> IDE could quickly replace the new doc-name in place of the normal name >>>> everywhere else. >>>> >>>> Where it would be maybe a bit more confusing, is when using an editor >>>> that would not support doc-names to that extent. In those cases, you can >>>> ignore doc-name, consider it just like one more piece of documentation. >>>> >>>> Doc-name could be optional too, so if you plan on working by yourself, >>>> or just in a simple editor, you can ignore this whole thing and work as >>>> normal. >>>> >>>> Now maybe this whole thing is solved by having a powerful renaming >>>> refactoring tool that can hunt for all usage and update the name everywhere >>>> in a sound way, but that's harder to do in Clojure, and still breaks when >>>> its a library for example, as you can't just refactor all consumers without >>>> having both access to their code base, and even if you do, its tedious to >>>> pull down everything in your desktop and set it up for such a refactor. >>>> >>>> I'd be interested in thoughts about this, even if its just, that sounds >>>> like a terrible idea :p. >>>> >>>> Thanks. >>>> >>> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clojure@googlegroups.com >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.