WEBVTT

1
00:00:05.100 --> 00:00:09.800
it

2
00:00:12.100 --> 00:00:15.100
<00:00:12.100>thanks <00:00:12.207>a <00:00:12.315>lot. <00:00:12.423>Yeah, <00:00:12.530>so <00:00:12.638>last <00:00:12.746>session <00:00:12.853>for <00:00:12.961>today. <00:00:13.069>Have <00:00:13.176>you <00:00:13.284>been <00:00:13.392>enjoying <00:00:13.500>the

3
00:00:15.100 --> 00:00:15.700
<00:00:15.100>day <00:00:15.370>so <00:00:15.639>far?

4
00:00:17.300 --> 00:00:20.500
<00:00:17.300>Nice. <00:00:17.580>So <00:00:17.860>yeah, <00:00:18.140>I'm <00:00:18.420>co-leading <00:00:18.700>typefox

5
00:00:20.500 --> 00:00:23.300
<00:00:20.500>as <00:00:20.733>mentioned. <00:00:20.966>So <00:00:21.200>we <00:00:21.433>are <00:00:21.666>specializing <00:00:21.900>on

6
00:00:23.300 --> 00:00:27.900
<00:00:23.300>a <00:00:23.475>lot <00:00:23.650>of <00:00:23.825>Open <00:00:24.000>Source <00:00:24.175>Technologies, <00:00:24.350>especially <00:00:24.525>web <00:00:24.700>IDE

7
00:00:26.900 --> 00:00:29.600
<00:00:26.900>and <00:00:27.599>domain <00:00:28.299>specific

8
00:00:29.600 --> 00:00:32.200
<00:00:29.600>languages <00:00:29.833>and <00:00:30.066>all <00:00:30.300>sorts <00:00:30.533>of <00:00:30.766>sorts <00:00:31.000>of

9
00:00:32.200 --> 00:00:35.600
<00:00:32.200>things <00:00:32.340>around <00:00:32.480>that <00:00:32.620>and <00:00:32.760>so <00:00:32.900>today <00:00:33.040>they <00:00:33.180>focus <00:00:33.320>is <00:00:33.460>on <00:00:33.600>langium.

10
00:00:35.600 --> 00:00:38.600
<00:00:35.600>Let's <00:00:35.740>say <00:00:35.880>rather <00:00:36.020>new <00:00:36.160>open <00:00:36.300>source <00:00:36.440>project. <00:00:36.580>So <00:00:36.720>first <00:00:36.860>release <00:00:37.000>was

11
00:00:38.600 --> 00:00:39.300
<00:00:38.600>a <00:00:38.915>year <00:00:39.230>ago,

12
00:00:40.100 --> 00:00:44.000
<00:00:40.100>And <00:00:40.207>just <00:00:40.315>to <00:00:40.423>be <00:00:40.530>clear <00:00:40.638>when <00:00:40.746>we <00:00:40.853>talk <00:00:40.961>about <00:00:41.069>language <00:00:41.176>here. <00:00:41.284>It's <00:00:41.392>not <00:00:41.500>natural

13
00:00:43.400 --> 00:00:47.100
<00:00:43.400>language. <00:00:43.750>It's <00:00:44.100>more <00:00:44.449>formal <00:00:44.800>languages.

14
00:00:46.100 --> 00:00:49.500
<00:00:46.100>So <00:00:46.300>those <00:00:46.500>that <00:00:46.700>you <00:00:46.900>can <00:00:47.100>systematically <00:00:47.300>process <00:00:47.500>like

15
00:00:49.500 --> 00:00:50.400
<00:00:49.500>a <00:00:49.905>programming <00:00:50.310>language.

16
00:00:51.500 --> 00:00:54.400
<00:00:51.500>And <00:00:51.640>when <00:00:51.780>we <00:00:51.920>talk <00:00:52.060>about <00:00:52.200>designing <00:00:52.340>your <00:00:52.480>own <00:00:52.620>language, <00:00:52.760>then <00:00:52.900>let's

17
00:00:54.400 --> 00:00:56.400
<00:00:54.400>start <00:00:54.574>with <00:00:54.750>the <00:00:54.925>question. <00:00:55.100>Why <00:00:55.275>would <00:00:55.449>you <00:00:55.625>do <00:00:55.800>that?

18
00:00:57.900 --> 00:01:00.800
<00:00:57.900>I <00:00:58.100>think <00:00:58.300>as <00:00:58.500>a <00:00:58.699>developer, <00:00:58.900>it's <00:00:59.100>just <00:00:59.300>fun

19
00:01:00.800 --> 00:01:04.000
<00:01:00.800>to <00:01:01.080>discuss <00:01:01.360>programming <00:01:01.640>languages <00:01:01.919>and <00:01:02.199>to

20
00:01:03.600 --> 00:01:07.000
<00:01:03.600>learn <00:01:03.880>new <00:01:04.160>ones <00:01:04.440>and <00:01:04.720>even <00:01:05.000>maybe

21
00:01:06.200 --> 00:01:09.400
<00:01:06.200>even <00:01:06.400>thinking <00:01:06.600>about <00:01:06.800>implementing. <00:01:07.000>Your <00:01:07.200>own <00:01:07.400>programming <00:01:07.600>language

22
00:01:09.400 --> 00:01:12.300
<00:01:09.400>is <00:01:09.575>exciting, <00:01:09.750>but <00:01:09.925>I <00:01:10.100>think <00:01:10.275>there <00:01:10.450>are <00:01:10.625>also <00:01:10.800>very

23
00:01:12.300 --> 00:01:15.800
<00:01:12.300>good <00:01:12.500>commercial <00:01:12.700>reasons <00:01:12.899>of <00:01:13.100>business <00:01:13.300>reasons <00:01:13.500>to <00:01:13.700>do

24
00:01:15.800 --> 00:01:18.600
<00:01:15.800>this. <00:01:15.940>And <00:01:16.080>so <00:01:16.220>let's <00:01:16.360>have <00:01:16.500>a <00:01:16.640>look <00:01:16.780>at <00:01:16.920>one <00:01:17.060>specific <00:01:17.200>scenario.

25
00:01:19.700 --> 00:01:22.800
<00:01:19.700>So <00:01:19.855>let's <00:01:20.011>say <00:01:20.166>in <00:01:20.322>your <00:01:20.477>organization <00:01:20.633>you <00:01:20.788>have <00:01:20.944>domain <00:01:21.100>experts

26
00:01:22.800 --> 00:01:25.500
<00:01:22.800>and <00:01:23.149>they <00:01:23.500>need <00:01:23.850>tools <00:01:24.200>to

27
00:01:25.500 --> 00:01:28.500
<00:01:25.500>do <00:01:25.700>their <00:01:25.900>work <00:01:26.100>to <00:01:26.300>capture <00:01:26.500>the <00:01:26.700>data <00:01:26.900>and

28
00:01:28.500 --> 00:01:29.600
somehow.

29
00:01:30.400 --> 00:01:33.500
<00:01:30.400>be <00:01:30.680>able <00:01:30.960>to <00:01:31.240>themselves <00:01:31.520>Implement <00:01:31.800>parts

30
00:01:33.500 --> 00:01:36.800
<00:01:33.500>of <00:01:33.640>the <00:01:33.780>business <00:01:33.920>logic <00:01:34.060>and <00:01:34.200>do <00:01:34.340>things <00:01:34.480>with <00:01:34.620>that <00:01:34.760>and <00:01:34.900>of

31
00:01:36.800 --> 00:01:39.600
<00:01:36.800>course <00:01:36.975>very <00:01:37.149>often <00:01:37.325>that <00:01:37.500>happens <00:01:37.675>with <00:01:37.850>general <00:01:38.024>purpose <00:01:38.200>tools

32
00:01:39.600 --> 00:01:41.000
<00:01:39.600>Excel <00:01:40.020>and <00:01:40.440>the <00:01:40.860>like

33
00:01:41.700 --> 00:01:45.200
<00:01:41.700>Or <00:01:41.900>you <00:01:42.100>might <00:01:42.300>have <00:01:42.500>a <00:01:42.700>developer <00:01:42.900>team <00:01:43.100>in-house

34
00:01:44.200 --> 00:01:47.400
<00:01:44.200>and <00:01:44.433>so <00:01:44.666>they <00:01:44.900>can <00:01:45.133>send <00:01:45.366>over <00:01:45.600>a

35
00:01:47.400 --> 00:01:50.300
<00:01:47.400>bunch <00:01:47.600>of <00:01:47.800>requirements <00:01:48.000>and <00:01:48.200>documents <00:01:48.400>and <00:01:48.600>developers <00:01:48.800>can

36
00:01:50.300 --> 00:01:54.300
<00:01:50.300>Implement <00:01:50.533>business <00:01:50.766>logic <00:01:51.000>do <00:01:51.233>and <00:01:51.466>Integrations <00:01:51.700>with

37
00:01:54.300 --> 00:01:57.500
<00:01:54.300>other <00:01:54.500>tools <00:01:54.700>user <00:01:54.899>interfaces. <00:01:55.100>That's <00:01:55.300>all <00:01:55.500>possible. <00:01:55.700>But

38
00:01:58.300 --> 00:02:01.500
<00:01:58.300>A <00:01:58.455>lot <00:01:58.611>of <00:01:58.766>ongoing <00:01:58.922>work <00:01:59.077>a <00:01:59.233>lot <00:01:59.388>of <00:01:59.544>ongoing <00:01:59.700>effort.

39
00:02:01.500 --> 00:02:04.500
<00:02:01.500>You <00:02:01.700>still <00:02:01.900>always <00:02:02.100>need <00:02:02.300>to <00:02:02.500>keep <00:02:02.700>these <00:02:02.900>things

40
00:02:04.500 --> 00:02:07.700
<00:02:04.500>up <00:02:04.733>to <00:02:04.966>date <00:02:05.200>according <00:02:05.433>to <00:02:05.666>current <00:02:05.900>requirements

41
00:02:07.700 --> 00:02:09.400
<00:02:07.700>and <00:02:07.933>so <00:02:08.166>on <00:02:08.400>and <00:02:08.633>so <00:02:08.866>what <00:02:09.100>are

42
00:02:10.200 --> 00:02:12.900
<00:02:10.199>Alternatives <00:02:10.433>so <00:02:10.666>there's <00:02:10.899>the <00:02:11.133>low <00:02:11.366>code <00:02:11.600>approach

43
00:02:13.600 --> 00:02:17.300
<00:02:13.600>Where <00:02:13.775>you <00:02:13.950>buy <00:02:14.125>it <00:02:14.299>so <00:02:14.475>called <00:02:14.650>local <00:02:14.825>platform <00:02:15.000>and

44
00:02:16.300 --> 00:02:19.300
<00:02:16.300>that <00:02:16.580>enables <00:02:16.860>the <00:02:17.140>domain <00:02:17.420>experts <00:02:17.700>to

45
00:02:19.300 --> 00:02:23.300
<00:02:19.300>implement <00:02:19.580>an <00:02:19.860>application <00:02:20.140>or <00:02:20.420>applications <00:02:20.700>themselves

46
00:02:22.300 --> 00:02:26.300
<00:02:22.300>in <00:02:23.000>encode <00:02:23.700>parts

47
00:02:25.300 --> 00:02:29.300
<00:02:25.300>of <00:02:25.500>the <00:02:25.700>business <00:02:25.900>logic <00:02:26.100>in <00:02:26.300>that <00:02:26.500>create <00:02:26.700>mass

48
00:02:28.300 --> 00:02:31.300
<00:02:28.300>and <00:02:28.650>forms <00:02:29.000>and <00:02:29.350>user <00:02:29.700>interfaces

49
00:02:31.300 --> 00:02:34.100
<00:02:31.300>that <00:02:31.455>can <00:02:31.611>be <00:02:31.766>used <00:02:31.922>and <00:02:32.077>so <00:02:32.233>that <00:02:32.388>can <00:02:32.544>also <00:02:32.700>work

50
00:02:34.100 --> 00:02:34.700
nicely.

51
00:02:35.600 --> 00:02:38.400
<00:02:35.600>In <00:02:35.739>the <00:02:35.880>limits <00:02:36.019>of <00:02:36.160>that <00:02:36.299>platform, <00:02:36.440>of <00:02:36.579>course. <00:02:36.720>So <00:02:36.859>once <00:02:37.000>you

52
00:02:38.400 --> 00:02:40.600
<00:02:38.400>hit <00:02:38.680>those <00:02:38.960>limits <00:02:39.240>you're <00:02:39.520>back <00:02:39.800>to

53
00:02:41.700 --> 00:02:45.000
<00:02:41.700>Yeah, <00:02:42.049>creating <00:02:42.399>workarounds <00:02:42.750>and <00:02:43.100>and

54
00:02:44.100 --> 00:02:46.000
<00:02:44.100>back <00:02:44.450>to <00:02:44.799>a <00:02:45.150>large <00:02:45.500>overhead.

55
00:02:46.900 --> 00:02:50.100
<00:02:46.900>So <00:02:47.055>today <00:02:47.211>I'm <00:02:47.366>going <00:02:47.522>to <00:02:47.677>talk <00:02:47.833>about <00:02:47.988>the <00:02:48.144>third <00:02:48.300>approach.

56
00:02:49.100 --> 00:02:53.000
<00:02:49.100>That's <00:02:49.380>the <00:02:49.660>domain <00:02:49.940>specific <00:02:50.220>language <00:02:50.500>DSL

57
00:02:52.000 --> 00:02:53.300
approach.

58
00:02:54.100 --> 00:02:57.900
<00:02:54.100>So <00:02:54.255>here <00:02:54.411>the <00:02:54.566>idea <00:02:54.722>is <00:02:54.877>that <00:02:55.033>you <00:02:55.188>give <00:02:55.344>these <00:02:55.500>domain

59
00:02:57.900 --> 00:03:00.500
<00:02:57.900>folks <00:02:58.366>a <00:02:58.833>Smart <00:02:59.300>Text

60
00:03:00.500 --> 00:03:04.000
<00:03:00.500>Editor <00:03:00.640>and <00:03:00.780>you <00:03:00.920>can <00:03:01.060>imagine <00:03:01.200>that <00:03:01.340>a <00:03:01.480>bit <00:03:01.620>like <00:03:01.760>a <00:03:01.900>text

61
00:03:03.400 --> 00:03:06.600
<00:03:03.400>editor <00:03:03.633>in <00:03:03.866>ide <00:03:04.100>so <00:03:04.333>something <00:03:04.566>that <00:03:04.800>is

62
00:03:06.600 --> 00:03:07.800
<00:03:06.600>plain <00:03:07.680>text.

63
00:03:09.200 --> 00:03:12.300
<00:03:09.200>But <00:03:09.399>the <00:03:09.600>IDE <00:03:09.799>can <00:03:10.000>give <00:03:10.200>you <00:03:10.399>a <00:03:10.600>lot

64
00:03:12.300 --> 00:03:15.200
<00:03:12.300>of <00:03:12.455>suggestions <00:03:12.611>on <00:03:12.766>what <00:03:12.922>is <00:03:13.077>wrong <00:03:13.233>here. <00:03:13.388>What <00:03:13.544>can <00:03:13.700>you

65
00:03:15.200 --> 00:03:18.400
<00:03:15.200>write <00:03:15.375>there? <00:03:15.549>How <00:03:15.725>can <00:03:15.899>you <00:03:16.075>inspect <00:03:16.250>and <00:03:16.424>navigate <00:03:16.600>this

66
00:03:18.400 --> 00:03:21.300
<00:03:18.400>text <00:03:18.540>model? <00:03:18.680>So <00:03:18.820>it's <00:03:18.960>in <00:03:19.100>the <00:03:19.240>in <00:03:19.380>the <00:03:19.520>background. <00:03:19.660>It's <00:03:19.800>more

67
00:03:21.300 --> 00:03:23.700
<00:03:21.300>than <00:03:21.475>text. <00:03:21.650>It's <00:03:21.825>something <00:03:22.000>that <00:03:22.175>can <00:03:22.350>be <00:03:22.525>automatically <00:03:22.700>processed.

68
00:03:24.700 --> 00:03:27.800
<00:03:24.700>And <00:03:25.049>so <00:03:25.399>this <00:03:25.750>can <00:03:26.100>look

69
00:03:27.800 --> 00:03:29.600
<00:03:27.800>like <00:03:28.266>something <00:03:28.733>like <00:03:29.200>this.

70
00:03:30.800 --> 00:03:33.200
<00:03:30.800>So <00:03:31.000>the <00:03:31.200>key <00:03:31.400>idea <00:03:31.600>here <00:03:31.800>is <00:03:32.000>that <00:03:32.200>you

71
00:03:33.200 --> 00:03:35.000
<00:03:33.200>use <00:03:33.666>the <00:03:34.133>domain <00:03:34.600>vocabulary?

72
00:03:35.800 --> 00:03:38.300
<00:03:35.800>Whatever <00:03:36.033>that <00:03:36.266>domain <00:03:36.500>is, <00:03:36.733>so <00:03:36.966>anything <00:03:37.200>from

73
00:03:38.300 --> 00:03:41.400
<00:03:38.300>medical <00:03:38.650>Finance <00:03:39.000>or <00:03:39.350>production <00:03:39.700>or

74
00:03:41.400 --> 00:03:44.700
<00:03:41.400>something <00:03:41.633>and <00:03:41.866>you <00:03:42.100>encode <00:03:42.333>that <00:03:42.566>vocabulary <00:03:42.800>into

75
00:03:44.700 --> 00:03:45.500
<00:03:44.700>this <00:03:45.060>text <00:03:45.420>language.

76
00:03:46.500 --> 00:03:49.700
<00:03:46.500>Which <00:03:46.733>is <00:03:46.966>not <00:03:47.200>done <00:03:47.433>in <00:03:47.666>general <00:03:47.900>purpose

77
00:03:49.700 --> 00:03:54.000
<00:03:49.700>languages. <00:03:49.899>So <00:03:50.100>let's <00:03:50.299>say <00:03:50.500>for <00:03:50.700>example <00:03:50.899>vocabulary <00:03:51.100>is

78
00:03:53.600 --> 00:03:56.300
<00:03:53.600>product <00:03:53.950>material <00:03:54.299>batch <00:03:54.650>so <00:03:55.000>you

79
00:03:56.300 --> 00:03:59.600
<00:03:56.300>can <00:03:56.440>put <00:03:56.580>it <00:03:56.720>inside <00:03:56.860>here. <00:03:57.000>And <00:03:57.140>so <00:03:57.280>that <00:03:57.420>all <00:03:57.560>the <00:03:57.700>persons

80
00:03:59.600 --> 00:04:02.500
<00:03:59.600>from <00:03:59.775>that <00:03:59.950>domain <00:04:00.125>know <00:04:00.299>what <00:04:00.475>it <00:04:00.650>is <00:04:00.825>what <00:04:01.000>it

81
00:04:02.500 --> 00:04:05.400
<00:04:02.500>is <00:04:02.640>about. <00:04:02.780>So, <00:04:02.920>of <00:04:03.060>course, <00:04:03.200>there's <00:04:03.340>some <00:04:03.480>some <00:04:03.620>learning <00:04:03.760>experience. <00:04:03.900>They

82
00:04:05.400 --> 00:04:08.300
<00:04:05.400>need <00:04:05.555>to <00:04:05.711>how <00:04:05.866>to <00:04:06.022>learn <00:04:06.177>how <00:04:06.333>to <00:04:06.488>handle <00:04:06.644>this <00:04:06.800>tool,

83
00:04:08.300 --> 00:04:10.200
<00:04:08.300>but <00:04:08.500>they <00:04:08.700>can <00:04:08.900>get <00:04:09.100>into <00:04:09.300>that <00:04:09.500>very <00:04:09.700>quickly.

84
00:04:11.600 --> 00:04:14.800
<00:04:11.600>Then <00:04:11.950>based <00:04:12.299>from <00:04:12.650>that <00:04:13.000>you

85
00:04:14.800 --> 00:04:18.200
<00:04:14.800>can <00:04:15.033>generate <00:04:15.266>automate <00:04:15.500>you <00:04:15.733>can <00:04:15.966>transform <00:04:16.200>these

86
00:04:17.200 --> 00:04:20.200
<00:04:17.200>text <00:04:17.479>models <00:04:17.760>into <00:04:18.039>business <00:04:18.320>logic <00:04:18.599>you

87
00:04:20.200 --> 00:04:23.400
<00:04:20.200>can <00:04:20.399>integrate <00:04:20.599>with <00:04:20.800>other <00:04:21.000>tools <00:04:21.200>create <00:04:21.399>user <00:04:21.599>interfaces

88
00:04:23.400 --> 00:04:24.200
<00:04:23.400>out <00:04:23.760>of <00:04:24.120>that.

89
00:04:24.900 --> 00:04:27.400
<00:04:24.900>And <00:04:25.075>the <00:04:25.250>best <00:04:25.424>part <00:04:25.599>is <00:04:25.775>it's <00:04:25.950>a <00:04:26.125>single <00:04:26.299>entry

90
00:04:27.400 --> 00:04:30.300
<00:04:27.400>point <00:04:27.527>that <00:04:27.654>you <00:04:27.781>can <00:04:27.909>use <00:04:28.036>for <00:04:28.163>multiple <00:04:28.290>other <00:04:28.418>tools. <00:04:28.545>So <00:04:28.672>even <00:04:28.799>if

91
00:04:30.300 --> 00:04:33.600
<00:04:30.300>they <00:04:30.500>are <00:04:30.700>there's <00:04:30.900>a <00:04:31.100>multitude <00:04:31.300>of <00:04:31.500>integration <00:04:31.700>tools

92
00:04:33.600 --> 00:04:36.500
<00:04:33.600>that <00:04:33.800>with <00:04:34.000>different <00:04:34.200>apis <00:04:34.400>and <00:04:34.600>interfaces <00:04:34.800>you <00:04:35.000>can

93
00:04:36.500 --> 00:04:39.500
<00:04:36.500>take <00:04:36.733>this <00:04:36.966>one <00:04:37.200>text <00:04:37.433>and <00:04:37.666>create <00:04:37.900>something

94
00:04:39.500 --> 00:04:42.100
<00:04:39.500>for <00:04:39.733>all <00:04:39.966>these <00:04:40.200>these <00:04:40.433>tools <00:04:40.666>that <00:04:40.900>you

95
00:04:42.100 --> 00:04:42.300
need.

96
00:04:44.200 --> 00:04:47.900
<00:04:44.200>The <00:04:44.375>reaction <00:04:44.550>time <00:04:44.724>when <00:04:44.900>you <00:04:45.075>want <00:04:45.250>to <00:04:45.425>evolve <00:04:45.599>this

97
00:04:47.900 --> 00:04:51.100
<00:04:47.900>language <00:04:48.099>in <00:04:48.299>my <00:04:48.500>experience <00:04:48.700>is <00:04:48.900>relatively <00:04:49.099>good <00:04:49.299>so

98
00:04:50.100 --> 00:04:53.900
<00:04:50.100>relatively <00:04:50.380>fast. <00:04:50.660>So <00:04:50.940>you're <00:04:51.220>developer <00:04:51.500>team

99
00:04:53.900 --> 00:04:56.100
<00:04:53.900>can <00:04:54.133>make <00:04:54.366>a <00:04:54.599>proof <00:04:54.833>of <00:04:55.066>concept <00:04:55.299>and

100
00:04:56.100 --> 00:04:59.300
<00:04:56.100>then <00:04:56.240>evolve <00:04:56.380>such <00:04:56.520>a <00:04:56.660>language <00:04:56.800>in <00:04:56.940>a <00:04:57.080>way <00:04:57.220>that <00:04:57.360>new <00:04:57.500>requirements

101
00:04:59.300 --> 00:05:02.500
<00:04:59.300>can <00:04:59.440>be <00:04:59.580>captured <00:04:59.720>you <00:04:59.860>can <00:05:00.000>build <00:05:00.140>in <00:05:00.280>new <00:05:00.420>features. <00:05:00.560>And <00:05:00.700>so

102
00:05:02.500 --> 00:05:05.200
<00:05:02.500>it's <00:05:02.733>something <00:05:02.966>living <00:05:03.200>so <00:05:03.433>there's <00:05:03.666>feedback <00:05:03.900>from

103
00:05:05.200 --> 00:05:08.500
<00:05:05.200>the <00:05:05.355>domain <00:05:05.511>experts <00:05:05.666>and <00:05:05.822>you <00:05:05.977>can <00:05:06.133>go <00:05:06.288>on <00:05:06.444>and <00:05:06.599>make

104
00:05:08.500 --> 00:05:11.300
<00:05:08.500>something <00:05:08.675>that <00:05:08.850>is <00:05:09.025>really <00:05:09.200>of <00:05:09.375>value <00:05:09.550>and <00:05:09.725>something <00:05:09.900>useful.

105
00:05:13.500 --> 00:05:16.700
<00:05:13.500>So <00:05:13.655>now <00:05:13.811>before <00:05:13.966>we <00:05:14.122>look <00:05:14.277>at <00:05:14.433>the <00:05:14.588>actual <00:05:14.744>framework, <00:05:14.900>let's

106
00:05:16.700 --> 00:05:19.300
<00:05:16.700>talk <00:05:16.875>a <00:05:17.050>bit <00:05:17.224>on <00:05:17.400>a <00:05:17.575>general <00:05:17.750>level <00:05:17.925>high <00:05:18.099>level

107
00:05:19.300 --> 00:05:22.100
<00:05:19.300>what <00:05:19.475>language <00:05:19.650>design <00:05:19.825>not <00:05:20.000>too <00:05:20.175>deep, <00:05:20.350>but <00:05:20.525>just <00:05:20.700>so

108
00:05:22.100 --> 00:05:25.100
<00:05:22.100>that <00:05:22.216>you <00:05:22.333>get <00:05:22.450>an <00:05:22.566>idea <00:05:22.683>of <00:05:22.800>what <00:05:22.916>considerations <00:05:23.033>you <00:05:23.150>typically <00:05:23.266>have <00:05:23.383>to <00:05:23.500>do

109
00:05:25.100 --> 00:05:26.200
<00:05:25.100>in <00:05:25.595>this <00:05:26.090>context.

110
00:05:27.700 --> 00:05:30.400
<00:05:27.700>So <00:05:27.933>one <00:05:28.166>basic <00:05:28.400>thing <00:05:28.633>is <00:05:28.866>choosing <00:05:29.099>a

