User Tag List

Страница 5 из 10 ПерваяПервая 123456789 ... ПоследняяПоследняя
Показано с 41 по 50 из 99

Тема: "Умная линковка" в компиляторах

  1. #41

    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    640
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Исходники либ есть в ZXDev, ссылки в Пристанище Спектрум-кодера. Дублировать ничего не буду.
    Посмотрел сорцы, в частности zxdev. Много монструозных файлов непонятно зачем сделанных именно так и непонятно почему не разбитых на куски.
    Отсутствует какая-либо система сборки за исключением кучи батников, соответственно не собирается нигде кроме винды, что печально.
    PS: почему не заюзалась cmake?

  2. #42

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Много монструозных файлов непонятно зачем сделанных именно так и непонятно почему не разбитых на куски.
    Объясняю. Это Си-адаптированные, т.е. заключённые в сишную обвязку Оберон-модули. Соответственно они являются реализацией заявленных Оберон-интерфейсов. Разбить их на куски ручками может и можно, но не нужно. Разбиение утилитой - процедура не ёмкая по времени, занимает доли секунды. И, кстати, нечего придираться к "возможным ошибкам в smartlib", с тем же успехом они где угодно. Такая придирка воспринимается как попытка продолжить спор при отсутствии других аргументов.

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Отсутствует какая-либо система сборки за исключением кучи батников, соответственно не собирается нигде кроме винды, что печально.
    PS: почему не заюзалась cmake?
    А вы почему не пользуетесь ant? А если даже и пользуетесь, то почему не пользуетесь proguard? А если даже и пользуетесь, то почему не пользуетесь GNAT? И т.п.

    Вполне хватает возможностей и батников, не люблю из пушки стрелять по воробьям, это раз. Два - зачем тянуть лишнюю утилиту в ZXDev. Три - вакантно направление разработки нативного XDev для Linux, кто мешает? Почему я не занимаюсь этим - не вижу смысла утруждать себя линуксом, потому что прекрасно обхожусь виндой. А юзерам всё равно под какой ОС собраны игры.

    P.S. Ну так что там насчёт "компиляции в памяти"? А то Reobne попросил объяснить, но объяснений так и не дождался. Зачем водить за нос человека?
    Последний раз редактировалось Shadow Maker; 17.06.2014 в 20:32.

  3. #43

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Давайте чтобы у нас был предмет беседы сопоставим треугольные и квадратные колёса, и уж, так и быть, пусть не на схематической, а на реальной библиотеке NewSupercode, которую приаттачиваю. Собирается примерно таким батником (пути опускаю для простоты восприятия):
    Код:
    @IF EXIST %1.lib DEL %1.lib
    smartlib %1.c
    @FOR %%i IN (%1_0??.c) DO (
      ..\Bin\sdcc -c %%i -mz80 --opt-code-size --disable-warning 59 --disable-warning 85 -I "." -I include -I Obj
      @IF errorlevel 1 PAUSE
    )
    @FOR %%i IN (%1_0??.rel) DO ..\Bin\sdar -rc %1.lib %%i
    @Bin\clear
    Комментирую.

    @IF EXIST %1.lib DEL %1.lib - удаляется старая версия библиотеки, если она существует. Были проблемы с аддитивно-инкрементальным добавлением фрагментов, поэтому советую всегда так делать.

    smartlib %1.c - резка файла Name.c на куски Name_001.c, Name_002.c, ... Происходит она моментально.

    Дальше в цикле компилируем. Есть возможность компилировать весь исходник целиком (по F11), это происходит быстро. Если он скомпилировался, можно собрать его в библиотеку с разрезанием (по F12), тогда компилируются нарезанные фрагменты. Если при компиляции фрагмента произошла ошибка, возникает пауза.

    Дальше в цикле формируем из скомпилированных объектников Name_001.rel, Name_002.rel, ... целую библиотеку. И чистим временные уже ставшие ненужными фрагменты, как *_???.с, так и *_???.rel

    Не претендую на сверхидеальность - я даже к этой схеме подходил несколько лет. Предложения по улучшению процесса с благодарностью принимаются. Только не в стиле "так лучше потому что я всегда так делаю", пожалуйста. Здесь достаточно умных людей, чтобы оценить преимущество квадратных колёс над треугольными, если такие преимущества имеют место быть.

    Ну а теперь пусть нам Q-Master блеснёт профессионализмом и покажет как именно он с помощью cmake предлагает решать проблему "умной линковки". С учётом того, что мейк-файл - это, в принципе, тот же скрипт (как и батник), только под управлением другого интерпретатора. Вопрос привычки понят, но зачем переходить на другой интерпретатор, к тому же пришлый, вместо нативного, возможностей которого тоже хватает?

    Люди Linux-мира не мыслят своей работы без хорошего мейка, но это особенно важно для больших и сверхбольших проектов. Впрочем, этот вопрос для меня не нов, он уже обсуждался у нас на форуме в теме use makefiles, поднятый как раз ценителем ценностей Linux-мира, который преспокойно разобрался в ZXDev и смог построить свой рогалик на Обероне, не выходя из своего любимого Linux'а и даже без Wine. Я не верю, что славяне менее способны.

    Притом просьба, чтобы Q-Master это сделал рабочим собирающимся примером этой же библиотеки. И без фраз типа "Много монструозных файлов непонятно зачем сделанных именно так", потому что если критика конструктивна, то хотелось бы и фраз конкретных. Что именно кажется непонятно "зачем сделанным именно так и монструозным"? Как именно предлагается избежать монструозности? Если библиотека сама по себе большая "на 100500 кусков", то она всё равно монструозна количеством кусков, и с разрезанием, и без оного тоже.
    Вложения Вложения

  4. #44

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А чо классный рогалик. и весит всего 35кб
    С уважением,
    Jerri / Red Triangle.

  5. #45

    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    640
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я прошу прощения что сделал именно так, но вот кусок либ z80 собирающихся с помощью cmake sdcc и sdasz80.
    Там-же newsupercode.

    PS: почему cmake? потомучто батники работают исключительно на винде и аццки неудобны для автоматизации сборки.
    PS1: не нашел примера.
    Вложения Вложения
    • Тип файла: 7z zxdev.7z (11.7 Кб, Просмотров: 52)
    Последний раз редактировалось Q-Master; 16.06.2014 в 17:22.

  6. #46

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Примера чего? И зачем ты поразрезал всё на кусочки? Ты же тут пол-ветки нам рассказывал как надо всё правильно делать без разрезания. Где пример?

    Батники аццки удобны тем, кто к ним привык, и для кого линукс - чужая сторона. Для меня командные файлы .sh аццки неудобны тем, что их можно запускать только под чужеродной для меня системой.
    Последний раз редактировалось Shadow Maker; 17.06.2014 в 19:54.

  7. #46
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #47

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Наверное всё-таки разбираюсь, раз писал для Java ME, притом автор Java Гослинг не отицает, что изучал исходники Оберон-системы. Да тут аналогии с Обероном самые прямые.
    Значит, не составит труда ответить на вопросы:
    1) что такого означает "раздельная компиляция" раз ее нет в С++?
    2) почему почти все ссылки на сравнения оберона с другими языками такие древние? В вышеупомянутой статье (какого она года, кстати? webarchive дает последний слепок 2009 года) ссылаются на журнал аж 98 года
    3) на странице http://zx.oberon2.ru/forum/viewtopic.php?f=10&t=92 проскальзывает цитата
    Думаю, ясно, как из всего этого получается инкапсуляция, наследование и полиморфизм.
    Я тупой валенок, прошу продемонстрировать работу всех трех принципов на фрагменте "простого Си без плюсов"

  9. #48

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Значит, не составит труда ответить на вопросы:
    1) что такого означает "раздельная компиляция" раз ее нет в С++?
    Встречный вопрос: какое отношение имеет "раздельная компиляция" в C++ к Java?

    Цитата Сообщение от Vitamin Посмотреть сообщение
    2) почему почти все ссылки на сравнения оберона с другими языками такие древние?
    Лучше скажи "почти все, которые я читал, а читал мало". Ну да, та статья старая. Но актуальная.

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Я тупой валенок, прошу продемонстрировать работу всех трех принципов на фрагменте "простого Си без плюсов"
    Пожалуйста.

    Инкапсуляция. Юзаем static процедуры и static переменные. Их извне не видно, получаем спрятывание, инкапсуляцию. Если на уровне объекта, то объектом выступает структура, её мы также делаем static.

    Наследование. Делай так. Закажи себе структуру типа:

    struct a { int a, b, c; } a;
    struct naslednic_a { int a, b, c, d, e, f; } naslednic;

    Теперь приводи насильственно тип a к типу naslednic_a и работай. Никто не обещал, что будет удобно.

    Полиморфизм. Я не знаю, что это за извращение. А тебе известно, что объектный Оберон-2 транслируется в Си без плюсов? А известно, что первая реализация C++ была просто транслятором C++ в обычный Си? Если да, то зачем задавать тупые вопросы? Если нет, то фи сишнику.

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    xor a
    out (#fe),a

    намного производительнее. Если отказаться от в 100500 раз более тормознутой Basic'овской CLS.
    Да? И что будет после следующего BEEP'а? Нет уж, если делать Basic'овский BORDER, то делать его по уму. Ну и CLS ты приплёл совершенно не к месту. При чём здесь, в данном случае CLS вообще?

    Ещё не пойму: зачем придираться к СХЕМЕ? Хорошо, вот как устроен BORDER всамделишне:
    Код:
    #define __hash__ #
    #define __id__(x) x
    #define __ld_a__(x) if(x==0) {__asm xor a,a __endasm;}else{__asm ld a,__id__(__hash__)x __endasm;}
    
    ...
    
    import void Basic_BORDER_stdcall (SHORTINT color);
    #ifndef BORDER_fastcall
      #define Basic_BORDER Basic_BORDER_stdcall
    #else //BORDER_fastcall
      #define Basic_BORDER(color) __ld_a__(color); \
        __asm \
        call 0x229B \
        __endasm;
    #endif
    Т.е. он в случае всегда константного аргумента устроен именно так, как я сказал:

    __ld_a__(color) - загрузка в рег. A кода цвета
    call 0x229B - вызов процедуры из ПЗУ

    И правильно, и с корректной работой после BEEP'а.
    Последний раз редактировалось Shadow Maker; 17.06.2014 в 20:46.

  10. #49

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Встречный вопрос: какое отношение имеет "раздельная компиляция" в C++ к Java?
    Задай вопрос автору таблички, в которой данный аспект фигурирует в сочетании с обероном, явой и с++. Так что жду ответа.


    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Ну да, та статья старая. Но актуальная.
    Я верю, что статья 19хх года очень актуальна про оберон. Про его "конкурентов"- врядли.

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Инкапсуляция. Юзаем static процедуры и static переменные. Их извне не видно, получаем спрятывание, инкапсуляцию. Если на уровне объекта, то объектом выступает структура, её мы также делаем static.
    Каким боком расположение экземпляра класса в статической памяти делает скрытым его внутреннее строение?

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Теперь приводи насильственно тип a к типу naslednic_a и работай. Никто не обещал, что будет удобно.
    "20 раз вокруг ноги, сквозь штанину в сапоги". Что будет нелегко- это очевидно, но искусственное придумывание трудностей- это уже перебор (зато можно поорать про "огромную проделанную работу")

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Я не знаю, что это за извращение - не смейся
    Тогда какого хрена ты с умным видом рассуждаешь, что "это извращение" реализуется на С? Да, реализуется. Вот и продемонстрируй.

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    А тебе известно, что объектный Оберон-2 транслируется в Си без плюсов?
    В таком случае приведи пример полиморфизма на объектном Обероне-2.

  11. #50

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,337
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Да, реализуется. Вот и продемонстрируй.
    Ты знаешь, что реализуется. Человек тебе говорит что не вникал в суть полиморфизма. Смысл требовать демонстрации?

    Вообще полиморфизм интересный программистский подход. Он-же в голове должен быть. Некоторые языки позволяют его описывать более явно, и только.

    На ПМК с ним конечно не развернуться. А на Z80 ассемблере вполне. Даже если-бы JP (HL) не было, можно PUSH DE, RET. В отличии от явного подхода, тут полная свобода. Какие хочешь методы, прямо в поля объекта пиши адреса, какие хочешь - в таблицы виртуальных функции класса собирай, а в объекте только адрес таблицы. Динамически меняй.
    В Си тоже запрсто. Процедурные типы есть. Функции с параметрами описываются легко.
    Вот в ZX бейсике, GOSUB X можно сделать, а параметры передавать неявно - некрасивее будет.

Страница 5 из 10 ПерваяПервая 123456789 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 17
    Последнее: 26.12.2015, 23:22
  2. Ответов: 19
    Последнее: 30.09.2011, 03:08
  3. Ответов: 0
    Последнее: 15.08.2010, 14:38
  4. Ответов: 18
    Последнее: 27.08.2008, 20:27
  5. Ответов: 6
    Последнее: 20.11.2007, 11:29

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •