- 主题:Java农转写cpp发现,写Java比写cpp省心太多了
【 在 BlackHouse 的大作中提到: 】
: 六年前从cpp转向java阵营,就再也没有转回去了。
:
为啥,没机会还是不想转
--
FROM 112.65.12.*
【 在 stub 的大作中提到: 】
: 一个例子,Java中几乎一切可catch,包括0作除数这种。 这样,写业务逻辑,就可以放心大胆的写,而不用担心异常case导致服务出问题。而cpp一不小心就core了。
难怪java的代码烂的多,看来是因为业务逻辑可以放心大胆写
--
FROM 14.155.115.*
MyException::ThrowOn($flag, "出问题了",-142857);
少一层缩进,爽多了
我总觉得 ThrowOn 比 assert 舒服。 就像 if 对 unless 那么自然
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 大多数现代语言比如C++,C#,Java,python,javascript都支持异常啊,这是人民群众用脚投票的结果啊。
: 异常可以简化很多不必要的error转发逻辑,尤其是中间层,不想处理error就不需要了解底层实现,能写出简洁易读代码
--
FROM 124.240.25.*
现在对线程的理解又一塌糊涂了,以前对线程理解还比较清晰
1 开个自身进程,从不同参数再入,这最清晰
2 Fork 自己, linux 下效率很高, windows 慢死
3 线程,多个执行指针,内存管理,资源管理混乱。
4 协程,先于线程时代出现. 一旦 async 就只能 await 了。 协程到 io 等动作的时候才切换。
大致就记得这些
【 在 hgoldfish (老鱼) 的大作中提到: 】
: java 一切可 catch 住,最重要的原因是 java 的应用场景单一,一般是拿来写 web 服务用,cpp 很少用于这个场景。
: 这个场景,java 社区一般使用线程模型,来一个请求就启动一个线程,所有业务逻辑都在这个线程里面。只要在开始服务请求的时候 try 一下,结束时 catch 一下,所有的异常就被捕获了。
: 看看 cpp 社区,线程?搞笑,用线程怎么高并发。传统的 c/cpp 网络编程是回调又回调,心智负担非常大。异常也无从捕获,因为入口点非常多。
: ...................
--
FROM 124.240.25.*
Intel: 需要我们怎么改进 CPU
Microsoft: 对错误处理更快些
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: CPU设计是紧盯软件的
: 如系统调用怎么写,SEH怎么写,线程切换怎么写,既要节省代码体积也要节省时钟周期
--
FROM 124.240.25.*
Windows下是没有fork的API的,并且MS也不停的ban那些用ntapi自己搭一个fork的行为
现代OS的线程定义很清晰啊,是代表了“执行”这个基本资源
【 在 chaobill 的大作中提到: 】
: 现在对线程的理解又一塌糊涂了,以前对线程理解还比较清晰
: 1 开个自身进程,从不同参数再入,这最清晰
: 2 Fork 自己, linux 下效率很高, windows 慢死
: ...................
--
修改:xiaoju FROM 27.91.71.*
FROM 27.91.71.*
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 可以不代表该这么用
: 我见了太多的纯C风格java,python和javascript代码,都是印度培训班杰作
: 一般来说用什么语言就应该按照什么语言的标准库的规矩写,stl和boost为什么要抛异常啊
C++ 异常最大的问题是,知道怎样写异常安全代码的程序员太少。。
语言本身在降低写异常安全代码的难度这一块也不上心,只会教育人 RAII,又不提供好用点的支持,学 Go 提供一个 defer 也行啊,甚至哪怕加一个 finally 也比现状好
: ...................
--
FROM 59.41.116.*
异常安全有什么坑吗?
不是抛出 Exception,接收的时候用 Exception & 就行了吗?
【 在 vonNeumann (劣币驱逐良币 | 少灌水) 的大作中提到: 】
: C++ 异常最大的问题是,知道怎样写异常安全代码的程序员太少。。
: 语言本身在降低写异常安全代码的难度这一块也不上心,只会教育人 RAII,又不提供好用点的支持,学 Go 提供一个 defer 也行啊,甚至哪怕加一个 finally 也比现状好
--
FROM 110.81.40.*
使用异常的 C++ 代码得把所有涉及到打开/关闭、获取/释放此类操作的代码都用 class 封装起来(所谓 RAII),在实际工程开发中挺麻烦。
而且,RAII 鼓励在构造函数中完成完整的初始化(与之相对的做法是在构造函数里基本不做什么事,真正的初始化由一个单独的 Init 函数来执行),这样就避免不了构造函数抛异常。
然而,只要允许了构造函数抛异常,那写代码就需要更小心了。举个例子,请问下面代码中,分别在以下几种情况下:
* 构造 b_ 时抛了异常
* 构造 c_ 时抛了异常
* (1) 处抛了异常
* (2) 处抛了异常
~A() 会执行吗?c_ 的析构函数会执行吗?b_ 的析构函数会执行吗?
class A {
public:
A() : b_(), c_() { /* ... */ }
A(int x) : b_(), c_() { /* (1) */ }
A(float x) : A() { /* (2) */ }
~A() { /* ... */ }
private:
B b_;
C c_;
}
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 异常安全有什么坑吗?
: 不是抛出 Exception,接收的时候用 Exception & 就行了吗?
--
修改:vonNeumann FROM 183.60.88.*
FROM 183.60.88.*
写C++的基本求生法则是熟读inside the C++ object model
不过理论上说,现代C++不必也不应该手动分配任何一个raw的资源。不如立条规则,破一次例罚款200块钱,请其他人吃东西。
【 在 vonNeumann 的大作中提到: 】
: 使用异常的 C++ 代码得把所有涉及到打开/关闭、获取/释放此类操作的代码都用 class 封装起来(所谓 RAII),在实际工程开发中挺麻烦。
: 而且,RAII 鼓励在构造函数中完成完整的初始化(与之相对的做法是在构造函数里基本不做什么事,真正的初始化由一个单独的 Init 函数来执行),这样就避免不了构造函数抛异常。
: 然而,只要允许了构造函数抛异常,那写代码就需要更小心了。举个例子,请问下面代码中,分别在以下几种情况下:
: ...................
--
FROM 155.64.23.*