111
00:05:30.400 --> 00:05:34.000
<00:05:30.400>paradigm <00:05:30.633>or <00:05:30.866>paradigms. <00:05:31.099>It's <00:05:31.333>quite <00:05:31.566>General <00:05:31.799>things.

112
00:05:33.400 --> 00:05:36.200
<00:05:33.400>So <00:05:33.575>just <00:05:33.750>thinking <00:05:33.924>about <00:05:34.099>what <00:05:34.275>is <00:05:34.450>it <00:05:34.625>that <00:05:34.799>you

113
00:05:36.200 --> 00:05:38.200
<00:05:36.200>want <00:05:36.400>to <00:05:36.599>represent? <00:05:36.800>Is <00:05:37.000>it <00:05:37.200>more <00:05:37.400>about <00:05:37.599>structure?

114
00:05:39.100 --> 00:05:43.400
<00:05:39.100>So <00:05:39.255>when <00:05:39.411>we <00:05:39.566>look <00:05:39.722>at <00:05:39.877>the <00:05:40.033>general <00:05:40.188>purpose <00:05:40.344>languages <00:05:40.500>structural

115
00:05:42.400 --> 00:05:45.700
<00:05:42.400>languages, <00:05:42.750>I <00:05:43.099>would <00:05:43.450>consider <00:05:43.799>things

116
00:05:45.700 --> 00:05:49.700
<00:05:45.700>like <00:05:45.979>Json <00:05:46.260>XML <00:05:46.539>also <00:05:46.820>HTML <00:05:47.099>with

117
00:05:48.700 --> 00:05:51.900
<00:05:48.700>a <00:05:49.166>different <00:05:49.633>scope <00:05:50.099>or

118
00:05:51.900 --> 00:05:54.800
<00:05:51.900>is <00:05:52.099>it <00:05:52.299>more <00:05:52.500>about <00:05:52.700>Behavior? <00:05:52.900>So <00:05:53.099>more <00:05:53.299>in

119
00:05:54.800 --> 00:05:57.600
<00:05:54.800>the <00:05:54.975>direction <00:05:55.150>of <00:05:55.325>a <00:05:55.500>programming <00:05:55.675>language <00:05:55.850>and <00:05:56.025>within <00:05:56.200>that

120
00:05:57.600 --> 00:06:00.600
<00:05:57.600>you <00:05:57.833>can <00:05:58.066>choose <00:05:58.300>between <00:05:58.533>different <00:05:58.766>programming <00:05:59.000>Styles.

121
00:06:00.600 --> 00:06:02.200
<00:06:00.600>Is <00:06:00.880>it <00:06:01.160>more <00:06:01.440>imperative <00:06:01.720>or <00:06:02.000>functional?

122
00:06:03.100 --> 00:06:07.500
<00:06:03.100>And <00:06:03.216>of <00:06:03.333>course, <00:06:03.450>they're <00:06:03.566>also <00:06:03.683>mixtures <00:06:03.800>of <00:06:03.916>all <00:06:04.033>these <00:06:04.150>things <00:06:04.266>so <00:06:04.383>obviously <00:06:04.500>there

123
00:06:06.500 --> 00:06:09.800
<00:06:06.500>are <00:06:06.780>languages <00:06:07.060>that <00:06:07.340>can <00:06:07.620>that <00:06:07.900>offer

124
00:06:09.800 --> 00:06:13.500
<00:06:09.800>both <00:06:10.150>imperative <00:06:10.500>and <00:06:10.850>functional <00:06:11.200>aspects

125
00:06:12.500 --> 00:06:15.600
<00:06:12.500>and <00:06:12.850>or <00:06:13.200>can <00:06:13.550>where <00:06:13.900>you

126
00:06:15.600 --> 00:06:18.300
<00:06:15.600>can <00:06:15.755>combine <00:06:15.911>these <00:06:16.066>things <00:06:16.222>but <00:06:16.377>there <00:06:16.533>are <00:06:16.688>also <00:06:16.844>mixtures <00:06:17.000>of

127
00:06:18.300 --> 00:06:22.500
<00:06:18.300>structure <00:06:18.475>and <00:06:18.650>behavior. <00:06:18.825>I <00:06:19.000>would <00:06:19.175>for <00:06:19.350>example <00:06:19.525>see <00:06:19.700>jsx

128
00:06:21.500 --> 00:06:25.500
<00:06:21.500>as <00:06:21.700>an <00:06:21.900>example <00:06:22.100>for <00:06:22.300>that. <00:06:22.500>So <00:06:22.700>used <00:06:22.900>by

129
00:06:25.500 --> 00:06:28.300
<00:06:25.500>react <00:06:25.700>where <00:06:25.900>you <00:06:26.100>can <00:06:26.300>describe <00:06:26.500>the <00:06:26.700>structure <00:06:26.900>of

130
00:06:28.300 --> 00:06:31.200
<00:06:28.300>the <00:06:28.533>of <00:06:28.766>a <00:06:29.000>document <00:06:29.233>intermixed <00:06:29.466>with <00:06:29.700>behavior.

131
00:06:33.400 --> 00:06:36.300
<00:06:33.400>So <00:06:33.575>and <00:06:33.750>all <00:06:33.924>these <00:06:34.099>things <00:06:34.275>and <00:06:34.450>arbitrary <00:06:34.625>mixtures <00:06:34.799>can

132
00:06:36.300 --> 00:06:39.200
<00:06:36.300>be <00:06:36.427>designed <00:06:36.554>and <00:06:36.681>when <00:06:36.809>you <00:06:36.936>create <00:06:37.063>a <00:06:37.190>language, <00:06:37.318>but <00:06:37.445>you <00:06:37.572>have <00:06:37.700>to

133
00:06:39.200 --> 00:06:42.200
<00:06:39.200>choose <00:06:39.400>something <00:06:39.599>that <00:06:39.800>is <00:06:40.000>that <00:06:40.200>is <00:06:40.400>focused <00:06:40.599>on

134
00:06:42.200 --> 00:06:45.500
<00:06:42.200>the <00:06:42.375>actual <00:06:42.550>needs. <00:06:42.724>And <00:06:42.900>so <00:06:43.075>something <00:06:43.250>that <00:06:43.425>helps <00:06:43.599>you

135
00:06:45.500 --> 00:06:47.900
<00:06:45.500>to <00:06:45.700>solve <00:06:45.900>the <00:06:46.100>actual <00:06:46.300>problems <00:06:46.500>of <00:06:46.700>the <00:06:46.900>users.

136
00:06:49.900 --> 00:06:52.300
<00:06:49.900>Then <00:06:50.179>talking <00:06:50.460>about <00:06:50.739>abstraction <00:06:51.020>level <00:06:51.299>the

137
00:06:52.300 --> 00:06:55.100
<00:06:52.300>example <00:06:52.427>that <00:06:52.554>I <00:06:52.681>showed <00:06:52.809>before <00:06:52.936>is <00:06:53.063>on <00:06:53.190>the <00:06:53.318>left <00:06:53.445>here <00:06:53.572>and <00:06:53.700>that's

138
00:06:55.100 --> 00:06:58.400
<00:06:55.100>actually <00:06:55.240>in <00:06:55.380>not <00:06:55.520>so <00:06:55.660>good <00:06:55.800>example, <00:06:55.940>I <00:06:56.080>would <00:06:56.220>say <00:06:56.360>even <00:06:56.500>if

139
00:06:58.400 --> 00:07:02.000
<00:06:58.400>I <00:06:58.575>showed <00:06:58.750>it <00:06:58.924>as <00:06:59.099>the <00:06:59.275>first <00:06:59.450>one <00:06:59.625>because <00:06:59.799>it's

140
00:07:01.300 --> 00:07:04.900
<00:07:01.300>very <00:07:01.650>abstract <00:07:02.000>the <00:07:02.350>language <00:07:02.700>itself.

141
00:07:05.800 --> 00:07:08.500
<00:07:05.800>Is <00:07:05.975>a <00:07:06.150>kind <00:07:06.325>of <00:07:06.500>a <00:07:06.675>high <00:07:06.850>level <00:07:07.025>language <00:07:07.200>to

142
00:07:08.500 --> 00:07:09.000
Define?

143
00:07:09.900 --> 00:07:12.500
<00:07:09.900>A <00:07:10.179>schema <00:07:10.460>of <00:07:10.739>something <00:07:11.020>so <00:07:11.299>or

144
00:07:12.500 --> 00:07:15.700
<00:07:12.500>like <00:07:12.780>a <00:07:13.060>class <00:07:13.340>or <00:07:13.620>yeah, <00:07:13.900>like

145
00:07:15.700 --> 00:07:18.600
<00:07:15.700>an <00:07:15.855>object <00:07:16.011>schema. <00:07:16.166>So <00:07:16.322>it's <00:07:16.477>just <00:07:16.633>a <00:07:16.788>general <00:07:16.944>def <00:07:17.099>with

146
00:07:18.600 --> 00:07:21.400
<00:07:18.600>properties <00:07:18.800>that <00:07:19.000>can <00:07:19.200>be <00:07:19.400>mandatory <00:07:19.600>or <00:07:19.800>Key <00:07:20.000>Properties.

147
00:07:22.400 --> 00:07:26.000
<00:07:22.400>And <00:07:22.527>so <00:07:22.654>this <00:07:22.781>is <00:07:22.909>something <00:07:23.036>very <00:07:23.163>high <00:07:23.290>level <00:07:23.418>and <00:07:23.545>the <00:07:23.672>domain <00:07:23.799>vocabulary

148
00:07:25.200 --> 00:07:28.100
<00:07:25.200>here <00:07:25.479>is <00:07:25.760>actually <00:07:26.039>just <00:07:26.320>variable <00:07:26.599>names.

149
00:07:29.400 --> 00:07:32.700
<00:07:29.400>And <00:07:29.555>on <00:07:29.711>the <00:07:29.866>right <00:07:30.022>side <00:07:30.177>you <00:07:30.333>have <00:07:30.488>another <00:07:30.644>language <00:07:30.799>where

150
00:07:32.700 --> 00:07:35.600
<00:07:32.700>the <00:07:32.933>the <00:07:33.166>domain <00:07:33.400>words <00:07:33.633>product <00:07:33.866>material <00:07:34.099>batch.

151
00:07:35.600 --> 00:07:38.200
<00:07:35.600>I've <00:07:35.880>become <00:07:36.160>keywords <00:07:36.440>of <00:07:36.720>the <00:07:37.000>language.

152
00:07:40.100 --> 00:07:42.100
<00:07:40.100>So <00:07:40.275>in <00:07:40.450>this <00:07:40.625>means <00:07:40.800>these <00:07:40.975>domain <00:07:41.150>words <00:07:41.325>are <00:07:41.500>now.

153
00:07:43.300 --> 00:07:46.400
<00:07:43.300>An <00:07:43.475>interior <00:07:43.650>part <00:07:43.825>of <00:07:44.000>language <00:07:44.175>they <00:07:44.350>are <00:07:44.525>hard <00:07:44.700>coded

154
00:07:46.400 --> 00:07:49.600
<00:07:46.400>in <00:07:46.527>that <00:07:46.654>and <00:07:46.781>so <00:07:46.909>here <00:07:47.036>we <00:07:47.163>are <00:07:47.290>talking <00:07:47.418>about <00:07:47.545>abstract <00:07:47.672>instant. <00:07:47.799>No

155
00:07:49.600 --> 00:07:51.800
<00:07:49.600>not <00:07:49.800>abstract, <00:07:50.000>but <00:07:50.200>concrete <00:07:50.400>instances <00:07:50.600>of <00:07:50.800>these <00:07:51.000>things.

156
00:07:53.200 --> 00:07:56.600
<00:07:53.200>So <00:07:53.355>in <00:07:53.511>general <00:07:53.666>I <00:07:53.822>would <00:07:53.977>recommend <00:07:54.133>be <00:07:54.288>specific. <00:07:54.444>So <00:07:54.599>it's

157
00:07:56.600 --> 00:07:58.300
<00:07:56.600>about <00:07:56.950>a <00:07:57.300>domain <00:07:57.650>specific <00:07:58.000>language.

158
00:07:59.400 --> 00:08:02.500
<00:07:59.400>And <00:07:59.599>at <00:07:59.799>least <00:08:00.000>as <00:08:00.200>specific <00:08:00.400>as <00:08:00.599>possible <00:08:00.799>to

159
00:08:02.500 --> 00:08:05.400
<00:08:02.500>capture <00:08:02.780>what <00:08:03.060>the <00:08:03.340>needs <00:08:03.620>of <00:08:03.900>your

160
00:08:05.400 --> 00:08:05.700
users.

161
00:08:07.200 --> 00:08:10.300
<00:08:07.200>And <00:08:07.400>yet <00:08:07.599>the <00:08:07.800>obvious <00:08:08.000>reason <00:08:08.200>is <00:08:08.400>if <00:08:08.599>you

162
00:08:10.300 --> 00:08:13.400
<00:08:10.300>are <00:08:10.427>too <00:08:10.554>generic, <00:08:10.681>why <00:08:10.809>don't <00:08:10.936>you <00:08:11.063>just <00:08:11.190>use <00:08:11.318>a <00:08:11.445>general <00:08:11.572>purpose <00:08:11.700>language?

163
00:08:15.100 --> 00:08:18.600
<00:08:15.100>So <00:08:15.333>generally <00:08:15.566>recommendation <00:08:15.800>be <00:08:16.033>specific <00:08:16.266>when <00:08:16.500>you're

164
00:08:18.600 --> 00:08:21.700
<00:08:18.600>building <00:08:18.800>something <00:08:19.000>that <00:08:19.200>is <00:08:19.400>mostly <00:08:19.600>structural <00:08:19.800>trying <00:08:20.000>not

165
00:08:21.700 --> 00:08:23.400
<00:08:21.700>to <00:08:22.166>just <00:08:22.633>replicate <00:08:23.099>Json.

166
00:08:23.900 --> 00:08:26.300
<00:08:23.900>If <00:08:24.075>you <00:08:24.250>end <00:08:24.424>up <00:08:24.599>designing <00:08:24.775>a <00:08:24.950>language <00:08:25.125>that <00:08:25.299>is

167
00:08:26.300 --> 00:08:29.300
<00:08:26.300>just <00:08:26.427>a <00:08:26.554>bunch <00:08:26.681>of <00:08:26.809>key <00:08:26.936>value <00:08:27.063>mappings <00:08:27.190>then <00:08:27.318>I <00:08:27.445>think <00:08:27.572>it's <00:08:27.700>not

168
00:08:29.300 --> 00:08:31.500
<00:08:29.300>not <00:08:29.580>a <00:08:29.860>lot <00:08:30.140>of <00:08:30.420>added <00:08:30.700>value.

169
00:08:32.200 --> 00:08:35.500
<00:08:32.200>And <00:08:32.340>if <00:08:32.480>you're <00:08:32.620>on <00:08:32.760>the <00:08:32.900>behavioral <00:08:33.040>side, <00:08:33.180>I <00:08:33.320>would <00:08:33.460>recommend <00:08:33.600>not

170
00:08:35.500 --> 00:08:38.600
<00:08:35.500>trying <00:08:35.674>to <00:08:35.850>replicate <00:08:36.025>your <00:08:36.200>favorite <00:08:36.375>programming <00:08:36.549>language. <00:08:36.725>I <00:08:36.900>mean,

171
00:08:38.600 --> 00:08:41.700
<00:08:38.600>it <00:08:38.775>is <00:08:38.950>actually <00:08:39.125>fun <00:08:39.300>to <00:08:39.475>think <00:08:39.650>about <00:08:39.825>type <00:08:40.000>systems

172
00:08:41.700 --> 00:08:45.000
<00:08:41.700>to <00:08:41.980>implement <00:08:42.260>stuff <00:08:42.540>like <00:08:42.820>type <00:08:43.100>parameters

173
00:08:44.700 --> 00:08:47.300
<00:08:44.700>and <00:08:45.166>Lambda <00:08:45.633>functions <00:08:46.100>and

174
00:08:47.300 --> 00:08:50.300
<00:08:47.300>all <00:08:47.407>that <00:08:47.515>but <00:08:47.623>you <00:08:47.730>really <00:08:47.838>know <00:08:47.946>where <00:08:48.053>to <00:08:48.161>stop <00:08:48.269>I <00:08:48.376>mean <00:08:48.484>as <00:08:48.592>a <00:08:48.699>developer,

175
00:08:50.300 --> 00:08:53.900
<00:08:50.300>it's <00:08:50.439>cool <00:08:50.579>to <00:08:50.719>work <00:08:50.859>on <00:08:51.000>these <00:08:51.140>things <00:08:51.280>and <00:08:51.420>to <00:08:51.560>make <00:08:51.699>something

176
00:08:53.900 --> 00:08:56.200
<00:08:53.900>that <00:08:54.055>is <00:08:54.211>really <00:08:54.366>your <00:08:54.522>own <00:08:54.677>and <00:08:54.833>that <00:08:54.988>is <00:08:55.144>integrated <00:08:55.300>with

177
00:08:56.200 --> 00:08:57.200
<00:08:56.200>with <00:08:56.650>the <00:08:57.100>domain.

178
00:08:58.100 --> 00:09:01.400
<00:08:58.100>But <00:08:58.240>it's <00:08:58.380>very <00:08:58.520>complex. <00:08:58.660>It's <00:08:58.800>a <00:08:58.940>lot <00:08:59.080>of <00:08:59.220>work <00:08:59.360>to <00:08:59.500>do

179
00:09:01.400 --> 00:09:05.300
<00:09:01.400>it <00:09:01.574>right <00:09:01.750>as <00:09:01.925>you <00:09:02.100>may <00:09:02.275>might <00:09:02.449>imagine. <00:09:02.625>So <00:09:02.800>if

180
00:09:05.300 --> 00:09:08.500
<00:09:05.300>you <00:09:05.439>want <00:09:05.579>to <00:09:05.719>do <00:09:05.859>if <00:09:06.000>a <00:09:06.140>full-fledged <00:09:06.280>programming <00:09:06.420>language, <00:09:06.560>it <00:09:06.699>takes

181
00:09:08.500 --> 00:09:11.100
<00:09:08.500>time. <00:09:08.700>And <00:09:08.900>so <00:09:09.100>it's <00:09:09.300>really <00:09:09.500>a <00:09:09.700>matter <00:09:09.900>of

182
00:09:11.100 --> 00:09:12.100
<00:09:11.100>knowing <00:09:12.000>a

183
00:09:13.200 --> 00:09:16.200
<00:09:13.200>good <00:09:13.550>cut <00:09:13.900>where <00:09:14.250>you <00:09:14.600>can

184
00:09:16.200 --> 00:09:19.600
<00:09:16.200>provide <00:09:16.433>as <00:09:16.666>much <00:09:16.900>flexibility <00:09:17.133>as <00:09:17.366>necessary, <00:09:17.600>but

185
00:09:19.600 --> 00:09:21.900
<00:09:19.600>keep <00:09:19.755>it <00:09:19.911>as <00:09:20.066>simple <00:09:20.222>as <00:09:20.377>possible <00:09:20.533>at <00:09:20.688>the <00:09:20.844>same <00:09:21.000>time.

186
00:09:23.400 --> 00:09:27.100
<00:09:23.400>And <00:09:23.574>of <00:09:23.750>course <00:09:23.925>finding <00:09:24.100>this <00:09:24.275>this <00:09:24.449>good <00:09:24.625>cut <00:09:24.800>needs

187
00:09:26.100 --> 00:09:29.200
<00:09:26.100>experience. <00:09:26.275>But <00:09:26.450>I <00:09:26.625>also <00:09:26.800>a <00:09:26.975>lot <00:09:27.150>of <00:09:27.325>discussion <00:09:27.500>with

188
00:09:29.200 --> 00:09:30.600
<00:09:29.200>the <00:09:29.515>with <00:09:29.830>the <00:09:30.145>clients <00:09:30.460>and

189
00:09:31.600 --> 00:09:34.500
<00:09:31.600>Yeah, <00:09:31.950>finding <00:09:32.300>a <00:09:32.650>communicating <00:09:33.000>and

190
00:09:34.500 --> 00:09:37.300
<00:09:34.500>a <00:09:34.780>bit <00:09:35.060>like <00:09:35.340>finding <00:09:35.620>the <00:09:35.900>right

191
00:09:37.300 --> 00:09:40.500
<00:09:37.300>user <00:09:37.455>interface <00:09:37.611>or <00:09:37.766>user <00:09:37.922>experience <00:09:38.077>a <00:09:38.233>lot <00:09:38.388>of <00:09:38.544>communication <00:09:38.699>involved.

192
00:09:42.400 --> 00:09:45.400
<00:09:42.400>Good, <00:09:42.633>and <00:09:42.866>now <00:09:43.100>let's <00:09:43.333>become <00:09:43.566>more <00:09:43.800>concrete

193
00:09:45.400 --> 00:09:46.900
<00:09:45.400>how <00:09:45.625>we <00:09:45.850>can <00:09:46.074>do <00:09:46.300>something <00:09:46.525>with <00:09:46.750>it.

194
00:09:48.500 --> 00:09:48.800
I

195
00:09:49.900 --> 00:09:52.300
<00:09:49.900>mentioned <00:09:50.250>langium <00:09:50.600>are <00:09:50.949>new <00:09:51.300>language

196
00:09:52.300 --> 00:09:54.200
<00:09:52.300>toolkit. <00:09:52.533>So <00:09:52.766>it's <00:09:53.000>an <00:09:53.233>open <00:09:53.466>source <00:09:53.699>project.

197
00:09:55.500 --> 00:09:58.800
<00:09:55.500>And <00:09:55.733>fully <00:09:55.966>built <00:09:56.200>on <00:09:56.433>typescript <00:09:56.666>why <00:09:56.900>typescript

198
00:09:58.800 --> 00:10:03.300
<00:09:58.800>because <00:09:59.150>it's <00:09:59.500>the <00:09:59.849>the <00:10:00.199>foundation

199
00:10:01.300 --> 00:10:04.400
<00:10:01.300>for <00:10:02.000>vs <00:10:02.699>code.

200
00:10:05.400 --> 00:10:09.100
<00:10:05.400>and <00:10:05.633>also <00:10:05.866>for <00:10:06.100>many <00:10:06.333>other <00:10:06.566>modern <00:10:06.800>tools

201
00:10:08.100 --> 00:10:11.500
<00:10:08.100>and <00:10:08.450>more <00:10:08.800>than <00:10:09.150>Ides <00:10:09.500>and

202
00:10:12.600 --> 00:10:15.300
<00:10:12.600>Yet <00:10:13.066>two <00:10:13.533>of <00:10:14.000>the

203
00:10:15.300 --> 00:10:18.200
<00:10:15.300>modern <00:10:15.474>tool <00:10:15.650>landscape. <00:10:15.824>For <00:10:16.000>example <00:10:16.175>Eclipse <00:10:16.349>fear, <00:10:16.525>maybe <00:10:16.699>some

204
00:10:18.200 --> 00:10:21.300
<00:10:18.200>of <00:10:18.300>you <00:10:18.400>have <00:10:18.500>heard <00:10:18.600>of <00:10:18.700>it. <00:10:18.800>Just <00:10:18.900>give <00:10:19.000>me <00:10:19.100>a <00:10:19.200>hand <00:10:19.300>how <00:10:19.400>many <00:10:19.500>have <00:10:19.600>heard

205
00:10:21.300 --> 00:10:22.000
<00:10:21.300>of <00:10:21.615>eclipse <00:10:21.930>there?

206
00:10:24.100 --> 00:10:27.600
<00:10:24.100>Okay, <00:10:24.300>not <00:10:24.500>so <00:10:24.700>many. <00:10:24.900>It's <00:10:25.100>a <00:10:25.300>different <00:10:25.500>implementation

207
00:10:27.600 --> 00:10:30.300
<00:10:27.600>comparable <00:10:27.755>to <00:10:27.911>this <00:10:28.066>code <00:10:28.222>but <00:10:28.377>more <00:10:28.533>focused <00:10:28.688>on <00:10:28.844>being <00:10:29.000>a

208
00:10:30.300 --> 00:10:34.000
<00:10:30.300>platform <00:10:30.533>for <00:10:30.766>creating <00:10:31.000>your <00:10:31.233>own <00:10:31.466>ide-like <00:10:31.699>applications,

209
00:10:33.700 --> 00:10:35.900
<00:10:33.700>and <00:10:33.980>it's <00:10:34.260>also <00:10:34.540>built <00:10:34.820>on <00:10:35.100>typescript.

210
00:10:36.700 --> 00:10:39.300
<00:10:36.700>Atlantium <00:10:37.050>is <00:10:37.400>has <00:10:37.750>direct <00:10:38.100>support

211
00:10:39.300 --> 00:10:43.000
<00:10:39.300>for <00:10:39.474>the <00:10:39.650>language <00:10:39.824>server <00:10:40.000>protocol. <00:10:40.175>That's <00:10:40.349>a <00:10:40.525>Json <00:10:40.699>RPC

212
00:10:42.400 --> 00:10:45.600
<00:10:42.400>protocol <00:10:42.633>that <00:10:42.866>was <00:10:43.100>introduced <00:10:43.333>by <00:10:43.566>Microsoft <00:10:43.800>for

213
00:10:45.600 --> 00:10:48.300
<00:10:45.600>vs <00:10:45.740>code. <00:10:45.880>But <00:10:46.020>actually <00:10:46.160>it <00:10:46.300>has <00:10:46.440>been <00:10:46.580>picked <00:10:46.720>up <00:10:46.860>by <00:10:47.000>many

214
00:10:48.300 --> 00:10:52.500
<00:10:48.300>other <00:10:48.650>tool <00:10:49.000>vendors <00:10:49.349>to <00:10:49.699>integrate

215
00:10:51.500 --> 00:10:54.500
<00:10:51.500>language <00:10:52.200>support <00:10:52.900>language

216
00:10:54.500 --> 00:10:57.300
<00:10:54.500>smartness <00:10:54.675>into <00:10:54.850>these <00:10:55.025>other <00:10:55.200>tools <00:10:55.375>as <00:10:55.550>well. <00:10:55.725>For <00:10:55.900>example,

217
00:10:57.300 --> 00:11:00.200
<00:10:57.300>you <00:10:57.500>can <00:10:57.699>take <00:10:57.900>a <00:10:58.099>language <00:10:58.300>server <00:10:58.500>that <00:10:58.699>speaks

