Well, every closure proposal, including BGGA, are written so that a
prototype can be made (or in the case of BGGA, exists!) that runs on a
plain jane vanilla JVM 1.6. Almost all of the heavy lifting BGGA does
can technically be represented in vanilla java source, though it'll be
unwieldy, ugly, and a lot of boilerplate. However, I imagine such
literalesque plugins are capable of producing bytecode directly.

On Sep 10, 6:12 pm, Joshua Marinacci <jos...@marinacci.org> wrote:
> On Sep 10, 2009, at 8:15 AM, Reinier Zwitserloot wrote:
>
> > In an AST based editing environment, this problem goes away. At write
> > time you must of course have the plugin available to you, at which
>
> Not necessarily. If the AST spec was written correctly you could have  
> some sort of extensible block system (plugins, essentially).  If you  
> are writing a regex block then AST would contain some encoding of the  
> regex along with some metadata about the plugin that created it.  This  
> metadata could include a URL to download the plugin so that it works  
> when you are in another IDE. It would also contain some sort of  
> compilable representation, meaning you could still compile the code  
> even if you don't have that particular plugin available to you. You  
> just wouldn't be able to edit it.  Photoshop files do this. All text  
> layers are vectors but keep rasterized metadata.  If you don't have  
> the font that the layer was created with then you can't edit it, but  
> you can still view it and composite it with other layers. It degrades  
> gracefully. Now imagine if Photoshop not only told you the font you  
> were missing, but offered to download it as well. AWESOM-O!
>
> > lit:Patt(ctrl+space to autocomplete it to java.util.regexp.Pattern)
> > and then you type a regular expression; the job of marking the end is
> > trivial where in raw character typing mode it's almost unsolvable.
>
> > You can take this same idea even further and add support for macros:
> > foreach could have been implemented as a macro, but this time, the AST
> > node carries its origin  with it. This way, I can switch my editor at
> > will, and type/read either in macro syntax, or in the desugared form.
> > Making the IDE extensively pluggable would be so much easier. There
> > would be no closure debate at all - those who like em use a macro
> > plugin that renders closures as Anonymous Inner Class constructs.
>
> I didn't follow the closure debate to closely, but I'm not sure this  
> is true. Aren't there things which closures can do (semantically) that  
> anonymous inner classes can't? Was it just syntax sugar?
>
> > Because whitespace, import statements, and other ambiguities melt
> > away, in certain ways the canonical textual representation (which ISNT
> > how you're supposed to edit things and would be extremely unwieldy) is
>
> Yes. It would probably be XML just to make life easier for tools (and  
> to allow by hand editing in the rare cases when you must fix  
> something) but 99% of the time the AST on disk representation is  
> simply a black box. You must always use the tools.
>
> > The biggest issue remains that so much of the entirety of the
> > development ecosystem is built around the notion that source lives as
> > raw streams of characters. There would definitely have to be a human-
> > readable canonical representation so you can interop with such tools
> > until they also see the light. There may also be an interesting lesson
> > in how many typical geeks doing professional writing use something
> > like HTML or LaTeX, writing it essentially 'raw', instead of using
> > open office or word. I think there are different reasons for that, but
> > it is nevertheless interesting to see that shiny, graphical tools are
> > losing to raw char streams in some areas.
>
> Yep. Backwards compatibility is a bitch. :)
>
> - J
>
>
>
>
>
> > To the galaxy, and beyond!
>
> > On Sep 10, 4:49 pm, Joshua Marinacci <jos...@marinacci.org> wrote:
> >> I suspect you are right. I've asked this question of many people and
> >> gotten a variety of reasons why it won't work. They reasons are  
> >> always
> >> valid,  but they always boil down to the same thing: compatibility
> >> with existing systems.  If we could start over fresh *for  
> >> everything*,
> >> then I think a AST based language would quite well, and enable lots  
> >> of
> >> very interesting things. I've changed the subject line since this is
> >> really getting off topic now.  My goal is to just think meta for a
> >> second.
>
> >> If we could design a language, and all of it's tools, from scratch
> >> today; then how would we do things differently?
>
> >> == Proposal ==
>
> >> Consider a language that is defined not in terms of tokens but in
> >> terms of it's abstract syntax tree (I'm not a compiler guy so I hope
> >> I'm using the right terms here). Instead of saying:
>
> >>         conditional is defined by 'if' + '(' + mathematical  
> >> expression + ')'
> >> plus optional '{' then a clause etc.
>
> >> what if it was defined as:
>
> >>         conditional is defined by a boolean expression followed by  
> >> two blocks
>
> >> The details such as the 'if' keyword, requiring braces, using
> >> parenthesis, etc. would all be up to the individual developer (or at
> >> least defined by their tools) rather than defined by the language.
> >> Some sort of neutral binary or XML format would be the true storage
> >> mechanism and everything else we think of as "the language" would be
> >> defined at a higher level on a per developer basis.  The neutral
> >> format would be semantically equivalent to the code that the  
> >> developer
> >> sees on screen, but specific entirely to them.
>
> >> == Advantages ==
>
> >> There are huge advantages to this approach.
>
> >> * tabs vs spaces goes away. You see whatever you wish to see, and it
> >> doesn't affect other developers.
>
> >> * comments could be nicely formatted rich text, including lists,
> >> tables, and diagrams.
>
> >> * Line numbers in stacktraces:  Consider the work required to turn  
> >> the
> >> location of the bytecode exception back into a line and column  
> >> number.
> >> It would be easier to map back to the AST. The compiler / runtime
> >> would emit some sort of AST marker which the IDE would convert back  
> >> to
> >> it's visualization of your line / column (assuming you are still
> >> editing in terms of lines and columns). Most likely it would  
> >> highlight
> >> the exact problematic branch of the tree, not just a line and column.
>
> >> * refactoring becomes far easier, and could enable far more
> >> interesting refactoring changes than the simple ones we have to day.
>
> >> * since we are using a binary / xml blob for the real storage, we
> >> wouldn't have to worry about files and filenames anymore. What would
> >> matter is modules and compilation units. The actual files it's stored
> >> in become irrelevant.
>
> >> * code analysis: tools which analyze your code should be able to do a
> >> better job when they work at the 'meaning' level rather than the
> >> 'syntax' level.
>
> >> * code visualizers: It should be trivial to build things which draw
> >> UML diagrams of your beans, or show nested structures with darkening
> >> backgrounds. Almost all of the cool things you want to do boil down  
> >> to
> >> visualizing a branch of the tree, making possible all sorts of very
> >> interesting visualizations.
>
> >> * many syntax errors go away: since the IDE knows what the valid tree
> >> should look like, it can prevent anything which would create an
> >> invalid tree. rather than scanning the whole file 20 times a second  
> >> it
> >> can look at what you've done in the last few seconds that just made
> >> the tree invalid and isolate the error to that. the result is more
> >> accurate error reporting, even before you get to the compiler.
>
> >> * never ever worry about some other developer f**king up your
> >> indentation, line breaks, curly brace scheme, etc.
>
> >> * the potential to use different keywords, line terminators, and  
> >> other
> >> syntax of your choosing and have it be completely isolated to your
> >> environment. No other developer is affected.
>
> >> == Cons ==
>
> >> * You've got to use an IDE. Yes, no more blindly editing text files
> >> with vi and emacs. Sorry. It's the 21st century. I edit images in
> >> Photoshop, not the command line. I will now edit programs in a
> >> programming tool.
>
> >> * Youv'e got to write IDE support for this. Building this new  
> >> language
> >> requires also building an IDE plugin that understands it.
>
> >> * Text diff tools (and therefore source control systems) would have  
> >> to
> >> be updated to understand this binary / xml format. In theory the  
> >> diffs
> >> should be better since you'd have a better idea of what semantically
> >> changed (tree diffing, basically), but someone's still go to write  
> >> the
> >> tools to do it.
>
> >> * Two developers working on their own machines would see the code
> >> views they expect. One developer trying to help a second developer on
> >> his machine would see a view completely unfamiliar to what they  
> >> expect.
>
> >> * Web based code review tools would show a normalized view that is
> >> unfamiliar to all developers, or else code review tools would have to
> >> be a new module inside the IDE to pick up the prefs of the developer
> >> doing the reviewing.
>
> >> Crazy idea, but it's the 21st century. We can handle it.  Now if
> >> you'll excuse me I've got to go take my flying car in for repairs
> >> before my weekend trip to Mars.
>
> >> - j
>
> >> On Sep 10, 2009, at 1:28 AM, Peter Becker wrote:
>
> >>> And it alls starts with the language specs still being written at  
> >>> the
> >>> abstraction level of a concrete syntax. Chapter 1: Tokenization.
>
> >>>  Peter
>
> >>> Joshua Marinacci wrote:
> >>>> RANT!
>
> >>>> Why, in the 21st century, are we still writing code with ascii
> >>>> symbols
> >>>> in text editors, and worried about the exact indentation and  
> >>>> whether
> >>>> to use tabs, spaces, etc?!!
>
> >>>> Since the IDE knows the structure of our code, why aren't we just
> >>>> sharing ASTs directly, letting your IDE format it to your desire,  
> >>>> and
> >>>> only sharing the underlying AST with your fellow developers.
> >>>> Encoding,
> >>>> spaces, braces, etc. is a detail that only matters when presented  
> >>>> to
> >>>> the human.
>
> >>>> What we do today is like editing image files from the commandline!
>
> >>>> On Sep 9,
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to