Java还是C++?

您好,我希望对一个主题有一些意见.我去过
编程Python已有将近两年的时间.最近我学到了珀尔,
但是坦率地说,我对此不太满意.现在我想继续
两个Java或C ++,但我不确定哪个.你认为哪一个
Python程序员的过渡是否柔和?你认为哪一个
会教我最好的教育吗?

# 回答1


在342367 20080414 074410 s0thybe@gmail.com写道:
C ++适合受虐狂.去爪哇.
# 回答2


4月14日,下午12:21,鲍勃·马丁(Bob Martin)<鲍勃·马尔(Bob.mar)...@excite.comwrote:
当然是爪哇.与C ++作业相比,找到Java作业也容易.
# 回答3


在4月14日,11:44*AM,S0S ...@gmail.com写道:
好吧,如果您需要更轻松的过渡,请选择Java.但是我个人
建议您选择C/C ++.有一些非常扎实的
原因.
1.您仍然可以使用Ur Python Konwledge,与您集成Python
应用程序,用C/C ++扩展Python,等等.那不会
只会使您受益,但整个社区.
2. C/C ++在此过渡中可能会教您更多的东西
Java Will.您可能知道所有好的软件工程内容
也许是这样(您仍然可以在Python中使用)但是
去C/C ++您实际上可以深入研究系统编程和
像这样的东西.当您这样做时,您可以扩展Python和
为社区做出贡献.
3.当您掌握C/C ++时,您的摩擦会较小
永远过渡到任何其他语言.我说你
首先选择Python,因为我倡导
好吧...我看到的编程应该被教或接受编程的方式是
喜欢 :
bash/shell脚本-python/perl -c/c ++ -sembly ....(来自
在那里,鉴于您给了足够的时间到达最终部分,因此您不应该
到C#/Java/vb/delphi或其他任何东西都有任何困难
良好的RAD甚至生产水平的性能不太关键
应用程序).因此,如果您喜欢系统编程
知道事情如何完成,具有扎实的计算背景并给予
Python Python给您的东西,去C/C ++.
# 回答4


如果是出于教育目的,那么您绝对没有什么可
向Java学习.在高级别的语言方面,我宁愿推荐
Haskell或Ocaml(功能编程)和/或ERLANG(并发
编程).如果您想走"靠近金属"的方式,那么
最好学习C.
我的2美分...
# 回答5


2008年4月14日星期一00:49:13 -0700,Xakee写道:
什么是C/C ++!? C和C ++是完全不同的语言.
再见,
marc'blackjack'rintsch
# 回答6


Advanced JavaScript也可能教您一些东西,并且非常有用
同时.
看看雅虎上的克罗克福德课程!视频. http://video.yahoo.com/watch/111593 http://video.yahoo.com/watch/111594 http://video.yahoo.com/watch/111595 /111596 http://video.yahoo.com/watch/1 11585 http://video.yahoo.com/watch/111586 http://video.yahoo.com/watch/111587(_@@_)
4月14日,2:24*am,bdsatish 当然是爪哇.与C ++作业相比,找到Java作业也容易.
根据领域的不同.
# 回答7


在4月14日,1:44*AM,S0S ...@gmail.com写道:
这取决于您学习的原因.如果您是针对的
特定的就业市场,找出那个市场中的前景.和
请记住,如果要工作,您也必须开始
相关库和框架的速度.
如果是教育性的,我建议C ++只是为了了解指针
和内存管理,因此您可以更好地了解正在发生的事情
在Java和Python和Ruby和C#等语言的封面下.
# 回答8


我不能从个人经历中说(那是C,C ++,然后为我python)
但是我认为您会发现Java非常烦人,特别是如果您重视
Python优雅. C ++和Java都有与
Python,但C ++的设计更好,更灵活.
至于"工作数量"参数,确保有更多的Java作业,但是
这被Java程序员的数量所抵消.
干杯,
格雷格
# 回答9


