Friday Sep 02, 2005

The madness begins

Welcome to my weblog, said the spider to the fly ...

I have a long list of issues that I might expound upon here, on the egotistical and satisfying assumption that you, gentle reader, have nothing better to do with your time than read this (or, more realistically, that you find that reading blogs beats working).

Expect postings on closures, tuples, dynamic language support, generics, verification etc. However, I might as well start off with the sexiest issue on my list.

People that know me are aware that I don’t regard the Java programming language as the be-all and end-all of programming languages.

In fact, several people at Sun, past and present, would love to spend their time on a new language, free from the shackles of compatibility. So while much of this blog will be about the existing language (and VM), why it is the way it is, and ideas for where it is going, some of it will be about some semi-mythical future language. Graham Hamilton already gave it a name: Kenya.

We would like to hear ideas for the next-big-thing in programming languages. Maybe, just maybe, the company will even start giving grants to academics to study these ideas. I, for one, welcome brutal critiques of mainstream programming languages. Brutal critiques that make sense are even better.

Now, don’t expect me to actually respond to any comments on this blog. I almost certainly won’t; I may be too busy, or I may think you’re too stupid, crazy, evil or all of the above for me to spend time on your rantings. Nevertheless, do try to be articulate, polite (yes, brutal and polite - no contradiction there) and above all, intelligent. I don’t tolerate fools gladly, as that only creates a feedback loop that breeds more fools.

Comments:

Well... what about the Groovy stuff out there? Doesn't that seem like a language group worthy of support?

Besides that... looking at the whole Ruby phenomenon should give some insight. I think that language has hit the perfect sweet spot and facilitates the creation of DSLs (as can be seen by Rake, RoR,...) and I assume that it'll be major player in the next couple of years (thanks to Ruby on Rails).

Ruby also includes Continuation support, which seems to be a popular theme recently (due to the different continuation based web frameworks).

Anyway... shouldn't you guys be talking to Guy Steele and his happy crew of language smiths... Fortress seems like an interesting project.

Posted by murphee on September 04, 2005 at 03:54 AM PDT #

A rough list in increasing importance: Ad "classical" linguistics: modern refactoring Java IDE's alleviate a lot of the pain that the imperfect language definition causes (type inference for a local definition, for example). You can read this in both directions: (pro language:) hints that an IDE can give nowadays should be implemented in the language definition (a ::= <expr> meaning the same as <expr> + Extract local: "a"), or vice versa, Java+IDE is actually good enough, concentrate your efforts on something else. One area to investigate: Spring has made it incredibly popular to describe one's "architecture" in XML definitions. It's painful, no static checking, yet, people prefer it over Java source. XML: I deal a lot with "semistructured" content. The roundtrip between Java and XML-Template languages is painful. Language constructs for dealing with something akin to "the infoset" are welcome. Ad hoc tuple types. C-Omega feels quite good. Paramount: address "system" issues: updating continously running systems, reconfiguration, reliable shutdown/reboot of subsystems. The current approach is pitiful and reminds me of cooperative multitasking OS's: "Library leaks resources? Please reboot the entire app-server." The Isolates effort will address some of it. .NET app domains look interesting, too. Language support? Value types w/ safe and efficient marshalling, proxies?

Posted by Matthias on September 05, 2005 at 04:13 AM PDT #

Dynamic-runtime inheritance, please! I would like to be able to change the parent instance (within reason) at runtime.

Posted by Jordan Zimmerman on September 06, 2005 at 10:27 AM PDT #

opa

Posted by 200.187.151.66 on September 06, 2005 at 12:29 PM PDT #

Innovation is good, but in some point of time one needs something stable to work with. I think both Java and .Net are such a thing and I do not reckon they will be replaced by anything else in enterprise develoments during at least the next decade, and probably more. Complemented and augmented yes, but not replaced. In theory, the market buys only what proves a ROI (although marketing and hype often contradice this), and new languages cool to computer geeks do not neccessarily fulfill these premises. Even less given the intertia provided by the current development stacks.

Which are much bloated, by the way; a lot of ado for less than one would expect, in many cases. Trends should go towards simplification and better integration with XML in general and SOAs in particular. Since these are actually the current trends (JEE 5, upcoming Java versions) maybe I am just speaking of the present, and not the future.

I do not think that the thing that could make actual breakthroughs in the future would be a new programming language, but smarter computers. I do not like the current look of the semantic web and the like, but in some point of time that kind of things will end up being true.

Regards

