J2EE vs. NET, Java vs. C#:比較公正的評價 (轉)
vs., vs. :
Since there's been plenty of discussion on these topics, I thought I'd write down my own views on these matters. For the record, just in case someone questions my experience in languages and libraries, I was one of the first adopters of Smalltalk, C++, and Java, taught all three professionally for several years, taught programming languages at UT Dallas, wrote an ORB in Smalltalk, wrote the first portable STL toolkit for C++, wrote the Space Systems
Historically, languages build on each other, borrowing the best as and then throwing in some new ones. Some languages evolve, some stagnate, and some die. C -> C++ -> C# is a good example of an evolution, and Smalltalk is an example of a language that I loved but is pretty much dead.
C# was designed by Anders Hejlsberg, a long-time hero of mine, the force behind Turbo Pascal and , and a guy with an obvious talent for language design and implemention. In C#, he's taken a lot of the best ideas from previous languages, integrated some new ones of his own, and come up with a natural evolution of where Java was heading. For example, the ability to associate attributes with any element supports declarative programming in an elegant and powerful way. C# makes iteration simpler and more natural for developers, and auto-boxing simplifies manipulating collections of primitives. There are many other nice features of C# that are covered in several articles I've read.
It's also significant to note that several new C# features have already been proposed and will be implemented soon, making C# one of the freshest and quickly evolving languages on the market.
The Java language, on the other hand, had a strong initial start and then essentially stagnated after Java 1.1. The only new thing in the last 6 years has been the assert key, which is not much to write home about. I'm definitely don't like languages that include an entire kitchen sink of features, but C# shows the kinds of features that could easily have been added to Java.
For a while, Sun was sitting in the cat bird's seat with a great lead in the languages and libraries space. didn't want to adopt a strategic language that it could not improve upon, so it decided to create its own language that could be evolved at a reasonable pace. Now that C# has gone beyond Java, Sun has got to quickly evolve Java or watch it slowly fade away. I think that IBM realizes this, and I hope that it's working hard behind the scenes to rectify the situation.
It's frustrating but understandable that James Gosling holds disdain for C#. Gosling keeps going on about how C# is a clone of Java, but it's not - it borrows the best from Java and then adds improvements of its own, just like Java improved upon previous languages. That's the way it works, regardless of which company is involved!
Another thing about C# that seems misunderstood by much of the Java community is the concept of "unsafe" code. The idea behind "unsafe" code is that a programmer should be able to access low-level programming constructs without having to clumsily drop into a different language. In Java, you have to use JNI to link with libraries written in a language like C to get at low-level constructs. In C#, you can use the C# language to get at low-level constructs, and code which does this is marked specially so that the executing environment is aware of it and can prevent code flagged in this way from executing. This seems an elegant way of providing the full range of expressive power within a single language, less error prone, and easier to manage.
All that being said, I write my code in Java these days because of its portability.
Enough of Java and C#. What about J2EE and?
The great thing about Java when it arrived was its simplicity and portability. Over time, the J2EE libraries have become pretty complex IMHO. For example, there have been many conversations on various news groups complaining about the learning curve and performance associated with . .NET is definitely simpler than EJB for building server-side components, and so Java badly needs a new and simpler way to build portable and scalable server-side components. This of course is the reason that TME launched GLUE and has been working on its rd evolution.
The main advantage that J2EE has over .NET is portability. Whether this advantage remains is primarily a business decision for Microsoft. There is no technical reason why the core .NET can't be made cross-platform, and several groups are already working on doing this. Heck, CLR was designed from the ground-up to support this! So J2EE is an uneasy situation in which a simple snap of Bill Gate's fingers results in its primarily advantage being neutralized.
The best defense for Java/J2EE is fairly straightforward:
- standarize Java and allow some of the language wizards at IBM and other companies to evolve the language at a similar pace to C#.
- come up with a far simpler server-side programming alternative to EJB
Time is running out......
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958296/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis vs. MongoDB比較RedisMongoDB
- Java 下的 JSON庫效能比較:JSON.simple vs. GSON vs. Jackson vs. JSONPJavaJSON
- 大資料檔案格式比較:AVRO vs. PARQUET vs. ORC大資料VR
- Rust的Vector vs. Golang的Slice比較RustGolang
- TheServerSide.com釋出最新J2EE vs. .NET效能評測報告 (轉)ServerIDE
- Airflow vs. Luigi vs. Argo vs. MLFlow vs. KubeFlowAIUIGo
- GraphQL Vs. REST? API 開發方法的誠實比較 | transpositRESTAPI
- Microsoft .NET與J2EE的比較[E] (轉)ROS
- MVC vs. MVP vs. MVVMMVCMVPMVVM
- (轉貼) C++,C#,Java功能比較 (.NET) (C#) (C/C++)C++C#Java
- ASP.NET 與 JAVA 的比較 (轉)ASP.NETJava
- git revert .vs. git reset .vs. git rebaseGit
- String.format VS. StrSubstitutor VS. NamedParameterJdbcTemplateORMJDBC
- 轉貼:Spring vs. EJBSpring
- 搞懂:資料科學vs.機器學習vs.資料分析vs.商業分析資料科學機器學習
- Rich Client Java vs. PB, Delphi etcclientJava
- Navigating Kubernetes Certification: CKAD vs. CKA vs. CKS, Including KCNA and KCSA
- Oracle for Linux vs. Oracle for NT(轉)OracleLinux
- Service Mesh框架對比:Linkerd vs. Istio框架
- HTMLCollection vs. NodeListHTML
- PostgreSQL vs. MySQLMySql
- AutoIt vs. QTPQT
- Java 8 vs. Scala(一): Lambda表示式Java
- 後端程式設計師一定要看的語言大比拼:Java vs. Go vs. Rus後端程式設計師JavaGo
- 【譯】GraphQL vs. RESTREST
- JavaScript運算子:== VS. ===JavaScript
- Accoona VS. GoogleGo
- Ansible vs. TerraformORM
- Git branching: master vs. origin/master vs. remotes/origin/masterGitASTREM
- 柏拉圖洞穴寓言 vs. 表徵假說 vs. 表觀遺傳
- C# Java之比較 (轉)C#Java
- Spring WebClient vs. RestTemplateSpringWebclientREST
- 引用計數 vs. GCGC
- javascript requestAnimationFrame vs. setTimeoutJavaScriptrequestAnimationFrame
- HTML 5 Canvas vs. SVGHTMLCanvasSVG
- PostgreSQL vs. Oracle 測試SQLOracle
- WebForms VS. MVC(翻譯)WebORMMVC
- PostgreSQL vs. MS SQL ServerSQLServer