2010-08-31 23 views
9

Anh ấy là thỏa thuận: Tôi đang thực hiện một số nghiên cứu lý thuyết trên nền tảng .NET và Java cho khóa học tốt nghiệp của tôi và tôi đã đạt đến một khu vực nhiều mây: C# có thể được coi là một phần của .NET Framework không? Tương tự như vậy, Java (ngôn ngữ lập trình) có được coi là một phần của nền tảng Java không?Ngôn ngữ lập trình có thể là một phần của nền tảng không? (C# và Java liên quan)

Hãy để tôi xem xét các sự kiện:

  1. NET là một nền tảng phát triển theo quy định của tiêu chuẩn ECMA-335; nó là việc thực hiện tiêu chuẩn này, nếu bạn muốn. Tuy nhiên, C# là việc thực hiện một tiêu chuẩn khác, ECMA-334 tuyên bố rõ ràng rằng việc triển khai nó không đòi hỏi phải thực hiện tiêu chuẩn ECMA-335 - CLR trong trường hợp của Microsoft (mà nhiều người nhầm lẫn gọi .NET khi có rất nhiều nhiều hơn nó chỉ là CLR). Ngoài ra, chúng tôi có Mono, một thực hiện khác nhau của ECMA-335, mà C# cũng chạy (từ tất cả mọi thứ tôi đọc, nó được ngụ ý rằng Novell không có một ECMA-334 thực hiện của riêng mình, trong đó là hoàn toàn hợp lý), nhưng C# không phải là một phần của Mono.

  2. Có một thực tế là tôi đọc ở đâu đó rằng ngôn ngữ lập trình không phải là một phần của nền tảng, nhưng không may là tôi dường như không tìm được nguồn.

  3. Có một thực tế là bài viết "Nền tảng máy tính" của Wikipedia tuyên bố rằng ngôn ngữ lập trình là nền tảng; Wiki là, tuy nhiên, hầu như vô giá trị nếu bạn muốn nghiên cứu của bạn được thực hiện nghiêm túc.

  4. Microsoft dường như quảng cáo C# như một phần của .NET, nhưng .NET là một nền tảng đa ngôn ngữ, sẽ không được như vậy mọi ngôn ngữ hỗ trợ/được hỗ trợ bởi nó?

Cho đến nay, tôi chỉ nói về .NET, nhưng tôi cũng cần câu trả lời liên quan đến Java. Trên thực tế, một phản ứng chung sẽ là tốt nhất.

Vì vậy, bất kỳ ai cũng có thể giúp tôi ghép các mảnh ghép lại với nhau? Tài liệu tham khảo được đánh giá cao.


Trên một vấn đề khác, tôi đã tìm thấy rất nhiều sách giải thích hoạt động bên trong của CLR, không phải là điều gì trên cùng một dòng cho JVM không? Tôi có nghĩa là, có các đặc điểm kỹ thuật, tất nhiên, nhưng tôi đã hướng tới một cái gì đó dễ dàng hơn để tiêu hóa, tôi không có kế hoạch để xây dựng một trình biên dịch Java sau khi tất cả ..

+0

tiêu đề của bạn thiếu một động từ, có vẻ như? (oh, đúng vậy. :) – Nicolas78

+0

@ nicolas78 Chết tiệt ... ¬¬ –

+0

Câu trả lời rẻ tiền, dễ dàng là: C# được gắn chặt chẽ với .NET mà nó có hiệu quả thuộc về nó. – delnan

Trả lời

5

Như mọi người có vẻ nhận thấy, điều đó tùy thuộc vào định nghĩa của bạn.

Nhưng ECMA 334 (và/hoặc một số ECMA doc khác) cũng xác định MSIL (hoặc CIL), và đó chắc chắn là phần của nền tảng này.

Và tôi nghĩ C# là không một phần của nền tảng, trình biên dịch MS chỉ nhắm mục tiêu CLR bằng cách xuất MSIL. không quá khó để tưởng tượng một triển khai cho một nền tảng khác, được quản lý hoặc không được quản lý.

Java lẫn lộn vấn đề này một chút bằng cách có cả nền tảng và ngôn ngữ được gọi là Java nhưng không khó để thấy sự khác biệt.

