Go+ c2go 项目一个月:我们遇到的挑战和成果
一个月前,我写下了《Go+ 下个里程碑:超越 cgo,无缝对接 C 语言》一文,正式宣布启动 c2go 项目。一个月过去了,今天我想谈谈我们遇到的挑战,以及我们收获的成果是什么。当然如果你想了解更多,也可以参考以下两篇文章:
https://github.com/goplus/sqlite
func __atomic_load_n_i32(*int32, int32) int32func __atomic_load_n_u16(*uint16, int32) uint16func __atomic_load_n_u32(*uint32, int32) uint32func __atomic_store_n_i32(*int32, int32, int32)func __atomic_store_n_u16(*uint16, int32, uint16)func __atomic_store_n_u32(*uint32, int32, uint32)func __builtin___memcpy_chk(unsafe.Pointer, unsafe.Pointer, uint, uint) unsafe.Pointerfunc __builtin___memmove_chk(unsafe.Pointer, unsafe.Pointer, uint, uint) unsafe.Pointerfunc __builtin___memset_chk(unsafe.Pointer, int32, uint, uint) unsafe.Pointerfunc __builtin___strlcat_chk(*int8, *int8, uint, uint) uintfunc __builtin___strlcpy_chk(*int8, *int8, uint, uint) uintfunc __builtin_bswap32(uint32) uint32func __builtin_bswap64(uint64) uint64func __builtin_fabs(float64) float64func __builtin_fabsf(float32) float32func __builtin_fabsl(float64) float64func __builtin_huge_valf() float32func __builtin_inf() float64func __builtin_inff() float32func __builtin_infl() float64func __builtin_object_size(unsafe.Pointer, int32)func __darwin_check_fd_set_overflow(int32, unsafe.Pointer, int32) int32func __error() *int32func __sincos_stret(float64) struct___double2func __sincosf_stret(float32) struct___float2func __sincospi_stret(float64) struct___double2func __sincospif_stret(float32) struct___float2func __swbuf(int32, *FILE) int32func __sync_synchronize()func access(*int8, int32) int32func atoi(*int8) int32func close(int32) int32func confstr(int32, *int8, uint64)func dlclose(__handle unsafe.Pointer)func dlerror() *int8func dlopen(__path *int8, __mode int32) unsafe.Pointerfunc dlsym(__handle unsafe.Pointer, __symbol *int8) unsafe.Pointerfunc fchmod(int32, uint16) int32func fchown(int32, uint32, uint32) int32func fcntl(int32, int32, ...interface{}) int32func flock(int32, int32) int32func fprintf(*FILE, *int8, ...interface{}) int32func fsctl(*int8, uint64, unsafe.Pointer, uint32) int32func fstat(int32, *struct_stat) int32func fstatfs(int32, *struct_statfs) int32func fsync(int32) int32func ftruncate(int32, int64) int32func futimes(int32, *struct_timeval) int32func getcwd(*int8, uint64) *int8func getenv(*int8) *int8func geteuid() uint32func gethostuuid(*uint8, *struct_timespec) int32func getpid() int32func gettimeofday(*struct_timeval, unsafe.Pointer) int32func localtime(*int64) *struct_tmfunc lstat(*int8, *struct_stat) int32func malloc_create_zone(start_size uint64, flags uint32) *struct__malloc_zone_tfunc malloc_default_zone() *struct__malloc_zone_tfunc malloc_set_zone_name(zone *struct__malloc_zone_t, name *int8)func malloc_size(ptr unsafe.Pointer) uintfunc malloc_zone_free(zone *struct__malloc_zone_t, ptr unsafe.Pointer)func malloc_zone_malloc(zone *struct__malloc_zone_t, size uint) unsafe.Pointerfunc malloc_zone_realloc(zone *struct__malloc_zone_t, ptr unsafe.Pointer, size uint) unsafe.Pointerfunc memcmp(__s1 unsafe.Pointer, __s2 unsafe.Pointer, __n uint64) int32func mkdir(*int8, uint16) int32func mmap(unsafe.Pointer, uint, int32, int32, int32, int64) unsafe.Pointerfunc munmap(unsafe.Pointer, uint) int32func open(*int8, int32, ...interface{}) int32func pread(__fd int32, __buf unsafe.Pointer, __nbyte uint, __offset int64) intfunc pthread_create(**struct__opaque_pthread_t, *struct__opaque_pthread_attr_t, func(unsafe.Pointer) unsafe.Pointer, unsafe.Pointer) int32func pthread_join(*struct__opaque_pthread_t, *unsafe.Pointer) int32func pthread_mutex_destroy(*struct__opaque_pthread_mutex_t) int32func pthread_mutex_init(*struct__opaque_pthread_mutex_t, *struct__opaque_pthread_mutexattr_t) int32func pthread_mutex_lock(*struct__opaque_pthread_mutex_t) int32func pthread_mutex_trylock(*struct__opaque_pthread_mutex_t) int32func pthread_mutex_unlock(*struct__opaque_pthread_mutex_t) int32func pthread_mutexattr_destroy(*struct__opaque_pthread_mutexattr_t) int32func pthread_mutexattr_init(*struct__opaque_pthread_mutexattr_t) int32func pthread_mutexattr_settype(*struct__opaque_pthread_mutexattr_t, int32) int32func pwrite(__fd int32, __buf unsafe.Pointer, __nbyte uint64, __offset int64) int64func random() int64func read(int32, unsafe.Pointer, uint) intfunc readlink(*int8, *int8, uint) intfunc rename(__old *int8, __new *int8) int32func rmdir(*int8) int32func sleep(uint32) uint32func srandomdev()func stat(*int8, *struct_stat) int32func statfs(*int8, *struct_statfs) int32func strcmp(__s1 *int8, __s2 *int8) int32func strcspn(__s *int8, __charset *int8) uintfunc strlen(__s *int8) uintfunc strncmp(__s1 *int8, __s2 *int8, __n uint) int32func strrchr(__s *int8, __c int32) *int8func sysconf(int32) intfunc sysctlbyname(*int8, unsafe.Pointer, *uint, unsafe.Pointer, uint) int32func time(*int64) int64func unlink(*int8) int32func utimes(*int8, *struct_timeval) int32func write(__fd int32, __buf unsafe.Pointer, __nbyte uint) int
func(fn func()) func(int) int {return *(*func(int) int)(unsafe.Pointer(&fn))}(fn)