Ah, yes. There are some gaps in the docs that need to be fixed. To answer 
your questions:


   1. The main thing that Hoplon does is unify the DOM and the dynamic 
   environment (the JS environment). This makes it possible to refer to things 
   from the dynamic environment in your markup. Normally you can reference 
   things in the DOM from JavaScript, but not the other way around. So in a 
   unified environment that includes both JavaScript and the DOM there needs 
   to be a way to develop both of them in the same page. A Hoplon page has 3 
   parts: the page declaration, a number of optional top-level forms, and 
   finally the DOM markup. So yes, the Hoplon compiler selects the last 
   expression in the file as the DOM markup.
   2. The primitive HTML5 elements (div, span, etc.) are, in fact 
   ClojureScript functions in the tailrecursion.hoplon namespace. These 
   functions return new DOM elements of the appropriate type. However, the 
   Element type is extended to implement the IFn protocol such that they 
   maintain the HTML semantic. That is, function application means append 
   child / set attribute. So yes, div and span etc. are functions, but they 
   return DOM elements that implement IFn, so they return functions, in a way, 
   too.
   3. Everything is generated on the fly, pretty much. The entire document 
   is replaced with the result of evaluating the DOM markup when the page 
   loads. In other words, when the page loads the last expression in the 
   source file is evaluated in the browser, and document is replaced with the 
   result. Since the DOM markup is just a ClojureScript expression that is 
   evaluated as ClojureScript, you can create your own custom tags. All you 
   have to do is define functions that abide by the HTML semantic. There are 
   examples of this in the "Getting Started" page, especially the "Creating a 
   tabs abstraction" section.
   4. Sorry, I should have put a link in the docs there to 
Javelin<http://github.com/tailrecursion/javelin>, 
   the dataflow library we use for the cells. That page explains in detail, 
   but the basic premise is that there are two kinds of cells in spreadsheets, 
   input cells that you update manually, and formula cells that update 
   themselves reactively according to a formula that might refer to other 
   cells. So defc is equivalent to def and cell, and that defines an input 
   cell. Likewise, defc= is equivalent to def and cell=, and that defines a 
   formula cell.
   5. All cells, both input cells and formula cells, contain values. The 
   difference is in how those values are updated. In order to obtain the value 
   contained in any cell you may dereference the cell. So both types of cell 
   can be dereferenced like atoms. However, only input cells can be updated 
   using swap! or reset!. Formula cells will update themselves automatically, 
   and it's an error to try to do it directly using those functions.
   6. The difference between a cell and an atom with watchers attached is 
   that cells guarantee consistency. That is to say that the evaluation 
   mechanism ensures that a formula cell is never updated until all of the 
   cells it depends on have been updated, that the formula is evaluated at 
   most one time, and that the cell's formula is evaluated only when the value 
   of a cell it depends on has changed. A cool property here is that the 
   entire graph of cells updates atomically and consistently, even though the 
   individual cells are updating themselves one at a time. The consistency 
   guarantee ensures that each cell sees the world as if it updates 
   atomically; no cell can ever see other cells in a half-evaluated state; 
   each cell acts as if it were the last cell to update. You can think of the 
   entire graph as a single value.



On Wednesday, December 18, 2013 7:50:58 PM UTC-5, James Reeves wrote:
>
> I wasn't expecting an overview of the syntax to be under "Getting 
> Started". The documentation there makes things clearer, but I still have a 
> few questions:
>
> 1. What differentiates the top-level page definition from DOM objects 
> returned from functions? Is the compiler just looking for the last 
> expression in the source file?
> 2. Do the HTML forms (div, span, etc.) act like functions, or more like 
> macros?
> 3. Are the HTML forms generated on the fly, or is there a fixed list of 
> tags available?
> 4. Is defc equivalent to def and cell? And defc= equivalent to def and 
> cell=?
> 5. What's the difference between cell and cell=? Is one like an atom, and 
> the other like a reactive function?
> 6. What's the difference between a cell an an atom?
>
> - James
>
>
> On 18 December 2013 21:02, Micha Niskin <micha....@gmail.com <javascript:>
> > wrote:
>
>> There is a section in the "Getting Started" page, titled "Sexp Markup 
>> Syntax" that attempts to explain the syntax. What needs to be improved 
>> there?
>>
>>
>> On Wednesday, December 18, 2013 3:56:02 PM UTC-5, James Reeves wrote:
>>
>>> It looks interesting, but it really needs an overview of the syntax. The 
>>> purpose of the examples is clear, but the mechanism is a mystery.
>>>
>>> - James
>>>
>>>
>>> On 18 December 2013 20:05, Micha Niskin <micha....@gmail.com> wrote:
>>>
>>>>  Documentation is here: http://hoplon.io 
>>>>
>>>> We continue to add documentation all the time. Serverside stuff not yet 
>>>> documented yet. Feedback welcomed!
>>>>
>>>> -- Micha Niskin and Alan Dipert
>>>>
>>>> -- 
>>>> -- 
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com.
>>>>
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>
>>>
>

-- 
-- 
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/groups/opt_out.

Reply via email to