在4月14日上午2:44,S0S ...@gmail.com写道:
如果您对Perl不满意,我的赌注是您会更少
比Java舒服.
它比几乎所有的C ++更柔和地过渡到Java
初始点.
卡尔银行
# 回答10


我的想法,如果您真的很喜欢Python,并且永远不会考虑擦除它
我主要同意这个.编写脚本非常好
尤其是需要经常更改的应用程序.加上那里
是几个工具包和现有库可用于Python.我有
用过一些wxpython,它派上了一些应用程序
我通常会用C ++/WXWIDGETS编写
每隔几周重新编译以适应我的需求(数据提取工具/等)
但是,在某些情况下,汇编语言更好,尤其是
任何需要"快速"并具有较低开销的东西.我不会
不过,使用Python创建非常图形的密集型游戏或任何内容
它可以与Pygame/Pyopengl一起用于一些简单的东西.还
Python中的所有内容都是一个对象,因此当它可以开始消耗内存
处理非常大的数据集.而且由于无法保证何时
发生垃圾收集,简单地"删除"一个项目不能确保它
完全消失了,特别是如果有循环引用
可以使用" gc.collect()"来处理.
我认为C ++只是C的简化,从某种意义上说
更容易做的事情需要在C中进行更多的工作.
仍然使用C ++没有所有更复杂的方面,但仍在
其他方面的优势.
C有一个优势,它不适合背后的任何东西.这个
非常有用,特别是对于任何形式的系统开发或
你必须知道精确 是的.仍然可以做
在C中的"面向对象"的开发,只需要更多的键入即可
设置所需的一切.甚至可以完成诸如com for Windows之类的事情
在C中,可以这么说,它只需要手动构建" VTable".
另外,C似乎避免使用C ++可以使用它们的临时性
如果需要,在转换和作业中会自动.
C ++通过为您做某些事情使其中的某些更容易.服用
字符串对象例如.在C中,分配只会进行内存副本
手术:
字符串A,B;
b = a;
语句" b = a"只会复制" b"的内存和指针
要" a",这意味着他们俩都指向相同的缓冲区.避免
这是可以在
使用C ++. C中的情况也是如此:
string_assign(&b,&a); / *而不是b = a */
然后,如果结构包含对象,则需要更多的工作.例如,
在C中:
Typedef结构名称
{
弦名;
字符串首先;
字符串中间;
字符串last;
字符串谱系;
} 姓名;
void name_create(名称*名称)
{
string_create(&name->荣誉);
string_create(&name-> first);
string_create(&name->中间);
string_create(&name-> last);
string_create(&name-> lineage);
}
void name_assign(名称*自我,名称*其他)
{
string_assign(&自我>荣誉,及其他 - >荣誉);
string_assign(&self> first,&other-> first);
string_assign(&self>中间,及其他 - >中间);
string_assign(&self> last,&other-> last);
string_assign(&self> lineage,&other-> lineage);
}
名称P1,P2;
name_create(&p1);
name_create(&p2);
name_assign(&p2,&p1);
但是在C ++中,这没问题:
名称P1,P2;
p2 = p1;
这将自动调用任何包含对象的构造函数
初始化字符串.隐性作业操作员
自动执行任何包含对象的分配.
破坏也是自动的.当" p1"脱离范围时
破坏者称为所有包含对象的破坏者.
而且,如果您想要更多的控件,则可以实现默认值并复制
构造函数,攻击器和作业操作员,并告诉他们去做
你想要什么.只是要当心,因为显式构造函数只会调用
任何父类的默认构造函数(甚至复制构造函数)
除非使用初始化列表,并且明确的分配不会
自动进行父级分配.
C ++都不是更好,这取决于需要的
完毕. C仅执行所讲的内容,并且具有更轻松的外部联系
因为没有名字乱七八糟. C ++做很多必要的事情
自动,但明确的构造函数和分配运算符可以
仍然被宣布控制它们,并经常做同样的事情
在C ++中,代码行的少于C.
至于Java,我认为在某些领域,它是"过度使用的",尤其是在
嵌入式发展.我参加了北卡罗来纳州,并在迎新期间
代表正在谈论一个小的机器人设备,以及如何
它 里面有一个完整的Java VM,只需" 6分钟才能启动".
一些人声称Java在嵌入式方面非常好是可移植性
设备.但是,如果该程序移至另一个设备,则可能
如果新设备具有不同的不同,仍然需要更改和重新编译
IO引脚,计时器,中断等.大多数芯片都有C
编译器/翻译器可用,并且本来可以使用相同的程序
用C编写,直接编译为所需的机器代码
设备,立即"启动",也不需要Java VM.如果
需要对其他设备的可移植性,然后一个抽象层可以是
在程序中创建,设备/硬件特定代码可能是
与该程序的其余部分分离到该层.
好吧,所有这些只是我的观点,而不是为了冒犯任何人.
# 回答11


