Найдено решение ещё одной проблемы ZXDev. Теперь возможно получение очень маленьких программ, куда из библиотек линкуются только лишь необходимые функции. Для облегчения разбивки исходных сишных текстов на "модули" (в терминологии SDCC), а на деле просто на фрагменты с отдельными функциями, я написал утилиту ZXDev/Bin/smartlinkrel, облегчающую подготовку библиотек. Она автоматически делит сишный исходник на несколько (по отдельным функциям или как-либо ещё). Заголовок и "линии отреза" задаются с помощью специального вида комментариев.
Модуль, демонстрирующий принцип работы "умной" линковки:
Код:
MODULE TinyHello; IMPORT Basic; BEGIN Basic.PRSTR("Hello World") END TinyHello.
Целевой бинарник этой программы занимает всего лишь 45 байт! Для программы на языке высокого уровня это вполне близко к идеалу. А можно ли меньше? Да, возможность сделать TinyHello ещё меньше появится когда Филипп Краузе реализует передачу параметров в регистрах.
Подробнее читайте на форуме поддержки ZXDev в теме "Умная" линковка (smart linking) в ZXDev/SDCC.
Теперь, когда найден способ смартлинковать сущности из библиотек, среда ZXDev стала ещё привлекательнее в качестве высокоуровневого клея между ассемблерными подпрограммами и исходниками на ЯВУ, в качестве средства для накопления и наработки библиотек. Трёхуровневая система разработки, в которой умелый программист может извлечь пользу из любого уровня (низкий-асм, средний-Си и высокий-Оберон), — идеальный на данный момент структурно-модульный клей между всеми тремя уровнями (без оверхеда на каждом из них). Поэтому утверждаю, что ZXDev — это не "игрушечная" среда. Это серьёзный инструмент, предназначенный как для начинающих, так и для профессионалов, позволяющий выполнить разработку практически любого софта. И в то же время идеологически он выполнен в духе SDCC, которому не чужды промежуточные уровни представления кода.