218
00:11:00.200 --> 00:11:03.600
<00:11:00.200>this <00:11:00.375>language <00:11:00.550>to <00:11:00.725>our <00:11:00.900>protocol <00:11:01.075>and <00:11:01.250>connected <00:11:01.425>with <00:11:01.600>the

219
00:11:03.600 --> 00:11:06.300
<00:11:03.600>Eclipse <00:11:03.800>IDE <00:11:04.000>as <00:11:04.200>an <00:11:04.400>example <00:11:04.600>or <00:11:04.800>so <00:11:05.000>many

220
00:11:06.300 --> 00:11:08.600
<00:11:06.300>other <00:11:06.474>ideas <00:11:06.650>that <00:11:06.824>now <00:11:07.000>have <00:11:07.175>support <00:11:07.349>for <00:11:07.525>this <00:11:07.699>protocol.

221
00:11:09.600 --> 00:11:13.200
<00:11:09.600>And <00:11:09.800>it's <00:11:10.000>very <00:11:10.200>easy <00:11:10.400>to <00:11:10.600>to <00:11:10.800>package <00:11:11.000>a

222
00:11:12.200 --> 00:11:15.400
<00:11:12.200>language <00:11:12.433>that <00:11:12.666>you <00:11:12.900>create <00:11:13.133>with <00:11:13.366>langium <00:11:13.600>as

223
00:11:15.400 --> 00:11:16.500
<00:11:15.400>a <00:11:15.730>VX <00:11:16.060>code <00:11:16.390>extension.

224
00:11:17.300 --> 00:11:20.600
<00:11:17.300>So <00:11:17.439>that <00:11:17.579>you <00:11:17.719>can <00:11:17.859>distribute <00:11:18.000>it <00:11:18.140>install <00:11:18.280>it <00:11:18.420>easily <00:11:18.560>into <00:11:18.699>vs

225
00:11:20.600 --> 00:11:23.000
<00:11:20.600>code <00:11:20.880>or <00:11:21.160>other <00:11:21.440>IDE <00:11:21.720>that <00:11:22.000>support

226
00:11:23.200 --> 00:11:26.200
<00:11:23.200>that <00:11:23.375>format <00:11:23.550>like <00:11:23.725>fear <00:11:23.900>for <00:11:24.075>example, <00:11:24.250>which <00:11:24.425>I <00:11:24.600>already

227
00:11:26.200 --> 00:11:29.300
<00:11:26.200>mentioned <00:11:26.375>also <00:11:26.550>has <00:11:26.725>direct <00:11:26.900>support <00:11:27.075>for <00:11:27.250>installing <00:11:27.425>vs <00:11:27.600>code

228
00:11:29.300 --> 00:11:29.800
extensions.

229
00:11:32.800 --> 00:11:35.100
<00:11:32.800>Then <00:11:32.974>a <00:11:33.150>very <00:11:33.324>important <00:11:33.500>feature <00:11:33.675>which <00:11:33.849>I'm <00:11:34.025>going <00:11:34.199>to

230
00:11:35.100 --> 00:11:38.800
<00:11:35.100>talk <00:11:35.240>more <00:11:35.380>about <00:11:35.520>later <00:11:35.660>is <00:11:35.800>the <00:11:35.940>grammar <00:11:36.080>language <00:11:36.220>that's <00:11:36.360>itself <00:11:36.500>a

231
00:11:38.800 --> 00:11:41.000
<00:11:38.800>DSL <00:11:39.033>also <00:11:39.266>made <00:11:39.500>with <00:11:39.733>langm. <00:11:39.966>Of <00:11:40.199>course.

232
00:11:41.100 --> 00:11:44.500
<00:11:41.100>It's <00:11:41.255>a <00:11:41.411>special <00:11:41.566>language <00:11:41.722>that <00:11:41.877>you <00:11:42.033>use <00:11:42.188>to <00:11:42.344>describe <00:11:42.500>the

233
00:11:44.500 --> 00:11:47.200
<00:11:44.500>syntax <00:11:44.733>and <00:11:44.966>the <00:11:45.200>structure <00:11:45.433>of <00:11:45.666>your <00:11:45.900>language.

234
00:11:48.200 --> 00:11:51.400
<00:11:48.200>As <00:11:48.355>I <00:11:48.511>said <00:11:48.666>more <00:11:48.822>on <00:11:48.977>that <00:11:49.133>later <00:11:49.288>and <00:11:49.444>a <00:11:49.600>very

235
00:11:51.400 --> 00:11:55.000
<00:11:51.400>important <00:11:51.680>concept <00:11:51.959>here <00:11:52.240>is <00:11:52.520>using <00:11:52.800>nodejs

236
00:11:54.200 --> 00:11:57.400
<00:11:54.200>as <00:11:54.400>a <00:11:54.600>basis <00:11:54.800>for <00:11:55.000>clis. <00:11:55.200>So <00:11:55.400>langhum <00:11:55.600>itself

237
00:11:57.400 --> 00:12:00.200
<00:11:57.400>brings <00:11:57.680>a <00:11:57.959>command-line <00:11:58.240>interface <00:11:58.520>that <00:11:58.800>you

238
00:12:00.200 --> 00:12:02.700
<00:12:00.200>can <00:12:00.375>use <00:12:00.550>to <00:12:00.725>process <00:12:00.900>instances <00:12:01.075>of <00:12:01.250>this <00:12:01.425>grammar <00:12:01.600>language.

239
00:12:03.600 --> 00:12:06.500
<00:12:03.600>So <00:12:03.800>and <00:12:04.000>so <00:12:04.200>that <00:12:04.400>you <00:12:04.600>get <00:12:04.800>for <00:12:05.000>example

240
00:12:06.500 --> 00:12:08.000
<00:12:06.500>typescript <00:12:07.850>interfaces.

241
00:12:08.800 --> 00:12:10.700
<00:12:08.800>for <00:12:09.150>specifically <00:12:09.500>for <00:12:09.849>your <00:12:10.199>language

242
00:12:12.100 --> 00:12:16.100
<00:12:12.100>and <00:12:12.227>you <00:12:12.354>can <00:12:12.481>also <00:12:12.609>write <00:12:12.736>your <00:12:12.863>own <00:12:12.990>command <00:12:13.118>line <00:12:13.245>interface <00:12:13.372>to <00:12:13.500>to

243
00:12:15.100 --> 00:12:19.500
<00:12:15.100>implement <00:12:15.450>everything <00:12:15.800>that <00:12:16.150>processes <00:12:16.500>your

244
00:12:19.500 --> 00:12:23.000
<00:12:19.500>language. <00:12:19.700>So <00:12:19.900>eight <00:12:20.100>code <00:12:20.300>generate <00:12:20.500>our <00:12:20.700>compiler <00:12:20.900>interpreter

245
00:12:22.200 --> 00:12:25.700
<00:12:22.200>anything <00:12:22.375>like <00:12:22.550>that <00:12:22.725>could <00:12:22.900>be <00:12:23.075>done <00:12:23.250>as <00:12:23.425>a <00:12:23.600>CLI

246
00:12:25.700 --> 00:12:27.200
<00:12:25.700>in <00:12:26.150>based <00:12:26.600>on <00:12:27.050>node.js.

247
00:12:30.700 --> 00:12:33.400
<00:12:30.700>So <00:12:30.933>now <00:12:31.166>let's <00:12:31.400>take <00:12:31.633>a <00:12:31.866>dive <00:12:32.100>into

248
00:12:33.400 --> 00:12:36.800
<00:12:33.400>this <00:12:33.555>concept <00:12:33.711>of <00:12:33.866>a <00:12:34.022>grammar <00:12:34.177>what <00:12:34.333>it <00:12:34.488>is. <00:12:34.644>So <00:12:34.800>and

249
00:12:36.800 --> 00:12:39.400
<00:12:36.800>as <00:12:36.955>I <00:12:37.111>said <00:12:37.266>the <00:12:37.422>idea <00:12:37.577>is <00:12:37.733>to <00:12:37.888>describe <00:12:38.044>your <00:12:38.199>language

250
00:12:39.400 --> 00:12:41.800
<00:12:39.400>on <00:12:39.574>a <00:12:39.750>syntactic <00:12:39.925>level <00:12:40.100>and <00:12:40.275>on <00:12:40.449>a <00:12:40.625>structural <00:12:40.800>level.

251
00:12:43.100 --> 00:12:46.400
<00:12:43.100>This <00:12:43.227>is <00:12:43.354>an <00:12:43.481>example <00:12:43.609>that <00:12:43.736>I'm <00:12:43.863>going <00:12:43.990>to <00:12:44.118>show <00:12:44.245>throughout <00:12:44.372>the <00:12:44.500>presentation.

252
00:12:46.400 --> 00:12:49.500
<00:12:46.400>It's <00:12:46.555>about <00:12:46.711>the <00:12:46.866>state <00:12:47.022>machine <00:12:47.177>language <00:12:47.333>a <00:12:47.488>very <00:12:47.644>simple <00:12:47.800>example.

253
00:12:50.300 --> 00:12:53.400
<00:12:50.300>And <00:12:50.533>so <00:12:50.766>this <00:12:51.000>grammar <00:12:51.233>definition <00:12:51.466>starts <00:12:51.699>with

254
00:12:53.400 --> 00:12:55.100
<00:12:53.400>Declaration <00:12:53.750>of <00:12:54.100>this <00:12:54.449>step <00:12:54.800>machine.

255
00:12:56.100 --> 00:12:59.100
<00:12:56.100>Grammar <00:12:56.300>and <00:12:56.500>then <00:12:56.700>it <00:12:56.900>has <00:12:57.100>three <00:12:57.300>so-called <00:12:57.500>rules.

256
00:13:00.600 --> 00:13:03.300
<00:13:00.600>And <00:13:00.833>the <00:13:01.066>first <00:13:01.300>rule <00:13:01.533>has <00:13:01.766>marked <00:13:02.000>as

257
00:13:03.300 --> 00:13:03.600
entry.

258
00:13:04.900 --> 00:13:07.300
<00:13:04.900>So <00:13:05.040>the <00:13:05.180>entry <00:13:05.319>rule <00:13:05.459>is <00:13:05.600>the <00:13:05.740>one <00:13:05.880>that <00:13:06.020>will <00:13:06.160>be <00:13:06.300>used

259
00:13:07.300 --> 00:13:09.800
<00:13:07.300>by <00:13:07.455>the <00:13:07.611>parser <00:13:07.766>when <00:13:07.922>it <00:13:08.077>starts <00:13:08.233>reading <00:13:08.388>an <00:13:08.544>input <00:13:08.699>file.

260
00:13:11.400 --> 00:13:14.200
<00:13:11.400>And <00:13:11.574>here <00:13:11.750>we <00:13:11.925>state <00:13:12.100>that <00:13:12.275>we <00:13:12.449>always <00:13:12.625>have <00:13:12.800>to

261
00:13:14.200 --> 00:13:18.000
<00:13:14.200>start <00:13:14.355>with <00:13:14.511>a <00:13:14.666>keyword <00:13:14.822>State <00:13:14.977>machine. <00:13:15.133>So <00:13:15.288>this <00:13:15.444>string <00:13:15.600>here

262
00:13:17.700 --> 00:13:20.300
<00:13:17.700>is <00:13:18.166>is <00:13:18.633>interpreted <00:13:19.100>as

263
00:13:20.300 --> 00:13:21.800
<00:13:20.300>a <00:13:20.492>keyword <00:13:20.685>to <00:13:20.878>be <00:13:21.071>read <00:13:21.264>at <00:13:21.457>this <00:13:21.650>point.

264
00:13:22.800 --> 00:13:26.300
<00:13:22.800>Then <00:13:23.000>we <00:13:23.199>expect <00:13:23.400>an <00:13:23.599>identifier. <00:13:23.800>So <00:13:24.000>any <00:13:24.199>identifier

265
00:13:25.300 --> 00:13:28.600
<00:13:25.300>string <00:13:25.579>and <00:13:25.859>this <00:13:26.140>name <00:13:26.420>equal <00:13:26.699>ID.

266
00:13:28.600 --> 00:13:31.400
<00:13:28.600>We <00:13:28.775>call <00:13:28.950>that <00:13:29.125>an <00:13:29.300>assignment <00:13:29.475>to <00:13:29.650>a <00:13:29.825>property <00:13:30.000>name.

267
00:13:31.400 --> 00:13:34.500
<00:13:31.400>So <00:13:31.680>that <00:13:31.959>means <00:13:32.240>this <00:13:32.520>identifier <00:13:32.800>that

268
00:13:34.500 --> 00:13:37.200
<00:13:34.500>is <00:13:34.627>written <00:13:34.754>by <00:13:34.881>the <00:13:35.009>user <00:13:35.136>will <00:13:35.263>be <00:13:35.390>available <00:13:35.518>later <00:13:35.645>on <00:13:35.772>when <00:13:35.900>we

269
00:13:37.200 --> 00:13:38.400
<00:13:37.200>process <00:13:37.740>this <00:13:38.280>language.

270
00:13:39.300 --> 00:13:40.800
<00:13:39.300>using <00:13:39.750>the <00:13:40.199>property <00:13:40.650>name

271
00:13:42.300 --> 00:13:45.400
<00:13:42.300>and <00:13:42.500>similar <00:13:42.699>also <00:13:42.900>for <00:13:43.099>this <00:13:43.300>state's <00:13:43.500>property <00:13:43.699>here

272
00:13:45.400 --> 00:13:47.800
<00:13:45.400>here. <00:13:45.600>It's <00:13:45.800>an <00:13:46.000>area <00:13:46.199>assignment. <00:13:46.400>So <00:13:46.600>we <00:13:46.800>push

273
00:13:48.900 --> 00:13:51.700
<00:13:48.900>a <00:13:49.133>state <00:13:49.366>instance <00:13:49.600>to <00:13:49.833>this <00:13:50.066>state's <00:13:50.300>property

274
00:13:51.700 --> 00:13:54.300
<00:13:51.700>and <00:13:51.875>state <00:13:52.050>is <00:13:52.225>a <00:13:52.400>call <00:13:52.575>to <00:13:52.750>this <00:13:52.925>other <00:13:53.100>rule

275
00:13:54.300 --> 00:13:57.700
<00:13:54.300>until <00:13:54.455>we <00:13:54.611>again <00:13:54.766>say <00:13:54.922>it's <00:13:55.077>we <00:13:55.233>have <00:13:55.388>a <00:13:55.544>keyword <00:13:55.699>in

276
00:13:57.700 --> 00:14:00.200
<00:13:57.700>identifier <00:13:58.166>transitions <00:13:58.633>the <00:13:59.100>star

277
00:14:00.200 --> 00:14:03.500
<00:14:00.200>here <00:14:00.327>means <00:14:00.454>it's <00:14:00.581>a <00:14:00.709>multiplicity. <00:14:00.836>You <00:14:00.963>can <00:14:01.090>have <00:14:01.218>many <00:14:01.345>transitions <00:14:01.472>or <00:14:01.600>and

278
00:14:03.500 --> 00:14:04.200
<00:14:03.500>also <00:14:03.815>many <00:14:04.130>states.

279
00:14:05.600 --> 00:14:09.100
<00:14:05.600>And <00:14:05.800>the <00:14:06.000>last <00:14:06.200>concept <00:14:06.400>here <00:14:06.600>is <00:14:06.800>this <00:14:07.000>one

280
00:14:08.100 --> 00:14:11.500
<00:14:08.100>here. <00:14:08.333>So <00:14:08.566>here <00:14:08.800>we <00:14:09.033>have <00:14:09.266>a <00:14:09.500>property

281
00:14:11.500 --> 00:14:14.900
<00:14:11.500>State <00:14:11.733>and <00:14:11.966>we <00:14:12.200>assign <00:14:12.433>a <00:14:12.666>cross-reference <00:14:12.900>to

282
00:14:14.900 --> 00:14:15.500
<00:14:14.900>another <00:14:15.440>state.

283
00:14:16.500 --> 00:14:19.200
<00:14:16.500>So <00:14:16.655>the <00:14:16.811>idea <00:14:16.966>here <00:14:17.122>is <00:14:17.277>it's <00:14:17.433>this <00:14:17.588>is <00:14:17.744>a <00:14:17.900>transition.

284
00:14:20.100 --> 00:14:23.600
<00:14:20.100>So <00:14:20.255>a <00:14:20.411>state <00:14:20.566>can <00:14:20.722>have <00:14:20.877>many <00:14:21.033>Transitions <00:14:21.188>and <00:14:21.344>every <00:14:21.500>transition

285
00:14:23.600 --> 00:14:25.100
<00:14:23.600>has <00:14:24.050>a <00:14:24.500>Target <00:14:24.950>state.

286
00:14:25.600 --> 00:14:28.200
<00:14:25.600>But <00:14:25.755>we <00:14:25.911>don't <00:14:26.066>want <00:14:26.222>to <00:14:26.377>define <00:14:26.533>the <00:14:26.688>target <00:14:26.844>State <00:14:27.000>here.

287
00:14:28.200 --> 00:14:31.200
<00:14:28.200>We <00:14:28.327>just <00:14:28.454>want <00:14:28.581>to <00:14:28.709>refer <00:14:28.836>to <00:14:28.963>a <00:14:29.090>state <00:14:29.218>that <00:14:29.345>is <00:14:29.472>defined <00:14:29.600>elsewhere.

288
00:14:32.200 --> 00:14:35.300
<00:14:32.200>And <00:14:32.340>so <00:14:32.480>and <00:14:32.620>for <00:14:32.760>that <00:14:32.900>reason <00:14:33.040>it's <00:14:33.180>not <00:14:33.320>a <00:14:33.460>definition <00:14:33.600>of

289
00:14:35.300 --> 00:14:36.500
<00:14:35.300>a <00:14:35.660>state <00:14:36.020>like <00:14:36.380>here.

290
00:14:37.900 --> 00:14:40.800
<00:14:37.900>But <00:14:38.027>it's <00:14:38.154>a <00:14:38.281>cross <00:14:38.409>reference <00:14:38.536>and <00:14:38.663>we <00:14:38.790>write <00:14:38.918>that <00:14:39.045>in <00:14:39.172>square <00:14:39.300>brackets.

291
00:14:43.100 --> 00:14:46.500
<00:14:43.100>And <00:14:43.240>so <00:14:43.380>this <00:14:43.520>is <00:14:43.660>exactly <00:14:43.800>what <00:14:43.940>you <00:14:44.080>know <00:14:44.220>from <00:14:44.360>programming <00:14:44.500>language

292
00:14:46.500 --> 00:14:49.300
<00:14:46.500>where <00:14:46.655>you <00:14:46.811>define <00:14:46.966>a <00:14:47.122>variable <00:14:47.277>and <00:14:47.433>then <00:14:47.588>you <00:14:47.744>can <00:14:47.900>use

293
00:14:49.300 --> 00:14:52.400
<00:14:49.300>it <00:14:49.455>somewhere <00:14:49.611>else <00:14:49.766>and <00:14:49.922>every <00:14:50.077>usage <00:14:50.233>of <00:14:50.388>that <00:14:50.544>variable <00:14:50.699>is

294
00:14:52.400 --> 00:14:55.300
<00:14:52.400>a <00:14:52.750>cross-reference <00:14:53.100>in <00:14:53.449>this <00:14:53.800>sense.

295
00:14:58.600 --> 00:14:58.900
so

296
00:14:59.900 --> 00:15:01.000
<00:14:59.900>I'm <00:15:00.147>going <00:15:00.395>to <00:15:00.642>show <00:15:00.890>this.

297
00:15:02.700 --> 00:15:04.300
<00:15:02.700>example <00:15:03.166>in <00:15:03.633>vs <00:15:04.100>code

298
00:15:06.200 --> 00:15:09.500
<00:15:06.200>So <00:15:06.375>this <00:15:06.550>is <00:15:06.725>the <00:15:06.900>full <00:15:07.075>example. <00:15:07.250>I <00:15:07.425>showed <00:15:07.600>a

299
00:15:09.500 --> 00:15:12.800
<00:15:09.500>smaller <00:15:09.780>subset <00:15:10.060>of <00:15:10.340>it <00:15:10.620>on <00:15:10.900>the

300
00:15:12.800 --> 00:15:13.000
slides.

301
00:15:14.000 --> 00:15:14.200
and

302
00:15:15.300 --> 00:15:16.200
<00:15:15.300>so <00:15:16.110>now

303
00:15:17.100 --> 00:15:20.700
<00:15:17.100>what <00:15:17.240>I <00:15:17.380>can <00:15:17.520>do <00:15:17.660>is <00:15:17.800>to <00:15:17.940>run <00:15:18.080>this <00:15:18.220>example <00:15:18.360>envious <00:15:18.500>code

304
00:15:20.700 --> 00:15:21.100
itself.

305
00:15:22.300 --> 00:15:25.300
<00:15:22.300>Who <00:15:22.533>has <00:15:22.766>already <00:15:23.000>created <00:15:23.233>a <00:15:23.466>vs <00:15:23.699>code

306
00:15:25.300 --> 00:15:25.800
extension?

307
00:15:27.600 --> 00:15:30.600
<00:15:27.600>A <00:15:27.833>handful <00:15:28.066>cool. <00:15:28.300>So, <00:15:28.533>you <00:15:28.766>know <00:15:29.000>already

308
00:15:30.600 --> 00:15:33.200
<00:15:30.600>know <00:15:30.775>this <00:15:30.950>concept <00:15:31.125>so <00:15:31.300>you <00:15:31.475>can <00:15:31.650>define <00:15:31.825>a <00:15:32.000>large

309
00:15:33.200 --> 00:15:36.300
<00:15:33.200>configuration <00:15:33.375>that <00:15:33.550>will <00:15:33.725>spawn <00:15:33.900>another <00:15:34.075>instance <00:15:34.250>of <00:15:34.425>these <00:15:34.600>code.

310
00:15:37.300 --> 00:15:40.400
<00:15:37.300>And <00:15:37.474>that <00:15:37.650>other <00:15:37.824>instance <00:15:38.000>will <00:15:38.175>contain <00:15:38.349>the <00:15:38.525>extension <00:15:38.699>that

311
00:15:40.400 --> 00:15:40.900
<00:15:40.400>you're <00:15:40.625>working <00:15:40.850>on.

312
00:15:41.800 --> 00:15:44.300
<00:15:41.800>Yes, <00:15:41.974>so <00:15:42.150>and <00:15:42.324>something <00:15:42.500>similar <00:15:42.675>is <00:15:42.849>also <00:15:43.025>possible <00:15:43.199>for

313
00:15:44.300 --> 00:15:47.300
<00:15:44.300>the <00:15:44.455>Eclipse <00:15:44.611>IDE. <00:15:44.766>For <00:15:44.922>example, <00:15:45.077>where <00:15:45.233>you <00:15:45.388>can <00:15:45.544>spawn <00:15:45.699>another

314
00:15:47.300 --> 00:15:49.700
<00:15:47.300>instance <00:15:47.533>of <00:15:47.766>eclipse <00:15:48.000>that <00:15:48.233>includes <00:15:48.466>your <00:15:48.699>plugins.

315
00:15:50.400 --> 00:15:51.600
<00:15:50.400>so <00:15:50.760>by <00:15:51.120>launching <00:15:51.480>this

316
00:15:52.800 --> 00:15:55.100
<00:15:52.800>this <00:15:53.266>configuration <00:15:53.733>I <00:15:54.199>get

317
00:15:55.100 --> 00:15:56.800
<00:15:55.100>a <00:15:55.566>new <00:15:56.033>IDE <00:15:56.500>instance.

318
00:16:01.100 --> 00:16:04.200
<00:16:01.100>And <00:16:01.300>this <00:16:01.500>idea <00:16:01.700>instance <00:16:01.900>has <00:16:02.100>an <00:16:02.300>editor <00:16:02.500>with

319
00:16:04.200 --> 00:16:07.200
<00:16:04.200>support <00:16:04.340>for <00:16:04.480>the <00:16:04.620>language <00:16:04.760>that <00:16:04.900>I <00:16:05.040>described <00:16:05.180>it. <00:16:05.320>And <00:16:05.460>so <00:16:05.600>this

320
00:16:07.200 --> 00:16:11.300
<00:16:07.200>is <00:16:07.433>now <00:16:07.666>a <00:16:07.900>concrete <00:16:08.133>text <00:16:08.366>document <00:16:08.600>for

321
00:16:10.300 --> 00:16:13.300
<00:16:10.300>that <00:16:10.533>language. <00:16:10.766>So <00:16:11.000>it <00:16:11.233>starts <00:16:11.466>with <00:16:11.699>a

322
00:16:13.300 --> 00:16:16.200
<00:16:13.300>state <00:16:13.439>machine <00:16:13.579>keyword <00:16:13.719>as <00:16:13.859>if <00:16:14.000>we've <00:16:14.140>seen <00:16:14.280>in <00:16:14.420>the <00:16:14.560>grammar <00:16:14.699>definition

323
00:16:16.200 --> 00:16:19.300
<00:16:16.200>before <00:16:16.480>and <00:16:16.760>here <00:16:17.040>also, <00:16:17.320>if <00:16:17.600>you

324
00:16:19.300 --> 00:16:22.800
<00:16:19.300>details <00:16:19.439>that <00:16:19.579>we <00:16:19.719>haven't <00:16:19.859>covered <00:16:20.000>events <00:16:20.140>and <00:16:20.280>initial <00:16:20.420>State <00:16:20.560>and <00:16:20.699>then

325
00:16:22.800 --> 00:16:25.100
<00:16:22.800>a <00:16:23.000>list <00:16:23.199>of <00:16:23.400>states <00:16:23.599>and <00:16:23.800>every <00:16:24.000>state <00:16:24.199>has

326
00:16:25.100 --> 00:16:28.200
<00:16:25.100>transitions <00:16:25.300>within <00:16:25.500>reference <00:16:25.700>to <00:16:25.900>an <00:16:26.100>event <00:16:26.300>in <00:16:26.500>a

327
00:16:28.200 --> 00:16:29.500
<00:16:28.200>reference <00:16:28.492>to <00:16:28.785>a <00:16:29.077>Target <00:16:29.370>state.

328
00:16:30.200 --> 00:16:33.700
<00:16:30.200>So <00:16:30.316>now <00:16:30.433>we <00:16:30.550>can <00:16:30.666>see <00:16:30.783>a <00:16:30.900>few <00:16:31.016>of <00:16:31.133>the <00:16:31.250>features <00:16:31.366>that <00:16:31.483>are <00:16:31.600>given

