与C ++相比,哪种语言具有更高的抽象级别并且需要更少的手动内存管理?
我学习C ++已有一段时间了,我发现它非常强大。但是,问题在于抽象级别不高,我必须自己进行内存管理。
我可以使用哪些语言来使用更高级别的抽象。
解决方案
回答
如果我们对C ++语法和样式感到满意,则可能会发现D是一种有趣的语言。或者,如果我们想分支出去,那么Python,C#,Java,Ruby中的任何一种都是不错的选择。
回答
如果我们处于Microsoft生态系统中。
Python和Ruby在Linux / Unix / etc空间中似乎具有最大的吸引力。
在Macintosh和iPhone上,ObjectiveC占主导地位。最新的MacOS为一部分框架实现垃圾回收,但是要使用其余的,我们必须自己进行资源管理。
我们可以学习Java,因为它也可以进行垃圾回收,但是要成为一名富有成效的Java开发人员,我们需要熟悉的框架数量之多令人生畏。
回答
好吧,如果我们正在寻求很高水平的抽象和内存管理,那么我想说Lisp将是理想的选择。我正在慢慢地学习它,这是我使用一种新语言所获得的最大乐趣。
话虽这么说,Python或者Ruby可能是表现力和流行度之间更好的折衷方案。如果我们正在寻找Web应用程序,Python的Django框架是更好的RAD框架之一。
回答
同上Lisp,..或者方案
即使我们从未使用过它,也很方便。我只有在学习了模板编程之后才真正开始。
另一个是序言。它会使我们陷入非连续的心态。
回答
由于我们已经开始使用C ++,下一步将是通过托管C ++或者托管的C ++扩展来学习.Net。这将使我们进入.Net框架的广阔天地。可以轻松学习其他.Net语言,例如C#,VB.Net等。
MC ++擅长的领域之一,实际上在.NET语言中是独一无二的,它具有以下能力:可以使用现有的非托管(C ++)应用程序,使用/ clr开关对其进行重新编译,使其生成MSIL,然后在CLR。这个非凡的壮举被恰当地称为" It Just Works(IJW)"!有一些限制,但是在大多数情况下,该应用程序将仅运行。 C ++代码可以包含老式的printf语句,MFC,ATL甚至模板!
回答
尝试像Haskell这样的真正异国情调的东西,可以让我们以不同的方式思考。它还可以进行递归思考。 C ++具有递归功能,但它渗入了功能语言的更多部分。
回答
Java,C#,Ruby,Python和JavaScript可能是摆在我们面前的大选择。
Java和Care的语言差别不大。与C ++的最大区别在于内存管理(即,当不再引用对象时,对象将自动释放)。如果我们对桌面样式的应用程序感兴趣,或者热衷于静态类型,则可以选择它们(我们可能会根据对Microsoft和Windows平台的看法在它们之间进行选择)。在这两种情况下,我们都会发现比标准C ++丰富得多的标准库。
Python和Ruby从静态类型迈出了一步,进入了一个可以在任何对象上调用和方法的世界(如果不存在,则在运行时失败)。这既是一种祝福(减少了很多样板代码)又是一种诅咒(编译器无法再为我们捕获这些错误了)。再一次,我们会发现它们具有更丰富的标准库,并且比Java / C#更高。性能是主要的缺点,据我所知,Python比Ruby快一些。要在它们之间进行选择,如果我们对Ruby on Rails框架社区的Web开发感兴趣,则可以选择Ruby,否则可以选择Python。
JavaScript与C ++的不同之处在于,它完全消除了类。对象只是从其他对象中克隆而来的,可以在运行时将方法和属性添加到它们中。非常灵活,但也很容易弄成一团糟。如果我们对在浏览器中运行应用程序感兴趣,那么JavaScript是唯一的选择,而浏览器确实是一种平台。如果不使用浏览器做很多事情,就会发现可用的标准库非常有限,但是有很多好的框架可以弥补其中的空白。
其他一些有趣的,但更多的利基选择是
- Smalltalk-在Ruby和Python阵营中或者多或者少,据我所知,它的运行速度显着提高。尽管要小心,但是_我已经看到很多优秀的工程师学习Smalltalk,并且再也不会回来;)
- Objective-C-当C面向对象时,C ++采取一种方式(静态类型),而Objective-C采取另一种方式(动态类型)。它的灵感来自Smalltalk,如果我们使用Mac / iPhone,则具有良好的标准库。在内存管理方面,与我上面列出的所有其他东西不同,它不是垃圾收集(尽管现在是Mac OS X 10.5上的一个选项),但是它确实有一个引用计数方案,这使生活比手工管理内存要简单得多。
- Lisp-我从来没有学过Emacs小型黑客所需的知识。据我了解,图书馆在当时很不错,但是尽管语言仍然非常优雅,但与时俱进。
- Haskel-如果我们想完全脱离对象和类,则可以使用Haskel及其功能方法(或者使用如上所述的Lisp,或者如果使用.Net则使用F#)。基本上,我们要放弃循环和变量,而赞成递归地进行所有操作。需要花费一些时间来思考,对于大多数现实应用程序可能不切实际,但这是一个很好的学习方法。
- Eiffel-我喜欢它-语法非常简洁,专为严肃的工程类型系统而设计。静态类型(如C#和Java)以及标准库较弱,但是它会让我们真正考虑语言和类库的设计。
- ActionScript和Flex-Flash的编程接口,它基于似乎是JavaScript的静态类型的版本。我已经玩了一点,如果我们对开发基于媒体的应用程序感兴趣的话,它也很不错。我们还可以使用Flex将浏览器扩展到Air平台之外,以构建真正的桌面应用程序。
回答
尝试cmuch :)
回答
我想说的是,从问题来看,我们可能还没有完成有关C ++的学习。如果我们仍在进行自己的内存管理,那么我的朋友还有很长的路要走!
检出auto_ptr和shared_ptr检出Boost库。
与抽象类似,我们具体抱怨什么? AFAIK使用其他强类型语言提供的C ++可以做很多事情。
我知道这并不能回答我们想要前进的问题,但是C ++是我们从未真正停止学习的事情之一。如果我们觉得无聊,请尝试一下模板和模板元编程。
回答
我建议使用python,因为它不仅是一种性感的语言,而且还非常广泛地使用并且易于通过Boost.Python与C ++集成。
但是正如Thomi所说,在C ++中有很多值得探索的地方,借助于Boost库,开发它变得非常容易。
回答
到目前为止,我看到了很多很棒的建议。但是,我认为这里缺少一些汇编程序。
为什么要学习汇编语言?
- 这并不像我们想的那么难。汇编语言的范围比许多现代语言要小得多,要使它有意义,我们需要了解一些技巧,但并不那么复杂。
- 它扩大了知识基础。即使在较高水平下工作,了解基本知识也总是有益的。
- 在调试时,它可能非常有用。特别是在没有源代码的情况下调试本机代码,我们从学习汇编程序中获得的知识将极大地增强我们在这些情况下进行调试的能力。
- 它给我们更多选择。当出现需要汇编代码的罕见情况时,我们将不会感到无助。
- 这对你的简历很有好处。它表明我们学习的不仅是保持当前工作所需的最低限度的知识,还显示了对基础知识的好奇心,使我们进入了不同的编程人员类别,并且该类别的人往往经验丰富,能力更强。
- 太酷了。
一些汇编语言资源:
- Sandpile.org(汇编语言/处理器体系结构参考)
- 加文的80x86汇编指南(一个不错的在线教程)
- 基于Intel的计算机的汇编语言(5e)(用于x86汇编的体面教科书)
回答
我建议我们选择具有以下4个功能的一种或者多种语言,而不是建议使用特定的语言:
- 自动内存管理
- 反思/内省
- 声明式/函数式构造(例如lambda函数)
- 鸭打字
这里的想法是扩展编程视角,使其包含C ++语言无法为我们提供的即开即用的概念。
回答
这取决于我们想做什么。如果我们有兴趣完成某些特定任务,请查看最适合这些任务类型的语言。学习语言的最好方法是实际使用它。
回答
如果我们想抽象化内存管理,那么Java马上就会浮现在我脑海。
回答
我会说这取决于我们想尝试的编程类型。如果我们想停留在OOP方面,请学习Python或者Ruby,这两种语言都提供了一种简便的方法来创建绑定以使用脚本中的C ++代码(出于效率考虑)。
如果我们需要其他编程方法,请学习Lisp或者Haskell之类的"功能"语言。
而且,如果我们需要在C ++应用程序中包含快速而小型的脚本语言,请尝试使用Lua。
最后但并非最不重要的一点是,如果我们了解Java并讨厌它,可以尝试Scala,这是一种可以将Java类与Scala代码混合在一起的语言,非常有趣。
回答
方案。
《小计划者》和《计算机程序的结构与解释》将以奇怪而奇妙的方式使我们大开眼界。
DrScheme是适合初学者的不错的IDE。 Scheme编程语言是一个很好的免费参考。
回答
我建议学习数据库设计和查询语言,例如SQL。
我们可以从Microsoft Access之类的桌面工具开始,也可以使用免费的SQL Server Express或者Postgre或者MySQL。
回答
我会说开始使用Python。它具有更高的抽象水平,它教我们缩进和编写"漂亮"代码的重要性。并不是说"漂亮"很重要,但是它将使代码的未来维护者更加快乐:)
那里有很多示例代码,如果我们使用Linux,则那里有各种发行版,它们基于语言提供了所有(或者大部分)工具。如果我们喜欢研究管理操作系统的工作方式(大多数程序员都这样做),那么这是一个不错的开始。在我开始大呼小叫之前,我说过要管理,而不是我们真正需要的C内核,我们应该已经覆盖了C。
另一方面,深入研究C方面,忽略OO内容并学习函数式编程可能是不错的选择。如果我们走这条路,我还建议从基本的汇编语言入手,就像上面建议的其中一篇文章一样。也许HLA(Randall Hyde的高级汇编,他写了一本很棒的书,叫做《汇编语言编程艺术》)是一个好的开始。我们将学会热爱内存管理,或者在余下的时间中讨厌它。很高兴知道我们想开始从事编程事业:)
但是,如果我们希望通过编程工作,那么只要知道自己在做什么,Java和J2EE就会很容易赚钱。恕我直言,它变得无聊很快。
回答
好吧,我认为学习编程语言没有预定义的途径。我们可能会根据工作需要,学术研究,只是为了娱乐等而学习下一门语言。有很多选择。
如果我们对C ++感到满意,则可以继续学习一些汇编程序。这是一门黑暗的艺术,但是当我们遇到一些困难的调试会话时,我们将很高兴。
在更多抽象方面,Smalltalk非常有趣,纯OOP且100%动态(调试是一件令人愉快的事情,这不是静态类型的语言)。 Dolphin Smalltalk是Windows的一个很好的实现,即使免费的社区版也足够玩。在多平台Smalltalk VM中,请使用Visualworks或者Squeak。 Visualworks非常稳定,并附带大量文档。
如今,Python在许多领域都得到了使用。除了基本的语法和语义外,我对Python一无所知,但是今天对于许多工作来说,它是必需的。
Java,是Java。有趣的是,Java从来没有赶上我。我们可能会完全对Java感兴趣。在此处询问相对于C ++或者其他OOP语言使用它的优势。
对于Web开发,请使用Javascript,尤其要考虑AJAX浪潮。那些日子变得越来越有趣。我们已经讨论过Smalltalk,好的,Seaside是一个很棒的Web开发框架。它的工作原理(至少我尝试过)Squeak / Visualworks ...很漂亮。
好吧,还有更多其他东西可供我们使用:Scheme,LISP,Ruby,Lua,Bash(!),Perl(ugh),Haskell ...试试吧,尽情享受!
回答
t
回答
为什么不学习Qt?它是一个很棒的应用程序开发框架,可在所有平台甚至移动设备上使用!
回答
就个人而言,我一直在用Java,Python,C / ++进行编程,而我最喜欢的必须是python。尽管C ++可以完成Python可以做的一切以及更多工作,但我编写了一个Python程序,大约有10行,而在C ++中大约需要50行。因此,故事的寓意是使用python。
回答
如果还没有,请尝试使用脚本语言。它应该改变工作和思考方式。希望以一种好的方式:)
回答
我必须为Perl提出一个单独的答案。尽管Python在功能上大致等效,并且被认为更加干净和现代,但Perl拥有其自身的优雅,即纯粹的实用主义。它还拥有真正强大的图书馆支持。看一下Perl,以与Haskel ::相反的方向扩展大脑(尽管Perl爱好者声称它可以用于函数式编程)。