Files
gt4carp/lepiter/98eic2dywhmaij4eonyqv7aqu.lepiter
Veit Heller 199758d97d Multiple changes:
- Add the book and a few first pages
- Add the code generator
2022-04-17 19:48:45 +02:00

480 lines
12 KiB
Plaintext

{
"__schema" : "4.1",
"__type" : "page",
"children" : {
"__type" : "snippets",
"items" : [
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:45:14.801608+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:46:57.999944+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "lNc8bTyZDQCZnYokDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "This database is a booklet about my journey of adding support for [Carp](https://github.com/carp-lang/carp) to the Glamorous Toolkit. It may also serve as an instructional text for others who may wish to add language support for a language of their choice to the Glamorous Toolkit."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:49:06.977343+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:49:10.770322+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "i6aBezyZDQCZo8ldDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "### My why"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:46:59.7649+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:48:57.270379+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "CvfjczyZDQCZnkdvDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "When I set out on this adventure, I wanted to build an IDE for Carp. I thought that building an IDE for a language that has **syntactic macros**, **type inference**, and **borrow checking** might be an interesting undertaking. Helping a user navigate the process of writing macros and helping them debug them, showing types and lifetimes at every point in their program, seemed like an interesting idea worth exploring."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:48:58.594533+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:49:05.117045+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "UC7/ejyZDQCZovUTDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "It also seemed like a daunting idea."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:49:19.287082+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:50:16.779304+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "yNw0fDyZDQCZpDnKDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "I have never built an IDE. True, at the point of writing this document, I have been involved in building and maintaining the Glamorous Toolkit for over half a year. But before that, I mostly worked on language internals."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:50:19.582232+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:51:16.178212+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "zXPVfzyZDQCZpT4hDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "Maybe that blend of knowing the internals of Carp and the Glamorous Toolkit helped, but I found that with the help of the Toolkit, I was able to build something resembling an IDE in a few afternoons. It is not nearly done yet, but it can already do some of the things I was hoping it would do."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:51:18.544965+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:51:22.163297+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "hFxOgzyZDQCZpvYADqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "### Our Journey"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:51:28.559246+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:53:37.769503+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "W1+ogzyZDQCZp7heDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "In this book, I will go through the process of adding language support step by step. We will build a parser and play around with it for a bit. We will add a highlighter and marvel at how prettily it renders our code. We will add snippets, so we can look at Carp code from directly within Lepiter, and later Coder. We will add a LanguageLink interface, both the server and the client, so that we can execute Carp code. Finally, as a bonus, we will add a custom Coder element, such that we have something resembling an IDE in the end."
},
{
"__type" : "carpSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:56:34.436805+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T17:08:04.346367+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "Ddc1ljyZDQCZq2mSDqn2mw=="
},
"code" : "; this is what we will be able to do\r(defn hello-world []\r (IO.println \"Hello world!\"))"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:53:42.906873+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:54:20.656267+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "77jzizyZDQCZqDh5Dqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "I hope you enjoy working through this as much as I did when I first went on this journey, and I hope that it is educational enough for you to set out and build whatever tooling you want for your language."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:54:23.246616+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:54:26.766687+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "RkRPjjyZDQCZqbtkDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "### The Code"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:54:27.908058+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:56:20.163201+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "x2GgjjyZDQCZqqlSDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "Finally, you might every once in a while be tempted to not look at my prose, and just go off into the cavernous depths of code without guidance. Noone is hindering you. All the code is found within the `Carp` package. I suggest starting with {{gtClass:CarpParser}}, which is where I started."
}
]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:45:06.989429+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T16:45:12.647664+02:00"
}
},
"pageType" : {
"__type" : "namedPage",
"title" : "Introduction"
},
"uid" : {
"__type" : "uuid",
"uuid" : "26393c6d-3c99-0d00-999c-6b250ea9f69b"
}
}