在342436 20080414 160208 =?utf-8?b?r3j6zwdvcnogu8wcb2rrb3dpy3o =?= 我不能从个人经历中说(这是C,C ++,然后对我来说Python),但是我想您会发现Java非常烦人,尤其是如果您为优雅而估价时. C ++和Java都有不同的哲学,但C ++的设计更好,更灵活.
您一定在开玩笑 - 设计更好? C ++是一个已经很贫穷的人
语.
我个人发现Java非常满意.
# 回答12


布莱恩:令人印象深刻!
这是对此最平衡,最有消息灵通和有趣的答复
辩论.即使这样,我也想发表一些评论.
我尝试了所有语言,并认为自己不可知.但是,我
想大致重复詹姆斯·高斯林(James Gosling)(Java发明家)所说的
在我参加的演讲中:Java很好,因为您可以在Java工作
现在到处 - 从嵌入到台式机到超级计算机和
服务器.而且,我想发表自己的评论:Java是
我尝试过的语言为您提供了开发人员的最大帮助.
对于每次崩溃,都有一个完整且有用的堆栈跟踪.使用
Eclipse,您可以自动生成许多"样板"代码
声称使Java无聊写(获取,设置,构造函数...).它
或多或少地告诉您如何修复小错误 - ';' }丢失
例如.即使是Python也没有帮助.卷曲"意外缩进"
或当您忘记a)或a时非常有用的"错误语法".
C(或C ++)学习与金属交谈,
Java或Python用于对象取向,
Java将为您提供最大的帮助,
python让您快速入门,
C ++是每个细节上最难理解的
但是c使您用管理内容使您失望(尝试转换INT
到字符串;我发现自己谷歌搜索了一个小时!).
我尝试了这种臭名昭著的"在C中扩展",我会忘记直到
你知道c和python又有一点...另外,在C ++中扩展了Python
或Java是可能的 - 我还没有管理C ++,而Java我没有尝试过.
干杯!
保罗.
丹15.四月. 2008 KL. 05.46 Skrev Brian Vanderburg II:
我主要同意这个.编写脚本非常好
应用 特别是需要经常改变的人.加
那里
是几个工具包和现有库可用于Python.
我有
用过一些wxpython,它派上用场了
申请
我通常会用C ++/WXWIDGETS编写
每隔几周重新编译以适应我的需求(数据提取工具/等)
但是,在某些情况下,汇编语言更好,尤其是
任何需要"快速"并具有较低开销的东西.我
不会
使用Python创建非常图形的密集型游戏或任何内容
尽管
它可以与Pygame/Pyopengl一起用于一些简单的东西.还
Python中的所有内容都是一个对象,因此它可以开始消耗内存
什么时候
处理非常大的数据集.而且由于无法保证
什么时候
发生垃圾收集,简单地"删除"一个项目不能确保

完全消失了,特别是如果有循环引用
可以使用" gc.collect()"来处理.
我认为C ++只是C的简化,从某种意义上说
做到这一点
更容易做可以在C中完成更多工作要做的事情.
能够
仍然使用C ++没有所有更复杂的方面,但仍在

其他方面的优势.
C有一个优势,它不适合背后的任何东西.
这个
非常有用,特别是对于任何形式的系统开发或
您必须确切知道发生了什么.仍然可以做
C中的"面向对象"的开发,只需要更多
打字到
设置所需的一切.甚至诸如com for Windows之类的东西也可以是
完毕
在C中,可以这么说,它只需要手动构建" VTable".
另外,C似乎避免使用C ++可以使用的临时性
他们
如果需要,在转换和作业中会自动.
C ++通过为您做某些事情使其中的某些更容易.服用
字符串对象例如.在C中,分配只会记忆
复制
手术:
字符串A,B;
b = a;
语句" b = a"只会复制" b"的内存和指针
要" a",这意味着他们俩都指向相同的缓冲区.避免
这是可以实现复制构造函数或作业运算符
什么时候
使用C ++. C中的情况也是如此:
string_assign(&b,&a); / *而不是b = a */
然后,如果结构包含对象,则需要更多的工作.为了
例子,
在C中:
Typedef结构名称
{
弦名;
字符串首先;
字符串中间;
字符串last;
字符串谱系;
} 姓名;
void name_create(名称*名称)
{
string_create(&name->荣誉);
string_create(&name-> first);
string_create(&name->中间);
string_create(&name-> last);
string_create(&name-> lineage);
}
void name_assign(名称*自我,名称*其他)
{
string_assign(&自我>荣誉,及其他 - >荣誉);
string_assign(&self> first,&other-> first);
string_assign(&self>中间,及其他 - >中间);
string_assign(&self> last,&other-> last);
string_assign(&self> lineage,&other-> lineage);
}
名称P1,P2;
name_create(&p1);
name_create(&p2);
name_assign(&p2,&p1);
但 在C ++中,这没问题:
名称P1,P2;
p2 = p1;
这将自动调用任何包含对象的构造函数
初始化字符串.隐性作业操作员
自动执行任何包含对象的分配.
破坏也是自动的.当" p1"范围不在

破坏者称为所有包含对象的破坏者.
而且,如果您想要更多的控件,则可以实现默认值并复制
构造函数,攻击器和作业操作员,并告诉他们去做
你想要什么.只是当心,因为仅显式构造函数
呼叫
任何父类的默认构造函数(甚至复制构造函数)
除非使用初始化列表,否则明确的分配将
不是
自动进行父级分配.
C ++都不是更好,这取决于需要的
完毕. C仅执行所示,并且外部也更容易
连锁
因为没有名字乱七八糟. C ++做很多必要的事情
自动,但明确的构造函数和分配运算符可以
仍然被宣布控制它们,并经常做同样的事情
在C ++中,代码行的少于C.
至于Java,我认为在某些领域,它是"过度使用的",尤其是在
嵌入式发展.我参加了北卡罗来纳州,并在迎新期间
代表正在谈论一个小的机器人设备,以及如何
它内部有一个完整的Java VM,只需"启动6分钟".
一些人声称Java在嵌入式方面非常好是可移植性
设备.但是,如果该程序移至另一个设备,则可能
如果新设备具有
不同的
IO引脚,计时器,中断等.大多数芯片都有C
编译器/翻译器可用,并且本来可以使用相同的程序
用C编写,直接编译为所需的机器代码
设备,立即"启动",也不需要Java VM.如果
需要对其他设备的可移植性,然后抽象层可以

在程序中创建,设备/硬件特定代码可能是
与该程序的其余部分分离到该层.
好吧,所有这些只是我的观点,而不是要冒犯
任何人.
-http://mail.python.org/mailman/listinfo/python-list
# 回答13


在15Áðò,07:46,Brian Vanderburg II
写道:
[...]
太好了.也可以做python面向对象
C." pymethoddefs"中的编程是相同的" vtables".我找到了
python/c api并不难,问题是缺乏好
教程和错误的假设是CTYPES或SWIG以某种方式
更好的.在#include python.h` c变得非常友好之后.
# 回答14


