v 站有 C 程序员使用 protothreads 协程吗?

2021 年 12 月 15 日
 liuidetmks

http://dunkels.com/adam/pt/

知道这个时候惊了,世界上不乏奇思妙想的人

2811 次点击
所在节点    程序员
14 条回复
liuidetmks
2021 年 12 月 15 日
看来我该问,V 站还有用 C 的人吗
nmap
2021 年 12 月 15 日
现在还有人用这种上古时代的语言??
fengjianxinghun
2021 年 12 月 15 日
@nmap 我写驱动不用这个用啥。。。
muooOOO
2021 年 12 月 15 日
在一个 stm32 单片机项目上用过,
用来做高速多任务轮询,任务的执行时间能精确到 10us👍,吊打一大票 RTOS
第一次看到将行号作为条件来进行跳转,简直了震惊我的三观
zjsxwc
2021 年 12 月 15 日
牛逼!
大开眼界 Duff's Device
http://dunkels.com/adam/pt/expansion.html
liuidetmks
2021 年 12 月 15 日
@zjsxwc 是啊,c 语言被一些人诟病的 switch 不能自动 break, 竟然能做这么用
littlewing
2021 年 12 月 15 日
lbp0200
2021 年 12 月 15 日
https://en.wikipedia.org/wiki/Coroutine
昨天还有热帖批判协程的,一脸苦大仇深的问
ipwx
2021 年 12 月 15 日
@liuidetmks 哦原来 C 语言的模拟 coroutine 其实是自动机 hhh

这样来看,这种其实更类似于 on_message(message_type) {
switch (message_type) {
case xx: ...
case xx: ...
}
}

只不过用了语法糖自动展开了
waruqi
2021 年 12 月 15 日
有 我一直在用,欢迎使用 tbox 里面也有一套类似 protothreads 的 stackless conroutine 实现,接口更加简单
Zepp
2021 年 12 月 16 日
点进主楼的链接之后发现是我 N 年前收藏的网址,但是仍然一个字都没看过……
bfdh
2021 年 12 月 16 日
@liuidetmks #1 有的,一直用 C 。
不过 protothreads 今天还是第一次听说,看了下代码,发现局部变量应该会有问题,结果果然在网站上面找到了这样一段说明
Because protothreads do not save the stack context across a blocking call, local variables are not preserved when the protothread blocks. This means that local variables should be used with utmost care - if in doubt, do not use local variables inside a protothread!

感觉这个是个非常大的局限,反正我很在意这个。
bfdh
2021 年 12 月 16 日
@fengjianxinghun #3 当然是用世界上最好的编程语言——PHP 了(手动狗头)
zhangyichent
2021 年 12 月 16 日
感觉我们以前公司的代码用的是类似的思路。。。。当时看的特别神奇。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/822368

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX