淺析.NET平臺編程語言的未來走向

在去年的PDC2008召開期間,微軟逐步公開了圍繞.NET和編程語言的很多想法,據此我們可以饒有興趣地對.NET的未來預測一番。

.NET平臺以運行在通用語言運行時(Common Language Runtime,CLR)上的C#和VB.NET作為開端。CLR是通用語言架構(Common Language Infrastructure,CLI)規范的一種實現。任何希望創建新語言的人都能實現CLI規范,它允許開發人員從大量的編程語言中選擇一種。2008年10月,微軟發布了構建于CLR之上的動態語言運行時(Dynamic Language Runtime,DLR)的0.9版本,它使語言開發人員也可以為.NET平臺創建動態語言。

一些語言是由微軟開發和維護,比如C#、VB.NET和F#,但是大部分語言都是由社區創建的開源項目。一些比較知名的語言有IronPython、IronRuby(兩者都是動態的)和Boo(靜態的)。前面兩個語言作為開源項目由微軟積極推動,它們是基于兩個現存語言Python和Ruby的。Boo從2003年就開始出現了,由Rodrigo B. De Oliveira創建,現在依舊在積極地開發當中。你可以在Wikipedia上找到一個包含了更多.NET語言的完整列表。

要掌握.NET語言的走向,首當其沖要了解的就是Anders Hejlsberg(C#的創造者)如何談論C#的未來的。在之前的幾個C#版本中,微軟關注了托管代碼(C# 1.0)、泛型(C# 2.0)和語言集成查詢(LINQ)(C# 3.0)。而大家期盼的將伴隨Visual Studio 2010而來的C# 4.0,主要關注之處則是動態編程。在他的PDC2008演講中,Anders談論了當前語言的趨勢:

我認為發展趨勢涉及到三個主要方面。第一個就是我們所看到的更加聲明式的編程風格。下一個就是我們過去幾年在動態編程語言上所看到的某種形式的復蘇,以及它對我們的影響。還有就是多核所帶來的變化——如果你有這方面需要的話。

對我而言,這些趨勢里最感興趣的就是——所有這些趨勢,另外我也認為經典的編程語言分類法正在被打破。之前,我們習慣上把語言歸為面向對象、函數式、動態的或結構化;而現在我們正在逐漸看到各種語言都從其他語言那里借鑒很多思想。我確實認為,從某種意義上說,新編程范例將是一種多編程范例。

這些解釋了,為什么C#會具有聲明式編程(LINQ)和動態編程(在C# 4.0中的dynamic關鍵字)的元素。

在稍早對Anders和Guy Steele的關于并發和語言設計的訪談里,Anders指出:

我們雖已擁有了名為C#的編程語言,但并發處理已經來臨,所以我們需要考慮這意味著什么。我認為在C# 3.0和LINQ上的大量工作和并發問題已經非常相關了。類似Lambda表達式和我們已經添加進來的一些特性,可以讓我們更好地構建這種類型的API。

當然,我們也缺乏一些語言內部的機制來控制或標識這些副作用。對于純函數和不可變數據的形式化應該有更好的語言支持,另外,對于編譯器需要確定一個對象是否要暴露給任何人這樣的情況,也應該提供一些可能的支持來以進行某種形式隔離。只要對象不暴露給任何人,我們在本地變量中處理它,就能保證其變化時是真正安全的。

微軟已經開展了一個和并發相關的項目,叫做并行計算初始計劃。S. Somasegar,開發部門的高級副總裁,最近在一個Q&A論文中,談到了在Visual Studio 2010中期望包含的東西:

它將包含一些新的.NET Framework函數庫,比如任務并行函數庫(Task Parallel Library,TPL)和并行LINQ(PLINQ),以及并行模式函數庫(Parallel Pattern Library,PPL)和使用C++開發原生應用程序時可用的并發運行時(Concurrency Runtime)及調試工具。微軟也通過在Windows Communication Foundation(WCF)和Windows Workflow Foundation(WF)中額外添加一些新的功能來持續地對.NET Framework進行投入。

這個項目自然成為微軟獲取反饋的一個途徑,來了解如何在.NET編程語言當中進行改變以輕易地支持并發。莫爾定律依舊適用于晶體管密度,但對于CPU速度(GHz) 已經不適用了,所以需要轉向并行計算而不是停止前進。當然微軟也明白,使用一致的基礎功能來解決和其他語言共同工作的問題具有很大的挑戰。所以,下一步要著力解決的就是類似C#這樣的語言。

在.NET平臺上談論編程語言往往會提到VB.NET vs C#的主題。Anders談到了C#和VB.NET之間共同進化(Co-Evolution)的問題:

當我們盡力在某個之中開發出一些不同的特性之時,其他的團隊也打算實現這個東西。現實是,促進這些語言發展的正確方法便是共同進化。

可見,并發處理將成為下一個重要的事情是無容置疑的。動態編程將在C# 4.0中出現,不過人們還是希望未來的版本能夠包含更多的特性。VB.NET被承諾和C#共同進化,以實現兩個語言具有不同的語法但可以給出同樣的輸出結果。隨著和Visual Studio 2010一起發布的DLR的出現,隨著IronPython和IronRuby的可用性的提升,動態語言將在未來幾年里成為主流。

轉載于:https://www.cnblogs.com/webnet/archive/2009/03/22/1418821.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379721.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379721.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379721.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FreeRTOS任務通知

從v8.2.0版本開始,FreeRTOS新增了任務通知這個功能,可以使用任務通知來代替信號量、消息隊列、事件標志組等這些東西,使用任務通知的話效率會更高。 任務通知在FreeRTOS是一個可選的選項,要使用任務通知的話就需要將宏configUSE_T…

kinect在openni下也能玩摳出人物換背景

之前想了個很拉風的名字《用kinect玩穿越》,但是現在功能還不是很完善,細節處理也不是很好,臉皮沒有足夠的厚,所以呢還是叫換背景吧。 這里面包含兩個技術要點: 一、摳出活動人物 在微軟的SDK里深度圖像的前3位即0-2位…

物聯網基礎知識_聯網| 基礎知識能力問答 套裝1

物聯網基礎知識1) There are the following statements that are given below, which of them are correct about the computer network? A computer network is an interconnection between multiple devices to share hardware resources and information.A computer networ…