Posted by Javier Cámara on September 07, 2005 at 12:25 AM PDT #

"...for the next-big-thing in programming languages." ...

IMHO it has already happened with Ken Iverson's programming language J: <url>http://www.jsoftware.com</url>

...and even with evolutionary OO versions of APL <url>http://www.dyalog.com</url>

Cheers

Posted by lophiomys on September 07, 2005 at 01:28 AM PDT #

A few suggestions: * In a statically typed language type-inferencing, as found in ocaml, would be an improvement I think. * Having multiple dispatch would mean, I think, that you could have generics without wildcards. * Language support for delegating: class A implements interface B by just declaring a delegate object that implements B. And then being able to override selectively methods without client objects knowing the difference. * Existing OO languages reflect the 1990 notion of reuse on the class granularity. Nowadays (re)use is done on the granularity of a whole API or module. Language support for declaring the published interface of this API. Implementation classes can not be called from without. * Language support for declaring architectural constraints; i.e. a set of classes/packages declares to conform to an coding convention/architectural constraint; for instance it declares to be a business service so it is not allowed to call classes that declare to be presentation layer. This would facilitate programming the large. This can be implemented right now by using aspectj I think. My colleagues go on and on about Ruby and Spring. I tell them that I'm way ahead of them and that I code exclusively in Kenya.

Posted by Joost de Vries on September 08, 2005 at 12:33 PM PDT #

Just a few more: * Language/VM support for dehydration of blocking threadsand rehydration on the event of unblocking. This would enable very scalable applications with respect to using threads. This is similar to what business process engines do. It would make it a lot easier to develop software parts that are conversation oriented such as userinterfaces, collaboration between systems/processes and protocols. * State-machine support at the language level. * Object-constraints. Language support for declaratively asserting constraints on objects; the obvious example being not-null support, etc. similar to the way it works in databases. Probably more interesting constraints on object-graphs could be invented; for instance constraints the describe clusters of objects. This can be implemented right now using aspects and annotations I guess.

Posted by Joost de Vries on September 08, 2005 at 01:02 PM PDT #

Ok, you called this 'let the madness begin' so here are a few more: * using dataflow analysis in combination with selected language features to prevent nullpointerexceptions * using dataflow analysis to facilitate unittesting in a similar way to the Agitator product

Posted by Joost de Vries on September 08, 2005 at 01:18 PM PDT #

While I'm the sworn enemy of operator overloading in Java, I would be fascinated to see their implementation in some other language IFF their use could be intelligently limited to "number-like" entities.

I'm also curious to see if transactionality could be added at the language level - something like this hand-waving monstrocity, perhaps:

transaction(mydb,mymq) {
   Object foo = materialize(mydb);
   mymq.send(foo);
}

My two cents...

Posted by Dave Minter on September 11, 2005 at 11:45 AM PDT #

After Objects (nouns) ,The next generation of software languages should capture abstractions/constructs like cause and effect based on event chains (verbs). most current linguistics schools agree now that simple sentence structures reflect this cause-effect structure. Such constructs would bridge the gap between programmers and analysts (who use natural language). It would also close the gap between models and code implementation. In Business Domain, Peter Coad's Domain neutral Component approach provides the event chain abstraction and interaction of objects, roles etc. within the events. A language construct for event chains based on this approach could capture the event chain/cause effect abstraction and bridge the gap between Modeling language like UML and code.

Posted by Balasundaram Ramaswamy on September 15, 2005 at 10:28 PM PDT #

