Ремесло программиста

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Ремесло программиста » Иные языки » Язык программирования Mash


Язык программирования Mash

Сообщений 1 страница 6 из 6

1

Проект лицензирован на основе BSD-2 текста лицензии

https://github.com/RoPi0n/mash-lang
На выходе байт-код, исполняемый ВМ.
Статьи на хабре с описанием его построения:
https://habr.com/en/users/ropi0n/posts/

2

Итак: FreePascal, 42 pas-файла, в которых около 15 тыс. строк (как и у Павиа), 2000 латинобуквосочетаний (3/4 массы - около 250, 1/2 массы - 65, половина всех дает 95% массы). 450 однократных, еще 300 - упоминаются дважды.
Частые однобуквенные: s,m,c,i. Основная лексика исходника:
1 Result 1096
2 begin 1299
3 procedure 617
4 sLineBreak 537
5 end 1657
6 then 1103
7 TSVMMem 483
8 reVarInvalidOp 230
9 else 789
10 varmgr 442
11 string 436
12 s 2460
13 function 288
14 if 1109
15 svmtWord 240
16 svmtReal 240
17 Delete 311
18 TokensStack 169
19 m_type 294
20 GetI 434
21 svmtStr 240
22 svmtInt 239
23 cardinal 205
24 GetW 367
25 TObject 207
26 self 358
27 Error 275
28 PreprocessArrAction 66
29 Sender 200
30 Length 191
31 Create 189
32 m_val 226
33 boolean 158
34 WriteByte 121
35 case 268
36 PreprocessVarAction 54
37 StrToFloat 96
38 PrpError 120
39 GetD 231
40 m 876
41 stack 174
42 Trim 211
43 GetS 211
44 TStringList 76
45 Stack 166
46 SetI 198
47 TVarManager 71
48 Count 152
49 SetB 186
50 GlobalEventCounter 41
51 length 122
52 popv 180
53 constructor 65
54 PageControl 64
55 var 231
56 EdtFrm 111
57 while 133
58 Lines 133
59 MenuItem 80
60 TInstructionPointer 33
61 of 306
62 push 148
63 top 197
64 TEditorFrame 49
65 Inc 196
66 BlockStack 58
67 SetD 144
68 and 189
69 pointer 77
70 writeln 75
71 ActivePageIndex 35
72 implementation 37
73 SetW 129
74 IntToStr 64
75 LocalVarPref 42
76 SynEdit 71
77 operation 53
78 GetProcName 43
79 True 116
80 CreateFW 58
81 FreeAndNil 46
82 TLFEvent 57
83 IndexOf 65
84 SetLength 50
85 PushIt 75
86 TMainFrm 56
87 value 89
88 pos 148
89 byte 110
90 IsArr 87
91 Add 143
92 Constants 47
93 or 211
94 PreprocessExpression 21
95 DefFile 60
96 FastPrep_Defines 26
97 exports 59
98 c 413
99 False 81
100 TMenuItem 44
101 pushai 64
102 copy 95
103 IsConst 54
104 Tk 186
105 i_pos 74
106 TCodeBlock 37
107 Click 73
108 StrToInt 45
109 PushEvent 40
110 GetConst 45
111 size 89
112 Outp 89
113 PCardinal 39
114 TStream 50
115 integer 49
116 PString 49
117 inherited 38
118 do 171
119 s1 169
120 inline 56
121 PStack 56
122 interface 37
123 TShiftState 30
124 Constant 41
125 TConstant 36
126 SchemeTreeView 23
127 SysUtils 40
128 FileExists 32
129 PMemArray 35
130 GetB 78
131 Cardinal 39
132 PushArg 44
133 St_WriteCardinal 19
134 Trunc 60
135 ExtractFilePath 20
136 GetClassProcCallingContext 11
137 IsVar 57
138 TLForm 47
139 destructor 28
140 TMashClass 28
141 not 93
142 reVarTypeCast 21
143 cdecl 54
144 StrToQWord 27
145 CallBackStackBlockSize 12
146 TMemoryStream 20
147 Destroy 37
148 name 63
149 extern_methods 18
150 StackBlockSize 18
151 PreprocessCall 18
152 PDouble 36
153 Classes 36
154 ip 125
155 bytes 50
156 SaveDialog 25
157 Items 50
158 ClassStack 25
159 constants 27
160 IsClassProcCallingAddr 11
161 in_str 40
162 TConstantManager 15
163 ExtractFileName 16
164 Ev 120
165 ActivePage 24
166 sl 119
167 TImportSection 17
168 TCallBackStack 17
169 ACanvas 34
170 PByte 47
171 bf 116
172 c_value 33
173 UpdateState 21
174 items 46
175 uses 57
176 pushcp 38
177 DebuggerFrame1 16
178 shl 74
179 objfpc 37
180 SaveToFile 22
181 DefinedVars 20
182 Bf 109
183 word 54
184 u_globalvars 18
185 TMashClassVariableDefine 9
186 bpos 53
187 in_rbr 35
188 array 42
189 Methods 30
190 Button 35
191 peek 52
192 GrabberBlockSize 13
193 public 34
194 svmtArr 29
195 Self 50
196 u_prep_expressions 11
197 RTTI_Enable 18
198 MenuItem1 22
199 ConstDefs 22
200 ClassChildPref 14
201 Caption 28
202 MousePos 24
203 grabber 27
204 in_br 37
205 ParamStr 23
206 u_prep_global 14
207 mainclasspath 14
208 c_names 26
209 Invalid 26
210 pushc 36
211 class 36
212 Stream 30
213 CheckName 20
214 u_prep_codeblock 11
215 type 44
216 p 176
217 FileName 22
218 break 35
219 xor 58
220 Output 29
221 const 34
222 IncludedFiles 13
223 pb 84
224 TImportLibrary 12
225 pop 55
226 false 33
227 Text 41
228 swp 54
229 TStack 27
230 Exception 18
231 Dispose 23
232 ExprCode 20
233 gpm 53
234 nil 52
235 mode 39
236 i 156
237 StringReplace 12
238 MethodsLinks 13
239 ChangeFileExt 12
240 Shift 31
241 u_variables 14
242 GetEditor 17
243 TGrabber 19
244 CreateFS 19
245 PreprocessOpNew 10
246 ImageIndex 15
247 Dec 50
248 unit 37
249 double 24
250 TSVMType 18

3

Как выяснилось, автор:

на данный момент только выпустился из 11-го

4

За этот год язык был сильно доработан, были продуманы многие его аспекты и определен вектор развития.

Этим всем я рад поделиться с сообществом.

компилирует сам себя

https://habr.com/en/post/482842/

5

Язык полностью написан на Free Pascal, который в свою очередь поддерживает огромный список платформ, под которые может быть собран Mash.

Зависимости от каких-либо библиотек отсутствуют.

Проект уже собирался ранее и тестировался на Windows, Linux и Android.

Любопытно, что протестировано на Андроиде - и консольные и графические приложения?
Потому как разраб AL-IV для поддержки Андроида вернулся к java, правда, до этого уже была довольно длительная попытка ее поддержки в обычном виде.

6

Re: Ошибки компиляции тестов

из чувства прекрасного:

В один прекрасный день я захотел сделать язык лучше и переименовал booltostr() в b2s()....

Спецификация по языку  (34 стр. на 2019 г., на хабре есть статья от июня 2020-го):
http://mash-project.org/wp-content/uplo … /specs.pdf


Вы здесь » Ремесло программиста » Иные языки » Язык программирования Mash