I never needed something like what you wrote. That stuff belongs in a 
framework. If a compiler doesn't support an attribute that I need (and I 
typically don't need attributes), then I don't support the compiler.

Objective-C modules also doesn't really need anything special to expose C 
functions to modules written in C, except perhaps an extern "C" in case a 
header defining C functions is included by a C++ module.

So no, I don't typically have things like what you wrote down there :-)

Regards,

Ivan Vučica
via phone

On 14. 6. 2013., at 08:58, Maxthon Chan <xcvi...@me.com> wrote:

> I mean exposing a function or two from Objective-C code so that it can be 
> accessed from other languages. There is no reason to prevent a function with 
> signature CGIApplicationMain(int, const char **, const char *restrict, const 
> char *restrict); from being exposed, right?
> 
> Also, the inline function wrapper for [NSString stringWithFormat:] can be 
> really useful.
> 
> Sent from my iPhone
> 
> On 2013年6月14日, at 14:21, Jamie Ramone <sancom...@gmail.com> wrote:
> 
>> Why...would anyone want to do that? The whole point of OOP is to hide 
>> details so as to allow programmers to concentrate on one thing at a time 
>> (while giving us the bonus of modular, reusable, easily maintainable code). 
>> Why would you want/need to unhide details?
>> 
>> 
>> On Fri, Jun 14, 2013 at 2:59 AM, Maxthon Chan <xcvi...@me.com> wrote:
>>> Copied from Xcode and Mail saved all formatting from code highlighting as 
>>> RTF. The code boilerplate is what I always use as a start point of my code. 
>>> It makes it possible to expose some Objective-C code as plain C/C++ as I 
>>> did in CGIKit 5, and it detects compiler. I have a newer version that does 
>>> easy string constant too.
>>> 
>>> Sent from my iPhone
>>> 
>>> On 2013年6月14日, at 13:51, Jamie Ramone <sancom...@gmail.com> wrote:
>>> 
>>>> Colorful text is colorful! So what is this "boilerplate" thing exactly? 
>>>> I've heard the expression before but not quite sure what it refers to.
>>>> 
>>>> 
>>>> On Wed, Jun 12, 2013 at 12:25 PM, Maxthon Chan <xcvi...@me.com> wrote:
>>>>> Do you guys have a boilerplate that you are very used to build code on 
>>>>> top of? I have one like this (sans include guard which depend on header 
>>>>> file name):
>>>>> 
>>>>> #include <sys/cdefs.h>
>>>>> #include <stdarg.h>
>>>>> #include <stdint.h>
>>>>> #include <stddef.h>
>>>>> #include <sys/types.h>
>>>>> 
>>>>> // Feature testers
>>>>> 
>>>>> #ifndef __has_feature
>>>>> #define __has_feature(x) 0
>>>>> #endif
>>>>> 
>>>>> #ifndef __has_builtin
>>>>> #define __has_builtin(x) 0
>>>>> #endif
>>>>> 
>>>>> #ifndef __has_extension
>>>>> #define __has_extension(x) 0
>>>>> #endif
>>>>> 
>>>>> #ifndef __has_attribute
>>>>> #define __has_attribute(x) 0
>>>>> #endif
>>>>> 
>>>>> // __inline
>>>>> 
>>>>> #if __has_attribute(always_inline)
>>>>> #define __inline static inline __attribute__((always_inline))
>>>>> #else // !__has_attribute(always_inline)
>>>>> #define __inline static inline
>>>>> #endif// __has_attribute(always_inline)
>>>>> 
>>>>> // __restrict
>>>>> 
>>>>> #ifndef __cplusplus
>>>>> #ifndef __restrict
>>>>> #if __STDC_VERSION__ >= 199901L
>>>>> #define __restrict restrict
>>>>> #else // __STDC_VERSION__ < 199901L
>>>>> #define __restrict
>>>>> #endif // __STDC_VERSION__ >= 199901L
>>>>> #endif // !defined(__restrict)
>>>>> #endif // !defined(__cplusplus)
>>>>> 
>>>>> // noreturn (__noreturn and unreachable())
>>>>> 
>>>>> #if __has_attribute(noreturn)
>>>>> #define __noreturn __attribute__((noreturn))
>>>>> #if __has_builtin(__builtin_unreachable)
>>>>> #define unreachable() __builtin_unreachable()
>>>>> #else // !__has_builtin(__builtin_unreachable)
>>>>> #define unreachable() do {} while (0)
>>>>> #endif // __has_builtin(unreachable)
>>>>> #else // !__has_attribute(noreturn)
>>>>> #define __noreturn
>>>>> #define unreachable() do {} while (0)
>>>>> #endif // __has_attribute(noreturn)
>>>>> 
>>>>> // Deprecated/unavalible with messages
>>>>> 
>>>>> #undef __deprecated
>>>>> #undef __unavailable
>>>>> 
>>>>> #if __has_attribute(deprecated)
>>>>> #if __has_extension(attribute_deprecated_with_message)
>>>>> #define __deprecated(_msg) __attribute__((deprecated(_msg)))
>>>>> #else // !__has_extension(attribute_deprecated_with_message)
>>>>> #define __deprecated(_msg) __attribute__((deprecated))
>>>>> #endif // __has_extension(attribute_deprecated_with_message)
>>>>> #else // !__has_attribute(deprecated)
>>>>> #define __deprecated(_msg)
>>>>> #endif // __has_attribute(deprecated)
>>>>> 
>>>>> #if __has_attribute(unavailable)
>>>>> #if __has_extension(attribute_unavailable_with_message)
>>>>> #define __unavailable(_msg) __attribute__((unavailable(_msg)))
>>>>> #else // !__has_extension(attribute_unavailable_with_message)
>>>>> #define __unavailable(_msg) __attribute__((unavailable))
>>>>> #endif // __has_extension(attribute_unavailable_with_message)
>>>>> #else // !__has_attribute(unavailable)
>>>>> #define __unavailable(_msg)
>>>>> #endif // __has_attribute(unavailable)
>>>>> 
>>>>> #if __has_extension(enumerator_attributes)
>>>>> #define __e_deprecated(_msg) __deprecated(_msg)
>>>>> #define __e_unavailable(_msg) __unavailable(_msg)
>>>>> #else // !__has_extension(enumerator_attributes)
>>>>> #define __e_deprecated(_msg)
>>>>> #define __e_unavailable(_msg)
>>>>> #endif // __has_extension(enumerator_attributes)
>>>>> 
>>>>> // Format strings
>>>>> 
>>>>> #if __has_attribute(format)
>>>>> #define __format(...) __attribute__((format(__VA_ARGS__)))
>>>>> #else // __has_attribute(format)
>>>>> #define __format(...)
> _______________________________________________
> Gnustep-dev mailing list
> Gnustep-dev@gnu.org
> https://lists.gnu.org/mailman/listinfo/gnustep-dev
_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to