在这种情况下,C#的角色或位置是什么?
如果我还记得很好,有些人说C#有所改善
C ++或Java.
e
- -
Egbert Bouwman -Keizersgracht 197 II -1016 DS阿姆斯特丹-020 6257991
============================================== ====================(_@_ _ )
埃格伯特写道:
我认为C#处于一个很好的位置,可能建议使用. C#有
能够很容易与Ironpython合作的增加优势.因此
如果您想与.NET一起发展,您可以轻松地发挥
带有C#的Python用于速度或库例程.
当然,Jython对Java也是如此,尽管它落后了
这些天的发展.
Slick Python Integration是C#和Java击败的一个领域
C ++.当然有Boost :: Python,但是学习曲线是一种
陡.即使安装也很困难. Python的C API非常简单
和类似于c,因此,如果选择主要使用C/Python组合
(通常我这些天我要做的),它运行良好,但不太容易
作为Ironpython和C#.
深入研究辩论,我个人认为所有程序员和
特别是计算机科学人员,应该精通C.
应该能够编写数千行C代码,使用动态内存
分配,数据结构等,如果资源泄漏很少
您可以明智地选择工具(glib for C应该是标准的!).这个
是为您提供背景和低级理解.但是你
除非您进入系统,否则不太可能专业地编程
编程,或隶属于核心,低级的东西,例如库
开发或嵌入式系统.
至于C ++和Java,我发现好的C ++程序员可以 *轻松 *
当他们想要/需要时移至Java.相反 *通常不
真的*. Java借给了太多的不良习惯,这些习惯杀死了可能的C ++
程序员,尤其是关于资源管理和事物的
就像范围之后的破坏一样.我认为这是一件关键的事情
人们有时会忘记.同样,精通UNIX和Linux的人
使用和开发的计算机可以更轻松地移动到
窗户比相反.
好的程序员应该能够拾取新的语言和范例
相当容易,在短短几周内变得流利.对我来说是
通常一个星期,尽管学习框架和工具包更多
困难(Java框架).一个很好的练习可能是捡起一个
每年的新语言,并做一些专业的事情(例如4000-10000
LOC).选择一种新类型的网络编程来探索.任何.
下次出现小宠物项目时,尝试一种新语言或新语言
工具包.使用方案在SCSH中尝试一些炮弹.
# 回答15


4月15日,3:07*上午,保罗·安东·莱特尼斯(Paul Anton Letnes)
写道:
花了一个小时才找到sprintf()?
# 回答16


在4月15日,11:55*AM,Egbert C#比C ++更类似于Java.两者都不类似于C ++,
除了某些化妆品的句法方式.就个人而言,那将是我的
最后选择. C ++是这三个中最便携的,也是唯一的非 -
专有的(例如Python).
# 回答17


您一定在开玩笑 - 设计更好? C ++是一个已经很贫穷的人
虽然我是R. 对于C ++来说太难难以
使用,我会以某些心态和优先级承认Java可能
做一个有效的选择.如果有人愿意扩大有关的知识
编程并找到python的补充.
我不同意的地方是C是一种糟糕的语言.您可能更喜欢Unix
用帕斯卡(Pascal)编写,但C仍然是一种出色的语言,即使不再
'一般用途.'
C ++继续其授予尽可能多的控制的理念
程序员.无论是好事还是坏事都是有争议的,
取决于您使用的目的.
bing.
# 回答18


好吧,如果您是新手 - 首先找到功能,那么如何使用它,
这个有趣的%d5(或者不记得)语法 - 很难
相比:
cout << 5或类似的流技巧,或者仅在Java中仅5 +""
python中的str(5).无论如何,对于C新手来说,小任务很难.
丹15.四月. 2008 KL. 19.35 skrev lbdydeby@yahoo.com:
花了一个小时才找到sprintf()?
-http://mail.python.org/mailman/listinfo/python-list
# 回答19


