- 主题:假如写个 c 编译器
把所有的指针,在编译时都替换成 shared_ptr<>,把 free() 替换成空函数。这样是不是只有内存泄露,没有 double free 了?
--
FROM 47.243.39.*
公司写个规定吧。
好像以前听人说过这么干的
--
FROM 120.244.217.*
为啥很少听说有人写 c 语言的 transpiler,
上层语言,比如 scala/kotlin 转 java(jvm), coffeescript/typescript/rescript 转 js 等等有一大堆。
【 在 hothail 的大作中提到: 】
: 公司写个规定吧。
: 好像以前听人说过这么干的
--
FROM 47.243.39.*
有一个语言,object-c 不就是这样吗
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 把所有的指针,在编译时都替换成 shared_ptr<>,把 free() 替换成空函数。这样是不是只有内存泄露,没有 double free 了?
:
: --
: 灭绝人性啊
--
FROM 221.216.116.*
不是。指针有算术运算,有强制类型转换,是没法做到类型安全的。malloc 换 shared_ptr 你没类型啊。限制这些,你就得到了go那样的东西。
【 在 hgoldfish 的大作中提到: 】
: 把所有的指针,在编译时都替换成 shared_ptr<>,把 free() 替换成空函数。这样是不是只有内存泄露,没有 double free 了?
: --
: FROM 47.243.39.*
--
修改:milksea FROM 114.249.220.*
FROM 114.249.220.*
你这搞懂了c语言指针和shared_ptr机制吗
【 在 hgoldfish 的大作中提到: 】
: 把所有的指针,在编译时都替换成 shared_ptr<>,把 free() 替换成空函数。这样是不是只有内存泄露,没有 double free 了?
--
FROM 122.97.157.*
主要是 c 语言比较底层,所有没人这么搞。但不代表着这个思路不可行。
golang 的指针就是实现为智能指针的吧。而不是简单的 int65 的变形。
【 在 zephyroops 的大作中提到: 】
: 你这搞懂了c语言指针和shared_ptr机制吗
--
FROM 47.243.39.*
完全可以,嵌入式的就用常规的编译器
【 在 hgoldfish 的大作中提到: 】
: 把所有的指针,在编译时都替换成 shared_ptr<>,把 free() 替换成空函数。这样是不是只有内存泄露,没有 double free 了?
--
FROM 114.88.11.*
引用计数的 shared_ptr 是胖指针,这与 C 的可以指针算数、可以随意强制类型转换的指针是不能随便兼容的。
指针内存安全的重难点是别名分析,不要求类型安全是不能做到准确的别名分析的。所以现代内存安全的语言一定要限制指针算数和指针类型转换,这才是问题解决之道。
靠额外簿记胖指针信息,可以费力解决 double free 的问题,传统 gc 都能做,但距离内存安全还远,意义不大。
【 在 hgoldfish 的大作中提到: 】
: 主要是 c 语言比较底层,所有没人这么搞。但不代表着这个思路不可行。
:
: golang 的指针就是实现为智能指针的吧。而不是简单的 int65 的变形。
: ...................
--
修改:milksea FROM 114.249.220.*
FROM 114.249.220.*
于是发明了java?
【 在 hgoldfish 的大作中提到: 】
: 把所有的指针,在编译时都替换成 shared_ptr<>,把 free() 替换成空函数。这样是不是只有内存泄露,没有 double free 了?
--
FROM 114.93.62.*