329
00:16:33.700 --> 00:16:36.400
<00:16:33.700>by <00:16:33.840>this <00:16:33.980>smart <00:16:34.120>editor <00:16:34.260>if <00:16:34.400>I <00:16:34.540>click <00:16:34.680>on <00:16:34.820>the <00:16:34.960>target <00:16:35.100>state

330
00:16:36.400 --> 00:16:39.300
<00:16:36.400>it <00:16:36.680>highlights <00:16:36.959>its <00:16:37.240>definition <00:16:37.520>down <00:16:37.800>here.

331
00:16:39.300 --> 00:16:42.600
<00:16:39.300>If <00:16:39.455>I <00:16:39.611>command <00:16:39.766>click <00:16:39.922>on <00:16:40.077>it <00:16:40.233>or <00:16:40.388>Windows <00:16:40.544>users <00:16:40.699>would

332
00:16:42.600 --> 00:16:45.300
<00:16:42.600>control <00:16:42.800>click <00:16:43.000>it <00:16:43.200>I <00:16:43.400>jump <00:16:43.600>to <00:16:43.800>that <00:16:44.000>definition.

333
00:16:46.700 --> 00:16:48.100
<00:16:46.700>I <00:16:47.120>can <00:16:47.540>right <00:16:47.960>click.

334
00:16:49.200 --> 00:16:50.400
<00:16:49.200>And <00:16:49.560>find <00:16:49.920>all <00:16:50.280>references.

335
00:16:51.700 --> 00:16:54.300
<00:16:51.700>And <00:16:51.855>then <00:16:52.011>I <00:16:52.166>see <00:16:52.322>so <00:16:52.477>I <00:16:52.633>have <00:16:52.788>one <00:16:52.944>definition <00:16:53.100>of

336
00:16:54.300 --> 00:16:57.900
<00:16:54.300>the <00:16:54.579>state <00:16:54.859>and <00:16:55.140>to <00:16:55.420>to <00:16:55.699>usages

337
00:16:57.900 --> 00:17:00.100
<00:16:57.900>of <00:16:58.100>this <00:16:58.300>of <00:16:58.500>that <00:16:58.699>to <00:16:58.900>references <00:16:59.100>to <00:16:59.300>it.

338
00:17:01.600 --> 00:17:04.700
<00:17:01.600>I <00:17:01.880>can <00:17:02.160>rename <00:17:02.440>so <00:17:02.720>it <00:17:03.000>by

339
00:17:04.700 --> 00:17:05.400
<00:17:04.700>pressing <00:17:05.330>F2.

340
00:17:06.800 --> 00:17:09.300
<00:17:06.800>I <00:17:06.955>can <00:17:07.111>rename <00:17:07.266>it <00:17:07.422>to <00:17:07.577>Red <00:17:07.733>Light <00:17:07.888>2 <00:17:08.044>and <00:17:08.200>all

341
00:17:09.300 --> 00:17:11.000
<00:17:09.300>usages <00:17:09.766>are <00:17:10.233>automatically <00:17:10.700>renamed.

342
00:17:12.500 --> 00:17:15.400
<00:17:12.500>If <00:17:12.700>I <00:17:12.900>rename <00:17:13.099>it <00:17:13.300>without <00:17:13.500>this <00:17:13.700>refactoring <00:17:13.900>feature,

343
00:17:15.400 --> 00:17:18.100
<00:17:15.400>then <00:17:15.600>I <00:17:15.800>see <00:17:16.000>there's <00:17:16.200>an <00:17:16.400>error <00:17:16.600>marker <00:17:16.800>here.

344
00:17:18.100 --> 00:17:21.100
<00:17:18.099>Oh, <00:17:18.274>I <00:17:18.449>don't <00:17:18.625>know <00:17:18.800>this <00:17:18.974>this <00:17:19.149>state. <00:17:19.324>Yeah, <00:17:19.500>so

345
00:17:21.100 --> 00:17:24.300
<00:17:21.099>that's <00:17:21.274>like <00:17:21.449>renaming <00:17:21.625>a <00:17:21.800>variable <00:17:21.974>without <00:17:22.149>adjusting <00:17:22.324>the <00:17:22.500>usage.

346
00:17:25.100 --> 00:17:28.700
<00:17:25.099>So <00:17:25.216>all <00:17:25.333>these <00:17:25.449>things <00:17:25.566>that <00:17:25.683>you're <00:17:25.800>used <00:17:25.916>to <00:17:26.033>from <00:17:26.149>programming <00:17:26.266>languages <00:17:26.383>are <00:17:26.500>available

347
00:17:28.700 --> 00:17:31.200
<00:17:28.700>here <00:17:28.840>out <00:17:28.980>of <00:17:29.120>the <00:17:29.260>box. <00:17:29.400>So <00:17:29.540>there's <00:17:29.680>a <00:17:29.820>lot <00:17:29.960>of <00:17:30.100>out

348
00:17:31.200 --> 00:17:33.500
<00:17:31.200>of <00:17:31.400>the <00:17:31.600>box <00:17:31.800>functionality. <00:17:32.000>Of <00:17:32.200>course, <00:17:32.400>we <00:17:32.600>cannot

349
00:17:34.600 --> 00:17:37.400
<00:17:34.600>It's <00:17:34.774>not <00:17:34.949>possible <00:17:35.125>to <00:17:35.300>implement <00:17:35.475>a <00:17:35.649>whole <00:17:35.824>language <00:17:36.000>just

350
00:17:37.400 --> 00:17:40.700
<00:17:37.400>generally <00:17:37.633>like <00:17:37.866>there <00:17:38.100>are <00:17:38.333>also <00:17:38.566>custom <00:17:38.800>things

351
00:17:40.700 --> 00:17:43.900
<00:17:40.700>to <00:17:40.900>implemented <00:17:41.100>here. <00:17:41.300>I <00:17:41.500>think <00:17:41.700>for <00:17:41.900>example, <00:17:42.100>if

352
00:17:43.900 --> 00:17:46.900
<00:17:43.900>I <00:17:44.180>rename <00:17:44.460>this <00:17:44.740>state <00:17:45.020>to <00:17:45.300>starting

353
00:17:46.900 --> 00:17:49.400
<00:17:46.900>with <00:17:47.133>a <00:17:47.366>lowercase <00:17:47.600>r <00:17:47.833>i <00:17:48.066>see <00:17:48.300>a

354
00:17:49.400 --> 00:17:52.600
<00:17:49.400>in <00:17:49.600>a <00:17:49.800>warning <00:17:50.000>marker <00:17:50.200>here <00:17:50.400>saying <00:17:50.600>the <00:17:50.800>state

355
00:17:52.600 --> 00:17:56.000
<00:17:52.600>name <00:17:52.740>should <00:17:52.879>start <00:17:53.020>with <00:17:53.159>the <00:17:53.300>capital <00:17:53.439>letter. <00:17:53.580>That's <00:17:53.719>a <00:17:53.860>custom <00:17:54.000>warning

356
00:17:55.200 --> 00:17:57.700
<00:17:55.200>that <00:17:55.400>has <00:17:55.600>been <00:17:55.800>implemented <00:17:56.000>just <00:17:56.200>for <00:17:56.400>this <00:17:56.600>language.

357
00:18:02.700 --> 00:18:05.200
<00:18:02.700>So <00:18:03.166>and <00:18:03.633>something <00:18:04.100>else

358
00:18:05.200 --> 00:18:08.400
<00:18:05.200>I <00:18:05.327>can <00:18:05.454>do <00:18:05.581>with <00:18:05.709>this <00:18:05.836>example. <00:18:05.963>I <00:18:06.090>open <00:18:06.218>a <00:18:06.345>terminal <00:18:06.472>and <00:18:06.600>can

359
00:18:08.400 --> 00:18:10.700
<00:18:08.400>call <00:18:08.633>ACL <00:18:08.866>eye <00:18:09.100>that <00:18:09.333>has <00:18:09.566>been <00:18:09.800>implemented.

360
00:18:13.800 --> 00:18:16.300
<00:18:13.800>So <00:18:14.080>and <00:18:14.360>the <00:18:14.639>CLI <00:18:14.919>has <00:18:15.200>a

361
00:18:16.300 --> 00:18:17.000
<00:18:16.300>command <00:18:16.930>generate.

362
00:18:18.300 --> 00:18:21.300
<00:18:18.300>And <00:18:18.455>can <00:18:18.611>call <00:18:18.766>it <00:18:18.922>on <00:18:19.077>the <00:18:19.233>traffic <00:18:19.388>light <00:18:19.544>State <00:18:19.700>machine.

363
00:18:22.700 --> 00:18:26.100
<00:18:22.700>And <00:18:22.980>it <00:18:23.260>generates <00:18:23.540>output <00:18:23.820>code <00:18:24.100>in

364
00:18:25.100 --> 00:18:27.400
<00:18:25.100>this <00:18:25.566>case. <00:18:26.033>It's <00:18:26.500>C++.

365
00:18:28.700 --> 00:18:32.100
<00:18:28.700>So, <00:18:28.875>of <00:18:29.050>course <00:18:29.225>you <00:18:29.400>can <00:18:29.575>you <00:18:29.750>can <00:18:29.925>write <00:18:30.100>any

366
00:18:31.100 --> 00:18:34.500
<00:18:31.100>output <00:18:31.274>code <00:18:31.449>any <00:18:31.625>generated <00:18:31.800>code <00:18:31.975>that <00:18:32.149>you <00:18:32.324>want. <00:18:32.500>So

367
00:18:34.500 --> 00:18:37.400
<00:18:34.500>in <00:18:34.733>this <00:18:34.966>example <00:18:35.200>language <00:18:35.433>translates <00:18:35.666>the <00:18:35.900>import

368
00:18:37.400 --> 00:18:40.600
<00:18:37.400>State <00:18:37.633>machines <00:18:37.866>into <00:18:38.100>C++ <00:18:38.333>code <00:18:38.566>that <00:18:38.800>can

369
00:18:40.600 --> 00:18:41.800
<00:18:40.600>be <00:18:40.960>compiled <00:18:41.320>and <00:18:41.679>executed.

370
00:18:46.700 --> 00:18:48.900
<00:18:46.700>Okay, <00:18:46.875>so <00:18:47.050>just <00:18:47.225>so <00:18:47.400>that <00:18:47.575>you <00:18:47.750>get <00:18:47.925>an <00:18:48.100>idea.

371
00:18:49.800 --> 00:18:52.300
<00:18:49.800>Of <00:18:50.033>how <00:18:50.266>such <00:18:50.500>a <00:18:50.733>project <00:18:50.966>looks <00:18:51.200>like

372
00:18:52.300 --> 00:18:53.200
<00:18:52.300>in <00:18:52.705>vs <00:18:53.110>code.

373
00:18:54.200 --> 00:18:57.400
<00:18:54.200>So <00:18:54.355>we <00:18:54.511>have <00:18:54.666>so <00:18:54.822>far <00:18:54.977>looked <00:18:55.133>at <00:18:55.288>this <00:18:55.444>grammar <00:18:55.600>definition.

374
00:18:58.400 --> 00:18:59.900
<00:18:58.400>And <00:18:58.737>what <00:18:59.075>else <00:18:59.412>is <00:18:59.750>here?

375
00:19:00.800 --> 00:19:03.400
<00:19:00.800>The <00:19:01.080>language <00:19:01.360>server <00:19:01.639>itself <00:19:01.919>runs <00:19:02.200>in

376
00:19:03.400 --> 00:19:06.100
<00:19:03.400>a <00:19:03.540>node.js <00:19:03.680>process <00:19:03.820>and <00:19:03.960>we <00:19:04.100>can <00:19:04.240>have <00:19:04.380>a <00:19:04.520>quick <00:19:04.660>look <00:19:04.800>at

377
00:19:06.100 --> 00:19:09.400
<00:19:06.100>the <00:19:06.240>main <00:19:06.379>file <00:19:06.520>of <00:19:06.659>that <00:19:06.800>process <00:19:06.939>because <00:19:07.080>it's <00:19:07.219>very <00:19:07.360>actually <00:19:07.500>very

378
00:19:09.400 --> 00:19:09.700
easy.

379
00:19:11.900 --> 00:19:14.700
<00:19:11.900>So <00:19:12.133>this <00:19:12.366>node.js <00:19:12.600>process <00:19:12.833>is <00:19:13.066>launched <00:19:13.300>by

380
00:19:14.700 --> 00:19:17.200
<00:19:14.700>vs. <00:19:14.875>Code <00:19:15.050>in <00:19:15.225>the <00:19:15.400>background <00:19:15.575>and <00:19:15.750>then <00:19:15.925>vs <00:19:16.100>code

381
00:19:17.200 --> 00:19:21.100
<00:19:17.200>communicates <00:19:17.375>with <00:19:17.550>that <00:19:17.725>other <00:19:17.900>process <00:19:18.075>via <00:19:18.250>Jason <00:19:18.425>RPC <00:19:18.600>via

382
00:19:20.100 --> 00:19:21.900
<00:19:20.100>this <00:19:20.566>language <00:19:21.033>server <00:19:21.500>protocol.

383
00:19:22.900 --> 00:19:25.400
<00:19:22.900>And <00:19:23.075>what <00:19:23.250>happens <00:19:23.425>here <00:19:23.600>is <00:19:23.775>we <00:19:23.950>first <00:19:24.125>create <00:19:24.300>a

384
00:19:25.400 --> 00:19:28.100
<00:19:25.400>Json <00:19:25.633>RPC <00:19:25.866>connection. <00:19:26.100>So <00:19:26.333>we <00:19:26.566>use <00:19:26.800>this

385
00:19:28.100 --> 00:19:28.900
<00:19:28.100>create <00:19:28.820>connection.

386
00:19:30.100 --> 00:19:33.300
<00:19:30.100>Function <00:19:30.333>then <00:19:30.566>we <00:19:30.800>initialize <00:19:31.033>our <00:19:31.266>state <00:19:31.500>machine.

387
00:19:34.900 --> 00:19:37.400
<00:19:34.900>Language <00:19:35.133>by <00:19:35.366>calling <00:19:35.600>this <00:19:35.833>function <00:19:36.066>creates <00:19:36.300>State

388
00:19:37.400 --> 00:19:38.000
<00:19:37.400>Machine <00:19:37.940>Services

389
00:19:39.200 --> 00:19:42.200
<00:19:39.200>and <00:19:39.400>finally <00:19:39.600>start <00:19:39.800>the <00:19:40.000>language <00:19:40.200>servers. <00:19:40.400>So <00:19:40.600>this

390
00:19:42.200 --> 00:19:45.500
<00:19:42.200>last <00:19:42.550>utility <00:19:42.900>function <00:19:43.250>starts <00:19:43.600>listening

391
00:19:45.500 --> 00:19:48.200
<00:19:45.500>on <00:19:45.675>the <00:19:45.850>input <00:19:46.025>stream <00:19:46.200>and <00:19:46.375>so <00:19:46.550>that <00:19:46.725>it <00:19:46.900>can

392
00:19:48.200 --> 00:19:49.900
<00:19:48.200>react <00:19:48.480>to <00:19:48.760>any <00:19:49.040>Json <00:19:49.320>RPC <00:19:49.600>message.

393
00:19:50.600 --> 00:19:53.000
<00:19:50.600>So <00:19:50.774>that's <00:19:50.949>all <00:19:51.125>basically <00:19:51.300>what <00:19:51.475>the <00:19:51.649>language <00:19:51.824>server <00:19:52.000>does.

394
00:19:53.600 --> 00:19:57.300
<00:19:53.600>And <00:19:53.774>what <00:19:53.949>else <00:19:54.125>do <00:19:54.300>we <00:19:54.475>have? <00:19:54.649>There's <00:19:54.824>an <00:19:55.000>extension.ts.

395
00:19:56.300 --> 00:19:59.600
<00:19:56.300>This <00:19:56.500>is <00:19:56.700>the <00:19:56.899>implementation <00:19:57.100>of <00:19:57.300>the <00:19:57.500>vs <00:19:57.700>code

396
00:19:59.600 --> 00:20:02.400
<00:19:59.600>extension <00:19:59.755>itself. <00:19:59.911>Those <00:20:00.066>who <00:20:00.222>have <00:20:00.377>been <00:20:00.533>working <00:20:00.688>with <00:20:00.844>vs. <00:20:01.000>Code

397
00:20:02.400 --> 00:20:05.600
<00:20:02.400>extensions <00:20:02.575>already <00:20:02.750>know <00:20:02.925>that <00:20:03.100>so <00:20:03.275>there's <00:20:03.450>an <00:20:03.625>activate <00:20:03.800>function.

398
00:20:05.600 --> 00:20:07.700
<00:20:05.600>That <00:20:05.879>is <00:20:06.159>the <00:20:06.439>entry <00:20:06.719>point <00:20:07.000>here.

399
00:20:08.900 --> 00:20:11.500
<00:20:08.900>So <00:20:09.133>otherwise, <00:20:09.366>it's <00:20:09.600>just <00:20:09.833>standard <00:20:10.066>vs <00:20:10.300>code

400
00:20:11.500 --> 00:20:12.100
development.

401
00:20:13.600 --> 00:20:16.300
<00:20:13.600>And <00:20:13.879>and <00:20:14.159>there's <00:20:14.439>a <00:20:14.719>subfolder <00:20:15.000>CLI.

402
00:20:17.500 --> 00:20:20.400
<00:20:17.500>with <00:20:17.640>the <00:20:17.780>implementation <00:20:17.920>of <00:20:18.060>the <00:20:18.200>node <00:20:18.340>CLI <00:20:18.480>in <00:20:18.620>this <00:20:18.760>case <00:20:18.900>we

403
00:20:20.400 --> 00:20:21.100
<00:20:20.400>use <00:20:21.030>a

404
00:20:22.100 --> 00:20:25.500
<00:20:22.100>And <00:20:22.333>node <00:20:22.566>package <00:20:22.800>called <00:20:23.033>Commander, <00:20:23.266>but <00:20:23.500>of

405
00:20:25.500 --> 00:20:29.600
<00:20:25.500>course <00:20:25.627>you <00:20:25.754>can <00:20:25.881>also <00:20:26.009>do <00:20:26.136>it <00:20:26.263>with <00:20:26.390>any <00:20:26.518>other <00:20:26.645>node <00:20:26.772>CLI <00:20:26.900>tool.

406
00:20:30.300 --> 00:20:33.900
<00:20:30.300>And <00:20:30.475>so <00:20:30.649>here <00:20:30.825>in <00:20:31.000>this <00:20:31.175>case, <00:20:31.350>we <00:20:31.524>Implement <00:20:31.700>a

407
00:20:33.900 --> 00:20:36.300
<00:20:33.900>function <00:20:34.180>that <00:20:34.460>generates <00:20:34.740>C++ <00:20:35.020>code <00:20:35.300>from

408
00:20:36.300 --> 00:20:38.900
<00:20:36.300>an <00:20:36.500>input <00:20:36.700>and <00:20:36.899>here <00:20:37.100>you <00:20:37.300>can <00:20:37.500>already <00:20:37.700>see.

409
00:20:42.100 --> 00:20:45.500
<00:20:42.100>The <00:20:42.255>general <00:20:42.411>idea <00:20:42.566>this <00:20:42.722>function <00:20:42.877>has <00:20:43.033>as <00:20:43.188>a <00:20:43.344>first <00:20:43.500>argument

410
00:20:45.500 --> 00:20:47.700
<00:20:45.500>a <00:20:46.200>state <00:20:46.900>machine.

411
00:20:48.700 --> 00:20:50.900
<00:20:48.700>And <00:20:48.875>here <00:20:49.050>we <00:20:49.225>see <00:20:49.400>there's <00:20:49.575>a <00:20:49.750>type <00:20:49.925>State <00:20:50.100>machine.

412
00:20:52.000 --> 00:20:52.200
and

413
00:20:53.200 --> 00:20:55.400
<00:20:53.200>this <00:20:53.666>type <00:20:54.133>is <00:20:54.600>generated.

414
00:20:56.400 --> 00:20:59.600
<00:20:56.400>So <00:20:56.555>we <00:20:56.711>see <00:20:56.866>that <00:20:57.022>here <00:20:57.177>in <00:20:57.333>the <00:20:57.488>language <00:20:57.644>server <00:20:57.800>folder

415
00:20:59.600 --> 00:21:00.500
<00:20:59.600>in <00:21:00.004>the <00:21:00.410>generated.

416
00:21:01.400 --> 00:21:05.000
<00:21:01.400>Section <00:21:01.680>and <00:21:01.960>because <00:21:02.240>it's <00:21:02.520>derived <00:21:02.800>from

417
00:21:04.200 --> 00:21:06.100
<00:21:04.200>our <00:21:04.900>grammar <00:21:05.600>definition.

418
00:21:07.700 --> 00:21:08.200
<00:21:07.700>so <00:21:07.925>we <00:21:08.150>get

419
00:21:09.500 --> 00:21:12.500
<00:21:09.500>typescript <00:21:09.733>type <00:21:09.966>definitions <00:21:10.200>that <00:21:10.433>correspond <00:21:10.666>exactly <00:21:10.900>to

420
00:21:12.500 --> 00:21:14.400
<00:21:12.500>what <00:21:12.700>we <00:21:12.900>have <00:21:13.100>written <00:21:13.300>in <00:21:13.500>the <00:21:13.700>grammar <00:21:13.900>language.

421
00:21:15.900 --> 00:21:18.400
<00:21:15.900>And <00:21:16.055>to <00:21:16.211>understand <00:21:16.366>this <00:21:16.522>concept <00:21:16.677>a <00:21:16.833>bit <00:21:16.988>more. <00:21:17.144>I'm <00:21:17.300>going

422
00:21:18.400 --> 00:21:20.500
<00:21:18.400>to <00:21:18.680>switch <00:21:18.960>back <00:21:19.240>to <00:21:19.520>the <00:21:19.800>presentation.

423
00:21:25.200 --> 00:21:28.300
<00:21:25.200>And <00:21:25.355>let's <00:21:25.511>dive <00:21:25.666>into <00:21:25.822>a <00:21:25.977>few <00:21:26.133>details <00:21:26.288>on <00:21:26.444>how <00:21:26.600>this

424
00:21:28.300 --> 00:21:28.400
works.

425
00:21:29.300 --> 00:21:32.000
<00:21:29.300>So <00:21:29.500>when <00:21:29.700>we <00:21:29.899>get <00:21:30.100>an <00:21:30.300>input <00:21:30.500>text <00:21:30.700>file.

426
00:21:33.100 --> 00:21:36.400
<00:21:33.100>Like <00:21:33.333>this <00:21:33.566>state <00:21:33.800>machine <00:21:34.033>traffic <00:21:34.266>light <00:21:34.500>example.

427
00:21:37.200 --> 00:21:40.600
<00:21:37.200>We <00:21:37.433>first <00:21:37.666>run <00:21:37.900>through <00:21:38.133>two <00:21:38.366>phases <00:21:38.600>that

428
00:21:40.600 --> 00:21:43.500
<00:21:40.600>we <00:21:40.833>call <00:21:41.066>tokenizing <00:21:41.300>and <00:21:41.533>parsing <00:21:41.766>and <00:21:42.000>these

429
00:21:43.500 --> 00:21:46.300
<00:21:43.500>two <00:21:43.655>implemented <00:21:43.811>with <00:21:43.966>a <00:21:44.122>puzzle <00:21:44.277>Library <00:21:44.433>called <00:21:44.588>Chev <00:21:44.744>retainers <00:21:44.900>a

430
00:21:46.300 --> 00:21:49.000
<00:21:46.300>JavaScript <00:21:46.580>very <00:21:46.860>fast. <00:21:47.139>JavaScript <00:21:47.419>fuzzle <00:21:47.700>library.

431
00:21:51.100 --> 00:21:54.700
<00:21:51.100>And <00:21:51.449>so <00:21:51.800>tokenizing <00:21:52.149>transforms <00:21:52.500>this

432
00:21:54.700 --> 00:21:57.800
<00:21:54.700>stream <00:21:54.875>of <00:21:55.050>characters <00:21:55.225>into <00:21:55.400>a <00:21:55.575>stream <00:21:55.750>of <00:21:55.925>tokens. <00:21:56.100>And

433
00:21:57.800 --> 00:22:00.500
<00:21:57.800>that's <00:21:57.955>the <00:21:58.111>input <00:21:58.266>for <00:21:58.422>the <00:21:58.577>parser. <00:21:58.733>So <00:21:58.888>in <00:21:59.044>the <00:21:59.200>parser

434
00:22:00.500 --> 00:22:03.300
<00:22:00.500>takes <00:22:00.675>the <00:22:00.850>stream <00:22:01.025>of <00:22:01.200>tokens <00:22:01.375>and <00:22:01.550>produces <00:22:01.725>a <00:22:01.900>data

435
00:22:03.300 --> 00:22:06.400
<00:22:03.300>structure <00:22:03.455>that <00:22:03.611>we <00:22:03.766>call <00:22:03.922>the <00:22:04.077>abstract <00:22:04.233>syntax <00:22:04.388>tree <00:22:04.544>or <00:22:04.700>AST.

436
00:22:08.100 --> 00:22:13.000
<00:22:08.100>And <00:22:08.255>this <00:22:08.411>AST <00:22:08.566>so <00:22:08.722>it's <00:22:08.877>it's <00:22:09.033>a <00:22:09.188>tree <00:22:09.344>obviously, <00:22:09.500>but

437
00:22:11.300 --> 00:22:15.000
<00:22:11.300>otherwise <00:22:11.766>just <00:22:12.233>a <00:22:12.700>plain

438
00:22:14.300 --> 00:22:16.900
<00:22:14.300>JavaScript <00:22:14.766>object <00:22:15.233>data <00:22:15.700>structure.

439
00:22:17.800 --> 00:22:20.400
<00:22:17.800>And <00:22:18.000>this <00:22:18.200>is <00:22:18.399>the <00:22:18.600>the <00:22:18.800>center <00:22:19.000>of <00:22:19.200>everything

440
00:22:20.400 --> 00:22:23.500
<00:22:20.400>that <00:22:20.600>happens <00:22:20.800>afterwards. <00:22:21.000>So <00:22:21.200>all <00:22:21.400>the <00:22:21.600>generic <00:22:21.800>functionality

