Software Open Access

Knowing When to Ask: Artifact

Arjen Rouvoet; Hendrik van Antwerpen; Casper Bach Poulsen; Robbert Krebbers; Eelco Visser


JSON Export

{
  "files": [
    {
      "links": {
        "self": "https://zenodo.org/api/files/8954668b-4b57-44a9-8d75-9cf126a5b509/knowing-when-to-ask.tar.gz"
      }, 
      "checksum": "md5:1cc756023d96232b65fd52956e2f2c5f", 
      "bucket": "8954668b-4b57-44a9-8d75-9cf126a5b509", 
      "key": "knowing-when-to-ask.tar.gz", 
      "type": "gz", 
      "size": 1463910395
    }
  ], 
  "owners": [
    143721
  ], 
  "doi": "10.5281/zenodo.4068065", 
  "stats": {
    "version_unique_downloads": 1.0, 
    "unique_views": 53.0, 
    "views": 63.0, 
    "version_views": 63.0, 
    "unique_downloads": 1.0, 
    "version_unique_views": 53.0, 
    "volume": 1463910395.0, 
    "version_downloads": 1.0, 
    "downloads": 1.0, 
    "version_volume": 1463910395.0
  }, 
  "links": {
    "doi": "https://doi.org/10.5281/zenodo.4068065", 
    "conceptdoi": "https://doi.org/10.5281/zenodo.4068064", 
    "bucket": "https://zenodo.org/api/files/8954668b-4b57-44a9-8d75-9cf126a5b509", 
    "conceptbadge": "https://zenodo.org/badge/doi/10.5281/zenodo.4068064.svg", 
    "html": "https://zenodo.org/record/4068065", 
    "latest_html": "https://zenodo.org/record/4068065", 
    "badge": "https://zenodo.org/badge/doi/10.5281/zenodo.4068065.svg", 
    "latest": "https://zenodo.org/api/records/4068065"
  }, 
  "conceptdoi": "10.5281/zenodo.4068064", 
  "created": "2020-10-06T13:37:56.992205+00:00", 
  "updated": "2020-10-08T00:27:01.448671+00:00", 
  "conceptrecid": "4068064", 
  "revision": 2, 
  "id": 4068065, 
  "metadata": {
    "access_right_category": "success", 
    "doi": "10.5281/zenodo.4068065", 
    "description": "<p>There is a large gap between the specification of type systems and the<br>\nimplementation of their type checkers, which impedes reasoning about the<br>\nsoundness of the type checker with respect to the specification.&nbsp; A vision to<br>\nclose this gap is to automatically obtain type checkers from declarative<br>\nprogramming language specifications.&nbsp; This moves the burden of proving<br>\ncorrectness from a case-by-case basis for concrete languages, to a single<br>\ncorrectness proof for the specification language.</p>\n\n<p>This vision is obstructed by an aspect common to all programming languages: name<br>\nresolution.&nbsp; Naming and scoping are pervasive and complex aspects of the static<br>\nsemantics of programming languages.&nbsp; Implementations of type checkers for<br>\nlanguages with name binding features such as modules, imports, classes, and<br>\ninheritance interleave collection of binding information (i.e., declarations,<br>\nscoping structure, and imports) and querying that information.&nbsp; This requires<br>\nscheduling those two aspects in such a way that query answers are stable---i.e.,<br>\nthey are computed only after all relevant binding structure has been collected.<br>\nType checkers for concrete languages accomplish stability using<br>\nlanguage-specific knowledge about the type system.</p>\n\n<p>In this paper we give a language-independent characterization of necessary and<br>\nsufficient conditions to guarantee stability of name and type queries during<br>\ntype checking in terms of _critical edges in an incomplete scope graph_.<br>\nWe use critical edges to give a formal small-step operational semantics to a<br>\ndeclarative specification language for type systems, that achieves soundness by<br>\ndelaying queries that may depend on missing information.&nbsp; This yields type<br>\ncheckers for the specified languages that are sound by construction---i.e., they<br>\nschedule queries so that the answers are stable, and only accept programs that<br>\nare name- and type-correct according to the declarative language specification.<br>\nWe implement this approach, and evaluate it against specifications of a small<br>\nmodule and record language, as well as subsets of Java and Scala.</p>\n\n<p>&nbsp;</p>", 
    "license": {
      "id": "Apache-2.0"
    }, 
    "title": "Knowing When to Ask: Artifact", 
    "relations": {
      "version": [
        {
          "count": 1, 
          "index": 0, 
          "parent": {
            "pid_type": "recid", 
            "pid_value": "4068064"
          }, 
          "is_last": true, 
          "last_child": {
            "pid_type": "recid", 
            "pid_value": "4068065"
          }
        }
      ]
    }, 
    "version": "1.0", 
    "keywords": [
      "Statix", 
      "Haskell"
    ], 
    "publication_date": "2020-10-06", 
    "creators": [
      {
        "affiliation": "Delft University of Technology", 
        "name": "Arjen Rouvoet"
      }, 
      {
        "affiliation": "Delft University of Technology", 
        "name": "Hendrik van Antwerpen"
      }, 
      {
        "affiliation": "Delft University of Technology", 
        "name": "Casper Bach Poulsen"
      }, 
      {
        "affiliation": "Delft University of Technology", 
        "name": "Robbert Krebbers"
      }, 
      {
        "affiliation": "Delft University of Technology", 
        "name": "Eelco Visser"
      }
    ], 
    "access_right": "open", 
    "resource_type": {
      "type": "software", 
      "title": "Software"
    }, 
    "related_identifiers": [
      {
        "scheme": "doi", 
        "identifier": "10.5281/zenodo.4068064", 
        "relation": "isVersionOf"
      }
    ]
  }
}
63
1
views
downloads
All versions This version
Views 6363
Downloads 11
Data volume 1.5 GB1.5 GB
Unique views 5353
Unique downloads 11

Share

Cite as