4月15日,下午1:46,Brian Vanderburg II
写道:
是的,C ++确实尝试有所帮助,所有这些自动副本
构造函数,作业操作员和攻击器实现螺丝
面对指针时,皇家
指针基本上是不愿写任何东西的全部原因
首先在C或C ++中).依赖这些默认值的代码
方法实现几乎可以肯定会充满内存泄漏
和双重错误.因此,他们不是便利,而是成为一个
痛苦的简单编写代码的方法,这些代码默默地做得非常非常非常非常
错误的事情.
其他事情之类的方法(包括破坏者!)是非虚拟的
默认情况下还使C ++代码非常容易犯错(没有它
显然看起来错了).
C ++的整个设计被过早优化
默认设置中的速度和内存使用情况,而不是选择
安全默认并提供简洁的方法来允许程序员
说"我知道优化X在这里很安全,请使用它".
结果?该语言中的任何严肃项目都必须采用
自己避免所有这些陷阱的技术,这些技术是
可能消除选择所提供的任何假定的优化
C ++委员会的成员,同时用样板填充代码库
仅出于解决语言缺陷的目的而存在
设计(斯科特·迈耶斯(Scott Meyers)详细介绍了这些最糟糕的
问题,比我以往任何时候都更清楚,更雄辩[1].
也就是说,C ++代码比普通C代码具有一个 *巨大的好处,
是示波器控制对象的删除,以及关联的资源 -
获取-ISInialisation Model.即使不使用异常
(尽管它们也很方便),Raii是一种绝佳的方式
保证释放内存,关闭文件或其他
当blo时发布资源 代码的CK完成. Raii是
实际上,PEP 343的最终形式背后的灵感之一
带有陈述.
干杯,
缺口.
[1] http://www.amazon.com/effective-specific-addison-wesley-
专业计算/DP/0201924889
# 回答20


在4月14日,11:44*AM,S0S ...@gmail.com写道:
从不了解编程语言到知道一个人的运动
比从一一转移到两个的转变始终要大得多(请参阅http://en.wikipedia.org/wiki/diminishing_returns).那是你
从这种转变中获得的可能比从Python那里得到的要少得多
两年前.
因此,在您进行此轮班之前,请问自己:您是否拥有最好的
Python提供什么?我在大学里教python
几年,我总是会告诉我的学生图书馆
参考提供了现代计算机科学/IT的更好的观点
比我知道的其他任何东西. [没有太多听过的是
另一件事:-)]
然后,Python有很多高级(新)的东西:发电机和
发电机表达式,综合,lambdas和功能
编程,描述符和协议.
也就是说,您当然可以选择第二语言来优化
您的学习(优化的地方可以最小化或最大化!)
一种有希望的语言(在积极发展下)是卷曲的.
(http://www.curl.com)
它的目标是
例如效率的C ++(本机编译器而非VM或解释器)
像c#/java一样,带有GC风格
像JavaScript一样,在支持动态丰富的Web应用程序中
除了更换HTML
# 回答21


2008年4月21日星期一,06:14:08 -0700(PDT),nickc 是的,C ++确实尝试有所帮助,所有这些自动副本
构造函数,作业操作员和攻击器实现螺丝
面对指针的皇家
我认为这些是新手问题.这三个规则
"默认实现"很简单,并且匹配C的作用
结构.使用标准容器,养成禁止的习惯
复制物体无意义的复制,并记住
"显式"关键字,您很少有问题.
是吗?我很少在C ++中使用指针作为一种
对象参考,主要是因为我被迫进行.
我使用C ++,因为它是一种具有静态键入的表达语言,
它可以访问我的所有数百个图书馆
(UNIX)机器.并且因为使用很有趣.
我之所以使用Python,是因为它是一种具有动态键入的表达语言,
我可以在我的
(UNIX)机器.并且因为使用很有趣.
我已经与旧代码一起使用了这类错误.
检查和修复很容易.如果课堂有指针成员
has-a类型,构造函数,操作员=和驱动器必须处理
他们(或被抑制).如果他们不这样做,则代码将破坏.
如果您掌握了不变的概念,那么很难犯错.一个
Foo类型的对象具有许多有效状态 s.你必须确保
没有办法创建处于无效状态的FOO,或者
销毁一个而没有清理状态.最好的方法通常是
从提供类似保证的成员中构建它,例如这
标准容器.
硬币的另一侧是您可以在C ++中编写小类
没有 *没有开销 *.如果我的班级可以作为整数实现,
它不需要比整数更慢或占用更多空间.它
可以具有价值的语义,像整数一样在堆栈等上生活.
我认为Java程序员避免了这样的类型,我认为它会减少
在他们的程序中键入安全性.
好的,这可能是相反的方式,所以有一个
"非虚拟"关键字...但是另一方面,我在
C ++大约与Python一样频繁,即几乎永远不会.
"过早优化"是一个词,总是用作一个
武器,不是吗?
但是,是的,我认为我们至少可以同意这一点:当您编程时
在Python和C ++中,很明显C ++从不
牺牲速度或正确性,很明显
程序员为此付出了代价.比较...例如,
C ++标准库的非常详细的一般迭代器和
Python的str.split和str.join等算法概念.一个
函数列出了字符串列表以及定界符并返回
在C ++标准库中,字符串是不可想象的.
是的,RAII比我所知道的任何其他语言都是一个大优势.
与良好的旧C相比,我可以想出很多其他.
我打算在这里谈论有关C ++与Java的话,但事实
自从爪哇出来以来,我还没有写过几页.
语言(或周围的文化)似乎想孤立
来自世界其他地方 - 与C ++和Python不同.
/Jorgen
- -
// jorgen grahn \ x/ snipabacken.se r'lyeh wgah'nagl fhtagn!
# 回答22


总结讨论(并给出我的意见),这是一个
"算法"找出您接下来要学习的语言:
1.如果您只想学习另一种语言,没有其他
基本问题,学习红宝石.
2.如果您想学习另一种语言来设计中等至大的语言
尺寸应用,考虑市场,工作等,速度提高
静态字节编译的语言,学习Java或C#.
3.如果您想学习另一种语言来设计应用程序
速度增长,但您希望过渡尽可能平稳
并且没有市场问题(并且有可能
稍后又有一步达到步骤2),学习Groovy(对于JMV)
或嘘(用于.net).
4.如果您想开发应用程序,但出于某些特殊原因,
您需要本地汇编(例如速度要求,嵌入
系统等),学习C ++
5.如果您想开发系统软件,或者只是学习更好的方式
机器工作或了解更好的低级实施方面
软件,学习C.
6.如果您只想 加速您的Python程序或提供一些
Python的特殊,系统特定或优化的行为
应用程序,或者您只想补充您的Python知识,
学习C.
在4月21日,晚上7:26,Jorgen Grahn 我认为这些是新手问题.这三个规则
"默认实现"很简单,并且匹配C的作用
结构.使用标准容器,养成禁止的习惯
复制物体无意义的复制,并记住
"显式"关键字,您很少有问题.
是吗?我很少在C ++中使用指针作为一种
对象参考,主要是因为我被迫进行.
我使用C ++,因为它是一种具有静态键入的表达语言,
它可以访问我的所有数百个图书馆
(UNIX)机器.并且因为使用很有趣.
我之所以使用Python,是因为它是一种具有动态键入的表达语言,
我可以在我的
(UNIX)机器.并且因为使用很有趣.
我已经与旧代码一起使用了这类错误.
检查和修复很容易.如果课堂有指针成员
has-a类型,构造函数,操作员=和驱动器必须处理
他们(或被抑制).如果他们不这样做,则代码将破坏.
如果您掌握了不变的概念,那么很难犯错.一个
Foo类型的对象具有许多有效状态.你必须确保
没有办法创建处于无效状态的FOO,或者
销毁一个而没有清理状态.最好的方法通常是
从提供类似保证的成员中构建它,例如这
标准容器.
硬币的另一侧是您可以在C ++中编写小类
没有 *没有开销 *.如果我的班级可以作为整数实现,
它不需要比整数更慢或占用更多空间.它
可以具有价值的语义,像整数一样在堆栈等上生活.
我认为Java程序员避免了这样的类型,我认为它会减少
在他们的程序中键入安全性.
好的,这可能是相反的方式,所以有一个
"非虚拟"关键字...但是另一方面,我在
C ++大约与Python一样频繁,即几乎永远不会.
"过早优化"是一个词,总是用作一个
武器,不是吗?
但是,是的,我认为我们至少可以同意这一点:当您编程时
在Python和C ++中,很明显C ++从不
牺牲速度或正确性,很明显
程序员为此付出了代价.比较...例如,
C ++标准库的非常详细的一般迭代器和
Python的str.split和str.join等算法概念.一个
函数列出了字符串列表以及定界符并返回
在C ++标准库中,字符串是不可想象的.
是的,RAII比我所知道的任何其他语言都是一个大优势.
与良好的旧C相比,我可以想出很多其他.
我本来打算 在这里说些关于C ++与Java的信息,但事实
自从爪哇出来以来,我还没有写过几页.
语言(或周围的文化)似乎想孤立
来自世界其他地方 - 与C ++和Python不同.
/Jorgen
- -
// jorgen grahn \ x/ snipabacken.se r'lyeh wgah'nagl fhtagn!
# 回答23


在4月21日,下午5:26,Jorgen Grahn 我认为这些是新手问题.这三个规则
"默认实现"很简单,并且匹配C的作用
结构.使用标准容器,养成禁止的习惯
复制物体无意义的复制,并记住
"显式"关键字,您很少有问题.
是的,但是你为什么要记住?不是错误吗?
容易使对象无用和构造函数明确,除非
否则说了吗? (是的,结构的默认实现必须
匹配C,但"类"是一个新的关键字.)
硬币的另一侧是您可以在C ++中编写小类
没有 *没有开销 *.如果我的班级可以作为整数实现,
它不需要比整数更慢或占用更多空间.它
可以具有价值的语义,像整数一样在堆栈等上生活.
我认为Java程序员避免了这样的类型,我认为它会减少
在他们的程序中键入安全性.
我从1.3版开始就没有写过Java,所以也许事情有
更改.但是上次我检查一下,如果您想要微小的价值仪表
在Java中,您会被内置的类型所困.我最大的
抓住这种语言.
# 回答24


hdante aécrit:
而且,如果您真的想真正地 *学习 *,请学习功能
语.
# 回答25


Hdante写道:
"学习C",好的,但是然后去使用Cython.
Stefan
# 回答26


鲍勃·马丁(Bob Martin)写道:
C ++适合受虐狂.去爪哇.
绝对是爪哇.我有十年的C ++经验.
C ++是唯一无安全隐藏的主要语言.
那是个错误.
Perl之所以有用,是因为它在任何地方运行;您将能够运行
您的PERL程序几乎所有商业网络托管服务.
除此之外,对此没有什么好事.
Java是一种通常很好的语言,可以从下面走出来
一群平庸的图书馆.
约翰·纳格(John Nagle)
# 回答27


4月21日,下午3:14,nickc [...]
当一类包括指针数据成员时,没有单一的,正确的
处理它的方法. C ++自动生成的成员功能是
定义以便在处理 *值 *时保持一致.任何C ++
尚未学会这个简单事实的程序员不应该被信任
使用任何编程语言. Python,尤其是Java只会
让他很难发现他正在造成的混乱.
我可以看到这可能会使程序员来自
python,但对于来自C的人来说更自然.
我ab 完全同意. 您在九十年代初放弃了C ++吗? 事情改变了 从那以后. 许多标准/普遍接受的解决方案 您提到的问题可以在C ++标准库和 Boost(http://boost.org). 与std :: vector and boost :: shared_ptr 可以走很长的路,而不会给指针任何特别的东西 考虑因素. 干杯, Nicola Musatti

标签: python

添加新评论