441
00:22:23.500 --> 00:22:26.200
<00:22:23.500>of <00:22:23.640>langium <00:22:23.780>is <00:22:23.920>built <00:22:24.060>on <00:22:24.200>that <00:22:24.340>and <00:22:24.480>also <00:22:24.620>or <00:22:24.760>your <00:22:24.900>custom

442
00:22:26.200 --> 00:22:29.500
<00:22:26.200>functionality <00:22:26.375>that <00:22:26.550>you <00:22:26.725>build <00:22:26.900>yourself <00:22:27.075>like <00:22:27.250>custom <00:22:27.425>validation <00:22:27.600>rules

443
00:22:29.500 --> 00:22:31.200
<00:22:29.500>or <00:22:29.780>code <00:22:30.060>generators <00:22:30.340>and <00:22:30.620>so <00:22:30.900>on.

444
00:22:32.300 --> 00:22:35.200
<00:22:32.300>So <00:22:32.407>as <00:22:32.515>an <00:22:32.623>example, <00:22:32.730>I <00:22:32.838>showed <00:22:32.946>a <00:22:33.053>few <00:22:33.161>phases <00:22:33.269>that <00:22:33.376>are <00:22:33.484>done <00:22:33.592>here <00:22:33.700>so

445
00:22:35.200 --> 00:22:38.200
<00:22:35.200>indexing <00:22:35.480>means <00:22:35.760>and <00:22:36.040>take <00:22:36.320>all <00:22:36.600>the

446
00:22:38.200 --> 00:22:42.100
<00:22:38.200>symbols <00:22:38.400>defined <00:22:38.600>in <00:22:38.800>this <00:22:39.000>data <00:22:39.200>structure <00:22:39.400>and <00:22:39.600>put

447
00:22:41.100 --> 00:22:44.500
<00:22:41.100>them <00:22:41.255>into <00:22:41.411>an <00:22:41.566>index <00:22:41.722>so <00:22:41.877>that <00:22:42.033>they <00:22:42.188>are <00:22:42.344>made <00:22:42.500>available

448
00:22:44.500 --> 00:22:45.600
<00:22:44.500>for <00:22:44.995>referencing <00:22:45.490>them.

449
00:22:46.300 --> 00:22:49.900
<00:22:46.300>So <00:22:46.475>that's <00:22:46.649>something <00:22:46.825>that <00:22:47.000>is <00:22:47.175>very <00:22:47.350>important <00:22:47.524>for <00:22:47.700>very

450
00:22:49.900 --> 00:22:52.600
<00:22:49.900>very <00:22:50.366>quickly <00:22:50.833>resolved <00:22:51.300>cross

451
00:22:52.600 --> 00:22:55.800
<00:22:52.600>references <00:22:52.774>between <00:22:52.949>different <00:22:53.125>files. <00:22:53.300>So <00:22:53.475>you <00:22:53.649>cannot <00:22:53.824>only <00:22:54.000>refer

452
00:22:55.800 --> 00:22:58.200
<00:22:55.800>to <00:22:55.955>something <00:22:56.111>the <00:22:56.266>same <00:22:56.422>file <00:22:56.577>but <00:22:56.733>also <00:22:56.888>in <00:22:57.044>another <00:22:57.200>file.

453
00:22:59.300 --> 00:23:02.900
<00:22:59.300>Then <00:22:59.455>linking <00:22:59.611>is <00:22:59.766>the <00:22:59.922>process <00:23:00.077>of <00:23:00.233>actually <00:23:00.388>resolving <00:23:00.544>these <00:23:00.700>cross

454
00:23:02.900 --> 00:23:05.200
<00:23:02.900>references. <00:23:03.133>So <00:23:03.366>creating <00:23:03.600>a <00:23:03.833>hard <00:23:04.066>link <00:23:04.300>that

455
00:23:05.200 --> 00:23:06.000
<00:23:05.200>you <00:23:05.440>can <00:23:05.680>navigate <00:23:05.920>to.

456
00:23:06.800 --> 00:23:09.700
<00:23:06.800>And <00:23:07.033>validation <00:23:07.266>is <00:23:07.500>the <00:23:07.733>executing <00:23:07.966>your <00:23:08.200>custom

457
00:23:09.700 --> 00:23:13.100
<00:23:09.700>validation <00:23:09.840>rules, <00:23:09.980>like <00:23:10.120>errors <00:23:10.260>and <00:23:10.400>warnings <00:23:10.540>that <00:23:10.680>you <00:23:10.820>have <00:23:10.960>defined <00:23:11.100>to

458
00:23:12.100 --> 00:23:16.000
<00:23:12.100>give <00:23:12.379>users <00:23:12.659>feedback <00:23:12.939>about <00:23:13.219>they <00:23:13.500>are

459
00:23:15.600 --> 00:23:19.000
<00:23:15.600>models <00:23:15.740>that <00:23:15.879>they <00:23:16.020>have <00:23:16.159>written. <00:23:16.300>Is <00:23:16.439>it <00:23:16.580>good <00:23:16.719>is <00:23:16.860>it <00:23:17.000>or

460
00:23:18.200 --> 00:23:21.300
<00:23:18.200>where <00:23:18.375>is <00:23:18.550>the <00:23:18.725>things <00:23:18.900>that <00:23:19.075>need <00:23:19.250>to <00:23:19.425>be <00:23:19.600>improved?

461
00:23:24.200 --> 00:23:27.400
<00:23:24.200>So <00:23:24.375>this <00:23:24.550>is <00:23:24.725>an <00:23:24.900>idea <00:23:25.075>of <00:23:25.250>how <00:23:25.425>this <00:23:25.600>abstract

462
00:23:27.400 --> 00:23:30.800
<00:23:27.400>syntax <00:23:27.540>tree <00:23:27.680>looks <00:23:27.820>like <00:23:27.960>so <00:23:28.100>there's <00:23:28.240>always <00:23:28.380>a <00:23:28.520>root <00:23:28.660>node. <00:23:28.800>In

463
00:23:30.800 --> 00:23:33.500
<00:23:30.800>this <00:23:30.975>case. <00:23:31.149>It's <00:23:31.325>of <00:23:31.500>type <00:23:31.675>State <00:23:31.850>machine <00:23:32.024>and <00:23:32.200>has

464
00:23:33.500 --> 00:23:36.700
<00:23:33.500>the <00:23:33.700>name <00:23:33.900>traffic <00:23:34.100>light <00:23:34.300>and <00:23:34.500>has <00:23:34.700>the <00:23:34.900>states

465
00:23:36.700 --> 00:23:38.900
<00:23:36.700>and <00:23:36.980>events <00:23:37.260>and <00:23:37.540>states <00:23:37.820>have <00:23:38.100>transitions.

466
00:23:39.700 --> 00:23:42.400
<00:23:39.700>And <00:23:39.933>transitions <00:23:40.166>have <00:23:40.400>cross-references <00:23:40.633>shown <00:23:40.866>in <00:23:41.100>blue

467
00:23:42.400 --> 00:23:42.500
here.

468
00:23:43.200 --> 00:23:44.300
<00:23:43.200>to <00:23:43.530>their <00:23:43.860>target <00:23:44.190>state

469
00:23:45.100 --> 00:23:48.600
<00:23:45.100>and <00:23:45.216>so <00:23:45.333>this <00:23:45.449>data <00:23:45.566>structure <00:23:45.683>is <00:23:45.800>now <00:23:45.916>the <00:23:46.033>input <00:23:46.149>for <00:23:46.266>the <00:23:46.383>language <00:23:46.500>server.

470
00:23:49.300 --> 00:23:52.200
<00:23:49.300>So <00:23:49.500>you <00:23:49.700>use <00:23:49.899>this <00:23:50.100>AST <00:23:50.300>for <00:23:50.500>validation <00:23:50.700>as

471
00:23:52.200 --> 00:23:54.700
<00:23:52.200>I <00:23:52.375>said <00:23:52.550>also <00:23:52.725>for <00:23:52.900>completion, <00:23:53.075>so <00:23:53.250>when <00:23:53.425>you <00:23:53.600>type

472
00:23:55.500 --> 00:23:58.500
<00:23:55.500>And <00:23:55.640>the <00:23:55.780>editor <00:23:55.920>you <00:23:56.060>get <00:23:56.200>a <00:23:56.340>list <00:23:56.480>of <00:23:56.620>all <00:23:56.760>available <00:23:56.900>Target

473
00:23:58.500 --> 00:24:01.200
<00:23:58.500>States <00:23:58.780>go <00:23:59.060>to <00:23:59.340>definition. <00:23:59.620>That's <00:23:59.900>what

474
00:24:01.200 --> 00:24:04.300
<00:24:01.200>I <00:24:01.355>showed <00:24:01.511>with <00:24:01.666>command <00:24:01.822>clicking <00:24:01.977>on <00:24:02.133>a <00:24:02.288>on <00:24:02.444>a <00:24:02.600>symbol

475
00:24:04.300 --> 00:24:07.500
<00:24:04.300>and <00:24:04.416>then <00:24:04.533>you <00:24:04.649>jump <00:24:04.766>to <00:24:04.883>its <00:24:05.000>definition <00:24:05.116>and <00:24:05.233>all <00:24:05.350>the <00:24:05.466>other <00:24:05.583>language <00:24:05.700>services.

476
00:24:07.500 --> 00:24:09.100
<00:24:07.500>So <00:24:07.733>it's <00:24:07.966>I <00:24:08.200>think <00:24:08.433>in <00:24:08.666>total <00:24:08.900>it's

477
00:24:10.300 --> 00:24:13.600
<00:24:10.300>about <00:24:10.649>two <00:24:11.000>dozen <00:24:11.350>services <00:24:11.700>or

478
00:24:13.600 --> 00:24:16.000
<00:24:13.600>so <00:24:13.949>that <00:24:14.300>are <00:24:14.649>part <00:24:15.000>of

479
00:24:16.100 --> 00:24:17.100
<00:24:16.100>this <00:24:16.399>language <00:24:16.699>server <00:24:17.000>protocol.

480
00:24:17.900 --> 00:24:20.400
<00:24:17.900>So <00:24:18.100>different <00:24:18.300>kinds <00:24:18.500>of <00:24:18.700>things <00:24:18.900>also <00:24:19.100>hovering <00:24:19.300>with

481
00:24:20.400 --> 00:24:23.800
<00:24:20.400>a <00:24:20.750>mouse <00:24:21.100>or <00:24:21.450>folding <00:24:21.800>and

482
00:24:23.800 --> 00:24:26.200
<00:24:23.800>folding <00:24:24.000>regions <00:24:24.200>in <00:24:24.399>the <00:24:24.600>text <00:24:24.800>and <00:24:25.000>all <00:24:25.200>these

483
00:24:26.200 --> 00:24:29.300
<00:24:26.200>things <00:24:26.355>that <00:24:26.511>can <00:24:26.666>be <00:24:26.822>adapted <00:24:26.977>and <00:24:27.133>and <00:24:27.288>implemented <00:24:27.444>specifically <00:24:27.600>for

484
00:24:29.300 --> 00:24:29.900
<00:24:29.300>your <00:24:29.840>language.

485
00:24:31.100 --> 00:24:34.400
<00:24:31.100>And <00:24:31.255>this <00:24:31.411>AST <00:24:31.566>is <00:24:31.722>at <00:24:31.877>the <00:24:32.033>same <00:24:32.188>time <00:24:32.344>the <00:24:32.500>input

486
00:24:34.400 --> 00:24:38.000
<00:24:34.400>for <00:24:34.555>your <00:24:34.711>command <00:24:34.866>line <00:24:35.022>tool <00:24:35.177>that <00:24:35.333>you <00:24:35.488>can <00:24:35.644>Implement <00:24:35.800>to

487
00:24:37.400 --> 00:24:41.400
<00:24:37.400>generate <00:24:37.750>code <00:24:38.100>to <00:24:38.450>execute <00:24:38.800>the

488
00:24:40.400 --> 00:24:43.900
<00:24:40.400>code <00:24:40.866>your <00:24:41.333>input <00:24:41.800>model

489
00:24:43.900 --> 00:24:47.400
<00:24:43.900>so <00:24:44.133>that <00:24:44.366>it <00:24:44.600>can <00:24:44.833>be <00:24:45.066>yeah <00:24:45.300>interpret

490
00:24:46.400 --> 00:24:49.700
<00:24:46.400>that <00:24:46.680>and <00:24:46.960>for <00:24:47.240>Life <00:24:47.520>execution <00:24:47.800>or

491
00:24:49.700 --> 00:24:52.500
<00:24:49.700>anything <00:24:49.807>else <00:24:49.915>that <00:24:50.023>you <00:24:50.130>want <00:24:50.238>to <00:24:50.346>produce <00:24:50.453>out <00:24:50.561>of <00:24:50.669>it. <00:24:50.776>So <00:24:50.884>you <00:24:50.992>can <00:24:51.100>transform

492
00:24:52.500 --> 00:24:55.000
<00:24:52.500>that <00:24:52.675>into <00:24:52.850>some <00:24:53.025>Target <00:24:53.200>format <00:24:53.375>or <00:24:53.550>things <00:24:53.725>like <00:24:53.900>that.

493
00:24:59.700 --> 00:25:03.000
<00:24:59.700>So <00:24:59.933>as <00:25:00.166>I <00:25:00.400>said, <00:25:00.633>we <00:25:00.866>derive <00:25:01.100>typescript

494
00:25:02.800 --> 00:25:05.800
<00:25:02.800>interfaces <00:25:03.149>from <00:25:03.500>our <00:25:03.850>grammar <00:25:04.200>definition,

495
00:25:05.800 --> 00:25:07.500
<00:25:05.800>so <00:25:06.266>the <00:25:06.733>state <00:25:07.200>machine.

496
00:25:08.200 --> 00:25:12.200
<00:25:08.200>From <00:25:08.375>that <00:25:08.550>state <00:25:08.725>machine <00:25:08.900>rule <00:25:09.075>we <00:25:09.250>derived <00:25:09.425>an <00:25:09.600>interface.

497
00:25:13.200 --> 00:25:16.100
<00:25:13.200>And <00:25:13.340>the <00:25:13.480>properties <00:25:13.620>in <00:25:13.760>this <00:25:13.900>interface <00:25:14.040>are <00:25:14.180>exactly <00:25:14.320>what <00:25:14.460>we <00:25:14.600>have

498
00:25:16.100 --> 00:25:19.400
<00:25:16.100>defined <00:25:16.227>here. <00:25:16.354>So <00:25:16.481>there's <00:25:16.609>a <00:25:16.736>name <00:25:16.863>property <00:25:16.990>of <00:25:17.118>type <00:25:17.245>string <00:25:17.372>and <00:25:17.500>states

499
00:25:19.400 --> 00:25:21.700
<00:25:19.400>which <00:25:19.680>is <00:25:19.960>an <00:25:20.240>array <00:25:20.520>of <00:25:20.800>State.

500
00:25:22.600 --> 00:25:24.600
<00:25:22.600>And <00:25:22.833>same <00:25:23.066>for <00:25:23.300>the <00:25:23.533>other <00:25:23.766>two <00:25:24.000>rules.

501
00:25:29.300 --> 00:25:32.700
<00:25:29.300>And <00:25:29.455>so <00:25:29.611>this <00:25:29.766>means <00:25:29.922>that <00:25:30.077>there <00:25:30.233>are <00:25:30.388>two <00:25:30.544>different <00:25:30.700>aspects

502
00:25:32.700 --> 00:25:35.900
<00:25:32.700>of <00:25:32.900>this <00:25:33.100>grammar <00:25:33.300>language <00:25:33.500>one <00:25:33.700>is <00:25:33.900>the <00:25:34.100>syntactic

503
00:25:35.900 --> 00:25:38.700
<00:25:35.900>aspect <00:25:36.133>or <00:25:36.366>view <00:25:36.600>of <00:25:36.833>it, <00:25:37.066>which <00:25:37.300>means

504
00:25:38.700 --> 00:25:42.000
<00:25:38.700>we <00:25:38.980>are <00:25:39.260>interested <00:25:39.540>on <00:25:39.820>everything <00:25:40.100>that

505
00:25:41.400 --> 00:25:44.100
<00:25:41.400>the <00:25:41.575>parts <00:25:41.750>are <00:25:41.925>needs <00:25:42.100>to <00:25:42.275>know. <00:25:42.450>So <00:25:42.625>this <00:25:42.800>is

506
00:25:44.100 --> 00:25:45.200
<00:25:44.100>about <00:25:44.429>these <00:25:44.760>first <00:25:45.090>two.

507
00:25:46.900 --> 00:25:49.300
<00:25:46.900>Stages <00:25:47.055>here <00:25:47.211>tokenizing <00:25:47.366>and <00:25:47.522>parsing. <00:25:47.677>So <00:25:47.833>we <00:25:47.988>are <00:25:48.144>interested <00:25:48.300>in

508
00:25:49.300 --> 00:25:52.300
<00:25:49.300>what <00:25:49.440>keywords <00:25:49.580>do <00:25:49.720>we <00:25:49.860>need <00:25:50.000>to <00:25:50.139>parse? <00:25:50.280>What <00:25:50.419>tokens <00:25:50.560>like <00:25:50.700>an

509
00:25:52.300 --> 00:25:54.900
<00:25:52.300>identifier <00:25:52.580>which <00:25:52.860>other <00:25:53.139>rules <00:25:53.419>to <00:25:53.700>call?

510
00:25:55.800 --> 00:25:58.300
<00:25:55.800>So <00:25:56.000>this <00:25:56.200>is <00:25:56.399>the <00:25:56.600>the <00:25:56.800>concrete <00:25:57.000>syntax <00:25:57.200>of

511
00:25:58.300 --> 00:26:01.200
<00:25:58.300>your <00:25:58.455>language <00:25:58.611>and <00:25:58.766>the <00:25:58.922>other <00:25:59.077>aspect <00:25:59.233>that <00:25:59.388>is <00:25:59.544>encoded <00:25:59.700>in

512
00:26:01.200 --> 00:26:02.200
<00:26:01.200>the <00:26:01.650>same <00:26:02.100>grammar.

513
00:26:03.100 --> 00:26:06.800
<00:26:03.100>Is <00:26:03.227>the <00:26:03.354>semantic <00:26:03.481>View <00:26:03.609>and <00:26:03.736>here <00:26:03.863>we <00:26:03.990>look <00:26:04.118>at <00:26:04.245>the <00:26:04.372>objects <00:26:04.500>that

514
00:26:06.800 --> 00:26:09.500
<00:26:06.800>will <00:26:06.975>be <00:26:07.149>created. <00:26:07.325>So <00:26:07.500>a <00:26:07.675>state <00:26:07.850>machine <00:26:08.024>rule <00:26:08.200>will

515
00:26:09.500 --> 00:26:12.100
<00:26:09.500>create <00:26:09.675>a <00:26:09.850>state <00:26:10.025>machine <00:26:10.200>object <00:26:10.375>with <00:26:10.550>properties <00:26:10.725>name <00:26:10.900>and

516
00:26:12.100 --> 00:26:15.200
<00:26:12.100>States <00:26:12.274>a <00:26:12.449>state <00:26:12.625>rule. <00:26:12.800>We're <00:26:12.975>created <00:26:13.149>in <00:26:13.324>a <00:26:13.500>state

517
00:26:15.200 --> 00:26:18.200
<00:26:15.200>object <00:26:15.375>with <00:26:15.550>properties <00:26:15.725>name <00:26:15.900>and <00:26:16.075>Transitions <00:26:16.250>and <00:26:16.425>so <00:26:16.600>on.

518
00:26:19.100 --> 00:26:23.400
<00:26:19.100>And <00:26:19.240>so <00:26:19.379>there's <00:26:19.520>a <00:26:19.659>duality <00:26:19.800>in <00:26:19.939>this <00:26:20.080>language. <00:26:20.219>And <00:26:20.360>actually <00:26:20.500>this

519
00:26:23.400 --> 00:26:26.600
<00:26:23.400>is <00:26:23.555>quite <00:26:23.711>similar <00:26:23.866>to <00:26:24.022>to <00:26:24.177>some <00:26:24.333>programming <00:26:24.488>languages <00:26:24.644>as <00:26:24.800>we

520
00:26:26.600 --> 00:26:27.000
<00:26:26.600>will <00:26:26.780>see <00:26:26.960>later.

521
00:26:29.500 --> 00:26:32.400
<00:26:29.500>So <00:26:29.627>what <00:26:29.754>we <00:26:29.881>have <00:26:30.009>seen <00:26:30.136>so <00:26:30.263>far <00:26:30.390>is <00:26:30.518>an <00:26:30.645>implicit <00:26:30.772>style <00:26:30.900>of

522
00:26:32.400 --> 00:26:35.600
<00:26:32.400>of <00:26:32.750>creating <00:26:33.100>the <00:26:33.450>types <00:26:33.800>that

523
00:26:35.600 --> 00:26:38.500
<00:26:35.600>describe <00:26:35.833>this <00:26:36.066>AST. <00:26:36.300>So <00:26:36.533>the <00:26:36.766>types <00:26:37.000>are

524
00:26:38.500 --> 00:26:41.500
<00:26:38.500>inferred <00:26:38.627>from <00:26:38.754>the <00:26:38.881>grammar <00:26:39.009>and <00:26:39.136>this <00:26:39.263>is <00:26:39.390>great <00:26:39.518>for <00:26:39.645>rapid <00:26:39.772>prototyping <00:26:39.900>because

525
00:26:41.500 --> 00:26:44.800
<00:26:41.500>you <00:26:41.700>can <00:26:41.900>write <00:26:42.100>down <00:26:42.300>your <00:26:42.500>language <00:26:42.700>definition <00:26:42.900>very

526
00:26:44.800 --> 00:26:45.000
quickly.

527
00:26:45.800 --> 00:26:48.200
<00:26:45.800>And <00:26:46.033>with <00:26:46.266>that <00:26:46.500>you <00:26:46.733>have <00:26:46.966>a <00:26:47.200>very

528
00:26:48.200 --> 00:26:51.400
<00:26:48.200>compact <00:26:48.480>definition <00:26:48.760>of <00:26:49.040>this <00:26:49.320>syntactic <00:26:49.600>and

529
00:26:51.400 --> 00:26:52.300
<00:26:51.400>semantic <00:26:52.210>views.

530
00:26:53.500 --> 00:26:56.200
<00:26:53.500>And <00:26:53.675>so <00:26:53.850>you <00:26:54.025>can <00:26:54.200>move <00:26:54.375>forward <00:26:54.550>quickly. <00:26:54.725>And <00:26:54.900>this

531
00:26:56.200 --> 00:26:59.100
<00:26:56.200>is <00:26:56.400>of <00:26:56.600>course <00:26:56.800>especially <00:26:57.000>useful <00:26:57.200>when <00:26:57.400>you <00:26:57.600>are

532
00:26:59.100 --> 00:27:02.500
<00:26:59.100>not <00:26:59.199>so <00:26:59.300>sure <00:26:59.399>yet <00:26:59.500>how <00:26:59.600>the <00:26:59.699>language <00:26:59.800>will <00:26:59.899>look <00:27:00.000>like. <00:27:00.100>So <00:27:00.199>you <00:27:00.300>would <00:27:00.399>you <00:27:00.500>just

533
00:27:02.500 --> 00:27:05.400
<00:27:02.500>start <00:27:02.640>with <00:27:02.780>the <00:27:02.920>proof <00:27:03.060>of <00:27:03.200>concept <00:27:03.340>get <00:27:03.480>feedback <00:27:03.620>from <00:27:03.760>the <00:27:03.900>users

534
00:27:05.400 --> 00:27:06.400
<00:27:05.400>and <00:27:05.625>then <00:27:05.850>iterate <00:27:06.075>on <00:27:06.300>that.

535
00:27:07.500 --> 00:27:10.200
<00:27:07.500>But <00:27:07.675>for <00:27:07.850>a <00:27:08.025>long-term <00:27:08.200>project <00:27:08.375>something <00:27:08.550>that <00:27:08.725>becomes <00:27:08.900>more

536
00:27:10.200 --> 00:27:13.200
<00:27:10.200>mature, <00:27:10.433>I <00:27:10.666>would <00:27:10.900>propose <00:27:11.133>to <00:27:11.366>use <00:27:11.600>a

537
00:27:13.200 --> 00:27:16.500
<00:27:13.200>more <00:27:13.375>explicit <00:27:13.550>style. <00:27:13.725>And <00:27:13.900>that <00:27:14.075>means <00:27:14.250>to <00:27:14.425>declare <00:27:14.600>the

538
00:27:16.500 --> 00:27:19.900
<00:27:16.500>types <00:27:16.640>for <00:27:16.780>your <00:27:16.920>AST. <00:27:17.060>And <00:27:17.200>the <00:27:17.340>reason <00:27:17.480>is <00:27:17.620>that <00:27:17.760>eventually <00:27:17.900>you

539
00:27:19.900 --> 00:27:22.100
<00:27:19.900>will <00:27:20.055>have <00:27:20.211>a <00:27:20.366>large <00:27:20.522>code <00:27:20.677>base <00:27:20.833>that <00:27:20.988>depends <00:27:21.144>on <00:27:21.300>it

540
00:27:22.100 --> 00:27:25.300
<00:27:22.100>like <00:27:22.274>a <00:27:22.449>for <00:27:22.625>example <00:27:22.800>a <00:27:22.975>very <00:27:23.149>complex <00:27:23.324>code <00:27:23.500>generator

541
00:27:25.300 --> 00:27:28.300
<00:27:25.300>that <00:27:25.533>takes <00:27:25.766>instances <00:27:26.000>of <00:27:26.233>your <00:27:26.466>language <00:27:26.700>and

542
00:27:28.300 --> 00:27:31.200
<00:27:28.300>creates <00:27:28.500>output <00:27:28.700>code <00:27:28.899>that <00:27:29.100>of <00:27:29.300>course <00:27:29.500>needs <00:27:29.700>to

543
00:27:31.200 --> 00:27:34.700
<00:27:31.200>be <00:27:31.327>written <00:27:31.454>your <00:27:31.581>by <00:27:31.709>hand <00:27:31.836>because <00:27:31.963>it's <00:27:32.090>it's <00:27:32.218>you <00:27:32.345>who <00:27:32.472>defines <00:27:32.600>what

544
00:27:34.700 --> 00:27:37.300
<00:27:34.700>it <00:27:34.933>means <00:27:35.166>to <00:27:35.400>process <00:27:35.633>your <00:27:35.866>your <00:27:36.100>own

