Транслятор языка программирования Gentee уже и на Kolibri OS

...
  • Привет.
    Хочется кое что узнать об этом языке.
    1) поддерживаются ли в нем многострочные макросы?
    2) есть ли возможность создать указатель на структуру с данными или функцию? В документации написано что все указатели uint, потому неясно как идет работа с указателями на структуры, объекты и функции?
  • 1. Нет. Макросы в gentee служат в качестве констант, есть еще макровыражения, в них допускается арифметические и логические выражения, пример:

    Code: Select all

    define
    {
    VAL0 = 10 + 245
    VAL1 = $VAL0 + ( 12 - 233 )
    VAL2 = $VAL1 & 0xFFFF
    SUMMARY = $VAL0 | $VAL1 | $VAL2
    PROGNAME="My Application"
    PROG ="Release"
    TEST1 = $PROGNAME != "My Application" && $PROG != "Debug"
    
    } 
    
    Но никто не запрещает использовать C/C++ препроцессор.
    2. Используется оператор ->
    Можно использовать еще оператор as
    Пример:

    Code: Select all

    type my_struct{
    	uint a;
    	uint b;
    	uint c;
    }
    
    func main <main> (){
    	my_struct s1;
    	uint ptr;
    	ptr=&s1
    	ptr->my_struct.a=10;
    	ptr->my_struct.b=20;
    	ptr->my_struct.c=30;
    	print("\na=\(s1.a)");
    	print("\nb=\(s1.b)");
    	print("\nc=\(s1.c)");
    	print("\nOffsets:");
    	uint offset;
    	offset=&ptr->my_struct.a-ptr;
    	print("\n@a=:\(offset)");
    	offset=&ptr->my_struct.b-ptr;
    	print("\n@b=:\(offset)");
    	offset=&ptr->my_struct.c-ptr;
    	print("\n@c=:\(offset)");
    }
    
    Для функций загруженных динамичеcки (Win32:LoadLibraryA,GetProcAddress ; Kolibri,Linux -dlopen/dlsym) - См. документацию gentee.pdf:
    Вызов функции по адресу
    В переменной типа uint может храниться адрес (идентификатор) функции. Для вызова функции по ее идентификатору
    используется операция ->func и далее в скобках перечисляются параметры. В этом случае следует следить за
    количеством параметров и их типами, так как компилятор не может проверить совпадение параметров. Таким образом
    можно вызывать не только функции, но и методы и операторы.
    a = &myfunc
    a->func( c, d )
    Gentee также позволяет вызывать внешние функции по их адресу. Например, при динамическом подключении DLL
    библиотек, адрес функции можно получить с помощью Window s API функции GetProcAddress. Для вызова функции по
    адресу используется операция ->stdcall и далее в скобках перечисляются параметры. Если функция имеет тип cdecl, то
    нужно использовать служебное слово cdecl вместо stdcall.
    a = GetProcAddress( mylib, "myfunc".ptr())
    a->stdcall( 1, b )
    ----------------------------
    В варианте для Kolibri OS можно использовать импортируемые из псевдо-модуля libc.so dlopen/dlsym:

    Code: Select all

    define<export>{
    	LIBC_PATH = "/lib/libc.so"
    }
    
    import $LIBC_PATH <cdeclare>
    {
    	int syscall3(int /*syscall*/, int /*arg1*/, int /*arg2*/, int /*arg3*/)
    	int syscall2(int /*syscall*/, int /*arg1*/, int /*arg2*/)
    	int syscall1(int /*syscall*/, int /*arg1*/)
    	uint dlopen(uint,int)
    	uint dlsym(uint,uint)
    }
    
    Импорт функций работает благодаря реализованной мною функции dlopen/dlsym.
    Я добавил в них псевдо-библиотеку libc.so, из нее можно импортировать большинство функций libc.dll(newlib) плюс реализованные мною функции, которых не хватает в libc-newlib, включая указанные dlopen, dlsym, syscall3. Полный список могу дать.
  • Да, забыл сказать. Кроме псевдо-модуля libc.so можно импортировать и реальные библиотеки, форматы Obj-Coff и PE-DLL поддерживаются функцией dlopen. Это показано в примерах gentee программ в архиве.
  • Я как-то интересовался Gentee примерно в 2006-ом году.
    Многое ли изменилось с того времени?
    Помнится, там был пример для Delphi.
  • Я не знаю, как там было в 2006 году, я не разработчик gentee, я просто портировал его (Gente Open Source) на Linux.
    Сейчас есть поддержка ООП, наследование, перегрузка операторов и многое другое.
    Есть поддержка OLE/COM, но это не знаю если может где-то пригодится, разве что на Win32.
    Уже сегодня этот язык высокого уровня достаточно удобный.
    Дальнейшее развитие Gentee я вижу в написание g библиотек и устанение ошибок. Порт на Kolibri OS может иметь (а может и не иметь) косяки, надо тестировать.
  • Who is online

    Users browsing this forum: Ahrefs [Bot] and 2 guests