C-- Sphinx Compiler

...
  • Обновление для Ubuntu 18.04, исправил некоторые баги в CMM, перед компиляцией
    sudo apt-get install gcc-multilib g++-multilib
    Attachments
    cmm.zip (601.42 KiB)
    Downloaded 265 times
    Технологии меняют мир, а я - меняю технологии.
  • paulcodeman
    Я залил изменения на SVN и пофиксил ошибки автосборки.
    Из хаоса в космос
  • Почему на сервере автосборки используется wine+windows cmm, хотя двумя постами выше paulcodeman выкладывал версию для linux? И еще. Та версия что на сервере, генерирует файлы с расширением .com, нужно переименовывать. Из поста paulcodeman cmm сразу в kex собирает, и не надо переименовывать.
  • maxcodehack wrote:Почему на сервере автосборки используется wine+windows cmm, хотя двумя постами выше paulcodeman выкладывал версию для linux?
    Because the autobuild was set up long before that post. And it still works. People are usually lazy to fix things that work.
    maxcodehack wrote:Та версия что на сервере, генерирует файлы с расширением .com, нужно переименовывать. Из поста paulcodeman cmm сразу в kex собирает, и не надо переименовывать.
    There are no .com or .kex files in kolibri images, so one needs to rename them anyway. May be we will use '.kex' suffix after switching to PE but I haven't heard anybody working on it last years.
  • Попробовал скомпилировать пример window.c прямо из-под колибри.
    Запускаю. И компилятор просто ничего не делает. Ни ошибок о падении, ни ошибок о том что файл не найден. Ничего.
    Странно
  • Привет. Хочу высказать мысль насчет текущего языка и компилятора C - - . В нем много откровенно ненужного функционала, например: досовские таргеты и директивы связанные с ними, процедуры обработки прерываний. По самому языку есть странные вещи. С одной стороны, есть ассемблерные вставки (ключевое слово asm), с другой стороны можно использовать регистры как переменные. Какой смысл в последнем не понятно, ведь по сути это дублирующий функционал. Можно предположить, что использование регистров вручную в качестве переменных даст прирост в скорости, но ведь любой оптимизирующий компилятор сам сможет разместить переменные по регистрам там где это возможно, и программисту не нужно думать об этом. Leency, посмотрев твой код я заметил что ты редко используешь EAX, EBX, ECX и тд в коде. Насколько я понимаю это не очень хорошая практика, как минимум потому что имена становятся неосмысленными. Так что эту фичу можно было бы выпилить. То же касается и if/IF и т.д (нормальный компилятор сам вставит подходящую инструкцию). Кажется, пора принимать стандарт Sphinx C - - 2022

    P.S. Собранный под linux компилятор C-- иногда дает ошибки там, где windows билд не дает ошибок. Я как-то отписывал в беседу про такие ситуации, надо поискать.. Кстати, не зря на сервере автобилда используется c - - под вайном.
    The best way to predict the future is to create it.
  • I'm okay за чистку, если сборка текущих программ не поломается. EAX, EBX, ECX используются, по поводу остального согласен.
    Лично мне очень не хватает объявления переменных в коде, например for (int i=0; ...)
    Из хаоса в космос
  • Привет!
    Копаюсь в исходном коде данного компилятора (использовал последний на svn). Я так понимаю - это версия от paulcodeman, которая выложена несколькими постами выше.
    У меня возникло для вопроса:
    1. Файл struct.h

    Code: Select all

    typedef struct _OBJECT_ENTRY_
    {
    	char name[16];
    	long vsize;
    	long sectionRVA;
    	long psize;
    	long pOffset;
    	unsigned long PointerToRelocations;
    	unsigned long PointerToLinenumbers;
    	unsigned short NumberOfRelocations;
    	unsigned short NumberOfLinenumbers;
    	long flags;
    }OBJECT_ENTRY;
    
    Чтобы было понятно OBJECT_ENTRY - это авторское название IMAGE_SECTION_HEADER (в трактовке M$). И размер первого поля по спецификации COFF 8 байт. Зачем это увеличено до 16?

    2. тот же файл

    Code: Select all

    struct MEOSheader
    {
    	unsigned char sign[25];
    	unsigned long vers;
    	unsigned long start;
    	unsigned long size;
    	unsigned long alloc_mem;
    	unsigned long esp;
    	unsigned long I_Param;
    	unsigned long I_Icon;
    };
    Это заголовок приложений Kolibri. И первое поле также должен иметь длину 8 байт. Почему тут 25? И как вообще тогда работают приложения собранные этим компилятором?
  • Меня больше беспокоит что у этого языка нет нормальной спецификации, даже грамматика формально не описана. Изучать его возможно только методом тыка.
    The best way to predict the future is to create it.
  • rgimad, всегда можно создать диалект языка. Как я понял язык юзает только Leency (поправьте меня если это не так) и он не против корректировок. Главное, сохранить совместимость (это сложно), чтобы не поломались существующие приложения - или нужно будет корректировать их код.

    Я же озадачился чтобы с-- выдавал MS COFF (и немного сначал не понял, почему заголовки секций какие-то странные), чтобы скармливать его будущему линкеру KX (в разработке). Тема с заголовком приложений Kolibri - загадка для меня - отдельный шок.
  • rgimad wrote:Меня больше беспокоит что у этого языка нет нормальной спецификации, даже грамматика формально не описана. Изучать его возможно только методом тыка.
    https://web.archive.org/web/20090703161 ... c--doc.htm

    Также есть подкаталог doc
    https://github.com/KolibriOS/cminusminu ... master/doc
  • Coldy

    Привет, директиву

    Code: Select all

    #pragma meos
    которая и позволяет юзать этот заголовок в наших(моих) программах не используется. Весь хэдер определен вручную как

    Code: Select all

    char   os_name[]    = "MENUET01"n;
    dword  os_version   = 0x00000001;
    dword  start_addr   = ENTRY_POINT;
    dword  final_addr   = #______STOP______+32;
    dword  alloc_mem    = MEMSIZE;
    dword  x86esp_reg   = MEMSIZE;
    dword  I_Param      = #param;
    dword  I_Path       = #program_path;
    char param[4096];
    char program_path[4096];
    в файле svn/programs/cmm/lib/kolibri.h

    Если будет совместимость, то можно фиксить.
    Из хаоса в космос
  • Leency, да, я догадался.
    К сожалению, вынужден тебя расстроить, с генерацией MS COFF есть проблемы, чтобы это исправить - нужно править код. Но проблема в том, что я не могу собрать этот компилятор в MSVC.

    P.S. попробовал написать Михаилу Шекеру, но, похоже, он больше не занимается проектом, т.к. пришел отбойник, что у него переполнен ящик и сообщение не доставлено.
  • Привет! Компилятор доработан для полной и корректной генерации MSCOFF, в т.ч. исправлены ошибки.
    Для использования нужно задать ключ -coff в командной строке, если вспомогательные связанные с этой опцией ключи не заданы, то на выходе будет obj файл формата MSCOFF.
    Также добавлен предопределенный макрос __COFF__ для возможности разделения кода для вышеуказанной сборки. Кроме того, скорректированы мэйкфайлы - добавлена опция для корректной упаковки структур.

    Просьба протестировать, в т.ч. работу в используемых вариантах сборки.

    P.S.: Все вышеописанное необходимо для дальнейшего перевода приложений cmm на автоимпорт.
  • Who is online

    Users browsing this forum: No registered users and 1 guest