Vì vậy, ngôn ngữ có thể là một phần của Nền tảng không? , xem MSIL.
Nhưng hầu hết các ngôn ngữ (bao gồm cả C# và Java) thì không.

Rất nhiều ngôn ngữ (C, C++) thực hiện một nỗ lực tích cực để di động trên các nền tảng.

+0

Nhưng tất nhiên! Damn bạn Partition III, đã không vượt qua tâm trí của tôi ... Cảm ơn một bó! –

1

Quay trở lại một chút nữa (1978), khoảng cách giữa UCSD Pascal & Hệ thống p UCSD thường bị mờ, sao cho hầu hết người dùng tham chiếu đến UCSD Pascal làm hệ điều hành.

1

Sun/Oracle's thinking về chủ đề liên quan đến Java:

công nghệ Java là cả một ngôn ngữ lập trình một nền tảng.

Sau đó:

Một nền tảng là phần cứng hoặc phần mềm môi trường trong đó một chương trình chạy. ...Nền tảng Java khác với hầu hết các nền tảng khác ở chỗ nó là một nền tảng chỉ chạy trên nền tảng phần cứng khác.

Vì vậy, tôi sẽ nói theo định nghĩa của họ, Ngôn ngữ Java không phải là "một phần" của nền tảng Java. Cũng giống như C99 không phải là một phần của nền tảng Unix, v.v.

Trong thực tế, các dòng có phần bị mờ. Ngôn ngữ Java có lẽ được kết hợp nhiều hơn với Nền tảng Java hơn là họ muốn thừa nhận. Java API (các thư viện) được cho là một phần của Nền tảng Java, không phải ngôn ngữ, và ngôn ngữ được ghép nối với các lớp hoặc giao diện nhất định (ví dụ, vòng lặp cho mỗi phụ thuộc vào java.lang.Iterablejava.util.Iterator).

Nói chung, các nhà thiết kế cố gắng chứa khớp nối với gói java.lang, tức là hỗ trợ ngôn ngữ. Đó là lý do bạn thấy các trường hợp đặc biệt như String, Object, v.v. trong java.lang.

+0

Nền tảng là JVM, trong khi ngôn ngữ lập trình là Java. Tuy nhiên, tôi không thấy cách này giải quyết bất kỳ câu hỏi nào của người hỏi. –

+0

@Thomas: OP hỏi * "là Java (ngôn ngữ lập trình) có được coi là một phần của nền tảng Java không?" *. Tôi chỉ liên kết với việc sử dụng các điều khoản của Sun. Tất nhiên bạn sẽ không bao giờ tìm thấy các loại thuật ngữ này được sử dụng nhất quán trên tất cả các công nghệ. –

+0

Ah. Tôi biết bạn đến từ đâu. Mặc dù tôi thực sự không thích việc sử dụng thuật ngữ của Sun/Oracle, nhưng tôi không thể tranh luận với nó vì họ sở hữu Java. –

1

C# là ngôn ngữ lập trình. Nó được phát triển bởi Microsoft trong sáng kiến ​​.NET và sau đó được chấp thuận như là một tiêu chuẩn của Ecma (ECMA-334) và ISO (ISO/IEC 23270). Mono, DotGNU và DotNetAnywhere không phải là triển khai ".NET" của C#. Vì vậy, C# là một phần của .NET, Mono, DotGNU và DotNetAnywhere.

Ngôn ngữ lập trình Java cũng là một ngôn ngữ, chạy trên nền tảng Java. Hãy nhớ rằng, JVM có thể chạy nhiều ngôn ngữ lập trình (Scala, Groovy, JRuby, Jython). Sau đó, bạn có các nền tảng Java khác nhau: Java Standard Edition, Java Enterprise Edition và Java Mobile Edition. Mỗi trong số này tuân theo các đặc tả nhất định được xác định bởi Quy trình cộng đồng Java, và chúng bao gồm ngôn ngữ lập trình Java.

+0

Bất cứ nơi nào tôi nói rằng họ đã được ". NET" triển khai C# "(một tuyên bố mà thậm chí không có ý nghĩa), tôi nói Mono là một thực hiện của ECMA-335, CLI (chính xác nhất sẽ là nhà nước mà mono HAS thực hiện CLI, thực sự) –

+0

Tôi đã cố gắng để làm cho một điểm: "C# có thể tồn tại mà không có .NET". Về lý thuyết ít nhất. Nếu một tiêu chuẩn đã được xác định mà không có .NET được tạo, Mono và tất cả các nền tảng dựa trên C# khác có thể đã tồn tại. –

+0

Vì vậy, Fernando (Bassani ?!) về cơ bản bạn nói rằng cả hai ngôn ngữ thuộc về/là một phần của nền tảng tương ứng của họ, phải không? –

2

Bạn có hỏi chung không? Nếu có thì có vẻ như tôi chắc chắn câu trả lời là , một ngôn ngữ lập trình có thể là một phần của nền tảng. Ví dụ, tiêu chuẩn ECMA-335 bao gồm một đặc điểm kỹ thuật của CIL programming language. Nó có thể cũng đã chỉ ra ngôn ngữ C# và tham chiếu tiêu chuẩn ECMA-334. Nó chỉ không.

Đây thực sự là câu hỏi về khớp nối lỏng lẻo và chặt chẽ được áp dụng trên quy mô rộng. Loose thường được ưa thích như một sự lựa chọn thiết kế. Tight là dù sao cũng là một lựa chọn.


Suy nghĩ về câu hỏi này một chút, tôi nghĩ rằng tôi hiểu rõ hơn những gì bạn không chắc chắn. Có CLI, được chỉ định bởi ECMA-335, và sau đó là .NET, rõ ràng là gắn với Microsoft.

CLI thực hiện không bao gồm C#; Tôi nghĩ chúng tôi có thể đồng ý. Có .NET không?

Thành thật mà nói, tôi không thực sự chắc chắn. Xem xét .NET là một sản phẩm được Microsoft duy trì, tôi cho rằng nó thực sự tùy thuộc vào chúng cho dù C#, VB.NET, F #, v.v ... có hay không phải là một phần của ".NET". Cùng đi với Sun với Java và "nền tảng Java".

+0

Vâng, bạn hiểu rồi. Tôi nghĩ rằng đối với tất cả những vấn đề đó, tôi sẽ gắn bó với 1. Ngôn ngữ lập trình CÓ THỂ là một phần của nền tảng (Bằng cách đó, tôi không thể nói bất cứ điều gì về vấn đề cụ thể này và sẽ không có rủi ro sai); 2. C# KHÔNG phải là một phần của .NET mặc dù không có sự đồng thuận về nó trong cộng đồng; 3.Vẫn còn trên hàng rào về vấn đề Java, nhưng cho đến nay tôi đang giải quyết với câu trả lời của Mark Peter. –

1

Từ quan điểm hoàn toàn lý thuyết, ngôn ngữ và nền tảng là riêng biệt. Đặc tả ngôn ngữ của C# chỉ định cấu trúc và cú pháp của nó; nó nên trông như thế nào và hành động theo quan điểm của lập trình viên. Từ một quan điểm hướng đối tượng, ngôn ngữ là một giao diện (hoàn toàn theo nghĩa đen), và các nền tảng là các triển khai của nó.Có rất nhiều C/C + + IDE ra khỏi đó, tất cả đều có thể phù hợp với đặc tả ANSI C++ cho chính ngôn ngữ đó (một số bao gồm thêm gizmos). Nếu bạn muốn, bạn có thể viết trình biên dịch chấp nhận các tệp mã C# và tạo ra Java trung gian thay vì MSIL, hoặc thậm chí là mã máy nguyên gốc (mặc dù C# được thiết kế cho một nền tảng mã được quản lý, một số tính năng của một ngôn ngữ mã nguồn gốc , giống như khả năng phá hủy các đối tượng một cách rõ ràng, có thể cần phải được thêm vào spec để làm cho nó hoạt động).

Trong thế giới thực, C# là tất cả-nhưng-không thể giải quyết được từ .NET Framework vì Microsoft đã phát triển đặc tả ngôn ngữ và triển khai của MS (.NET) là từ xa nhất. Vì vậy, ngôn ngữ thường được coi là một phần của nền tảng, đến mức mà hầu như không ai nói C# .NET nữa. Có các cổng của spec ngôn ngữ (thường được viết cho các workalikes của nền tảng MS), nhưng khi bạn chỉ nói C#, các nhà phát triển cho rằng bạn đang nói về C# trong ngữ cảnh của .NET Framework.

0

Câu trả lời đơn giản có thể là có và không, như bạn đã nói, đó là một khu vực nhiều mây. Bạn có lẽ sẽ tìm thấy một số đối số cho, và một số chống lại, cả hai đều hợp lệ.

Nhưng quan điểm của tôi là C# không phải là một phần của .NET. C# được thiết kế cho các nền tảng như .NET và đặt các yêu cầu khá cụ thể của nền tảng, như bộ nhớ được quản lý, có thể triển khai thực hiện 32 bit nguyên tử, v.v.

Bật câu hỏi xung quanh, .NET yêu cầu C#? Throw C# ra và bạn vẫn có VB.NET, vv C# có thể được coi là một plugin đòi hỏi một nền tảng với một giao diện cụ thể, nơi .NET thực hiện giao diện đó.

Là đối số "Có", bạn có thể đặt câu hỏi tu từ. NET sẽ là gì nếu không có C#. Nó thậm chí sẽ tồn tại?

0

Không phải C# hoặc Java có liên quan nhưng, ví dụ, nền tảng SmallTalk không chỉ bao gồm ngôn ngữ và máy ảo mà còn bao gồm IDE. Vì vậy, tôi đoán câu trả lời cho câu hỏi của bạn là: có - một ngôn ngữ lập trình có thể là một phần của một nền tảng.

0

C# không phụ thuộc vào các lớp .NET nhất định (cụ thể, trong mscorlib) để triển khai các cấu trúc đặc biệt của nó, mặc dù tôi cho rằng bạn có thể tạo tương đương cho thời gian chạy sao lưu khác nhau.

  • foreach phụ thuộc vào IEnumerable hoặc IEnumerable<T>
  • using phụ thuộc vào IDisposable biểu
  • Lambda có thể giải quyết để đại diện chung đặc biệt các đối tượng Expression<>
  • yield return cũng được gắn vào mô hình .NET liệt kê

Vì vậy, C# không hoàn toàn độc lập t của ít nhất một số khía cạnh của .NET và CLR, mặc dù bạn có thể, về nguyên tắc, có được hành vi tương tự bằng cách tạo ra một thời gian chạy/trình biên dịch chỉ cung cấp các tập con của các tính năng .NET cần thiết để thực hiện các tính năng ngôn ngữ. Tôi không nghĩ rằng nó sẽ đặc biệt hữu ích, tuy nhiên, vì ngôn ngữ và thời gian chạy đã phát triển và phát triển cùng nhau.

Các vấn đề liên quan