Some ideas:
  • the language should not necessarily be small (because then you'll get large libraries anyway), but should rather be very expressive yet clean and easy to read. E.g. do not limit the combination of language constructs if not absolutely necessary. Why am I forced to wrap a lambda expression in an interface?
  • syntax should be intuitive (actually do what it appears to be doing) and not hide certain consequences (e.g. things like aliasing should be clear, final reference type attributes should be immutable)
  • do not assume the programmer is a bad programmer: allow him/her to do as many things as possible, so provide global variables, macros, operator overloading etc. I want to be able to add two BigDecimals together using a + operator! Good programmers can and will use these constructs properly, and bad programmers will write bad and unreadable code anyway. But don't include a goto statement. ;-)
  • support for immutable objects and simple (data only) objects
  • real types: 'interfaces' with attributes (Java interfaces already have (semantic) clashes with getters and setters, so there is no real excuse) and semantics (pre & post conditions, invariants) added
  • classes that implement multiple, clashing interfaces should be able to give multiple implementations for the same method signature; the calling context (the declared interface of the object through which the message is called) should determine which is actually executed. E.g.
    class Cowboy implements Drawable, Shooter {
      as Drawable {
        draw(...) {...}
      }
      as Shooter {
        draw(...) {...}
      }
    }
    
    Drawable d = new Cowboy();
    Shooter s = new Cowboy();
    d.draw();  // calls draw() implementing Drawable interface
    s.draw();  // calls draw() implementing Shootable interface
    
  • really nested packages with intuitive access rules (such as in UML)
  • partial overriding of methods: method bodies contain an initial part, which is always executed, an overridable part, and a final part, which is also always executed. That way you can be sure that certain code is always executed, even when your method is overridden (e.g. a call to super.draw() first, cleaning up afterwards, logging, etc.) This makes many template methods superfluous.
  • good concurrency support
  • to be truly mythical: code should be able to modify itself when in God mode.......

    Posted by Henri Gerrits on September 16, 2005 at 10:30 AM PDT #

1) Is it possible to merge Artificial Intelligence concepts with OOP? Didn't really give it much thought myself but just a thought. Most AI courses teach LISP or PROLOG for programming any AI tasks. If it were possible to implement software tasks like program learning and inference, NLP etc with a language that could design UI and support database access it would be a dream.

Posted by Alan Varghese on October 06, 2005 at 06:29 AM PDT #

Interestingly, most of the things Henri Gerrits is looking for are native to or can be done easily in Ruby.

Posted by Rick Bradley on October 06, 2005 at 07:22 PM PDT #

I'd like to see support for reactive programming, along the lines of FrTime. By this I mean the ability to declare variables that behave like cells in a spreadsheet, so that if you update one then any variable that depends on it is also automatically updated. This approach is especially helpful in GUI programming, where it frees you from having to write and maintain a whole pile of event-driven code based on listeners.

Reactive programming also works very well when combined with software transactional memory, allowing you to perform multiple modifications without prematurely triggering the recomputation of dependent values.

Posted by Kimberley Burchett on May 20, 2006 at 03:10 PM PDT #

farmi sexi vergini anale negro donne maiale inculate mamme lesbo le edcom mutandine roventi stranezze donne anjelina anale vere transessuali pompini asiatiche latine

Posted by olo on January 24, 2007 at 12:15 PM PST #

http://vrline.net/index.php?newsid=640

Posted by tettonne on January 26, 2007 at 12:54 PM PST #

piedini leccati confidenze erotiche busty lesb le succhiatrici mature signore fotoracconti lesbiche travestiti gallery fighe pazze scopare roma foto eiaculazioni lesbiche anteprime grassone succhiatrici fighe thailandese attraente nude vecchie foto cosetta minute debole doccia spogliarello calze sadomaso pics foto sverginate

Posted by www on January 27, 2007 at 08:49 AM PST #

Create your own profile and personal page, talk with your friends using instant messenger or online chat, write blogs, join groups, add your pictures to gallery and view others, participate in forums and quizzes, tell your opinion in polls, browse and create classified ads, find out about events and more at online social networking community FriendLot.com

Posted by publish articles for free on April 13, 2007 at 02:13 AM PDT #

Internet portal and search engine provides recent news and most relevant search results.

Posted by search engine on April 13, 2007 at 02:26 AM PDT #

Diabetes disease treatment medication provides herbs for diabetics at low cost without prescription.

Posted by antibiotics online on April 13, 2007 at 02:44 AM PDT #

Want to loose weight? Try weight loss pills - no prescription required.

Posted by hair loss solution on April 13, 2007 at 03:26 AM PDT #

[Trackback] Buy cialis generic cheap cialis buy cialis. Buy cialis phentermine. Buy cialis. Cialis best price buy online. Buy viagra online uk cialis levitra.

Posted by Cialis best price buy online. on April 23, 2007 at 08:42 AM PDT #

Lipitor a gastrointestinal lipase inhibitor used in the management of obesity in adult and adolescent patients age 12 and older. This medicine may be used during the weight loss phase or following weight loss to assist in weight management. http://lipitor.medication.lt

Zocor(simvastatin) is used along with an overall diet plan in order to reduce high blood cholesterol levels. Zocor can significantly reduce the amount of LDL ("bad") cholesterol in the blood while simultaneously raising the levels of HDL-C ("good") cholesterol. http://zocor.medication.lt

Posted by medications online on May 06, 2008 at 01:42 AM PDT #

Post a Comment:
  • HTML Syntax: NOT allowed