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(...)
>>>> #endif
>>>> 
>>>> // C-safe Objective-C type declaration
>>>> 
>>>> #if defined(__OBJC__)
>>>> #import <Foundation/Foundation.h>
>>>> #define __class @class
>>>> #else // !defined(__OBJC__)
>>>> #include <objc/runtime.h>
>>>> #define __class typedef struct objc_object
>>>> #endif // defined(__OBJC__)
>>>> 
>>>> // Objective-C instancetype
>>>> 
>>>> #if defined(__OBJC__)
>>>> #if !__has_feature(objc_instancetype)
>>>> typedef id instancetype
>>>> #endif // !__has_feature(objc_instancetype)
>>>> #endif // defined(__OBJC__)
>>>> 
>>>> // Enumerations
>>>> 
>>>> #define __enum(_name, _type) enum _name : _type; enum _name
>>>> 
>>>> // Some convenience Objective-C functions and macros
>>>> 
>>>> __class NSString;
>>>> #define NSStringConstant(_name, _value) extern NSString *const _name;
>>>> 
>>>> #if defined(__OBJC__)
>>>> __BEGIN_DECLS
>>>> 
>>>> __inline __format(NSString, 1, 0) NSString *NSSTRv(NSString *format, 
>>>> va_list args)
>>>> {
>>>>     NSString *string = [[NSString alloc] initWithFormat:format
>>>>                                               arguments:args];
>>>> #if !__has_feature(objc_arc) && !__has_feature(objc_gc)
>>>>     [string autorelease];
>>>> #endif
>>>>     return string;
>>>> }
>>>> 
>>>> __inline __format(NSString, 1, 2) NSString *NSSTR(NSString *format, ...)
>>>> {
>>>>     va_list args;
>>>>     va_start(args, format);
>>>>     NSString *string = NSSTRv(format, args);
>>>>     va_end(args);
>>>>     return string;
>>>> }
>>>> 
>>>> __END_DECLS
>>>> #endif // defined(__OBJC__)
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Gnustep-dev mailing list
>>>> Gnustep-dev@gnu.org
>>>> https://lists.gnu.org/mailman/listinfo/gnustep-dev
>>> 
>>> 
>>> 
>>> -- 
>>> Besos, abrazos, confeti y aplausos.
>>> Jamie Ramone
>>> "El Vikingo"
> 
> 
> 
> -- 
> Besos, abrazos, confeti y aplausos.
> Jamie Ramone
> "El Vikingo"
_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to