545
00:27:37.300 --> 00:27:40.400
<00:27:37.300>language <00:27:37.533>and <00:27:37.766>so <00:27:38.000>declaring <00:27:38.233>explicitly <00:27:38.466>is <00:27:38.700>better

546
00:27:40.400 --> 00:27:41.500
<00:27:40.400>for <00:27:40.895>long-term <00:27:41.390>maintenance.

547
00:27:43.100 --> 00:27:46.000
<00:27:43.100>And <00:27:43.240>so <00:27:43.379>let's <00:27:43.520>see <00:27:43.659>how <00:27:43.800>that <00:27:43.939>looks <00:27:44.080>like. <00:27:44.219>So <00:27:44.360>this <00:27:44.500>is

548
00:27:46.700 --> 00:27:49.900
<00:27:46.700>the <00:27:46.875>same <00:27:47.050>example, <00:27:47.225>but <00:27:47.400>with <00:27:47.575>explicit <00:27:47.750>types <00:27:47.925>and <00:27:48.100>so

549
00:27:49.900 --> 00:27:53.200
<00:27:49.900>every <00:27:50.100>Rule <00:27:50.300>now <00:27:50.500>has <00:27:50.700>a <00:27:50.900>returns <00:27:51.100>declaration. <00:27:51.300>So

550
00:27:52.200 --> 00:27:55.700
<00:27:52.200>State <00:27:52.550>machine <00:27:52.900>returns <00:27:53.250>a <00:27:53.600>type

551
00:27:55.700 --> 00:27:58.100
<00:27:55.700>State <00:27:55.875>machine <00:27:56.050>which <00:27:56.225>is <00:27:56.400>defined <00:27:56.575>over <00:27:56.750>here <00:27:56.925>and <00:27:57.100>this

552
00:27:58.100 --> 00:28:01.700
<00:27:58.100>actually <00:27:58.274>looks <00:27:58.449>like <00:27:58.625>a <00:27:58.800>typescript <00:27:58.975>interface. <00:27:59.149>So <00:27:59.324>the <00:27:59.500>syntax

553
00:28:01.700 --> 00:28:04.900
<00:28:01.700>is <00:28:01.933>almost <00:28:02.166>the <00:28:02.400>same <00:28:02.633>not <00:28:02.866>not <00:28:03.100>fully

554
00:28:04.900 --> 00:28:07.000
<00:28:04.900>the <00:28:05.180>same <00:28:05.460>this <00:28:05.740>at <00:28:06.020>symbol <00:28:06.300>here

555
00:28:07.200 --> 00:28:09.100
<00:28:07.200>is <00:28:07.433>a <00:28:07.666>shorthand <00:28:07.900>for <00:28:08.133>a <00:28:08.366>cross <00:28:08.600>reference.

556
00:28:10.100 --> 00:28:13.500
<00:28:10.100>So <00:28:10.274>this <00:28:10.449>is <00:28:10.625>so <00:28:10.800>far <00:28:10.975>the <00:28:11.149>only <00:28:11.324>difference <00:28:11.500>to

557
00:28:13.500 --> 00:28:14.100
typescript.

558
00:28:14.900 --> 00:28:17.700
<00:28:14.900>And <00:28:15.133>so <00:28:15.366>as <00:28:15.600>I <00:28:15.833>said <00:28:16.066>using <00:28:16.300>this

559
00:28:17.700 --> 00:28:21.200
<00:28:17.700>explicit <00:28:17.900>declaration, <00:28:18.100>you <00:28:18.300>can <00:28:18.500>ensure <00:28:18.700>that <00:28:18.900>your <00:28:19.100>your

560
00:28:20.200 --> 00:28:22.000
<00:28:20.200>grammar <00:28:21.600>rules.

561
00:28:22.700 --> 00:28:25.300
<00:28:22.700>Conform <00:28:22.855>to <00:28:23.011>the <00:28:23.166>schema <00:28:23.322>that <00:28:23.477>you <00:28:23.633>have <00:28:23.788>defined <00:28:23.944>here. <00:28:24.100>And

562
00:28:25.300 --> 00:28:28.100
<00:28:25.300>so <00:28:25.500>that <00:28:25.700>you <00:28:25.899>can <00:28:26.100>refactor <00:28:26.300>your <00:28:26.500>grammar <00:28:26.700>or

563
00:28:28.100 --> 00:28:31.400
<00:28:28.100>your <00:28:28.300>concrete <00:28:28.500>syntax <00:28:28.699>and <00:28:28.899>maybe <00:28:29.100>still <00:28:29.300>keep <00:28:29.500>the

564
00:28:31.400 --> 00:28:33.000
<00:28:31.400>same <00:28:32.100>abstract <00:28:32.800>syntax.

565
00:28:37.900 --> 00:28:41.100
<00:28:37.900>And <00:28:38.133>so <00:28:38.366>this <00:28:38.600>duality <00:28:38.833>of <00:28:39.066>the <00:28:39.300>grammar

566
00:28:40.100 --> 00:28:43.600
<00:28:40.100>rules <00:28:40.333>and <00:28:40.566>The <00:28:40.800>Returned <00:28:41.033>types <00:28:41.266>is <00:28:41.500>actually

567
00:28:43.600 --> 00:28:46.500
<00:28:43.600>very <00:28:43.774>similar <00:28:43.949>in <00:28:44.125>typescript. <00:28:44.300>Let's <00:28:44.475>look <00:28:44.649>at <00:28:44.824>this <00:28:45.000>one

568
00:28:46.500 --> 00:28:49.200
<00:28:46.500>example <00:28:46.675>here <00:28:46.850>down <00:28:47.025>here. <00:28:47.200>We <00:28:47.375>have <00:28:47.550>the <00:28:47.725>grammar <00:28:47.900>rule

569
00:28:49.200 --> 00:28:53.400
<00:28:49.200>transition <00:28:49.375>that <00:28:49.550>which <00:28:49.725>returns <00:28:49.900>a <00:28:50.075>transition <00:28:50.250>and <00:28:50.425>this <00:28:50.600>transition

570
00:28:52.400 --> 00:28:55.600
<00:28:52.400>type <00:28:52.600>is <00:28:52.800>defined <00:28:53.000>here <00:28:53.200>with <00:28:53.400>this <00:28:53.600>at <00:28:53.800>symbol

571
00:28:55.600 --> 00:28:56.400
<00:28:55.600>for <00:28:55.840>the <00:28:56.080>cross <00:28:56.320>references.

572
00:28:57.100 --> 00:29:00.600
<00:28:57.100>And <00:28:57.227>above <00:28:57.354>is <00:28:57.481>exactly <00:28:57.609>the <00:28:57.736>same <00:28:57.863>in <00:28:57.990>typescript. <00:28:58.118>So <00:28:58.245>well, <00:28:58.372>this <00:28:58.500>is

573
00:29:00.600 --> 00:29:03.900
<00:29:00.600>just <00:29:00.774>a <00:29:00.949>pseudo <00:29:01.125>code. <00:29:01.300>It's <00:29:01.475>not <00:29:01.649>not <00:29:01.824>actual <00:29:02.000>code,

574
00:29:03.900 --> 00:29:06.200
<00:29:03.900>but <00:29:04.366>just <00:29:04.833>pseudocode <00:29:05.300>to

575
00:29:06.200 --> 00:29:09.300
<00:29:06.200>give <00:29:06.355>an <00:29:06.511>idea <00:29:06.666>of <00:29:06.822>what <00:29:06.977>it <00:29:07.133>what <00:29:07.288>it's <00:29:07.444>what <00:29:07.600>it

576
00:29:09.300 --> 00:29:12.500
<00:29:09.300>means <00:29:09.500>to <00:29:09.700>parse <00:29:09.899>a <00:29:10.100>transition. <00:29:10.300>So <00:29:10.500>in <00:29:10.700>typescript,

577
00:29:12.500 --> 00:29:14.000
<00:29:12.500>we <00:29:12.725>could <00:29:12.950>Define <00:29:13.175>it <00:29:13.400>as <00:29:13.625>a <00:29:13.850>function.

578
00:29:15.800 --> 00:29:19.100
<00:29:15.800>And <00:29:15.975>this <00:29:16.149>function <00:29:16.325>could <00:29:16.500>have <00:29:16.675>the <00:29:16.850>name <00:29:17.024>transition <00:29:17.200>and

579
00:29:18.100 --> 00:29:21.700
<00:29:18.100>also <00:29:18.333>the <00:29:18.566>return <00:29:18.800>type <00:29:19.033>transition <00:29:19.266>and <00:29:19.500>it's

580
00:29:21.700 --> 00:29:24.500
<00:29:21.700>no <00:29:21.980>problem <00:29:22.260>because <00:29:22.540>the <00:29:22.820>a <00:29:23.100>function

581
00:29:24.500 --> 00:29:27.500
<00:29:24.500>in <00:29:24.655>typescript <00:29:24.811>is <00:29:24.966>on <00:29:25.122>the <00:29:25.277>value <00:29:25.433>scope <00:29:25.588>while <00:29:25.744>the <00:29:25.900>type

582
00:29:27.500 --> 00:29:28.400
<00:29:27.500>is <00:29:27.770>on <00:29:28.040>the <00:29:28.310>typescope.

583
00:29:29.200 --> 00:29:32.700
<00:29:29.200>And <00:29:29.355>these <00:29:29.511>don't <00:29:29.666>interfere <00:29:29.822>with <00:29:29.977>each <00:29:30.133>other <00:29:30.288>directly <00:29:30.444>so <00:29:30.600>you

584
00:29:32.700 --> 00:29:35.200
<00:29:32.700>can <00:29:32.855>have <00:29:33.011>in <00:29:33.166>a <00:29:33.322>value <00:29:33.477>and <00:29:33.633>a <00:29:33.788>type <00:29:33.944>with <00:29:34.100>the

585
00:29:35.200 --> 00:29:36.800
<00:29:35.200>same <00:29:35.433>name <00:29:35.666>because <00:29:35.900>they <00:29:36.133>are <00:29:36.366>different <00:29:36.600>scopes.

586
00:29:38.100 --> 00:29:42.100
<00:29:38.100>And <00:29:38.274>so <00:29:38.449>yeah, <00:29:38.625>so <00:29:38.800>that's <00:29:38.975>actually <00:29:39.149>so <00:29:39.324>the <00:29:39.500>similar

587
00:29:41.100 --> 00:29:44.200
<00:29:41.100>concept <00:29:41.255>of <00:29:41.411>as <00:29:41.566>we <00:29:41.722>have <00:29:41.877>that <00:29:42.033>in <00:29:42.188>the <00:29:42.344>grammar <00:29:42.500>language.

588
00:29:49.100 --> 00:29:52.300
<00:29:49.100>Good <00:29:49.240>enough <00:29:49.379>for <00:29:49.520>the <00:29:49.659>dive <00:29:49.800>into <00:29:49.939>the <00:29:50.080>semantics <00:29:50.219>of <00:29:50.360>the <00:29:50.500>grammar.

589
00:29:54.200 --> 00:29:56.300
<00:29:54.200>If <00:29:54.355>you <00:29:54.511>want <00:29:54.666>to <00:29:54.822>get <00:29:54.977>your <00:29:55.133>hands <00:29:55.288>dirty <00:29:55.444>with <00:29:55.600>this.

590
00:29:57.200 --> 00:29:59.000
<00:29:57.200>Just <00:29:57.375>a <00:29:57.550>few <00:29:57.725>words <00:29:57.900>on <00:29:58.075>how <00:29:58.250>to <00:29:58.425>get <00:29:58.600>started.

591
00:30:00.100 --> 00:30:03.300
<00:30:00.100>We <00:30:00.300>have <00:30:00.500>a <00:30:00.699>human <00:30:00.899>generator <00:30:01.100>humanistic <00:30:01.300>quite <00:30:01.500>popular

592
00:30:03.300 --> 00:30:06.900
<00:30:03.300>project <00:30:03.649>generation <00:30:04.000>tool <00:30:04.350>that <00:30:04.700>for

593
00:30:06.900 --> 00:30:09.700
<00:30:06.900>that's <00:30:07.180>available <00:30:07.460>on <00:30:07.740>npm. <00:30:08.020>So <00:30:08.300>what

594
00:30:09.700 --> 00:30:13.300
<00:30:09.700>you <00:30:09.900>do <00:30:10.100>here <00:30:10.300>is <00:30:10.500>npm <00:30:10.700>install <00:30:10.900>globally <00:30:11.100>human,

595
00:30:12.300 --> 00:30:16.600
<00:30:12.300>which <00:30:12.455>is <00:30:12.611>called. <00:30:12.766>Yo <00:30:12.922>on <00:30:13.077>the <00:30:13.233>command <00:30:13.388>line <00:30:13.544>and <00:30:13.700>a

596
00:30:15.600 --> 00:30:18.700
<00:30:15.600>package <00:30:15.879>that <00:30:16.159>we <00:30:16.439>created <00:30:16.719>for <00:30:17.000>langium

597
00:30:18.700 --> 00:30:19.600
<00:30:18.700>is <00:30:19.105>called <00:30:19.510>generator.

598
00:30:21.400 --> 00:30:24.100
<00:30:21.400>And <00:30:21.527>once <00:30:21.654>you <00:30:21.781>have <00:30:21.909>done <00:30:22.036>that <00:30:22.163>you <00:30:22.290>can <00:30:22.418>say <00:30:22.545>your <00:30:22.672>language <00:30:22.800>and

599
00:30:24.100 --> 00:30:27.600
<00:30:24.100>that <00:30:24.240>will <00:30:24.379>start <00:30:24.520>this <00:30:24.659>command <00:30:24.800>line <00:30:24.939>generator. <00:30:25.080>So <00:30:25.219>it's <00:30:25.360>scaffolding <00:30:25.500>tool

600
00:30:27.600 --> 00:30:30.400
<00:30:27.600>that <00:30:27.949>creates <00:30:28.300>a <00:30:28.649>project <00:30:29.000>that

601
00:30:30.400 --> 00:30:33.200
<00:30:30.400>is <00:30:30.555>ready <00:30:30.711>to <00:30:30.866>use <00:30:31.022>basically, <00:30:31.177>so <00:30:31.333>you <00:30:31.488>answer <00:30:31.644>a <00:30:31.800>few

602
00:30:33.200 --> 00:30:36.800
<00:30:33.200>questions <00:30:33.433>about <00:30:33.666>extension <00:30:33.900>name <00:30:34.133>language <00:30:34.366>name <00:30:34.600>and

603
00:30:36.800 --> 00:30:39.400
<00:30:36.800>if <00:30:37.000>you <00:30:37.200>use <00:30:37.399>just <00:30:37.600>the <00:30:37.800>defaults, <00:30:38.000>everything <00:30:38.200>will

604
00:30:39.400 --> 00:30:42.700
<00:30:39.400>be <00:30:39.540>hello <00:30:39.680>world <00:30:39.820>and <00:30:39.960>you <00:30:40.100>get <00:30:40.240>a <00:30:40.380>fully <00:30:40.520>functioning <00:30:40.660>World <00:30:40.800>example.

605
00:30:43.400 --> 00:30:45.600
<00:30:43.400>And <00:30:43.575>so <00:30:43.750>you <00:30:43.925>can <00:30:44.100>use <00:30:44.275>that <00:30:44.450>as <00:30:44.625>a <00:30:44.800>basis.

606
00:30:48.500 --> 00:30:52.100
<00:30:48.500>Here, <00:30:48.655>I <00:30:48.811>think <00:30:48.966>if <00:30:49.122>we <00:30:49.277>have <00:30:49.433>a <00:30:49.588>few <00:30:49.744>minutes <00:30:49.900>left,

607
00:30:51.100 --> 00:30:54.200
<00:30:51.100>I <00:30:51.300>can <00:30:51.500>can <00:30:51.699>also <00:30:51.899>show <00:30:52.100>this <00:30:52.300>live <00:30:52.500>in

608
00:30:54.200 --> 00:30:54.600
<00:30:54.200>an <00:30:54.560>example.

609
00:30:56.700 --> 00:30:59.500
<00:30:56.700>Then <00:30:56.900>once <00:30:57.100>you <00:30:57.300>have <00:30:57.500>created <00:30:57.700>this <00:30:57.900>bootstrapped <00:30:58.100>project,

610
00:30:59.500 --> 00:31:02.100
<00:30:59.500>what <00:30:59.655>you <00:30:59.811>would <00:30:59.966>do <00:31:00.122>is <00:31:00.277>edit <00:31:00.433>your <00:31:00.588>grammar <00:31:00.744>file. <00:31:00.900>So

611
00:31:02.100 --> 00:31:05.800
<00:31:02.100>this <00:31:02.227>dot <00:31:02.354>langium <00:31:02.481>file. <00:31:02.609>That's <00:31:02.736>the <00:31:02.863>file <00:31:02.990>extension <00:31:03.118>of <00:31:03.245>the <00:31:03.372>grammars <00:31:03.500>and

612
00:31:05.800 --> 00:31:09.300
<00:31:05.800>every <00:31:06.033>time <00:31:06.266>you <00:31:06.500>have <00:31:06.733>changed <00:31:06.966>something <00:31:07.200>meaningful

613
00:31:08.300 --> 00:31:11.400
<00:31:08.300>in <00:31:08.580>the <00:31:08.860>grammar. <00:31:09.139>You <00:31:09.419>generate <00:31:09.700>the

614
00:31:11.400 --> 00:31:14.400
<00:31:11.400>typescript <00:31:11.750>definitions, <00:31:12.100>like <00:31:12.450>I <00:31:12.800>explained

615
00:31:14.400 --> 00:31:17.800
<00:31:14.400>before <00:31:14.633>using <00:31:14.866>a <00:31:15.100>the <00:31:15.333>Lancome <00:31:15.566>CLI, <00:31:15.800>in

616
00:31:17.800 --> 00:31:20.100
<00:31:17.800>this <00:31:17.955>case. <00:31:18.111>It's <00:31:18.266>done <00:31:18.422>with <00:31:18.577>a <00:31:18.733>package <00:31:18.888>Json <00:31:19.044>script. <00:31:19.200>So

617
00:31:20.100 --> 00:31:23.100
<00:31:20.100>just <00:31:20.274>npm <00:31:20.449>run <00:31:20.625>landium <00:31:20.800>column <00:31:20.975>generate. <00:31:21.149>We'll <00:31:21.324>call <00:31:21.500>this

618
00:31:23.100 --> 00:31:25.100
<00:31:23.100>CLI <00:31:23.379>and <00:31:23.659>generate <00:31:23.939>your <00:31:24.219>typescript <00:31:24.500>types.

619
00:31:25.900 --> 00:31:30.600
<00:31:25.900>And <00:31:26.027>it <00:31:26.154>also <00:31:26.281>has <00:31:26.409>a <00:31:26.536>watch <00:31:26.663>modem <00:31:26.790>so <00:31:26.918>you <00:31:27.045>can <00:31:27.172>regenerate <00:31:27.300>the

620
00:31:30.600 --> 00:31:33.100
<00:31:30.600>types <00:31:30.800>automatically <00:31:31.000>automatically <00:31:31.199>after <00:31:31.399>every <00:31:31.600>change <00:31:31.800>in <00:31:32.000>the

621
00:31:33.100 --> 00:31:33.500
grammar.

622
00:31:34.600 --> 00:31:37.400
<00:31:34.600>Yeah, <00:31:34.755>once <00:31:34.911>you <00:31:35.066>have <00:31:35.222>those <00:31:35.377>types, <00:31:35.533>you <00:31:35.688>can <00:31:35.844>go <00:31:36.000>on

623
00:31:37.400 --> 00:31:40.600
<00:31:37.400>and <00:31:37.575>Implement <00:31:37.750>all <00:31:37.925>your <00:31:38.100>language <00:31:38.275>specific <00:31:38.450>things <00:31:38.625>like <00:31:38.800>validation

624
00:31:40.600 --> 00:31:43.900
<00:31:40.600>rules <00:31:41.066>generators <00:31:41.533>interpreters <00:31:42.000>everything

625
00:31:43.900 --> 00:31:46.600
<00:31:43.900>that <00:31:44.133>is <00:31:44.366>specific <00:31:44.600>to <00:31:44.833>the <00:31:45.066>semantics <00:31:45.300>of

626
00:31:46.600 --> 00:31:48.700
<00:31:46.600>that <00:31:46.879>language <00:31:47.159>specific <00:31:47.439>to <00:31:47.719>your <00:31:48.000>domain.

627
00:31:51.600 --> 00:31:54.000
<00:31:51.600>And <00:31:51.879>documentation <00:31:52.159>is <00:31:52.439>available <00:31:52.719>on <00:31:53.000>the

628
00:31:54.300 --> 00:31:55.300
<00:31:54.300>website <00:31:55.200>langm.org.

629
00:31:55.900 --> 00:31:58.500
<00:31:55.900>And <00:31:56.133>the <00:31:56.366>repositories <00:31:56.600>on <00:31:56.833>GitHub <00:31:57.066>at <00:31:57.300>langium

630
00:31:58.500 --> 00:32:02.500
<00:31:58.500>/langium, <00:31:58.700>and <00:31:58.900>if <00:31:59.100>you <00:31:59.300>need <00:31:59.500>any <00:31:59.700>further <00:31:59.900>assistance

631
00:32:01.500 --> 00:32:04.000
<00:32:01.500>and <00:32:01.850>any <00:32:02.200>support <00:32:02.550>we <00:32:02.900>can

632
00:32:04.300 --> 00:32:06.400
<00:32:04.300>help <00:32:04.533>you <00:32:04.766>at <00:32:05.000>typefox. <00:32:05.233>So <00:32:05.466>typefox <00:32:05.700>IO.

633
00:32:07.100 --> 00:32:08.700
<00:32:07.100>Is <00:32:07.300>the <00:32:07.500>website <00:32:07.699>where <00:32:07.899>you <00:32:08.100>can <00:32:08.300>reach <00:32:08.500>us?

634
00:32:09.900 --> 00:32:12.300
<00:32:09.900>and <00:32:10.180>so <00:32:10.460>before <00:32:10.740>we <00:32:11.020>get <00:32:11.300>to

635
00:32:12.300 --> 00:32:14.600
<00:32:12.300>the <00:32:12.649>Q&amp;A <00:32:13.000>session <00:32:13.350>I <00:32:13.700>can

636
00:32:16.400 --> 00:32:17.300
<00:32:16.400>quickly <00:32:16.805>show <00:32:17.210>this

637
00:32:21.400 --> 00:32:24.200
<00:32:21.400>the <00:32:21.555>co-man <00:32:21.711>examples. <00:32:21.866>So <00:32:22.022>I <00:32:22.177>already <00:32:22.333>ran <00:32:22.488>that <00:32:22.644>before <00:32:22.800>the

638
00:32:24.200 --> 00:32:28.700
<00:32:24.200>session <00:32:24.355>today <00:32:24.511>because <00:32:24.666>I <00:32:24.822>didn't <00:32:24.977>want <00:32:25.133>to <00:32:25.288>risk <00:32:25.444>running <00:32:25.600>npm

639
00:32:27.700 --> 00:32:30.500
<00:32:27.700>install <00:32:28.050>and <00:32:28.400>loading <00:32:28.750>node <00:32:29.100>dependencies

640
00:32:30.500 --> 00:32:31.300
<00:32:30.500>live <00:32:31.220>here.

641
00:32:32.300 --> 00:32:35.500
<00:32:32.300>So <00:32:32.533>I <00:32:32.766>created <00:32:33.000>a <00:32:33.233>new <00:32:33.466>project <00:32:33.700>and

642
00:32:35.500 --> 00:32:37.200
<00:32:35.500>named <00:32:35.966>that <00:32:36.433>compute <00:32:36.900>boards.

643
00:32:37.800 --> 00:32:40.600
<00:32:37.800>So <00:32:37.955>let's <00:32:38.111>say <00:32:38.266>I <00:32:38.422>want <00:32:38.577>to <00:32:38.733>create <00:32:38.888>a <00:32:39.044>DSL <00:32:39.200>that

644
00:32:40.600 --> 00:32:43.500
<00:32:40.600>describes <00:32:41.066>simple <00:32:41.533>Hardware <00:32:42.000>boards

645
00:32:43.500 --> 00:32:45.000
<00:32:43.500>that <00:32:43.837>have <00:32:44.175>inputs <00:32:44.512>and <00:32:44.850>outputs.

646
00:32:46.100 --> 00:32:49.700
<00:32:46.100>And <00:32:46.227>that <00:32:46.354>can <00:32:46.481>in <00:32:46.609>the <00:32:46.736>outputs <00:32:46.863>can <00:32:46.990>always <00:32:47.118>compute <00:32:47.245>some <00:32:47.372>numeric <00:32:47.500>numbers

647
00:32:49.700 --> 00:32:51.600
<00:32:49.700>depending <00:32:50.050>on <00:32:50.400>the <00:32:50.750>input <00:32:51.100>buses.

648
00:32:52.500 --> 00:32:55.800
<00:32:52.500>So <00:32:52.675>what <00:32:52.850>happened <00:32:53.025>here? <00:32:53.200>It's <00:32:53.375>created <00:32:53.550>a <00:32:53.725>project <00:32:53.900>scaffold

649
00:32:55.800 --> 00:32:58.800
<00:32:55.800>and <00:32:56.266>then <00:32:56.733>ran <00:32:57.200>npm

650
00:32:58.800 --> 00:33:01.200
<00:32:58.800>install <00:32:59.000>and <00:32:59.200>compiled <00:32:59.399>the <00:32:59.600>project. <00:32:59.800>So <00:33:00.000>it's <00:33:00.200>ready

651
00:33:01.200 --> 00:33:01.300
<00:33:01.200>to <00:33:01.290>use.

652
00:33:02.100 --> 00:33:04.000
<00:33:02.100>And <00:33:02.274>now <00:33:02.449>I <00:33:02.625>can <00:33:02.800>open <00:33:02.975>it <00:33:03.149>in <00:33:03.324>vs <00:33:03.500>code.

653
00:33:12.100 --> 00:33:12.700
<00:33:12.100>Here <00:33:12.370>it <00:33:12.640>is.

654
00:33:13.400 --> 00:33:16.200
<00:33:13.400>and <00:33:13.600>since <00:33:13.800>it <00:33:14.000>already <00:33:14.200>contains <00:33:14.400>a <00:33:14.600>Hello <00:33:14.800>World

