Пробовали ли вы создавать свои языки программирования? - Компьютерные вопросы

Вопрос Пробовали ли вы создавать свои языки программирования?

Регистрация
7 Июл 2013
Сообщения
89
Репутация
0
Спасибо
0
Монет
0
И как вам? СлОжна? На чом делали?
 

yar

Capitan

yar

Capitan
Регистрация
17 Ноя 2013
Сообщения
84
Репутация
-3
Спасибо
0
Монет
0
Зачем изобретать велосипед, который итак уже есть? Тем более новый движок за месяца можно создать, если есть группа профессианалов
 
Регистрация
16 Мар 2013
Сообщения
87
Репутация
0
Спасибо
0
Монет
0
В этом нет никакого смысла. Из чисто своего на уровне основы я только создавал игровые движки.
 
Регистрация
11 Авг 2013
Сообщения
90
Репутация
0
Спасибо
0
Монет
0
Нет, я нормальный человек, а не программист
 
Регистрация
26 Авг 2013
Сообщения
78
Репутация
0
Спасибо
0
Монет
0
В универе создавал. Для этого необходимо изучить теорию создания языков программирования.
 
Регистрация
18 Дек 2013
Сообщения
82
Репутация
-1
Спасибо
0
Монет
0
Осуждаю ник. И - да, пытался, и успехи в этом есть, довольно обширные.

Мой язык - Arete, делаю его на базе Rust. Упор идет в еще большую безопасность, нежели у Rust, но при этом язык делается для того, чтобы на низком уровне взаимодействовать с железом. К примеру, в моем языке есть такой модификатор как "hardware", который позволяет отметить функцию как ту, которая будет небезопасна, но взаимодействовать с железом, или у нее будут права на вызов операций вне среды гипервизора компилятора языка. То-есть, что-то вроде такого: hardware func VMCALLCTM(tr: VMCALLTR, triple: *const os::c_char, cpu: *const os::c_char, features: *const os::c_char, lvl: RingCPL, dcl: RingDCL, cm: Model
) -> VMCALLTMR;

hardware func VMCALLRWA(Dst: *const os::c_char, NumMembers: size_t, Members: *const VMCALLRAMR, IsDriver: bool, Kind: ArchiveKind
) -> c_int;

hardware func VMCALLPIC(context: VMCALLCR, buf: VMCALLMBR, om: *mutable VMCALLMR, msg: *mutable *mutable os::c_char
) -> VMCALLB; В моем случае, это все подфункции большой операции гипервызова. Так же, я направлял свой язык на compile-time код, как бы странно это не звучало в контексте безопасности и системности языка. Для того, чтобы отметить функцию или тип как compile-time выражение, можно использовать несколько путей:
1. В случае, если как comptime указывается функция main, необходимо указать флаг #[allow(main_comptime)] и указать main с флагом #[comptime]. При этом функция должна будет обязательно возвращать результат компиляции в сигнатуре и в конце.
2. Если нужно указать тип или переменную как comptime, можно использовать constexpr/consteval: constexpr bool VMCALLTrue : VMCALLBool = 1;
constexpr bool VMCALLFalse : VMCALLBool = 0;
constexpr usize VMCPUSMax = MAXCPUs; Так же, в свой язык я стараюсь добавить некоторые фишки, позволяющие сгладить требования borrow checker'a из Rust и расширить функционал. К примеру, модификатор open для открытия наследия класса/метода/функции, override для переопределения открытого элемента, или модификатор absolute, который указывает, что переопределение запрещено даже косвенно: absolute {
inline hardware func VMCALLST(M: VMCALLMR, Triple: *const os::c_char);
// ...
} Сейчас в своем языке я работаю над компиляцией в JIT, AOT (разумеется, не один) и хочу сделать свой язык самокомпилируемым. Вернемся к системности.

Поскольку мой язык ориентирован на системность и низкоуровневое взаимодействие, у меня есть поддержка специфических операций. Пока что реализовано взаимодействие через COM: hardware {
comopen COM5() -> Result {
operation read(port: &ComPort, buffer: &mutable [u8]) -> Result {
var serial = unstable { comcall PortOpen => ("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY) };
var n = unstable { comcall PortRead => (port.serial, buffer.as_mutptr(), buffer.len()) };
if n < 0 {
throw New Err::("Failed to read data");
}
Ok(n as usize)
}
// ... Расширение comopen может вызывать 3 операции: read, write, execute. Все операции должны быть утверждены в конце расширения командой run. Сейчас в плане операций я работаю в сторону взаимодействия с аппаратным гипервизором.
В принципе, я бы еще долго рассказывал, но лимиты сообщения.
 
Сверху Снизу