Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Domain-Specific Program Checking

Domain-Specific Program Checking

Lukas Renggli

October 04, 2011
Tweet

More Decks by Lukas Renggli

Other Decks in Technology

Transcript

  1. 14000 16000 18000 Seaside 2.6 Seaside 2.7 Seaside 2.8 Seaside

    2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
  2. 1 2 3 4 Lint 14000 16000 18000 Seaside 2.6

    Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
  3. 1 2 3 4 Lint ??? 14000 16000 18000 Seaside

    2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
  4. <a href="...">Remove Task 1</a> <br /> <a href="...">Remove Task 2</a>

    <br /> <a href="...">Remove Task 3</a> <br />
  5. renderTasksOn: html tasks do: [ :task | html anchor with:

    'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ]
  6. renderTasksOn: html tasks do: [ :task | html anchor with:

    'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ] Modifies collection while iterating over it
  7. ‣ HTML generation ‣ Javascript generation ‣ Composition definition ‣

    Control flow ‣ Application configuration Internal Domain- Specific Languages
  8. 1 2 3 4 Lint ??? 14000 16000 18000 Seaside

    2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
  9. renderTasksOn: html tasks do: [ :task | html anchor with:

    'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ] #with: has to be last message in cascade
  10. renderTasksOn: html tasks do: [ :task | html anchor callback:

    [ tasks remove: task ]; with: 'Remove Task ' , task number. html break ]
  11. 1 2 3 4 Lint 14000 16000 18000 Seaside 2.6

    Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
  12. 1 2 3 4 Lint Slime 14000 16000 18000 Seaside

    2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
  13. Person username birthday Description accessor label required priority * description

    * description model metamodel <<described by>> meta-metamodel
  14. Person username birthday Description accessor label required priority * description

    * description model metamodel <<described by>> meta-metamodel <<described by>>
  15. Person class>>descriptionUsername ^ StringDescription new accessor: #username; beRequired; default: nil;

    yourself Person username birthday Description accessor label required priority * description * description
  16. Description class>>descriptionLabel ^ StringDescription new accessor: #label; label: ‘Label’; beRequired;

    yourself Person username birthday Description accessor label required priority * description * description
  17. Person class>>descriptionUsername ^ StringDescription new accessor: #username; beRequired; default: nil;

    yourself Person username birthday Description accessor label required priority * description * description
  18. Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired;

    default: nil; yourself Person username birthday Description accessor label required priority * description * description
  19. Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired;

    default: nil; yourself Person username birthday Description accessor label required priority * description * description #label is a required value
  20. Invalid default value Person class>>descriptionUsername ^ StringDescription new accessor: #username;

    label: ‘Username’; beRequired; default: nil; yourself Person username birthday Description accessor label required priority * description * description