655
00:33:16.200 --> 00:33:16.800
<00:33:16.200>Language <00:33:16.470>I <00:33:16.740>can

656
00:33:17.600 --> 00:33:18.200
<00:33:17.600>I <00:33:18.140>can.

657
00:33:19.600 --> 00:33:20.800
<00:33:19.600>Open <00:33:19.960>it <00:33:20.320>right <00:33:20.679>away.

658
00:33:22.300 --> 00:33:26.300
<00:33:22.300>And <00:33:22.649>create <00:33:23.000>a <00:33:23.350>test.com <00:33:23.700>file.

659
00:33:27.500 --> 00:33:29.500
<00:33:27.500>And <00:33:27.780>control <00:33:28.060>space <00:33:28.340>here <00:33:28.620>gives <00:33:28.900>me.

660
00:33:30.800 --> 00:33:33.200
<00:33:30.800>Exactly <00:33:31.266>the <00:33:31.733>completions <00:33:32.200>for

661
00:33:33.200 --> 00:33:36.000
<00:33:33.200>the <00:33:33.340>hello <00:33:33.480>world <00:33:33.620>language <00:33:33.760>that <00:33:33.900>is <00:33:34.040>that <00:33:34.180>we <00:33:34.320>can <00:33:34.460>see <00:33:34.600>here.

662
00:33:38.200 --> 00:33:41.500
<00:33:38.200>So <00:33:38.433>there's <00:33:38.666>a <00:33:38.900>source <00:33:39.133>folder <00:33:39.366>in <00:33:39.600>there.

663
00:33:41.500 --> 00:33:44.100
<00:33:41.500>There's <00:33:41.616>a <00:33:41.733>language <00:33:41.850>server. <00:33:41.966>So <00:33:42.083>the <00:33:42.200>structure <00:33:42.316>of <00:33:42.433>the <00:33:42.550>project <00:33:42.666>is <00:33:42.783>exactly <00:33:42.900>the

664
00:33:44.100 --> 00:33:47.200
<00:33:44.100>same <00:33:44.255>as <00:33:44.411>the <00:33:44.566>example <00:33:44.722>they <00:33:44.877>have <00:33:45.033>shown <00:33:45.188>before <00:33:45.344>which <00:33:45.500>is

665
00:33:47.200 --> 00:33:50.100
<00:33:47.200>by <00:33:47.375>the <00:33:47.550>way <00:33:47.725>in <00:33:47.900>the <00:33:48.075>in <00:33:48.250>the <00:33:48.425>repository <00:33:48.600>of

666
00:33:50.100 --> 00:33:52.800
<00:33:50.100>language <00:33:50.379>itself <00:33:50.659>and <00:33:50.939>here <00:33:51.219>there's <00:33:51.500>the

667
00:33:54.500 --> 00:33:57.900
<00:33:54.500>The <00:33:54.700>hello <00:33:54.900>world <00:33:55.100>language <00:33:55.300>that <00:33:55.500>has <00:33:55.700>persons <00:33:55.900>and

668
00:33:57.900 --> 00:33:59.900
<00:33:57.900>greetings <00:33:58.250>that <00:33:58.600>start <00:33:58.950>with <00:33:59.300>hello.

669
00:34:02.100 --> 00:34:05.600
<00:34:02.100>So <00:34:02.240>let's <00:34:02.379>get <00:34:02.520>back <00:34:02.659>to <00:34:02.800>the <00:34:02.939>runtime <00:34:03.080>vs <00:34:03.219>code. <00:34:03.360>So <00:34:03.500>here

670
00:34:05.600 --> 00:34:06.800
<00:34:05.600>can <00:34:05.960>define <00:34:06.320>a <00:34:06.679>person.

671
00:34:10.200 --> 00:34:13.600
<00:34:10.199>And <00:34:10.355>then <00:34:10.511>I <00:34:10.666>can <00:34:10.822>say <00:34:10.977>hello <00:34:11.133>and <00:34:11.288>here <00:34:11.444>with <00:34:11.600>control

672
00:34:13.600 --> 00:34:14.000
space.

673
00:34:15.400 --> 00:34:18.600
<00:34:15.400>I <00:34:15.600>can <00:34:15.800>see <00:34:16.000>what <00:34:16.200>person <00:34:16.400>is <00:34:16.600>available <00:34:16.800>which

674
00:34:18.600 --> 00:34:20.400
<00:34:18.600>are <00:34:18.833>you <00:34:19.066>find <00:34:19.299>above? <00:34:19.533>So <00:34:19.766>very <00:34:20.000>simple.

675
00:34:21.900 --> 00:34:25.200
<00:34:21.900>And <00:34:22.055>what <00:34:22.211>I <00:34:22.366>would <00:34:22.522>do <00:34:22.677>now <00:34:22.833>is <00:34:22.988>to <00:34:23.144>start <00:34:23.300>implementing

676
00:34:24.200 --> 00:34:25.600
<00:34:24.199>my <00:34:25.460>language.

677
00:34:26.800 --> 00:34:28.800
<00:34:26.800>So <00:34:27.080>remove <00:34:27.360>the <00:34:27.640>seller <00:34:27.920>World <00:34:28.200>thing.

678
00:34:29.500 --> 00:34:32.900
<00:34:29.500>I <00:34:29.627>can <00:34:29.754>keep <00:34:29.881>everything <00:34:30.009>that <00:34:30.136>is <00:34:30.263>down <00:34:30.390>here. <00:34:30.518>These <00:34:30.645>are <00:34:30.772>terminal <00:34:30.900>definitions

679
00:34:32.900 --> 00:34:35.500
<00:34:32.900>that <00:34:33.075>quite <00:34:33.250>useful. <00:34:33.425>I <00:34:33.600>mean <00:34:33.775>you <00:34:33.950>can <00:34:34.125>Define <00:34:34.300>your

680
00:34:35.500 --> 00:34:38.300
<00:34:35.500>own <00:34:35.655>terminals. <00:34:35.811>So <00:34:35.966>terminals <00:34:36.122>are <00:34:36.277>tokens <00:34:36.433>that <00:34:36.588>you <00:34:36.744>can <00:34:36.900>Define

681
00:34:38.300 --> 00:34:38.600
yourself.

682
00:34:39.500 --> 00:34:42.600
<00:34:39.500>That <00:34:39.780>describes <00:34:40.060>some <00:34:40.340>piece <00:34:40.620>of <00:34:40.900>text

683
00:34:42.600 --> 00:34:45.500
<00:34:42.600>in <00:34:42.799>your <00:34:43.000>input <00:34:43.199>that <00:34:43.400>should <00:34:43.600>be <00:34:43.799>processed <00:34:44.000>as

684
00:34:45.500 --> 00:34:48.400
<00:34:45.500>a <00:34:45.655>whole <00:34:45.811>like <00:34:45.966>in <00:34:46.122>identifier <00:34:46.277>for <00:34:46.433>example <00:34:46.588>ID <00:34:46.744>or <00:34:46.900>an

685
00:34:48.400 --> 00:34:51.300
<00:34:48.400>integer <00:34:48.600>value <00:34:48.800>and <00:34:49.000>into <00:34:49.200>yeah, <00:34:49.400>so <00:34:49.600>so <00:34:49.800>the

686
00:34:51.300 --> 00:34:54.700
<00:34:51.300>fundamental <00:34:51.650>tokens <00:34:52.000>that <00:34:52.350>that <00:34:52.700>you

687
00:34:54.700 --> 00:34:56.200
<00:34:54.699>use <00:34:55.037>to <00:34:55.375>construct <00:34:55.712>your <00:34:56.049>language.

688
00:34:57.200 --> 00:35:00.200
<00:34:57.200>And <00:34:57.339>yeah, <00:34:57.480>then <00:34:57.620>you <00:34:57.759>would <00:34:57.899>start <00:34:58.040>defining <00:34:58.180>your <00:34:58.319>language. <00:34:58.460>So <00:34:58.600>let's

689
00:35:00.200 --> 00:35:02.000
<00:35:00.200>call <00:35:00.666>the <00:35:01.133>entry <00:35:01.600>rule.

690
00:35:02.900 --> 00:35:03.800
<00:35:02.900>compute <00:35:03.710>boards

691
00:35:06.400 --> 00:35:09.300
<00:35:06.400>and <00:35:06.750>it <00:35:07.100>can <00:35:07.450>have <00:35:07.800>computations.

692
00:35:17.200 --> 00:35:19.900
<00:35:17.200>so <00:35:17.433>many <00:35:17.666>computations <00:35:17.899>and <00:35:18.133>it <00:35:18.366>can <00:35:18.600>have

693
00:35:20.900 --> 00:35:21.700
<00:35:20.900>a <00:35:21.620>boards

694
00:35:25.600 --> 00:35:27.900
<00:35:25.600>Now <00:35:25.799>I <00:35:26.000>have <00:35:26.200>to <00:35:26.400>Define <00:35:26.600>these <00:35:26.799>other <00:35:27.000>rules.

695
00:35:30.500 --> 00:35:33.300
<00:35:30.500>So <00:35:30.655>a <00:35:30.811>computation <00:35:30.966>could <00:35:31.122>start <00:35:31.277>with <00:35:31.433>a <00:35:31.588>keyword. <00:35:31.744>Let's <00:35:31.900>say

696
00:35:33.300 --> 00:35:33.900
comp.

697
00:35:35.100 --> 00:35:37.100
<00:35:35.100>And <00:35:35.333>a <00:35:35.566>computation <00:35:35.799>should <00:35:36.033>have <00:35:36.266>a <00:35:36.500>name.

698
00:35:38.400 --> 00:35:42.200
<00:35:38.400>that's <00:35:38.555>something <00:35:38.711>that <00:35:38.866>happens <00:35:39.022>quite <00:35:39.177>often, <00:35:39.333>of <00:35:39.488>course, <00:35:39.644>and <00:35:39.800>then

699
00:35:41.200 --> 00:35:44.100
<00:35:41.200>let's <00:35:41.433>say <00:35:41.666>it <00:35:41.899>could <00:35:42.133>have <00:35:42.366>parameters <00:35:42.600>so

700
00:35:45.100 --> 00:35:47.700
<00:35:45.100>a <00:35:45.450>opening <00:35:45.799>and <00:35:46.150>closing <00:35:46.500>parenthesis

701
00:35:48.600 --> 00:35:52.000
<00:35:48.600>These <00:35:48.727>are <00:35:48.854>written <00:35:48.981>in <00:35:49.109>the <00:35:49.236>same <00:35:49.363>way <00:35:49.490>as <00:35:49.618>other <00:35:49.745>keywords <00:35:49.872>and <00:35:50.000>the

702
00:35:51.500 --> 00:35:53.200
<00:35:51.500>parameters <00:35:52.900>themselves.

703
00:35:54.300 --> 00:35:57.700
<00:35:54.300>Could <00:35:54.500>be <00:35:54.700>an <00:35:54.900>array <00:35:55.100>again <00:35:55.300>plus <00:35:55.500>equal <00:35:55.700>parameter.

704
00:35:58.800 --> 00:36:01.400
<00:35:58.800>Star. <00:35:59.080>Well, <00:35:59.360>this <00:35:59.640>is <00:35:59.920>not <00:36:00.200>exactly

705
00:36:01.400 --> 00:36:04.700
<00:36:01.400>what <00:36:01.555>you <00:36:01.711>would <00:36:01.866>usually <00:36:02.022>expect. <00:36:02.177>So <00:36:02.333>normally <00:36:02.488>would <00:36:02.644>separate <00:36:02.800>these

706
00:36:04.700 --> 00:36:07.500
<00:36:04.700>parameters <00:36:04.980>with <00:36:05.259>a <00:36:05.540>comma <00:36:05.819>that's <00:36:06.100>also

707
00:36:07.500 --> 00:36:08.100
<00:36:07.500>doable <00:36:08.040>but

708
00:36:09.300 --> 00:36:11.100
<00:36:09.300>I'll <00:36:09.533>leave <00:36:09.766>that <00:36:10.000>off <00:36:10.233>for <00:36:10.466>Simplicity <00:36:10.700>here.

709
00:36:11.900 --> 00:36:14.300
<00:36:11.900>And <00:36:12.133>then <00:36:12.366>let's <00:36:12.600>say <00:36:12.833>in <00:36:13.066>equal <00:36:13.300>sign

710
00:36:14.300 --> 00:36:17.900
<00:36:14.300>and <00:36:14.650>an <00:36:15.000>expression <00:36:15.350>to <00:36:15.700>implement

711
00:36:17.900 --> 00:36:18.600
<00:36:17.900>the <00:36:18.529>computation.

712
00:36:19.400 --> 00:36:20.800
<00:36:19.400>so <00:36:19.820>an <00:36:20.240>expression <00:36:20.660>equal

713
00:36:21.700 --> 00:36:22.300
expression

714
00:36:23.600 --> 00:36:23.700
so

715
00:36:25.400 --> 00:36:26.500
<00:36:25.400>then <00:36:25.647>what <00:36:25.895>is <00:36:26.142>an <00:36:26.390>expression?

716
00:36:29.500 --> 00:36:31.100
<00:36:29.500>It <00:36:29.850>could <00:36:30.200>be <00:36:30.550>an <00:36:30.900>operation.

717
00:36:33.100 --> 00:36:36.400
<00:36:33.100>Or <00:36:33.275>so <00:36:33.450>pipe <00:36:33.625>means <00:36:33.799>in <00:36:33.975>alternative <00:36:34.150>between <00:36:34.325>different <00:36:34.500>things

718
00:36:36.400 --> 00:36:38.900
<00:36:36.400>and <00:36:36.750>operation <00:36:37.100>or <00:36:37.450>in <00:36:37.800>number.

719
00:36:40.400 --> 00:36:42.400
<00:36:40.400>or <00:36:40.866>a <00:36:41.333>parameter <00:36:41.800>reference

720
00:36:43.800 --> 00:36:46.300
<00:36:43.800>param <00:36:44.150>reference. <00:36:44.500>So <00:36:44.850>using <00:36:45.200>a

721
00:36:46.300 --> 00:36:48.600
<00:36:46.300>parameter <00:36:46.533>that <00:36:46.766>is <00:36:47.000>defined <00:36:47.233>in <00:36:47.466>the <00:36:47.700>computation.

722
00:36:50.100 --> 00:36:52.300
<00:36:50.100>and <00:36:51.500>operation

723
00:36:54.100 --> 00:36:57.200
<00:36:54.100>so <00:36:54.255>yeah, <00:36:54.411>now <00:36:54.566>it <00:36:54.722>becomes <00:36:54.877>interesting. <00:36:55.033>Usually <00:36:55.188>you <00:36:55.344>would <00:36:55.500>write

724
00:36:57.200 --> 00:37:01.200
<00:36:57.200>operations <00:36:57.375>with <00:36:57.549>an <00:36:57.725>infinix <00:36:57.899>notation. <00:36:58.075>So <00:36:58.250>meaning <00:36:58.424>number <00:36:58.600>one

725
00:37:00.200 --> 00:37:04.100
<00:37:00.200>plus <00:37:00.549>number <00:37:00.899>two, <00:37:01.250>that's <00:37:01.600>much

726
00:37:03.100 --> 00:37:07.200
<00:37:03.100>harder <00:37:03.275>to <00:37:03.450>parse <00:37:03.625>than <00:37:03.799>you <00:37:03.975>would <00:37:04.150>expect <00:37:04.325>and <00:37:04.500>it's

727
00:37:06.200 --> 00:37:09.200
<00:37:06.200>possible <00:37:06.355>of <00:37:06.511>course, <00:37:06.666>but <00:37:06.822>for <00:37:06.977>Simplicity <00:37:07.133>here, <00:37:07.288>I <00:37:07.444>would <00:37:07.600>use

728
00:37:09.200 --> 00:37:12.600
<00:37:09.200>a <00:37:09.433>prefix <00:37:09.666>notation <00:37:09.899>using <00:37:10.133>meaning <00:37:10.366>I <00:37:10.600>first

729
00:37:12.600 --> 00:37:13.400
<00:37:12.600>write <00:37:12.960>an <00:37:13.320>operator.

730
00:37:17.700 --> 00:37:19.300
<00:37:17.700>then <00:37:18.166>the <00:37:18.633>first <00:37:19.100>operand

731
00:37:23.100 --> 00:37:26.400
<00:37:23.100>Which <00:37:23.227>is <00:37:23.354>again <00:37:23.481>an <00:37:23.609>expression. <00:37:23.736>So <00:37:23.863>here <00:37:23.990>I <00:37:24.118>can <00:37:24.245>have <00:37:24.372>recursion <00:37:24.500>in

732
00:37:26.400 --> 00:37:28.600
<00:37:26.400>my <00:37:26.680>definitions <00:37:26.960>and <00:37:27.240>the <00:37:27.520>second <00:37:27.800>operand.

733
00:37:29.800 --> 00:37:31.000
<00:37:29.800>It <00:37:30.016>can <00:37:30.232>also <00:37:30.448>be <00:37:30.664>an <00:37:30.880>expression.

734
00:37:33.400 --> 00:37:34.300
<00:37:33.400>and <00:37:34.210>operator

735
00:37:36.300 --> 00:37:38.900
<00:37:36.300>let's <00:37:36.533>define <00:37:36.766>that <00:37:37.000>as <00:37:37.233>a <00:37:37.466>string <00:37:37.700>returns.

736
00:37:41.500 --> 00:37:44.500
<00:37:41.500>String <00:37:41.733>and <00:37:41.966>let's <00:37:42.200>make <00:37:42.433>it <00:37:42.666>easy <00:37:42.900>and

737
00:37:44.500 --> 00:37:45.600
<00:37:44.500>just <00:37:44.698>say <00:37:44.896>it <00:37:45.094>can <00:37:45.292>be <00:37:45.490>add.

738
00:37:49.300 --> 00:37:50.600
<00:37:49.300>or <00:37:50.470>sub

739
00:37:51.900 --> 00:37:53.600
<00:37:51.900>or <00:37:53.300>Mull

740
00:37:54.500 --> 00:37:55.500
<00:37:54.500>or <00:37:55.400>div

741
00:38:01.300 --> 00:38:02.000
<00:38:01.300>and <00:38:01.615>a <00:38:01.930>number

742
00:38:04.300 --> 00:38:05.500
<00:38:04.300>would <00:38:04.570>just <00:38:04.840>have <00:38:05.110>a <00:38:05.380>value.

743
00:38:07.100 --> 00:38:07.800
<00:38:07.100>as <00:38:07.415>an <00:38:07.730>integer

744
00:38:09.400 --> 00:38:10.600
<00:38:09.400>and <00:38:09.760>a <00:38:10.120>parameter <00:38:10.480>reference.

745
00:38:16.100 --> 00:38:17.400
<00:38:16.100>Is <00:38:16.392>just <00:38:16.685>a <00:38:16.977>cross <00:38:17.270>reference?

746
00:38:18.800 --> 00:38:19.400
param

747
00:38:20.500 --> 00:38:21.900
<00:38:20.500>to <00:38:20.920>an <00:38:21.340>existing <00:38:21.760>parameter

748
00:38:24.300 --> 00:38:27.000
<00:38:24.300>And <00:38:24.455>the <00:38:24.611>parameter <00:38:24.766>is <00:38:24.922>what <00:38:25.077>I <00:38:25.233>have <00:38:25.388>what <00:38:25.544>I <00:38:25.700>can

749
00:38:27.200 --> 00:38:30.300
<00:38:27.200>Define <00:38:27.316>here <00:38:27.433>and <00:38:27.549>now <00:38:27.666>I <00:38:27.783>would <00:38:27.899>have <00:38:28.016>to <00:38:28.133>go <00:38:28.250>on <00:38:28.366>and <00:38:28.483>also <00:38:28.600>Define.

750
00:38:30.300 --> 00:38:33.200
<00:38:30.300>How <00:38:30.475>do <00:38:30.650>I <00:38:30.825>write <00:38:31.000>a <00:38:31.175>parameter <00:38:31.350>in <00:38:31.525>the <00:38:31.700>easiest

751
00:38:33.200 --> 00:38:36.600
<00:38:33.200>case? <00:38:33.355>It <00:38:33.511>would <00:38:33.666>be <00:38:33.822>just <00:38:33.977>a <00:38:34.133>simple <00:38:34.288>ID <00:38:34.444>with <00:38:34.600>a

752
00:38:36.600 --> 00:38:36.700
name.

753
00:38:37.600 --> 00:38:39.000
<00:38:37.600>But <00:38:37.852>you <00:38:38.104>could <00:38:38.356>also <00:38:38.608>Define <00:38:38.860>types.

754
00:38:40.200 --> 00:38:43.700
<00:38:40.200>But <00:38:40.327>so <00:38:40.454>if <00:38:40.581>the <00:38:40.709>language <00:38:40.836>has <00:38:40.963>only <00:38:41.090>numbers, <00:38:41.218>maybe <00:38:41.345>it's <00:38:41.472>not <00:38:41.600>necessary

755
00:38:43.700 --> 00:38:44.500
<00:38:43.700>to <00:38:44.060>Define <00:38:44.420>types.

756
00:38:45.600 --> 00:38:48.400
<00:38:45.600>so <00:38:45.740>this <00:38:45.880>is <00:38:46.020>just <00:38:46.160>to <00:38:46.299>give <00:38:46.440>an <00:38:46.580>idea <00:38:46.720>of <00:38:46.860>how <00:38:47.000>you

757
00:38:48.400 --> 00:38:51.300
<00:38:48.400>you <00:38:48.750>do <00:38:49.100>this <00:38:49.450>defining <00:38:49.800>your

758
00:38:51.300 --> 00:38:54.500
<00:38:51.300>language <00:38:51.427>and <00:38:51.554>then <00:38:51.681>you <00:38:51.809>have <00:38:51.936>to <00:38:52.063>Define <00:38:52.190>all <00:38:52.318>your <00:38:52.445>rules <00:38:52.572>and <00:38:52.700>we

759
00:38:54.500 --> 00:38:55.100
get

760
00:38:56.200 --> 00:38:59.900
<00:38:56.200>A <00:38:56.307>type <00:38:56.415>definitions <00:38:56.523>from <00:38:56.630>all <00:38:56.738>these <00:38:56.846>rules <00:38:56.953>and <00:38:57.061>then <00:38:57.169>we <00:38:57.276>can <00:38:57.384>start <00:38:57.492>implementing <00:38:57.600>everything

761
00:38:59.900 --> 00:39:00.500
<00:38:59.900>else <00:39:00.170>on <00:39:00.440>that.

762
00:39:05.400 --> 00:39:05.700
Okay.

763
00:39:08.900 --> 00:39:09.400
<00:39:08.900>Yeah, <00:39:09.350>that's

764
00:39:10.500 --> 00:39:14.100
<00:39:10.500>it <00:39:10.733>for <00:39:10.966>the <00:39:11.200>main <00:39:11.433>part <00:39:11.666>and <00:39:11.900>if

765
00:39:13.100 --> 00:39:15.000
<00:39:13.100>you <00:39:13.799>have <00:39:14.500>questions.

766
00:39:17.200 --> 00:39:18.200
<00:39:17.200>We <00:39:17.424>can <00:39:17.649>address <00:39:17.875>them <00:39:18.100>now.

767
00:39:27.300 --> 00:39:30.400
<00:39:27.300>Thank <00:39:27.416>you. <00:39:27.533>Thank <00:39:27.650>you <00:39:27.766>for <00:39:27.883>the <00:39:28.000>amazing <00:39:28.116>presentation. <00:39:28.233>We <00:39:28.350>have <00:39:28.466>a <00:39:28.583>few <00:39:28.700>questions

768
00:39:30.400 --> 00:39:34.100
<00:39:30.400>in <00:39:30.555>the <00:39:30.711>Q&amp;A <00:39:30.866>section. <00:39:31.022>The <00:39:31.177>first <00:39:31.333>one <00:39:31.488>is <00:39:31.644>which <00:39:31.800>IDs

769
00:39:33.100 --> 00:39:35.500
<00:39:33.100>have <00:39:33.566>extension <00:39:34.033>for <00:39:34.500>language.

770
00:39:37.500 --> 00:39:40.900
<00:39:37.500>Which <00:39:37.966>Ides? <00:39:38.433>Okay. <00:39:38.900>So

771
00:39:40.900 --> 00:39:43.600
<00:39:40.900>which <00:39:41.180>IDE <00:39:41.460>is <00:39:41.740>support <00:39:42.020>working <00:39:42.300>with

772
00:39:43.600 --> 00:39:45.300
<00:39:43.600>the <00:39:43.799>lanky? <00:39:44.000>I'm <00:39:44.200>currently <00:39:44.400>it's <00:39:44.600>only <00:39:44.799>via <00:39:45.000>code.

773
00:39:46.400 --> 00:39:49.400
<00:39:46.400>So <00:39:46.600>that <00:39:46.800>we <00:39:47.000>have <00:39:47.200>a <00:39:47.400>language <00:39:47.600>server <00:39:47.800>for

774
00:39:49.400 --> 00:39:53.200
<00:39:49.400>the <00:39:49.633>language <00:39:49.866>grammar <00:39:50.100>language, <00:39:50.333>which <00:39:50.566>is <00:39:50.800>available

775
00:39:52.200 --> 00:39:54.400
<00:39:52.200>as <00:39:52.549>a <00:39:52.899>vs <00:39:53.250>code <00:39:53.600>extension.

776
00:39:55.200 --> 00:39:58.200
<00:39:55.200>But <00:39:55.339>you <00:39:55.480>can <00:39:55.620>use <00:39:55.759>that <00:39:55.899>same <00:39:56.040>vs <00:39:56.180>code <00:39:56.319>extension <00:39:56.460>also <00:39:56.600>in

777
00:39:58.200 --> 00:40:01.800
<00:39:58.200>fear, <00:39:58.327>which <00:39:58.454>I <00:39:58.581>mentioned <00:39:58.709>before <00:39:58.836>so <00:39:58.963>that's <00:39:59.090>a <00:39:59.218>different <00:39:59.345>IDE. <00:39:59.472>And <00:39:59.600>I

778
00:40:01.800 --> 00:40:04.400
<00:40:01.800>think <00:40:02.000>there <00:40:02.200>are <00:40:02.400>also <00:40:02.600>other <00:40:02.800>tools <00:40:03.000>that <00:40:03.200>support

