All streams
Search
Write a publication
Pull to refresh
26
0
Павел @RoPi0n

Software engineer, Senior Mash developer :)

Send message
Это был бы ужас.
Ну, кому как. Возможно в будущем изменю эту конструкцию.
Исправил это слово в статье. Спасибо.
Мне кажется, что язык похож на Pascal очень отдаленно.
Я не буду продолжать это. Надоело.
Помимо языка тут ещё и ВМ новая с новой архитектурой)
Условие проверяется после выполнения итерации. Цикл выполняется пока условие ложно. Как в pascal сделал это. Только until вверх объявления цикла перенес.
Самое главное, что эти усилия оставят для будущего — это мои приобретенный скилл и опыт (и возможно что-то большее, если дойдут руки до более детального изучения LLVM или GraalVM). Проект само собой не с первой попытки был реализован. К самой оптимальной на мой взгляд архитектуре ВМ я пришел далеко не сразу. Но все решения и реализации мне пришлось проектировать и кодить самому. Этот процесс был весьма сложным и интересным.
1) Мне наоборот кажется, что немного строгости языку не помешает, а то будет совсем уж аморфный синтаксис :)
2) Вместо do..while в Mash реализован until <условие>:… end
Пример:
until a > 0:
  a--
end

Получается как в паскале цикл.
3) Возможно. Но так же код представляется более строго и однозначно. Если разработчик бегло осматривает код, то ему будет удобнее сразу видеть, процедура перед ним или функция.
4) Знак $ заменяет «this->» — он нужен только для обращения к классовым методам и переменным.
5) Возможно. Но обычно люди в нашей сфере готовы к многому.
6) В uses можно добавлять файл через "<имя файла>" или же через <>. В первом случае, транслятор будет искать файл с исходниками возле собираемого файла. Во втором — в папке inc возле транслятора.
7) Ну, тут уж кому как.
8) Ну, как сделал…
9) goto нету, есть jump.
10) Мне наоборот больше привлекателен код, когда объявление классов и определения раздельны. Если разработчик будет знакомиться с незнакомыми ему либами, то думаю, ему будет удобнее смотреть на объявление классов без их реализации.

Да, типизация динамическая. Полуавтоматический сборщик мусора — наоборот как по мне забавная штука. Всегда знаешь когда мусор очищен. Сам контролируешь это. Генераторы конечно попробую реализовать в будущем, вещь несомненно полезная.

Я рассматривал ООП как набор основных парадигм. Мультиметоды и шаблоны считаю немного лишними в языке с динамической типизацией и интроспекцией.
Можно typeof() или x->type использовать.
Чем вам FPC не угодил?)
Посмотрю на этот код, но ничего не обещаю к реализации. Как пойдет.
Слов «virtual» там не так уж и много, потому что их роль выполняют другие формулировки.
LLVM может использоваться, как компилятор абстрактного биткода в нативный. Так что это по-сути сложная ВМ.
llvm.org
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines. The name «LLVM» itself is not an acronym; it is the full name of the project.

In addition to official subprojects of LLVM, there are a broad variety of other projects that use components of LLVM for various tasks. Through these external projects you can use LLVM to compile Ruby, Python, Haskell, Java, D, PHP, Pure, Lua, and a number of other languages. A major strength of LLVM is its versatility, flexibility, and reusability, which is why it is being used for such a wide variety of different tasks: everything from doing light-weight JIT compiles of embedded languages like Lua to compiling Fortran code for massive super computers.

LLVM — это JIT компилятор с абстрактного биткода в машинный, для его дальнейшего выполнения. Т.е. этот проект можно рассматривать как ВМ. Также он может компилировать абстрактный биткод в натив. Но это уже немного другое.
Не пойму, от чего так вы зацепились за это.
Достаточно уметь читать и гуглить, чтобы разобраться с тем, что такое LLVM. Можно даже скачать проект и покопаться в нем, если у вас есть на это время.
К сожалению, ваше мнение не обоснованно и не является весомым. Оно скорее показывает, что один из двух требуемых навыков у вас отсутствует.
Для вашего блага могу посоветовать вам для ознакомления азбуку и/или поисковую строку google.com
ru.wikipedia.org/wiki/LLVM
Универсальная система анализа, трансформации и оптимизации программ, реализующая виртуальную машину с RISC-подобными инструкциями.
У вас есть идеи для реализации? Или может у вас имеется готовое решение, которое идеально встанет в код проекта? Пожалуйста — github.com/RoPi0n/mash-lang, жду pull
Стоит понимать, что дерево кода можно строить не полное, дабы сэкономить время анализа кода (и сохранять не обязательно никуда его). Да и многопоточность никто не мешает использовать, чтобы анализировать все «на лету».
LLVM (Low Level Virtual Machine) — это ВМ с JIT компилятором на борту.
Исполняет она абстрактный упакованный биткод. Над LLVM существует куча надстроек и окружений (возможно вы думали именно о них, когда писали этот комментарий). Ничего у меня не путается.
Первое и второе возможно будет реализовано позже. У меня не так уж и много времени, чтобы круглосуточно кодить.
Перечисления в языке есть:
enum MyEnum [meA, meB, meC, meD]


Также поддерживается объявление массивов, содержащих перечень типов данных. Пример:
a ?= [10, 20, 3.14, "Test", new MyClass(1, 2, "Test"), func1(10, 20, 3.14)]


Из не упомянутого — также в языке поддерживается реализация методов с неограниченным числом аргументов.
func SummAll(...):
  ...
end

...

r ?= SummAll(10, 20, 3.14, "337", 0xFF)

Для получения аргументов есть переменная argcount — хранящая число переданных аргументов и стек — аргументы ложатся в обратном порядке, соответственно принять в методе их весьма просто.

Ну, под функциональностью я подразумевал гибкость и потенциал языка. Как по мне, все очень даже хорошо получилось в этом плане. Есть поддержка взаимодействия с натив кодом через простые и удобные импорты, поддержка callback-вызовов ВМ кода из внешних методов, простая в использовании многопоточность, неявные указатели на каждом шагу (а это очень даже как по мне удобно).

Это пожалуй самый верный ответ который только можно дать на этот вопрос. Как много можно найти мануалов по построению современных ЯП на русском языке? В рунете не особо много людей, кто озадачивал себя написанием языка.

Information

Rating
Does not participate
Registered
Activity