Emit學習-基礎篇-基本概念介紹

之前的Hello World例子應該已經讓我們對Emit有了一個模糊的了解,那么Emit到底是什么樣一個東西,他又能實現些什么功能呢?昨天查了點資料,大致總結了下,由于才開始學習肯定有不完善的地方,希望大家能夠批評指…

The FreeRTOS Distribution(介紹、移植、類型定義)

1 Understand the FreeRTOS Distribution 1.1 Definition :FreeRTOS Port FreeRTOS目前可以在20種不同的編譯器構建,并且可以在30多種不同的處理器架構上運行,每個受支持的編譯器和處理器組合被認為是一個單獨的FreeRTOS Port。 1.2 Build…

notepad++節點_在C ++中刪除鏈接列表的中間節點

notepad節點Given a single Linked List and we have to delete the middle the element of the Linked List. 給定一個鏈表,我們必須刪除鏈表中間的元素。 If the length of the linked list is odd then delete (( n1)/2)th term of the linked list and if the…

SET ANSI_NULLS ON

指定在與 Null 值一起使用等于 () 和不等于 (<>) 比較運算符時采用符合 ISO 標準的行為。 當 SET ANSI_NULLS 為 ON 時&#xff0c;即使 column_name 中包含空值&#xff0c;使用 WHERE column_name NULL 的 SELECT 語句仍返回零行。即使 column_name 中包含非空值&…

Eclipse項目左上角出現大紅色感嘆號怎么辦?

出現大紅色感嘆號是因為環境不匹配 解決方法&#xff1a; 右擊出現大紅色感嘆號的項目 點擊 Libraries&#xff0c;將有叉號的給Remove掉 然后再點擊 Add Library —> JRE System Library —> Next 勾選第二個即可 之后&#xff0c;就不會出現大紅色感嘆號了。

PCB---STM32最小系統制作過程

