Why did Salesforce use markup tags for VisualForce?

(written by lawrence krubner, however indented passages are often quotes). You can contact lawrence at: lawrence@krubner.com, or follow me on Twitter.

By now, I think we can agree, using HTML for the web was a mistake. But Sir Tim Berners-Lee could not have known that back in 1989. He was thinking that he could create a Semantic Web, and for that, the use of a markup language was defensible. Only in retrospect do we see that HTML was mostly used as a GUI for TCP/IP. Eventually Sir Tim Berners-Lee conceded the point, and so he went off and created RDF.

But if the use of markup language was a mistake, why did Salesforce imitate the mistake when creating VisualForce? Look at this code:

<apex:page standardController="Account">
        <apex:pageBlock title="Edit Account for {!$User.FirstName}">
                <apex:commandButton value="Save" action="{!save}"/>
                <apex:inputField value="{!account.name}"/>

What a disaster! I would have preferred:

:id "page"
:standardController "Account"

:id "messages"
:parent "page"
:behavior [ :showMessages ]

:id "button"
:parent "page"
:trigger :onClick
:action :save
:target "input"
:style "pageBlockButtons"

:id "input"
:parent "page"
:style "pageBlockSection"
:behavior [ :render-account-name ]

This kind of configuration DSL is much easier for specifying a GUI.

But for some reason Salesforce went with a paradigm whose failure was already well-known.

Oh, and if you want to argue “VisualForce communicates important semantic information” then why didn’t they use RDF?