An introduction to JSDoc
JSDoc is the de facto standard for documenting JavaScript code. You need to know at least its syntax (which is also used by many other tools) if you publish code. Alas, documentation is still scarce, but this post can help – it shows you how to run JSDoc and how its syntax works. (The JSDoc wiki [2] is the main source of this post, some examples are borrowed from it.) As a tool, JSDoc takes JavaScript code with special /** */ comments and produces HTML documentation for it. For example: Given the following code. /** @namespace */ var util = { /** * Repeat str several times. * @param {string} str The string to repeat. * @param {number} [times=1] How many times to repeat the string. * @returns {string} */ repeat: function(str, times) { if (times === undefined || times < 1) { times = 1; } return new Array(times+1).join(str); } }; The generated HTML looks as follows in a web browser: This post begins with a quick start, so can try out JSDoc immediately if you are impatient. Afterwards, more background information is given. 1. Quick start For the steps described below, you need to have Java installed. JSDoc includes the shell script jsrun.sh that requires Unix (including OS X and Linux) to run. But it should be easy to translate that script to a Windows batch file. Download the latest jsdoc_toolkit. Unpack the archive into, say, $HOME/jsdoc-toolkit. Make the script $HOME/jsdoc-toolkit/jsrun.sh executable and tell it where to look for the JSDoc binary and the template (which controls what the result looks like). JSDOCDIR="$HOME/local/jsdoc-toolkit" JSDOCTEMPLATEDIR="$JSDOCDIR/templates/jsdoc" Now you can move the script anywhere you want to, e.g. a bin/ directory. For the purpose of this demonstration, we don’t move the script. Use jsrun.sh on a directory of JavaScript files: $HOME/jsdoc-toolkit/jsrun.sh -d=$HOME/doc $HOME/js Input: $HOME/js – a directory of JavaScript files (see below for an example). Output: $HOME/doc – where to write the generated files. If you put the JavaScript code at the beginning of this post into a file $HOME/js/util.js then JSDoc produces the following files: $HOME/doc +-- files.html +-- index.html +-- symbols +-- _global_.html +-- src ¦ +-- util.js.html +-- util.html 2. Introduction: What is JSDoc? It’s a common programming problem: You have written JavaScript code that is to be used by others and need a nice-looking HTML documentation of its API. Java has pioneered this domain via its JavaDoc tool. The quasi-standard in the JavaScript world is JSDoc. As seen above, you document an entity by putting before it a special comment that starts with two asterisks. Templates. In order to output anything, JSDoc always needs a template, a mix of JavaScript and specially marked-up HTML that tells it how to translate the parsed documentation to HTML. JSDoc comes with a built-in template, but there are others that you can download [3]. 2.1. Terminology and conventions of JSDoc Doclet: JSDoc calls its comments doclets which clashes with JavaDoc terminology where such comments are called doc comments and a doclet is similar to a JSDoc template, but written in Java. Variable: The term variable in JSDoc often refers to all documentable entities which include global variables, object properties, and inner members. Instance properties: In JavaScript one typically puts methods into a prototype to share them with all instances of a class, while fields (non-function-valued properties) are put into each instance. JSDoc conflates shared properties and per-instance properties and calls them instance properties. Class properties, static properties: are properties of classes, usually of constructor functions. For example, Object.create is a class property of Object. Inner members: An inner member is data nested inside a function. Most relevant for documentation is instance-private data nested inside a constructor function. function MyClass() { var privateCounter = 0; // an inner member this.inc = function() { // an instance property privateCounter++; }; } 2.2. Syntax Let’s review the comment shown at the beginning: /** * Repeat str several times. * @param {string} str The string to repeat. * @param {number} [times=1] How many times to repeat the string. * @returns {string} */ This demonstrates some of the JSDoc syntax which consists of the following pieces. JSDoc comment: is a JavaScript block comment whose first character is an asterisk. This creates the illusion that the token /** starts such a comment. Tags: Comments are structured by starting lines with tags, keywords that are prefixed with an @ symbol. @param is an example above. HTML: You can freely use HTML in JSDoc comments; for example, to display a word in a monospaced font. Type annotations: You can document the type of a value by putting the type name in braces after the appropriate tags. Variations: Single type: @param {string} name Multiple types: @param {string|number} idCode Arrays of a type: @param {string[]} names Name paths: are used to refer to variables inside JSDoc comments. The syntax of such paths is as follows. myFunction MyConstructor MyConstructor.classProperty MyConstructor#instanceProperty MyConstructor-innerMember 2.3. A word on types There are two kinds of values in JavaScript: primitives and objects [7]. Primitive types: boolean, number, string. The values undefined and null are also considered primitive. Object types: All other types are object types, including arrays and functions. Watch out: the names of primitive types start with a lowercase letter. Each primitive type has a corresponding wrapper type, an object type with a capital name whose instances are objects: The wrapper type of boolean is Boolean. The wrapper type of number is Number. The wrapper type of string is String. Getting the name of the type of a value: Primitive value p: via typeof p. > typeof "" 'string' Compare: an instance of the wrapper type is an object. > typeof new String() 'object' Object value o: via o.constructor.name. Example: > new String().constructor.name 'String' 3. Basic tags Meta-data: @fileOverview: marks a JSDoc comment that describes the whole file. @author: Who has written the variable being documented? @deprecated: indicates that the variable is not supported, any more. It is a good practice to document what to use instead. @example: contains a code example, illustrating how the given entity should be used. /** * @example * var str = "abc"; * console.log(repeat(str, 3)); // abcabcabc */ Linking: @see: points to a related resource. /** * @see MyClass#myInstanceMethod * @see The Example Project. */ {@link ...}: works like @see, but can be used inside other tags. @requires resourceDescription: a resource that the documented entity needs. The resource description is either a name path or a natural language description. Versioning: @version versionNumber: indicates the version of the documented entity. Example: @version 10.3.1 @since versionNumber: indicates since which version the documented entity has been available. Example: @since 10.2.0 4. Documenting functions and methods For functions and methods, one can document parameters, return values, and exceptions they might throw. @param {paramType} paramName description: describes the parameter whose name is paramName. Type and description are optional. Examples: @param str @param str The string to repeat. @param {string} str @param {string} str The string to repeat. Advanced features: Optional parameter: @param {number} [times] The number of times is optional. Optional parameter with default value: @param {number} [times=1] The number of times is optional. @returns {returnType} description: describes the return value of the function or method. Either type or description can be omitted. @throws {exceptionType} description: describes an exception that might be thrown during the execution of the function or method. Either type or description can be omitted. 4.1. Inline type information (“inline doc comments”) There are two ways of providing type information for parameters and return values. First, you can add a type annotation to @param and @returns. /** * @param {String} name * @returns {Object} */ function getPerson(name) { } Second, you can inline the type information: function getPerson(/**String*/ name) /**Object*/ { } 5. Documenting variables and fields Fields are properties with non-function values. Because instance fields are often created inside a constructor, you have to document them there. @type {typeName}: What type does the documented variable have? Example: /** @constructor */ function Car(make, owner) { /** @type {string} */ this.make = make; /** @type {Person} */ this.owner = owner; } @type {Person} This tag can also be used to document the return type of functions, but @returns is preferable in this case. @constant: A flag that indicates that the documented variable has a constant value. @default defaultValue: What is the default value of a variable? Example: /** @constructor */ function Page(title) { /** * @default "Untitled" */ this.title = title || "Untitled"; } @property {propType} propName description: Document an instance property in the class comment. Example: /** * @class * @property {string} name The name of the person. */ function Person(name) { this.name = name; } Without this tag, instance properties are documented as follows. /** * @class */ function Person(name) { /** * The name of the person. * @type {string} */ this.name = name; } Which one of those styles to use is a matter of taste. @property does introduce redundancies, though. 6. Documenting classes JavaScript’s built-in means for defining classes are weak, which is why there are many APIs that help with this task [5]. These APIs differ, often radically, so you have to help JSDoc with figuring out what is going on. There are three basic ways of defining a class: Constructor function: You must mark a constructor function, otherwise it will not be documented as a class. That is, capitalization alone does not mark a function as a constructor. /** * @constructor */ function Person(name) { } @class is a synonym for @constructor, but it also allows you to describe the class – as opposed to the function setting up an instance (see tag documentation below for an example). API call and object literal: You need two markers. First, you need to tell JSDoc that a given variable holds a class. Second, you need to mark an object literal as defining a class. The latter is done via the @lends tag. /** @class */ var Person = makeClass( /** @lends Person# */ { say: function(message) { return "This person says: " + message; } } ); API call and object literal with a constructor method: If one of the methods in an object literal performs the task of a constructor (setting up instance data, [8]), you need to mark it as such so that fields are found by JSDoc. Then the documentation of the class moves to that method. var Person = makeClass( /** @lends Person# */ { /** * A class for managing persons. * @constructs */ initialize: function(name) { this.name = name; }, say: function(message) { return this.name + " says: " + message; } } ); Tags: @constructor: marks a function as a constructor. @class: marks a variable as a class or a function as a constructor. Can be used in a constructor comment to separate the description of the constructor (first line below) from the description of the class (second line below). /** * Creates a new instance of class Person. * @class Represents a person. */ Person = function() { } @constructs: marks a method in an object literal as taking up the duties of a constructor. That is, setting up instance data. In such a case, the class must be documented there. Works in tandem with @lends. @lends namePath: specifies to which class the following object literal contributes. There are two ways of contributing. @lends Person# – the object literal contributes instance properties to Person. @lends Person – the object literal contributes class properties to Person. 6.1. Inheritance, namespacing JavaScript has no simple support for subclassing and no real namespaces [6]. You thus have to help JSDoc see what is going on when you are using work-arounds. @extends namePath: indicates that the documented class is the subclass of another one. Example: /** * @constructor * @extends Person */ function Programmer(name) { Person.call(this, name); ... } // Remaining code for subclassing omitted @augments: a synonym for @extends. @namespace: One can use objects to simulate namespaces in JavaScript. This tag marks such objects. Example: /** @namespace */ var util = { ... }; 7. Meta-tags Meta-tags are tags that are added to several variables. You put them in a comment that starts with “/**#@+”. They are then added to all variables until JSDoc encounters the closing comment “/**#@-*/”. Example: /**#@+ * @private * @memberOf Foo */ function baz() {} function zop() {} function pez() {} /**#@-*/ 8. Rarely used tags @ignore: ignore a variable. Note that variables without /** comments are ignored, anyway. @borrows otherNamePath as this.propName: A variable is just a reference to somewhere else; it is documented there. Example: /** * @constructor * @borrows Remote#transfer as this.send */ function SpecialWriter() { this.send = Remote.prototype.transfer; } @description text: Provide a description, the same as all of the text before the first tag. Manual categorization. Sometimes JSDoc misinterprets what a variable is. Then you can help it via one of the following tags: Tag Mark variable as @function function @field non-function value @public public (especially inner variables) @private private @inner inner and thus also private @static accessible without instantiation Name and membership: @name namePath: override the parsed name and use the given name, instead. @memberOf parentNamePath: the documented variable is a member of the specified object. Not explained here: @event, see [2]. 9. Related reading jsdoc-toolkit - A documentation generator for JavaScript: JSDoc homepage on Google Code. Includes a link to the downloads. JSDoc wiki: the official documentation of JSDoc and source of this post. JSDoc wiki – TemplateGallery: lists available JSDoc templates. JSDoc wiki – TagReference: a handy cheat-sheet for JSDoc tags. Lightweight JavaScript inheritance APIs Modules and namespaces in JavaScript JavaScript values: not everything is an object Prototypes as classes – an introduction to JavaScript inheritance From http://www.2ality.com/2011/08/jsdoc-intro.html
August 18, 2011
·
69,916 Views
·
2 Likes
Comments
Aug 24, 2012 · Tony Thomas
Dec 06, 2011 · Tony Thomas
I like the idea, it would help us make progress much more quickly. Note, though, that CouchDB’s replication and browser-to-server sync needs are probably much different.
“Maybe something that can gives us push notifications in a flexible way?” –would that really make sense as part of a database API?
Nov 08, 2011 · Rich LaMarche
Oct 20, 2011 · Eric Redmond
Work-around: Use a shim to get ECMAScript 5 features on older browsers:
www.2ality.com/2011/02/es5-shim-use-ecmascript-5-in-older.html
Oct 20, 2011 · Eric Redmond
Work-around: Use a shim to get ECMAScript 5 features on older browsers:
www.2ality.com/2011/02/es5-shim-use-ecmascript-5-in-older.html
Oct 20, 2011 · Eric Redmond
Work-around: Use a shim to get ECMAScript 5 features on older browsers:
www.2ality.com/2011/02/es5-shim-use-ecmascript-5-in-older.html
Oct 20, 2011 · Eric Redmond
Work-around: Use a shim to get ECMAScript 5 features on older browsers:
www.2ality.com/2011/02/es5-shim-use-ecmascript-5-in-older.html
Oct 20, 2011 · Gerd Storm
Oct 20, 2011 · Gerd Storm
Oct 20, 2011 · Gerd Storm
Oct 20, 2011 · Gerd Storm
@Fabrizio Giudici: Excellent point! That was the main thing I missed from the presentation: Google properly arguing their case. It is obvious that JavaScript has currently shortcomings in these areas. But ECMAScript 6 is coming along nicely!
JavaScript really may not be Dart’s target any more...
Oct 20, 2011 · Gerd Storm
@Fabrizio Giudici: Excellent point! That was the main thing I missed from the presentation: Google properly arguing their case. It is obvious that JavaScript has currently shortcomings in these areas. But ECMAScript 6 is coming along nicely!
JavaScript really may not be Dart’s target any more...
Oct 20, 2011 · Gerd Storm
@Fabrizio Giudici: Excellent point! That was the main thing I missed from the presentation: Google properly arguing their case. It is obvious that JavaScript has currently shortcomings in these areas. But ECMAScript 6 is coming along nicely!
JavaScript really may not be Dart’s target any more...
Sep 14, 2011 · Axel Rauschmayer
Jul 15, 2011 · David Salter
Jul 15, 2011 · David Salter
Jul 15, 2011 · David Salter
Jul 15, 2011 · David Salter
Jul 15, 2011 · David Salter
Jul 15, 2011 · David Salter
Jul 15, 2011 · David Salter
Jul 14, 2011 · David Salter
Jul 14, 2011 · David Salter
Jul 14, 2011 · David Salter
Jun 27, 2011 · Andrea Ingaglio
Jun 27, 2011 · Andrea Ingaglio
Jun 18, 2011 · Axel Rauschmayer
Jun 16, 2011 · Gerd Storm
I edited the text a bit for clarity. The information I have on Windows 8 is that indeed new (complete) *apps* will be written in JavaScript. Additional APIs are rumored but not yet confirmed (to my knowledge). If you have other information, I’d love to know about it!
The CLR is indeed nice technology and C# has many language features that have no match in JavaScript. But JavaScript (ECMAScript.next is shaping up to be awesome) and HTML5 are evolving very quickly. We’ll see what happens. I think Microsoft’s new focus on the web is clever, because neither Apple (which relies on Cocoa apps) nor Google (it is doubtful that Chrome OS will ever become very popular) can match this step. It’s the first time after many years that I’m excited about MS technology again.
Jun 16, 2011 · Gerd Storm
I edited the text a bit for clarity. The information I have on Windows 8 is that indeed new (complete) *apps* will be written in JavaScript. Additional APIs are rumored but not yet confirmed (to my knowledge). If you have other information, I’d love to know about it!
The CLR is indeed nice technology and C# has many language features that have no match in JavaScript. But JavaScript (ECMAScript.next is shaping up to be awesome) and HTML5 are evolving very quickly. We’ll see what happens. I think Microsoft’s new focus on the web is clever, because neither Apple (which relies on Cocoa apps) nor Google (it is doubtful that Chrome OS will ever become very popular) can match this step. It’s the first time after many years that I’m excited about MS technology again.
Jun 16, 2011 · Gerd Storm
I edited the text a bit for clarity. The information I have on Windows 8 is that indeed new (complete) *apps* will be written in JavaScript. Additional APIs are rumored but not yet confirmed (to my knowledge). If you have other information, I’d love to know about it!
The CLR is indeed nice technology and C# has many language features that have no match in JavaScript. But JavaScript (ECMAScript.next is shaping up to be awesome) and HTML5 are evolving very quickly. We’ll see what happens. I think Microsoft’s new focus on the web is clever, because neither Apple (which relies on Cocoa apps) nor Google (it is doubtful that Chrome OS will ever become very popular) can match this step. It’s the first time after many years that I’m excited about MS technology again.
Jun 16, 2011 · Gerd Storm
Jun 16, 2011 · Gerd Storm
Apr 16, 2011 · Derrick
Apr 05, 2011 · Mr B Loid
Mar 19, 2011 · Kazim Hassan
Mar 18, 2011 · Arnold Barney
Mar 18, 2011 · Arnold Barney
Mar 03, 2011 · Mr B Loid
Mar 03, 2011 · Mr B Loid
Mar 03, 2011 · Mr B Loid
Mar 03, 2011 · Mr B Loid
Feb 15, 2011 · Stefan Koopmanschap
I agree, but other factors come into play, too.
Feb 15, 2011 · Stefan Koopmanschap
I agree, but other factors come into play, too.
Feb 15, 2011 · Stefan Koopmanschap
I agree, but other factors come into play, too.
Feb 15, 2011 · Stefan Koopmanschap
I agree, but other factors come into play, too.
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Tony Thomas
Feb 15, 2011 · Stefan Koopmanschap
Qt plus something would have been nice.
To stand out on Android, you have to be really smart. An example of a company making smart moves is Amazon. Their app store is "yet another one", but they are putting a lot of effort into UI, curation, and billing. As a result, it is a worthy addition to the Android ecosystem.
If Nokia gets paid a lot of money and is able to collaborate closely with MS, then that might make the deal interesting enough (for Nokia). I agree with you on Nokia’s selling point, but in collaboration with MS, Nokia might actually produce a phone that is unique among all WP7 phones. Something that would be harder to do on Android.
Feb 15, 2011 · Stefan Koopmanschap
Qt plus something would have been nice.
To stand out on Android, you have to be really smart. An example of a company making smart moves is Amazon. Their app store is "yet another one", but they are putting a lot of effort into UI, curation, and billing. As a result, it is a worthy addition to the Android ecosystem.
If Nokia gets paid a lot of money and is able to collaborate closely with MS, then that might make the deal interesting enough (for Nokia). I agree with you on Nokia’s selling point, but in collaboration with MS, Nokia might actually produce a phone that is unique among all WP7 phones. Something that would be harder to do on Android.
Feb 15, 2011 · Stefan Koopmanschap
Qt plus something would have been nice.
To stand out on Android, you have to be really smart. An example of a company making smart moves is Amazon. Their app store is "yet another one", but they are putting a lot of effort into UI, curation, and billing. As a result, it is a worthy addition to the Android ecosystem.
If Nokia gets paid a lot of money and is able to collaborate closely with MS, then that might make the deal interesting enough (for Nokia). I agree with you on Nokia’s selling point, but in collaboration with MS, Nokia might actually produce a phone that is unique among all WP7 phones. Something that would be harder to do on Android.
Feb 14, 2011 · Tony Thomas
Yes and no. Prototypal inheritance, if done well, can be very elegant [1] and feel more object-oriented than class-based inheritance. If you don’t do inheritance, object-orientation works well in "pure" JavaScript, otherwise you need to use one of the APIs.
[1] http://www.2ality.com/2010/12/javascripts-prototypal-inheritance.html
Feb 14, 2011 · Tony Thomas
Yes and no. Prototypal inheritance, if done well, can be very elegant [1] and feel more object-oriented than class-based inheritance. If you don’t do inheritance, object-orientation works well in "pure" JavaScript, otherwise you need to use one of the APIs.
[1] http://www.2ality.com/2010/12/javascripts-prototypal-inheritance.html
Feb 14, 2011 · Tony Thomas
Yes and no. Prototypal inheritance, if done well, can be very elegant [1] and feel more object-oriented than class-based inheritance. If you don’t do inheritance, object-orientation works well in "pure" JavaScript, otherwise you need to use one of the APIs.
[1] http://www.2ality.com/2010/12/javascripts-prototypal-inheritance.html
Feb 14, 2011 · Tony Thomas
Yes and no. Prototypal inheritance, if done well, can be very elegant [1] and feel more object-oriented than class-based inheritance. If you don’t do inheritance, object-orientation works well in "pure" JavaScript, otherwise you need to use one of the APIs.
[1] http://www.2ality.com/2010/12/javascripts-prototypal-inheritance.html
Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Tony Thomas
- Java definitely also has a lot of momentum. JVM languages are a prime example. You can also call it "excitement" instead of "momentum" if you want to. In the user-facing part of applications, JavaScript currently has a more compelling story (with web browsers) and I think that leads to a lot of mind share.
- JS on the server does not have to be untyped if Harmony really brings type guards. The killer feature of node.js is its asynchronicity where current JavaScript practices are a surprisingly elegant fit for the server.
So GUI-wise and server-wise, JS currently is avant-garde, similar to Ruby on Rails a few years ago. Just like with RoR, I’m sure other platforms will adopt some of the JS innovations.Feb 14, 2011 · Stefan Koopmanschap
Feb 14, 2011 · Tony Thomas
Good point. I’m a big fan of GWT’s. And you are right, its tool support makes a huge difference. Also, it does clever things with compiled CSS, images, etc.
Points in JavaScript’s favor:
Feb 10, 2011 · syed syahrul
A whole-heartedly agree. It is about encoding versus decoding [1]: While you have to type one more character as an encoder, you make things easier for decoders, because humans are used to punctuation. I hope strict mode will eventually make semicolons mandatory, but would not bet on it.
[1] http://www.2ality.com/2011/01/coffeescript-versus-javascript-without.html
Feb 01, 2011 · Gerd Storm
Feb 01, 2011 · Gerd Storm
Feb 01, 2011 · Gerd Storm
Feb 01, 2011 · Benjamin Coe
Feb 01, 2011 · Benjamin Coe
Feb 01, 2011 · Benjamin Coe
Feb 01, 2011 · Benjamin Coe
Jan 29, 2011 · Philippe Leybaert
Jan 23, 2011 · Mark Bakker
Jan 22, 2011 · Mark Bakker
Jan 22, 2011 · Mark Bakker
Jan 22, 2011 · Mark Bakker
Jan 22, 2011 · Mark Bakker
Dec 15, 2010 · Tony Thomas
Dec 15, 2010 · Tony Thomas
Dec 15, 2010 · Tony Thomas
Dec 14, 2010 · Tony Thomas
Dec 14, 2010 · Tony Thomas
Dec 14, 2010 · Tony Thomas
Dec 14, 2010 · Tony Thomas
Dec 07, 2010 · quad helper
Dec 07, 2010 · quad helper
Dec 04, 2010 · Gene Gotimer
Oct 25, 2010 · Mr B Loid
Oct 25, 2010 · Mr B Loid
Oct 25, 2010 · Mr B Loid
Oct 20, 2010 · Mr B Loid
Oct 20, 2010 · Mr B Loid
Oct 20, 2010 · Mr B Loid
Oct 13, 2010 · Tony Thomas
@Fabrizio: Apart from worries about efficiency, why keep primitive types? They are a source of many idiosyncracies in Java. Languages such as Common Lisp and Dylan have figured out how to treat everything as an object without sacrificing efficiency, why can’t Java?
Bracha has more to say on this: “Original Sin”.
Oct 13, 2010 · Tony Thomas
@Fabrizio: Apart from worries about efficiency, why keep primitive types? They are a source of many idiosyncracies in Java. Languages such as Common Lisp and Dylan have figured out how to treat everything as an object without sacrificing efficiency, why can’t Java?
Bracha has more to say on this: “Original Sin”.
Oct 13, 2010 · Tony Thomas
@Fabrizio: Apart from worries about efficiency, why keep primitive types? They are a source of many idiosyncracies in Java. Languages such as Common Lisp and Dylan have figured out how to treat everything as an object without sacrificing efficiency, why can’t Java?
Bracha has more to say on this: “Original Sin”.
Oct 13, 2010 · Tony Thomas
@Fabrizio: Apart from worries about efficiency, why keep primitive types? They are a source of many idiosyncracies in Java. Languages such as Common Lisp and Dylan have figured out how to treat everything as an object without sacrificing efficiency, why can’t Java?
Bracha has more to say on this: “Original Sin”.
Aug 07, 2010 · Stefan Koopmanschap
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
Jul 12, 2010 · Mr B Loid
May 04, 2010 · Mr B Loid
May 04, 2010 · Mr B Loid
May 04, 2010 · Mr B Loid
May 04, 2010 · Mr B Loid
May 04, 2010 · Mr B Loid
May 04, 2010 · Mr B Loid
May 04, 2010 · Mr B Loid
Apr 06, 2010 · Jesse Eickholt
Apr 06, 2010 · Jesse Eickholt
Apr 05, 2010 · Jesse Eickholt
Apr 05, 2010 · Jesse Eickholt
Apr 05, 2010 · Jesse Eickholt
Apr 05, 2010 · Jesse Eickholt
Mar 15, 2010 · Daniel Spiewak
"What about not-exploded applications (not opening the war file)? You solution forces your user to use exploded wars."
The WAR of "app" can be unexploded, i.e., I do not require it to be exploded. Conversely, app.dir/ is a pseudo web application called "app.dir" which is exploded. But that should only be a problem if the servlet container only supports non-exploded webapps. What I'm really looking for is a servlet container giving my web application a directory where it can store its data.
I do like the homedirectory-relative approach (where mine could be considered webapp-directory-relative) and using JNDI.
Mar 15, 2010 · Daniel Spiewak
"What about not-exploded applications (not opening the war file)? You solution forces your user to use exploded wars."
The WAR of "app" can be unexploded, i.e., I do not require it to be exploded. Conversely, app.dir/ is a pseudo web application called "app.dir" which is exploded. But that should only be a problem if the servlet container only supports non-exploded webapps. What I'm really looking for is a servlet container giving my web application a directory where it can store its data.
I do like the homedirectory-relative approach (where mine could be considered webapp-directory-relative) and using JNDI.
Nov 28, 2009 · Vladimir Carrer
IMHO, Java is still doing well, productivity-wise. I used to prefer Python to Java, but then Eclipse (refactoring, code browsing, etc.) came along, which made it hard for me to use any programming language that had less capable tools.
Nov 28, 2009 · Vladimir Carrer
Nov 28, 2009 · Vladimir Carrer
Nov 28, 2009 · Vladimir Carrer
Nov 28, 2009 · Vladimir Carrer
Jul 22, 2009 · Mr B Loid
Jul 22, 2009 · Mr B Loid
Jul 22, 2009 · Mr B Loid
Jul 21, 2009 · Mr B Loid
Jul 21, 2009 · Mr B Loid
Jul 17, 2009 · Nasty Microsoft
Jul 17, 2009 · Nasty Microsoft
Jul 14, 2009 · Jens
Do you mean software engineering related? I do consider the following things part of engineering software: adding a picture to documentation or adding a license when publishing an open source project.
Jul 04, 2009 · Mr B Loid
Don't forget that the server side is part of a web application, too. Then the client side works as an interface to web services (or a web-service-like API). The server does the heavy lifting, the client is just a thin presentation layer. Quite useful for some scenarios.
I agree with the criticisms in your blog article, but the nice thing about GWT is that it abstracts everything enough so that one's code is fairly future-proof. Thus, one can let Google worry about keeping up with browser technologies. HTML 5 is already adding new widgets and while I was ready to hate the HTML DOM, I now really like it. Some aspects of CSS are weird, but it enables an interesting style of declarative GUI programming: By just changing attributes such as the class of an element, a whole lot of changes can be triggered. Check out jQuery to find out more.
I think one can loosely compare Ajax's success with Java's: Both didn't do anything new, were initially quite flawed, but somehow hit a sweet spot that made people use them. That is, people saw the potential and not the flaws. With Ajax, the story isn't finished, yet, but things look promising.
BWT: The thread at http://java.dzone.com/articles/what-appeal-ajax-and-gwt has gotten quite long and does have some more Ajax pro and contra arguments.
Jul 04, 2009 · Mr B Loid
Don't forget that the server side is part of a web application, too. Then the client side works as an interface to web services (or a web-service-like API). The server does the heavy lifting, the client is just a thin presentation layer. Quite useful for some scenarios.
I agree with the criticisms in your blog article, but the nice thing about GWT is that it abstracts everything enough so that one's code is fairly future-proof. Thus, one can let Google worry about keeping up with browser technologies. HTML 5 is already adding new widgets and while I was ready to hate the HTML DOM, I now really like it. Some aspects of CSS are weird, but it enables an interesting style of declarative GUI programming: By just changing attributes such as the class of an element, a whole lot of changes can be triggered. Check out jQuery to find out more.
I think one can loosely compare Ajax's success with Java's: Both didn't do anything new, were initially quite flawed, but somehow hit a sweet spot that made people use them. That is, people saw the potential and not the flaws. With Ajax, the story isn't finished, yet, but things look promising.
BWT: The thread at http://java.dzone.com/articles/what-appeal-ajax-and-gwt has gotten quite long and does have some more Ajax pro and contra arguments.
Jul 04, 2009 · Mr B Loid
Don't forget that the server side is part of a web application, too. Then the client side works as an interface to web services (or a web-service-like API). The server does the heavy lifting, the client is just a thin presentation layer. Quite useful for some scenarios.
I agree with the criticisms in your blog article, but the nice thing about GWT is that it abstracts everything enough so that one's code is fairly future-proof. Thus, one can let Google worry about keeping up with browser technologies. HTML 5 is already adding new widgets and while I was ready to hate the HTML DOM, I now really like it. Some aspects of CSS are weird, but it enables an interesting style of declarative GUI programming: By just changing attributes such as the class of an element, a whole lot of changes can be triggered. Check out jQuery to find out more.
I think one can loosely compare Ajax's success with Java's: Both didn't do anything new, were initially quite flawed, but somehow hit a sweet spot that made people use them. That is, people saw the potential and not the flaws. With Ajax, the story isn't finished, yet, but things look promising.
BWT: The thread at http://java.dzone.com/articles/what-appeal-ajax-and-gwt has gotten quite long and does have some more Ajax pro and contra arguments.
Jul 03, 2009 · Fred Eaker
@Greg Brown:
Especially with 6u10, applets are really cool. Pro-GWT arguments do hinge on the premise that Ajax apps are worth the effort. With applets, apart from installed base, it is the little things that make them feel ever so slightly out of place. Even now, knowing about the inferiority of the web platform, I sometimes prefer it to Swing+JVM. And I think the best for browsers is yet to come. It has an amazing amount of momentum and enthusiasm behind it, so eventually, there will be things that the JVM doesn't offer. Note that that kind of momentum is never due to technical reasons. Java owes its popularity to a similar kind of momentum, otherwise we'd all be using Common Lisp or Smalltalk.
Jul 03, 2009 · Fred Eaker
@Greg Brown:
Especially with 6u10, applets are really cool. Pro-GWT arguments do hinge on the premise that Ajax apps are worth the effort. With applets, apart from installed base, it is the little things that make them feel ever so slightly out of place. Even now, knowing about the inferiority of the web platform, I sometimes prefer it to Swing+JVM. And I think the best for browsers is yet to come. It has an amazing amount of momentum and enthusiasm behind it, so eventually, there will be things that the JVM doesn't offer. Note that that kind of momentum is never due to technical reasons. Java owes its popularity to a similar kind of momentum, otherwise we'd all be using Common Lisp or Smalltalk.
Jul 03, 2009 · Fred Eaker
@Greg Brown:
Especially with 6u10, applets are really cool. Pro-GWT arguments do hinge on the premise that Ajax apps are worth the effort. With applets, apart from installed base, it is the little things that make them feel ever so slightly out of place. Even now, knowing about the inferiority of the web platform, I sometimes prefer it to Swing+JVM. And I think the best for browsers is yet to come. It has an amazing amount of momentum and enthusiasm behind it, so eventually, there will be things that the JVM doesn't offer. Note that that kind of momentum is never due to technical reasons. Java owes its popularity to a similar kind of momentum, otherwise we'd all be using Common Lisp or Smalltalk.
Jul 03, 2009 · Fred Eaker
@Greg Brown:
Especially with 6u10, applets are really cool. Pro-GWT arguments do hinge on the premise that Ajax apps are worth the effort. With applets, apart from installed base, it is the little things that make them feel ever so slightly out of place. Even now, knowing about the inferiority of the web platform, I sometimes prefer it to Swing+JVM. And I think the best for browsers is yet to come. It has an amazing amount of momentum and enthusiasm behind it, so eventually, there will be things that the JVM doesn't offer. Note that that kind of momentum is never due to technical reasons. Java owes its popularity to a similar kind of momentum, otherwise we'd all be using Common Lisp or Smalltalk.
Jul 02, 2009 · Mr B Loid
Jul 02, 2009 · Mr B Loid
Jul 02, 2009 · Mr B Loid
Jun 22, 2009 · Ganeshji Marwaha
There must be some kind of deal between the two companies. Do you know the details or are you guessing? It could be anywhere between Sun saying that if Apple doesn't do it, they won't. Or Apple saying that nobody should touch their system. Either way, I blame both companies for not finding a more developer-friendly solution. And again I have to wonder why there is no public statement that explains the situation.
Jun 22, 2009 · Ganeshji Marwaha
There must be some kind of deal between the two companies. Do you know the details or are you guessing? It could be anywhere between Sun saying that if Apple doesn't do it, they won't. Or Apple saying that nobody should touch their system. Either way, I blame both companies for not finding a more developer-friendly solution. And again I have to wonder why there is no public statement that explains the situation.
Jun 22, 2009 · Ganeshji Marwaha
There must be some kind of deal between the two companies. Do you know the details or are you guessing? It could be anywhere between Sun saying that if Apple doesn't do it, they won't. Or Apple saying that nobody should touch their system. Either way, I blame both companies for not finding a more developer-friendly solution. And again I have to wonder why there is no public statement that explains the situation.
Jun 22, 2009 · Ganeshji Marwaha
If I read the page correctly, it is the feature "64-bit support" that "requires a Mac with a 64-bit processor", not Snow Leopard per se.
May 27, 2009 · admin
BTW: The article above can be seen as third in a series.
Apr 18, 2009 · Mr B Loid
JWS is really cool. Especially in combination with the updated applet API: You can drag and drop an applet to the desktop and it becomes a Java Web Start application.
With the new applets, there are only two problems: First, very often, Java is not installed or a version that is too old. Second, the UI will always feel foreign inside a web browser. Now, with Java being able to access the browser DOM, one could use Java instead of JavaScript to construct DOM widgets etc. It would have to work seamlessly, though (no JavaScript frontend, Java backend, it should all be done in Java) and I don't know of any project that provides the necessary infrastructure to do so.
Furthmore, with a solution such as Trephine, you have the option to fall back to a non-applet solution if the browser cannot do applets. Then I would use GWT to bridge the client-server differences.
Apr 18, 2009 · Mr B Loid
JWS is really cool. Especially in combination with the updated applet API: You can drag and drop an applet to the desktop and it becomes a Java Web Start application.
With the new applets, there are only two problems: First, very often, Java is not installed or a version that is too old. Second, the UI will always feel foreign inside a web browser. Now, with Java being able to access the browser DOM, one could use Java instead of JavaScript to construct DOM widgets etc. It would have to work seamlessly, though (no JavaScript frontend, Java backend, it should all be done in Java) and I don't know of any project that provides the necessary infrastructure to do so.
Furthmore, with a solution such as Trephine, you have the option to fall back to a non-applet solution if the browser cannot do applets. Then I would use GWT to bridge the client-server differences.
Apr 18, 2009 · Mr B Loid
JWS is really cool. Especially in combination with the updated applet API: You can drag and drop an applet to the desktop and it becomes a Java Web Start application.
With the new applets, there are only two problems: First, very often, Java is not installed or a version that is too old. Second, the UI will always feel foreign inside a web browser. Now, with Java being able to access the browser DOM, one could use Java instead of JavaScript to construct DOM widgets etc. It would have to work seamlessly, though (no JavaScript frontend, Java backend, it should all be done in Java) and I don't know of any project that provides the necessary infrastructure to do so.
Furthmore, with a solution such as Trephine, you have the option to fall back to a non-applet solution if the browser cannot do applets. Then I would use GWT to bridge the client-server differences.
Apr 18, 2009 · Mr B Loid
JWS is really cool. Especially in combination with the updated applet API: You can drag and drop an applet to the desktop and it becomes a Java Web Start application.
With the new applets, there are only two problems: First, very often, Java is not installed or a version that is too old. Second, the UI will always feel foreign inside a web browser. Now, with Java being able to access the browser DOM, one could use Java instead of JavaScript to construct DOM widgets etc. It would have to work seamlessly, though (no JavaScript frontend, Java backend, it should all be done in Java) and I don't know of any project that provides the necessary infrastructure to do so.
Furthmore, with a solution such as Trephine, you have the option to fall back to a non-applet solution if the browser cannot do applets. Then I would use GWT to bridge the client-server differences.
Apr 15, 2009 · Mr B Loid
Users will probably want to run their webapp in three styles:
In order to minimize context-specific coding, I will probably initially focus on (1) and (3). Unfortunately, with (3) one loses transparent application updates and needs things such as an installer and an (integrated) updater.
But maybe having an explicit application to install makes things less confusing for users. For example, I would worry whether I really have the newest version of the app, whether all of it has been cached before going offline.
What does Trephine do if there is no Java available? "onload" just does not get called and one uses trephine.loaded to check whether one is in "trephine mode" or not?
Apr 15, 2009 · Mr B Loid
Users will probably want to run their webapp in three styles:
In order to minimize context-specific coding, I will probably initially focus on (1) and (3). Unfortunately, with (3) one loses transparent application updates and needs things such as an installer and an (integrated) updater.
But maybe having an explicit application to install makes things less confusing for users. For example, I would worry whether I really have the newest version of the app, whether all of it has been cached before going offline.
What does Trephine do if there is no Java available? "onload" just does not get called and one uses trephine.loaded to check whether one is in "trephine mode" or not?
Apr 15, 2009 · Mr B Loid
Users will probably want to run their webapp in three styles:
In order to minimize context-specific coding, I will probably initially focus on (1) and (3). Unfortunately, with (3) one loses transparent application updates and needs things such as an installer and an (integrated) updater.
But maybe having an explicit application to install makes things less confusing for users. For example, I would worry whether I really have the newest version of the app, whether all of it has been cached before going offline.
What does Trephine do if there is no Java available? "onload" just does not get called and one uses trephine.loaded to check whether one is in "trephine mode" or not?
Apr 15, 2009 · Mr B Loid
Users will probably want to run their webapp in three styles:
In order to minimize context-specific coding, I will probably initially focus on (1) and (3). Unfortunately, with (3) one loses transparent application updates and needs things such as an installer and an (integrated) updater.
But maybe having an explicit application to install makes things less confusing for users. For example, I would worry whether I really have the newest version of the app, whether all of it has been cached before going offline.
What does Trephine do if there is no Java available? "onload" just does not get called and one uses trephine.loaded to check whether one is in "trephine mode" or not?
Apr 13, 2009 · Mr B Loid
Thanks! I'm still not sure what the best way of layering and deployment is.
- Option 1: Make the client offline capable. An elegant solution, but I need the RDF database Sesame which is Java-based. One would still want access to the local file system (which could be provided by Trephine).
- Option 2: let users install Tomcat + web application. Same as above for the file system.
- Hybrid solution: Download JARs to the browser, use LiveConnect (or something similar) so that one has a client-side Java backend. Again I would want to use GWT, but that does sound doable.
Is there a way to determine whether Trephine is running or not?For the future, one has to wonder whether one will ever directly access server-side data or always synchronize a local repository with a server. An eye-opener in this regard has been for me how easy it is to switch mail clients with IMAP (which can be seen as a synchronization technology).
Apr 13, 2009 · Mr B Loid
Thanks! I'm still not sure what the best way of layering and deployment is.
- Option 1: Make the client offline capable. An elegant solution, but I need the RDF database Sesame which is Java-based. One would still want access to the local file system (which could be provided by Trephine).
- Option 2: let users install Tomcat + web application. Same as above for the file system.
- Hybrid solution: Download JARs to the browser, use LiveConnect (or something similar) so that one has a client-side Java backend. Again I would want to use GWT, but that does sound doable.
Is there a way to determine whether Trephine is running or not?For the future, one has to wonder whether one will ever directly access server-side data or always synchronize a local repository with a server. An eye-opener in this regard has been for me how easy it is to switch mail clients with IMAP (which can be seen as a synchronization technology).
Apr 13, 2009 · Mr B Loid
Capuchino is exciting, but IIRC does not have tools as good as, say, Eclipse when it comes to refactoring and code navigation. The same holds for Jaxer. For me Eclipse has become very important: I used to prefer Python over Java, but Eclipse changed that.
If JavaScript ever gets optional types (and hopefully other features such as generators, list comprehensions etc.) then I think it won't be long before JS IDEs are up to par with Java. Capuchino feels like an intermediate solution that improves on JS language-wise. I guess GWT is in the same league, but it has a very convincing server story.
Lastly, Java is unparallelled when it comes to libraries, especially for semantic web stuff.
I still can't form a coherent picture of all of this in my mind, because there are cool pieces everywhere, they just don't fit together (yet).
Apr 13, 2009 · Mr B Loid
Capuchino is exciting, but IIRC does not have tools as good as, say, Eclipse when it comes to refactoring and code navigation. The same holds for Jaxer. For me Eclipse has become very important: I used to prefer Python over Java, but Eclipse changed that.
If JavaScript ever gets optional types (and hopefully other features such as generators, list comprehensions etc.) then I think it won't be long before JS IDEs are up to par with Java. Capuchino feels like an intermediate solution that improves on JS language-wise. I guess GWT is in the same league, but it has a very convincing server story.
Lastly, Java is unparallelled when it comes to libraries, especially for semantic web stuff.
I still can't form a coherent picture of all of this in my mind, because there are cool pieces everywhere, they just don't fit together (yet).
Apr 13, 2009 · Mr B Loid
Capuchino is exciting, but IIRC does not have tools as good as, say, Eclipse when it comes to refactoring and code navigation. The same holds for Jaxer. For me Eclipse has become very important: I used to prefer Python over Java, but Eclipse changed that.
If JavaScript ever gets optional types (and hopefully other features such as generators, list comprehensions etc.) then I think it won't be long before JS IDEs are up to par with Java. Capuchino feels like an intermediate solution that improves on JS language-wise. I guess GWT is in the same league, but it has a very convincing server story.
Lastly, Java is unparallelled when it comes to libraries, especially for semantic web stuff.
I still can't form a coherent picture of all of this in my mind, because there are cool pieces everywhere, they just don't fit together (yet).
Apr 01, 2008 · Vera Tushurashvili
Yes. Eclipse E4 had it coming! Excellent April fool's.
Mar 26, 2008 · Lebon Bon Lebon
- For plugin developers: Make the Eclipse code (and config) base easier to discover and handle.
- For Eclipse users: Make code easier to browse and edit.
[1] rauschma.blogspot.com/2008/03/eclipse-4-wishes-simplification-first.html[2] rauschma.blogspot.com/2008/03/improving-code-browsing-in-eclipse.html
What I don't understand is how Eclipse can profit from being based on web technologies. Sure, supporting web developers in the Eclipse IDE is great, but why should the IDE itself be web-based? Or do they want to turn the RCP into something like GWT? Then RAP is not a good role model; it is too fat server-wise and not fat enough client-wise. When it comes to future web apps, my guess would be that both server and client will be coded in ECMAScript4. It is an incredibly powerful language that I'd love to see hosted on the JVM (probable, given Rhino) and supported by Eclipse.