Господа, что в сухом остатке.
- Споры о точности формулировок являются неконструктивными. Обсуждение не-спектрумных средств разработки является оффтопиком. Вместо этого:
- Нужно пролоббировать обсуждаемую нами "умную линковку" в сообщество разработчиков SDCC и tcc. Тогда вопрос об использовании smartlib станет неактуальным как минимум в контексте разработки на SDCC.
- Надо разработать и адаптировать на SDCC побольше библиотек для ZX.


Сообщение от
Alcoholics Anonymous
I prefer your method but I don't think you have solved the scoping issues?
Ofront (and later, me) use name-mangling by such way:
Код:
MODULE Abc;
IMPORT Fast, Compact, Standard, MyOwn; (* Different libraries *)
CONST A=5; (* internal constant *)
B* = 10; (* external/exported constant. the C-name is Abc_B *)
PROCEDURE GetCompactMult* (): INTEGER; (* C name is Abc_GetCompactMult *)
BEGIN
RETURN Compact.Mult(A, B); (* Used compact-way *)
END GetMult;
PROCEDURE GetFastMult* (): INTEGER; (* C name is Abc_GetFastMult *)
BEGIN
RETURN Fast.Mult(A, B); (* Used fast-way *)
END GetFastMult;
END Abc. (* No conflict of names *)
All the name conflict problems were solved by Josef Templ, the author of Ofront translator.

Сообщение от
Alcoholics Anonymous
Maybe that's what everyone is talking about when they mention clang, etc. The automatic translation is not always easy to follow.
You prefer C/asm coding.
I prefer to code in Oberon and translate to C. Ofront is my assistant of this work - it translates Oberon to C automatically. And yes, C is closer to the low-level coding, and more suitable for coding for Z80 than Oberon - I know.