779
00:40:04.400 --> 00:40:07.000
<00:40:04.400>the <00:40:04.575>views <00:40:04.750>could <00:40:04.925>extension <00:40:05.100>format. <00:40:05.275>But <00:40:05.450>as <00:40:05.625>I <00:40:05.800>mentioned

780
00:40:07.300 --> 00:40:10.500
<00:40:07.300>before <00:40:07.580>it <00:40:07.860>would <00:40:08.140>be <00:40:08.420>relatively <00:40:08.700>easy

781
00:40:10.500 --> 00:40:10.900
to

782
00:40:11.900 --> 00:40:15.300
<00:40:11.900>take <00:40:12.100>that <00:40:12.300>same <00:40:12.500>language <00:40:12.700>server <00:40:12.900>and <00:40:13.100>for <00:40:13.300>the

783
00:40:15.300 --> 00:40:18.200
<00:40:15.300>grammar <00:40:15.500>language <00:40:15.700>of <00:40:15.900>langium <00:40:16.100>and <00:40:16.300>integrate <00:40:16.500>that <00:40:16.700>in

784
00:40:18.200 --> 00:40:21.500
<00:40:18.200>other <00:40:18.355>ideas <00:40:18.511>that <00:40:18.666>support <00:40:18.822>the <00:40:18.977>language <00:40:19.133>of <00:40:19.288>our <00:40:19.444>protocol <00:40:19.600>like

785
00:40:21.500 --> 00:40:22.800
<00:40:21.500>Eclipse <00:40:21.890>IDE, <00:40:22.280>for <00:40:22.670>example

786
00:40:23.800 --> 00:40:26.500
<00:40:23.800>So <00:40:24.080>this <00:40:24.360>because <00:40:24.640>the <00:40:24.920>langhum <00:40:25.200>grammar

787
00:40:26.500 --> 00:40:29.700
<00:40:26.500>language <00:40:26.700>itself <00:40:26.900>is <00:40:27.100>done <00:40:27.300>with <00:40:27.500>langium <00:40:27.700>everything <00:40:27.900>that

788
00:40:29.700 --> 00:40:32.500
<00:40:29.700>applies <00:40:29.933>to <00:40:30.166>to <00:40:30.399>the <00:40:30.633>langhum <00:40:30.866>grammar <00:40:31.100>language

789
00:40:32.500 --> 00:40:34.200
<00:40:32.500>also <00:40:32.850>applies <00:40:33.200>to <00:40:33.550>your <00:40:33.900>own.

790
00:40:35.500 --> 00:40:36.700
<00:40:35.500>language <00:40:35.860>that <00:40:36.220>you <00:40:36.580>make

791
00:40:37.900 --> 00:40:40.500
<00:40:37.900>Thank <00:40:38.180>you <00:40:38.460>and <00:40:38.740>has <00:40:39.020>langium <00:40:39.300>included

792
00:40:40.500 --> 00:40:43.500
<00:40:40.500>supports <00:40:40.733>for <00:40:40.966>tsdoc <00:40:41.200>or <00:40:41.433>other <00:40:41.666>documentation <00:40:41.900>languages?

793
00:40:44.500 --> 00:40:47.900
<00:40:44.500>if <00:40:44.850>again <00:40:45.200>for <00:40:45.550>TS <00:40:45.900>doc

794
00:40:47.900 --> 00:40:51.000
<00:40:47.900>or <00:40:48.180>other <00:40:48.460>documentation <00:40:48.740>languages <00:40:49.020>documentation <00:40:49.300>languages

795
00:40:54.200 --> 00:40:57.300
<00:40:54.200>Not <00:40:54.433>directly. <00:40:54.666>So <00:40:54.899>I'm <00:40:55.133>not <00:40:55.366>sure <00:40:55.600>in

796
00:40:57.300 --> 00:41:00.300
<00:40:57.300>what <00:40:57.500>how <00:40:57.700>that <00:40:57.900>would <00:40:58.100>be <00:40:58.300>used. <00:40:58.500>I <00:40:58.700>mean

797
00:41:00.300 --> 00:41:00.700
<00:41:00.300>it <00:41:00.660>depends.

798
00:41:03.500 --> 00:41:06.200
<00:41:03.500>Yeah, <00:41:03.675>not <00:41:03.850>sure <00:41:04.025>how <00:41:04.200>the <00:41:04.375>question <00:41:04.550>is <00:41:04.725>is <00:41:04.900>meant.

799
00:41:08.900 --> 00:41:11.900
<00:41:08.900>I <00:41:09.133>mean <00:41:09.366>or <00:41:09.600>so <00:41:09.833>you <00:41:10.066>mean <00:41:10.300>a

800
00:41:11.900 --> 00:41:15.400
<00:41:11.900>TS <00:41:12.075>talk <00:41:12.250>to <00:41:12.425>me <00:41:12.600>meaning <00:41:12.775>in <00:41:12.950>line <00:41:13.125>comments <00:41:13.300>probably

801
00:41:15.400 --> 00:41:17.400
<00:41:15.400>like <00:41:15.866>like <00:41:16.333>with <00:41:16.800>tags.

802
00:41:19.800 --> 00:41:21.800
<00:41:19.800>and <00:41:20.150>if <00:41:20.500>that's <00:41:20.850>meant <00:41:21.200>then

803
00:41:24.300 --> 00:41:24.900
yes.

804
00:41:26.700 --> 00:41:29.100
<00:41:26.700>so <00:41:27.166>partially <00:41:27.633>at <00:41:28.100>least

805
00:41:29.100 --> 00:41:30.600
<00:41:29.100>so <00:41:29.437>I <00:41:29.775>can <00:41:30.112>write <00:41:30.450>a

806
00:41:32.800 --> 00:41:35.300
<00:41:32.800>a <00:41:33.033>common <00:41:33.266>starting <00:41:33.500>with <00:41:33.733>a <00:41:33.966>slash <00:41:34.200>star

807
00:41:35.300 --> 00:41:38.200
<00:41:35.300>star. <00:41:35.427>So <00:41:35.554>like <00:41:35.681>you <00:41:35.809>know <00:41:35.936>it <00:41:36.063>from <00:41:36.190>I <00:41:36.318>think <00:41:36.445>TS <00:41:36.572>dark <00:41:36.700>and

808
00:41:38.200 --> 00:41:40.100
<00:41:38.200>JS <00:41:38.399>and <00:41:38.600>Java <00:41:38.799>doc <00:41:39.000>are <00:41:39.200>the <00:41:39.399>same <00:41:39.600>here.

809
00:41:42.200 --> 00:41:45.600
<00:41:42.200>And <00:41:42.355>now <00:41:42.511>if <00:41:42.666>I <00:41:42.822>hover <00:41:42.977>over <00:41:43.133>this <00:41:43.288>I <00:41:43.444>see <00:41:43.600>the

810
00:41:45.600 --> 00:41:47.500
<00:41:45.600>comment <00:41:45.799>or <00:41:46.000>if <00:41:46.200>I <00:41:46.400>do <00:41:46.600>the <00:41:46.799>same <00:41:47.000>for

811
00:41:48.700 --> 00:41:51.600
<00:41:48.700>Another <00:41:49.049>rule <00:41:49.399>here. <00:41:49.750>I <00:41:50.100>can

812
00:41:51.600 --> 00:41:54.700
<00:41:51.600>see <00:41:51.740>this <00:41:51.880>this <00:41:52.020>comment <00:41:52.160>when <00:41:52.299>I <00:41:52.440>have <00:41:52.580>on <00:41:52.720>that. <00:41:52.860>So <00:41:53.000>yes

813
00:41:54.700 --> 00:41:55.900
<00:41:54.700>partially <00:41:55.060>it <00:41:55.420>is <00:41:55.780>supported.

814
00:41:58.100 --> 00:42:01.600
<00:41:58.100>But <00:41:58.255>that's <00:41:58.411>something <00:41:58.566>if <00:41:58.722>you <00:41:58.877>need <00:41:59.033>to <00:41:59.188>support <00:41:59.344>tags, <00:41:59.500>like

815
00:42:01.600 --> 00:42:04.600
<00:42:01.600>you <00:42:01.755>know <00:42:01.911>that <00:42:02.066>from <00:42:02.222>TS <00:42:02.377>stock <00:42:02.533>or <00:42:02.688>Java <00:42:02.844>doc. <00:42:03.000>That's

816
00:42:04.600 --> 00:42:07.400
<00:42:04.600>something <00:42:04.727>you <00:42:04.854>would <00:42:04.981>need <00:42:05.109>to <00:42:05.236>implement <00:42:05.363>for <00:42:05.490>your <00:42:05.618>language <00:42:05.745>because <00:42:05.872>that's <00:42:06.000>of

817
00:42:07.400 --> 00:42:08.200
<00:42:07.400>course <00:42:07.759>language <00:42:08.120>specific.

818
00:42:10.400 --> 00:42:10.600
<00:42:10.400>Thank <00:42:10.580>you.

819
00:42:17.800 --> 00:42:20.300
<00:42:17.800>Eclipse <00:42:18.033>Universe, <00:42:18.266>how <00:42:18.500>can <00:42:18.733>we <00:42:18.966>avoid <00:42:19.200>to

820
00:42:20.300 --> 00:42:22.700
<00:42:20.300>getting <00:42:20.475>stuck <00:42:20.650>in <00:42:20.825>one <00:42:21.000>technology? <00:42:21.175>We <00:42:21.350>are <00:42:21.525>Scott <00:42:21.700>again?

821
00:42:25.200 --> 00:42:28.500
<00:42:25.200>Yes, <00:42:25.355>so <00:42:25.511>that's <00:42:25.666>a <00:42:25.822>very <00:42:25.977>good <00:42:26.133>question. <00:42:26.288>So <00:42:26.444>X <00:42:26.600>text

822
00:42:28.500 --> 00:42:31.800
<00:42:28.500>is <00:42:28.675>another <00:42:28.850>technology <00:42:29.025>for <00:42:29.200>language <00:42:29.375>engineering <00:42:29.550>that <00:42:29.725>originally <00:42:29.900>started

823
00:42:31.800 --> 00:42:34.700
<00:42:31.800>by <00:42:32.000>the <00:42:32.200>same <00:42:32.400>people <00:42:32.600>that <00:42:32.800>found <00:42:33.000>a <00:42:33.200>typefox.

824
00:42:34.700 --> 00:42:36.000
<00:42:34.700>So <00:42:35.089>it's <00:42:35.480>also <00:42:35.870>from

825
00:42:37.400 --> 00:42:41.300
<00:42:37.400>from <00:42:37.600>the <00:42:37.800>same <00:42:38.000>context <00:42:38.200>and <00:42:38.400>that's <00:42:38.600>fully <00:42:38.800>built

826
00:42:41.300 --> 00:42:44.200
<00:42:41.300>on <00:42:41.533>Java <00:42:41.766>and <00:42:42.000>Eclipse <00:42:42.233>modeling <00:42:42.466>Frameworks. <00:42:42.700>So

827
00:42:44.200 --> 00:42:44.900
<00:42:44.200>that's <00:42:44.830>it.

828
00:42:45.400 --> 00:42:48.300
<00:42:45.400>a <00:42:45.750>very <00:42:46.100>complex <00:42:46.450>tool <00:42:46.800>set

829
00:42:48.300 --> 00:42:51.300
<00:42:48.300>to <00:42:48.650>from <00:42:49.000>modeling <00:42:49.350>basically <00:42:49.700>and

830
00:42:52.400 --> 00:42:55.200
<00:42:52.400>so <00:42:52.633>actually <00:42:52.866>one <00:42:53.100>idea <00:42:53.333>behind <00:42:53.566>langium <00:42:53.800>was

831
00:42:55.200 --> 00:42:58.400
<00:42:55.200>to <00:42:55.375>create <00:42:55.549>something <00:42:55.725>that <00:42:55.899>you <00:42:56.075>can <00:42:56.250>use <00:42:56.424>with <00:42:56.600>a

832
00:42:58.400 --> 00:43:01.800
<00:42:58.400>consistent <00:42:58.680>technology <00:42:58.960>stack <00:42:59.240>because <00:42:59.520>we <00:42:59.800>have

833
00:43:01.800 --> 00:43:04.600
<00:43:01.800>been <00:43:02.150>building <00:43:02.500>a <00:43:02.850>tools <00:43:03.200>based

834
00:43:04.600 --> 00:43:07.900
<00:43:04.600>on <00:43:04.775>vs <00:43:04.950>code <00:43:05.125>VR <00:43:05.299>and <00:43:05.475>other <00:43:05.650>typescript <00:43:05.825>based <00:43:06.000>framework

835
00:43:07.900 --> 00:43:09.900
<00:43:07.900>for <00:43:08.366>several <00:43:08.833>years <00:43:09.300>now.

836
00:43:10.500 --> 00:43:13.300
<00:43:10.500>And <00:43:10.733>it's <00:43:10.966>it <00:43:11.200>is <00:43:11.433>possible, <00:43:11.666>of <00:43:11.900>course

837
00:43:13.300 --> 00:43:16.200
<00:43:13.300>to <00:43:13.475>use <00:43:13.650>things <00:43:13.825>like <00:43:14.000>X <00:43:14.175>Tax <00:43:14.350>or <00:43:14.525>a <00:43:14.700>Java

838
00:43:16.200 --> 00:43:19.300
<00:43:16.200>implementation <00:43:16.316>of <00:43:16.433>a <00:43:16.549>language <00:43:16.666>server <00:43:16.783>in <00:43:16.899>the <00:43:17.016>back <00:43:17.133>end <00:43:17.250>and <00:43:17.366>connect <00:43:17.483>that <00:43:17.600>with

839
00:43:19.300 --> 00:43:22.500
<00:43:19.300>such <00:43:19.533>a <00:43:19.766>typescript-based <00:43:20.000>tool <00:43:20.233>because <00:43:20.466>they <00:43:20.700>just

840
00:43:22.500 --> 00:43:25.500
<00:43:22.500>have <00:43:22.700>to <00:43:22.900>speak <00:43:23.100>Jason <00:43:23.300>RPC <00:43:23.500>but <00:43:23.700>it's <00:43:23.900>not

841
00:43:25.500 --> 00:43:28.900
<00:43:25.500>optimal <00:43:25.655>in <00:43:25.811>my <00:43:25.966>experience <00:43:26.122>because <00:43:26.277>you <00:43:26.433>have <00:43:26.588>two <00:43:26.744>technologies <00:43:26.900>Stacks.

842
00:43:28.900 --> 00:43:31.300
<00:43:28.900>There's <00:43:29.180>totally <00:43:29.460>incompatible. <00:43:29.740>So <00:43:30.020>I <00:43:30.300>mean

843
00:43:31.300 --> 00:43:34.900
<00:43:31.300>they <00:43:31.533>speak <00:43:31.766>this <00:43:32.000>Json <00:43:32.233>protocol, <00:43:32.466>but <00:43:32.700>you

844
00:43:34.900 --> 00:43:37.200
<00:43:34.900>have <00:43:35.055>to <00:43:35.211>build <00:43:35.366>the <00:43:35.522>language <00:43:35.677>server <00:43:35.833>as <00:43:35.988>a <00:43:36.144>Java <00:43:36.300>project

845
00:43:37.200 --> 00:43:40.800
<00:43:37.200>you <00:43:37.316>use <00:43:37.433>Maven <00:43:37.549>or <00:43:37.666>Gradle <00:43:37.783>and <00:43:37.899>you <00:43:38.016>have <00:43:38.133>to <00:43:38.250>publish <00:43:38.366>it <00:43:38.483>somehow <00:43:38.600>like

846
00:43:40.800 --> 00:43:43.400
<00:43:40.800>you <00:43:41.033>like <00:43:41.266>you <00:43:41.500>build <00:43:41.733>and <00:43:41.966>publish <00:43:42.200>Java

847
00:43:43.400 --> 00:43:47.300
<00:43:43.400>projects <00:43:43.555>and <00:43:43.711>then <00:43:43.866>you <00:43:44.022>have <00:43:44.177>this <00:43:44.333>npm <00:43:44.488>and <00:43:44.644>JavaScript <00:43:44.800>stack

848
00:43:46.300 --> 00:43:49.400
<00:43:46.300>where <00:43:46.650>you <00:43:47.000>use <00:43:47.350>completely <00:43:47.700>different

849
00:43:49.400 --> 00:43:52.200
<00:43:49.400>tools <00:43:49.680>to <00:43:49.960>bundle <00:43:50.240>and <00:43:50.520>package <00:43:50.800>and

850
00:43:52.200 --> 00:43:56.100
<00:43:52.200>publish. <00:43:52.480>And <00:43:52.759>so <00:43:53.040>this <00:43:53.319>these <00:43:53.600>two

851
00:43:55.100 --> 00:43:58.500
<00:43:55.100>technologies <00:43:55.380>Stacks <00:43:55.660>in <00:43:55.940>my <00:43:56.220>experience <00:43:56.500>creates

852
00:43:58.500 --> 00:44:01.200
<00:43:58.500>a <00:43:58.655>lot <00:43:58.811>of <00:43:58.966>overhead <00:43:59.122>for <00:43:59.277>the <00:43:59.433>development <00:43:59.588>team. <00:43:59.744>So <00:43:59.900>you

853
00:44:01.200 --> 00:44:04.500
<00:44:01.200>need <00:44:01.433>developers <00:44:01.666>who <00:44:01.899>are <00:44:02.133>really <00:44:02.366>deep <00:44:02.600>in

854
00:44:04.500 --> 00:44:07.200
<00:44:04.500>both <00:44:04.733>of <00:44:04.966>these <00:44:05.200>Technologies <00:44:05.433>and <00:44:05.666>who <00:44:05.900>are

855
00:44:07.200 --> 00:44:09.400
<00:44:07.200>able <00:44:07.375>to <00:44:07.549>handle <00:44:07.725>that <00:44:07.899>and <00:44:08.075>you <00:44:08.250>also <00:44:08.424>have <00:44:08.600>to

856
00:44:10.500 --> 00:44:14.100
<00:44:10.500>To <00:44:10.627>switch <00:44:10.754>mentally <00:44:10.881>quite <00:44:11.009>a <00:44:11.136>lot <00:44:11.263>when <00:44:11.390>you <00:44:11.518>when <00:44:11.645>you <00:44:11.772>switch <00:44:11.900>jump

857
00:44:13.100 --> 00:44:16.300
<00:44:13.100>from <00:44:13.255>one <00:44:13.411>language <00:44:13.566>to <00:44:13.722>the <00:44:13.877>other <00:44:14.033>and <00:44:14.188>so <00:44:14.344>by <00:44:14.500>using

858
00:44:16.300 --> 00:44:19.500
<00:44:16.300>langhum <00:44:16.440>instead <00:44:16.580>of <00:44:16.720>X <00:44:16.860>text <00:44:17.000>you <00:44:17.140>get <00:44:17.280>something <00:44:17.420>more <00:44:17.560>consistent <00:44:17.700>that

859
00:44:19.500 --> 00:44:20.500
<00:44:19.500>is <00:44:19.800>focused <00:44:20.100>on <00:44:20.400>typescript.

860
00:44:21.300 --> 00:44:23.700
<00:44:21.300>and <00:44:21.500>now <00:44:21.700>to <00:44:21.900>the <00:44:22.100>question <00:44:22.300>how <00:44:22.500>to <00:44:22.700>avoid

861
00:44:24.600 --> 00:44:28.400
<00:44:24.600>Again, <00:44:24.950>running <00:44:25.299>into <00:44:25.650>a <00:44:26.000>closed

862
00:44:27.400 --> 00:44:30.400
<00:44:27.400>ecosystem. <00:44:27.750>I <00:44:28.100>mean <00:44:28.450>of <00:44:28.800>that's

863
00:44:30.400 --> 00:44:33.200
<00:44:30.400>of <00:44:30.527>course <00:44:30.654>hard <00:44:30.781>to <00:44:30.909>solve. <00:44:31.036>I <00:44:31.163>mean <00:44:31.290>you <00:44:31.418>always <00:44:31.545>have <00:44:31.672>to <00:44:31.800>choose

864
00:44:33.200 --> 00:44:38.000
<00:44:33.200>a <00:44:33.433>technology <00:44:33.666>Foundation <00:44:33.899>like <00:44:34.133>a <00:44:34.366>platform <00:44:34.600>language

865
00:44:36.300 --> 00:44:40.400
<00:44:36.300>and <00:44:36.650>so <00:44:37.000>on <00:44:37.350>so <00:44:37.700>typescript

866
00:44:39.400 --> 00:44:43.300
<00:44:39.400>for <00:44:39.680>us <00:44:39.960>was <00:44:40.240>the <00:44:40.520>obvious <00:44:40.800>choice

867
00:44:42.300 --> 00:44:45.400
<00:44:42.300>for <00:44:42.580>now <00:44:42.860>because <00:44:43.140>it <00:44:43.420>as <00:44:43.700>I

868
00:44:45.400 --> 00:44:48.200
<00:44:45.400>said <00:44:45.575>before <00:44:45.750>it <00:44:45.925>is <00:44:46.100>the <00:44:46.275>foundation <00:44:46.450>for <00:44:46.625>many <00:44:46.800>of

869
00:44:48.200 --> 00:44:48.800
today's

870
00:44:49.900 --> 00:44:52.500
<00:44:49.900>Very <00:44:50.250>relevant <00:44:50.600>and <00:44:50.950>mostly <00:44:51.300>used

871
00:44:52.500 --> 00:44:55.600
<00:44:52.500>development <00:44:52.700>tools <00:44:52.900>like <00:44:53.100>vs <00:44:53.300>code. <00:44:53.500>And <00:44:53.700>and <00:44:53.900>we

872
00:44:55.600 --> 00:44:58.300
<00:44:55.600>see <00:44:55.755>that <00:44:55.911>used <00:44:56.066>a <00:44:56.222>lot <00:44:56.377>not <00:44:56.533>only <00:44:56.688>in <00:44:56.844>vs <00:44:57.000>code

873
00:44:58.300 --> 00:45:01.700
<00:44:58.300>itself <00:44:58.416>used <00:44:58.533>by <00:44:58.650>developers, <00:44:58.766>but <00:44:58.883>also <00:44:59.000>in <00:44:59.116>a <00:44:59.233>lot <00:44:59.350>of <00:44:59.466>other <00:44:59.583>online <00:44:59.700>tools,

874
00:45:01.700 --> 00:45:05.200
<00:45:01.700>so <00:45:01.933>the <00:45:02.166>Microsoft <00:45:02.399>has <00:45:02.633>published <00:45:02.866>code <00:45:03.100>spaces

875
00:45:04.200 --> 00:45:07.500
<00:45:04.200>as <00:45:04.480>an <00:45:04.759>online <00:45:05.040>IDE <00:45:05.319>or <00:45:05.600>online

876
00:45:07.500 --> 00:45:10.400
<00:45:07.500>vs <00:45:07.733>code <00:45:07.966>some <00:45:08.200>something <00:45:08.433>very <00:45:08.666>similar <00:45:08.900>is

877
00:45:10.400 --> 00:45:11.700
<00:45:10.400>available <00:45:10.985>from <00:45:11.569>gitpod.

878
00:45:12.400 --> 00:45:15.200
<00:45:12.400>And <00:45:12.600>and <00:45:12.800>other <00:45:13.000>online <00:45:13.200>ID <00:45:13.400>vendors, <00:45:13.600>so <00:45:13.800>they

879
00:45:15.200 --> 00:45:18.300
<00:45:15.200>take <00:45:15.480>these <00:45:15.759>typescript-based <00:45:16.040>Technologies <00:45:16.319>bring <00:45:16.600>them

880
00:45:18.300 --> 00:45:21.300
<00:45:18.300>to <00:45:18.500>the <00:45:18.700>cloud <00:45:18.900>and <00:45:19.100>you <00:45:19.300>can <00:45:19.500>they <00:45:19.700>are

881
00:45:21.300 --> 00:45:24.100
<00:45:21.300>all <00:45:21.500>so <00:45:21.700>a <00:45:21.900>lot <00:45:22.100>of <00:45:22.300>custom <00:45:22.500>deployments <00:45:22.700>of

882
00:45:24.100 --> 00:45:27.700
<00:45:24.100>these <00:45:24.240>tools <00:45:24.380>so <00:45:24.520>that <00:45:24.660>are <00:45:24.799>not <00:45:24.940>meant <00:45:25.080>for <00:45:25.220>general <00:45:25.360>purpose <00:45:25.500>programming

883
00:45:27.700 --> 00:45:29.500
<00:45:27.700>like <00:45:28.049>code <00:45:28.399>spaces <00:45:28.750>and <00:45:29.100>gitpod.

884
00:45:30.100 --> 00:45:32.100
<00:45:30.100>but <00:45:30.566>rather <00:45:31.033>specific <00:45:31.500>in

885
00:45:33.200 --> 00:45:37.000
<00:45:33.200>in <00:45:33.355>the <00:45:33.511>context <00:45:33.666>of <00:45:33.822>a <00:45:33.977>specific <00:45:34.133>product <00:45:34.288>or <00:45:34.444>domain <00:45:34.600>so

886
00:45:36.100 --> 00:45:39.900
<00:45:36.100>that's <00:45:36.255>also <00:45:36.411>possible. <00:45:36.566>And <00:45:36.722>so <00:45:36.877>we <00:45:37.033>see <00:45:37.188>this <00:45:37.344>technology <00:45:37.500>stack

887
00:45:39.900 --> 00:45:42.800
<00:45:39.900>as <00:45:40.055>something <00:45:40.211>that <00:45:40.366>is <00:45:40.522>super <00:45:40.677>relevant <00:45:40.833>for <00:45:40.988>the <00:45:41.144>today's <00:45:41.300>Cloud

888
00:45:42.800 --> 00:45:45.200
<00:45:42.800>era <00:45:43.000>where <00:45:43.200>a <00:45:43.400>lot <00:45:43.600>of <00:45:43.800>development <00:45:44.000>in <00:45:44.200>tooling

889
00:45:45.200 --> 00:45:47.800
<00:45:45.200>is <00:45:45.375>moving <00:45:45.549>away <00:45:45.725>from <00:45:45.899>desktop <00:45:46.075>applications <00:45:46.250>to <00:45:46.424>the <00:45:46.600>cloud.

890
00:45:51.600 --> 00:45:52.300
<00:45:51.600>Yeah. <00:45:51.810>Thanks <00:45:52.020>for <00:45:52.230>listening.