1.內部使用 C 的 longjmp 機制讓出一個協程。?因此,如果一個 C 函數 foo 調用了一個 API 函數, 而這個 API 函數讓出了(直接或間接調用了讓出函數)。 由于 longjmp 會移除 C 棧的棧幀, Lua 就無法返回到 foo 里了。
2.為了回避這類問題, 碰到 API 調用中調用讓出時,除了那些拋出錯誤的 API 外,還提供了三個函數: lua_yieldk, lua_callk,和 lua_pcallk 。 它們在讓出發生時,可以從傳入的 延續函數 (名為 k 的參數)繼續運行。
3.我們需要預設一些術語來解釋延續點。?對于從 Lua 中調用的 C 函數,我們稱之為 原函數。?從這個原函數中調用的上面所述的三個 C API 函數我們稱之為 被調函數。 被調函數可以使當前線程讓出。 (讓出發生在被調函數是 lua_yieldk, 或傳入 lua_callk 或 lua_pcallk 的函數調用了讓出時。)
4.假設正在運行的線程在執行被調函數時讓出。?當再次延續這條線程,它希望繼續被調函數的運行。 然而,被調函數不可能返回到原函數中。 這是因為之前的讓出操作破壞了 C 棧的棧幀。 作為替代品,Lua 調用那個作為被調函數參數給出的 延續函數 。 正如其名,延續函數將延續原函數的任務。
5.注意這里那個額外的顯式的對延續函數的調用:Lua 僅在需要時,這可能是由錯誤導致的也可能是發生了讓出而需要繼續運行,才會調用延續函數。 如果沒有發生過任何讓出,調用的函數正常返回, 那么 lua_pcallk (以及 lua_callk)也會正常返回。 (當然,這個例子中你也可以不在之后調用延續函數, 而是在原函數的調用后直接寫上需要做的工作。)
6.Lua 會把延續函數看作原函數。?延續函數將接收到和原函數相同的 Lua 棧,其接收到的 lua 狀態也和 被調函數若返回后應該有的狀態一致。 (例如, lua_callk 調用之后, 棧中之前壓入的函數和調用參數都被調用產生的返回值所替代。) 這時也有相同的上值。 等到它返回的時候,Lua 會將其看待成原函數的返回去操作。
7.我們需要預設一些術語來解釋延續點。?對于從 Lua 中調用的 C 函數,我們稱之為 原函數。 從這個原函數中調用的上面所述的三個 C API 函數我們稱之為 被調函數。 被調函數可以使當前線程讓出。 (讓出發生在被調函數是 lua_yieldk, 或傳入 lua_callk 或 lua_pcallk 的函數調用了讓出時。)
8.假設正在運行的線程在執行被調函數時讓出。?當再次延續這條線程,它希望繼續被調函數的運行。 然而,被調函數不可能返回到原函數中。 這是因為之前的讓出操作破壞了 C 棧的棧幀。 作為替代品,Lua 調用那個作為被調函數參數給出的 延續函數 。 正如其名,延續函數將延續原函數的任務。
希望能幫到你,謝謝!
會的,為什么?
2013 年,美國在線編程教育網站 code.org 發起“編程一小時”活動,時任美國總統奧巴馬不僅拍攝了一段宣傳片支持,并且親身上陣寫了一段 Java 代碼,這也讓他成為美國史上*位會寫代碼的總統。奧巴馬之后,美國科技圈名人比爾蓋茨、扎克伯格等也紛紛發言,號召編程要從娃娃抓起。
現在已2021年,國內少兒編程已經得到一二線城市大多數家長的認可,在個別地區政策上也得到了支持,編程開始走進*課堂。
您好,我們是國內技術領先的兒童編程教育軟/硬件提供商,**人工智能學會合作教育企業。
關于課程質量、師資力量等可以進入我們官網詳細查看,教學方面可以讓孩子學習免費的體驗課程,來切身體會。
希望可以幫助到您。
童程童美通過趣味編程教育培養興趣;同時發現在編程領域有天賦的孩子,提供成為下一個IT精英的職業編程教育。少兒編程需要什么軟件分享:
1.Scratch(麻省理工)
Scratch是麻省理工為孩子開發的一種0元編程語言,這是一種0元語言,輔以入門課程、家長指導和強大的用戶社區。
Scratch使用程序積木塊的可視化界面為孩子(和家長)創造更有趣的體驗。孩子可以將程序積木塊(如動作、事件和運算符)堆疊在一起。
每個程序積木塊的形狀只允許它與兼容對象相結合,例如,“重復循環”的形狀就像一個橫向的“U”,讓孩子知道需要在循環的開始和結束之間放置一個塊。
Scratch可以用來制作真實的動畫和游戲,它有許多圖片和角色,可以自己上傳圖片和角色。如果計算機沒有連接到互聯網,也可以使用Scratch,孩子們可以選擇在Scratch的在線社區分享自己的作品。
建議年齡:8-16歲
要求:運行Mac、Windows或Linux的計算機
2.Blockly(谷歌)
Blockly是谷歌對Scratch的改進,它借鑒了Scratch的可拖動程序積木塊的交互設計方法,但它可以用幾種不同的編程語言輸出代碼,如、Python、PHP、Lua和Dart。
Blockly和Scratch的區別在于,將程序積木塊鏈接在一起時,可以在屏幕的一側看到代碼,并且可以隨時切換編程語言來查看同一程序的語法差異。這使得Blockly成為所有年齡段教學代碼的理想選擇,包括年齡較大的孩子和成人。
如果這聽起來像是Scratch的驚人轉變,谷歌實際上是在與麻省理工合作開發基于Blockly平臺的下一代Scratch。
建議年齡:10歲以上
要求:運行Windows,MacOS或Linux的計算機
3.Alice
Alice是一個0元的3D編程工具,旨在教授面向對象編程語言的概念,如C++。它使用熟悉的積木式方法,允許孩子通過編程相機運動、3D模型和場景來創建游戲或動畫。
Alice是由卡內基梅隆*開發的。
建議年齡:10歲以上
要求:運行Mac,Windows或Linux的計算機
學編程是很有用的,會對孩子的學習奠定良好的學習基礎。少兒編程課程的目的并不是把孩子培養成一個程序員,而是以興趣為導向,著重培養孩子的創造力、創新力、想象力和人格健全能力。因此少兒編程教育在當前看來還是很有用的。
學習少兒編程的好處:
1、鍛煉孩子的邏輯思維能力。少兒編程是跨*整合知識的*途徑,可以讓孩子慢慢學會如何取組織和完善自己的想法,把自己的想法努力變成一個生動和完整的作品,以此來增強孩子的自信心。
2、輔助學習。隨著大數據技術的發展,未來的學習過程將更加智能化,更多的智能體將以教育的形式走進人們的生活,而編程語言是與這些智能體進行交流的重要方式之一,所以掌握編程語言對于學習也有重要意義。
3、方便生活。隨著5G的落地應用,未來在生活場景中會有越來越多可編程的智能體,掌握編程技術可以更加方便的按照自己的需求進行各種個性化的設定。【學少兒編程可以提高孩子邏輯思維、專注力!】
如果對少兒編程感興趣,推薦咨童程童美。童程童美,成立于2015年,經過6年的發展,打造出適合*孩子編程教育的解決方案,形成以人工智能編程、智能機器人編程、信息學奧賽編程等課程為核心的課程體系。230+學習中心,覆蓋*50+城市, 2000+真人講師。【童程童美少兒編程體驗課,點擊可免費報名試聽】
只要一個電話
我們免費為您回電