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+真人讲师。【童程童美少儿编程体验课,点击可免费报名试听】
只要一个电话
我们免费为您回电