{ "access": { "embargo": { "active": false, "reason": null }, "files": "public", "record": "public", "status": "open" }, "created": "2019-06-24T14:07:53.353697+00:00", "custom_fields": { "meeting:meeting": { "acronym": "ELS-2017", "dates": "3-4 April 2017", "place": "Brussels, Belgium", "title": "European Lisp Symposum 2017", "url": "https://european-lisp-symposium.org/2017/" } }, "deletion_status": { "is_deleted": false, "status": "P" }, "files": { "count": 1, "enabled": true, "entries": { "writing-portable-macroexpand-all.pdf": { "checksum": "md5:157e8df3fbae027251bb0462e105e12c", "ext": "pdf", "id": "4415024e-af55-4ce6-bce9-0771a05065e8", "key": "writing-portable-macroexpand-all.pdf", "metadata": null, "mimetype": "application/pdf", "size": 296586 } }, "order": [], "total_bytes": 296586 }, "id": "3254669", "is_draft": false, "is_published": true, "links": { "access": "https://zenodo.org/api/records/3254669/access", "access_links": "https://zenodo.org/api/records/3254669/access/links", "access_request": "https://zenodo.org/api/records/3254669/access/request", "access_users": "https://zenodo.org/api/records/3254669/access/users", "archive": "https://zenodo.org/api/records/3254669/files-archive", "archive_media": "https://zenodo.org/api/records/3254669/media-files-archive", "communities": "https://zenodo.org/api/records/3254669/communities", "communities-suggestions": "https://zenodo.org/api/records/3254669/communities-suggestions", "doi": "https://doi.org/10.5281/zenodo.3254669", "draft": "https://zenodo.org/api/records/3254669/draft", "files": "https://zenodo.org/api/records/3254669/files", "latest": "https://zenodo.org/api/records/3254669/versions/latest", "latest_html": "https://zenodo.org/records/3254669/latest", "media_files": "https://zenodo.org/api/records/3254669/media-files", "parent": "https://zenodo.org/api/records/3254668", "parent_doi": "https://zenodo.org/doi/10.5281/zenodo.3254668", "parent_html": "https://zenodo.org/records/3254668", "requests": "https://zenodo.org/api/records/3254669/requests", "reserve_doi": "https://zenodo.org/api/records/3254669/draft/pids/doi", "self": "https://zenodo.org/api/records/3254669", "self_doi": "https://zenodo.org/doi/10.5281/zenodo.3254669", "self_html": "https://zenodo.org/records/3254669", "self_iiif_manifest": "https://zenodo.org/api/iiif/record:3254669/manifest", "self_iiif_sequence": "https://zenodo.org/api/iiif/record:3254669/sequence/default", "versions": "https://zenodo.org/api/records/3254669/versions" }, "media_files": { "count": 0, "enabled": false, "entries": {}, "order": [], "total_bytes": 0 }, "metadata": { "creators": [ { "affiliations": [ { "name": "LaBRI, University of Bordeaux" } ], "person_or_org": { "family_name": "Raskin Mikhail", "identifiers": [ { "identifier": "0000-0002-6660-5673", "scheme": "orcid" } ], "name": "Raskin Mikhail", "type": "personal" } } ], "description": "
One of the powerful features of the Lisp language family is possibility to extend the language using macros. Some of possible extensions would benefit from a code walker, i.e. a library for processing code that keeps track of the status of different part of code, for their implementation. But in practice code walking is generally avoided.
\n
\nIn this paper, we study facilities useful to code walkers provided by ‘‘Common Lisp: the Language’’ (2nd edition) and the Common Lisp standard. We will show that the features described in the standard are not sufficient to write a fully portable code walker.
\n
\nOne of the problems is related to a powerful but rarely discussed feature. The macrolet special form allows a macro function to pass information easily to other macro invocations inside the lexical scope of the expansion.
\n
\nAnother problem for code analysis is related to the usage of non-standard special forms in expansions of standard macros. We review the handling of defun by popular free software Common Lisp implementations.
\n
\nWe also survey the abilities and limitations of the available code walking and recursive macro expansion libraries. Some examples of apparently-conforming code that exhibit avoidable limitations of the portable code walking tools are provided.
\n
\nWe present a new attempt to implement a portable best-effort code walker for Common Lisp called Agnostic Lizard.
\n
Only material presented at the European Lisp Symposium is accepted.
\r\n", "description": "This community collects all artifacts related to the European Lisp Symposium: papers, slides, etc.", "page": "", "title": "European Lisp Symposium" }, "revision_id": 0, "slug": "els", "updated": "2019-04-08T07:45:23.836921+00:00" } ], "ids": [ "50f9b62c-7bcb-4347-a055-b0f685c5db52" ] }, "id": "3254668", "pids": { "doi": { "client": "datacite", "identifier": "10.5281/zenodo.3254668", "provider": "datacite" } } }, "pids": { "doi": { "client": "datacite", "identifier": "10.5281/zenodo.3254669", "provider": "datacite" }, "oai": { "identifier": "oai:zenodo.org:3254669", "provider": "oai" } }, "revision_id": 5, "stats": { "all_versions": { "data_volume": 234302940.0, "downloads": 790, "unique_downloads": 710, "unique_views": 833, "views": 888 }, "this_version": { "data_volume": 233116596.0, "downloads": 786, "unique_downloads": 706, "unique_views": 827, "views": 882 } }, "status": "published", "updated": "2020-01-20T17:35:05.690423+00:00", "versions": { "index": 1, "is_latest": true } }