PCB 制作過程STM32核心模塊連接外部電源晶振OSC_IN(8MHz)OSC32_IN(32.768MHz&#xff09;復位下載口BOOT模式電源模塊添加功能UARTWKUPSTM32核心模塊 這里我們以STM32F103C8T6為列&#xff0c;先將芯片的原理圖放到原理圖中 對于STM32&#xff0c;有幾個模塊是核心&#xff0…

scala 隨機生成整數_如何在Scala中以整數形式獲取當前年份?

scala 隨機生成整數In Scala programming language, there is an option for the programmer to use libraries of java because of its interoperability with java. 在Scala編程語言中&#xff0c;程序員可以選擇使用Java庫&#xff0c;因為它可以與Java互操作。 There are …

轉載:glut.h 與 stdlib.h中 的exit()重定義問題的解決

遇到的問題&#xff0c;來自&#xff1a;http://blog.sina.com.cn/s/blog_629c53bd0100f5li.html 出現&#xff1a; c:\codeprogram\microsoft visual studio 10.0\vc\include\stdlib.h(353): error C2381: “exit”: 重定義&#xff1b;__declspec(noreturn) 不同1> c:\pro…

括號配對問題(C++棧)

題目描述: 現在&#xff0c;有一行括號序列&#xff0c;請你檢查這行括號是否配對。 輸入描述: 第一行輸入一個數N&#xff08;0<N<100&#xff09;,表示有N組測試數據。后面的N行輸入多組輸入數據&#xff0c;每組輸入數據都是一個字符串S(S的長度小于10000&#xff0c;…

FreeRTOS---堆內存管理(一)

FreeRTOS的堆內存管理簡介動態內存分配及其與 FreeRTOS 的相關性動態內存分配選項內存分配方案Heap_1heap_2Heap_3Heap_4設置heap_4的起始地址Heap_5vPortDefineHeapRegions()堆相關的函數xPortGetFreeHeapSizexPortGetMinimumEverFreeHeapSizeMalloc調用失敗的Hook函數這篇文章…

python中生成隨機整數_在Python中生成0到9之間的隨機整數

python中生成隨機整數Following are the few explanatory illustrations using different python modules, on how to generate random integers? Consider the scenario of generating the random numbers between 0 and 9 (both inclusive). 以下是使用不同的python模塊的一…

愚人節惡搞網站謹防遭黑客攻擊

金山毒霸云安全中心日前發出預警&#xff0c;在近期攔截的大量“掛馬”、釣魚等惡意網頁中&#xff0c;與“愚人節”相關的&#xff0c;在近一周數量急劇增加。 愚人節將至&#xff0c;怎么整人好玩?近期許多惡搞網站、相關的網絡論壇的流量不斷攀升。金山毒霸云安全中心日前發…

JavaScript中的String()函數與示例

String()函數 (String() function) String() function is a predefined global function in JavaScript, it is used to convert an object to the string. String()函數是JavaScript中預定義的全局函數&#xff0c;用于將對象轉換為字符串。 Example: 例&#xff1a; In thi…

ASCII碼排序(C++)

題目描述: 輸入三個字符&#xff08;可以重復&#xff09;后&#xff0c;按各字符的ASCII碼從小到大的順序輸出這三個字符。 輸入描述: 第一行輸入一個數N,表示有N組測試數據。后面的N行輸入多組數據&#xff0c;每組輸入數據都是占一行&#xff0c;有三個字符組成&#xff0c;…

FreeRTOS--堆內存管理(二)

堆內存管理代碼具體實現heap_1內存申請函數內存釋放函數heap_2內存塊內存堆初始化函數內存塊插入函數內存申請函數判斷是不是第一次申請內存開始分配內存內存釋放函數heap_3heap_4內存堆初始化函數內存塊插入函數heap_5上一篇文章說了FreeRTOS實現堆內存的原理&#xff0c;這一…

在查詢的結果中添加自增列 兩種方法

解決辦法《一》&#xff1a; 在SQL Server數據庫中表信息會用到Identity關鍵字來設置自增列。但是當有數據被刪除的話&#xff0c;自增列就不連續了。如果想查詢出這個表的信息&#xff0c;并添 加一列連續自增的ID&#xff0c;可用如下查詢語句&#xff1a; SELECT Row_Nu…

一個非常簡單的C#面試題

怎樣實現對所有類可讀但是在同一個assembly可寫那&#xff1f; 答案&#xff1a; 同一個assembly namespace ClassLibrary1 { public class Class1 { public string Name { get; internal set; } } public class Class2 { public void GS() { Class1 cc new Class1(); cc.Name…