Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Plan: Migrate to C++98/MIT. 计划迁移到C++98/MIT. #33

Open
winlinvip opened this issue Sep 5, 2022 · 0 comments
Open

Plan: Migrate to C++98/MIT. 计划迁移到C++98/MIT. #33

winlinvip opened this issue Sep 5, 2022 · 0 comments
Assignees

Comments

@winlinvip
Copy link
Member

winlinvip commented Sep 5, 2022

We plan to replace it progressively by C++ 98 code and switch to MIT license.

Summary

关于ST,我计划一点点换成C++ 98/MIT的,它目前有几个痛点:

  1. 不维护了,最初的作者们估计都退休了,很多新的CPU和系统无法支持,这也是srs分支做了很多修改的原因。
  2. 协议是MPL,其实是Mozilla的协议,Firefox也是这个协议,和LGPL类似,是OSI的标准协议,但这个用的少,不知道有什么坑没有。
  3. 那些宏很奇怪,都是操作结构体的,之前展示过,应该换成C++ 98的,和C没什么差别,只是基本封装。C++也可以继续暴露C的API。

其实本身ST的LICENSE就是分多部分授权的:

  1. ST的库是MPL授权。
  2. ST的头文件,和一般的做法一样,是免责可以随便用。GPL的Linux也一样。
  3. Example是BSD授权的。

原始LICENSE是这么说的:

The State Threads library is ...... Mozilla Public License (MPL) version 1.1 
or the GNU General Public License (GPL) version 2 or later.

All source code in the "examples" directory is distributed under the BSD style license.

参考:State-Threads LICENSE

Why C++98?

为何选择C++ 98?其实我们并不想换语言,C有最好的一致性,另外就是C++ 98了,它实际上也是C++ ANSI标准C++。估计支持最广泛的C++,就是C++98了。

此外,我们只使用C++98中的封装功能,只使用class和成员变量和函数,不使用虚函数,不使用继承,不使用模板,不使用任何高级能力。因为本质上ST在语言上,使用C是最合适的,但是它有大量的宏,本质上就是实现了C++的封装能力,但造成了无法维护的问题,比如:

/* Insert element "_e" into the list, after "_l" */
#define ST_INSERT_AFTER(_e,_l)     \
    ST_BEGIN_MACRO         \
    (_e)->next = (_l)->next; \
    (_e)->prev = (_l);     \
    (_l)->next->prev = (_e); \
    (_l)->next = (_e);     \
    ST_END_MACRO

/* Insert an element "_e" at the head of the list "_l" */
#define ST_INSERT_LINK(_e,_l) ST_INSERT_AFTER(_e,_l)

#define _ST_RUNQ                        (_st_this_vp.run_q)
#define _ST_IOQ                         (_st_this_vp.io_q)
#define _ST_ZOMBIEQ                     (_st_this_vp.zombie_q)

#define _ST_ADD_SLEEPQ(_thr, _timeout)  _st_add_sleep_q(_thr, _timeout)
#define _ST_DEL_SLEEPQ(_thr)        _st_del_sleep_q(_thr)

#define _ST_EPOLL_READ_CNT(fd)   (_st_epoll_data->fd_data[fd].rd_ref_cnt)
#define _ST_EPOLL_WRITE_CNT(fd)  (_st_epoll_data->fd_data[fd].wr_ref_cnt)
#define _ST_EPOLL_EXCEP_CNT(fd)  (_st_epoll_data->fd_data[fd].ex_ref_cnt)
#define _ST_EPOLL_REVENTS(fd)    (_st_epoll_data->fd_data[fd].revents)

除非天天看这些代码,偶然看一次,修一修bug,是非常难以理解这些宏定义的。

LICENSE

Original files of State-Threads:

  • examples: BSD, Eliminated.
  • common.h: MPL-1.1 OR GPL-2.0-or-later
  • md.h: MPL-1.1 OR GPL-2.0-or-later
  • public.h: MPL-1.1 OR GPL-2.0-or-later
  • event.c: MPL-1.1 OR GPL-2.0-or-later
  • io.c: MPL-1.1 OR GPL-2.0-or-later
  • key.c: MPL-1.1 OR GPL-2.0-or-later
  • sched.c: MPL-1.1 OR GPL-2.0-or-later
  • stk.c: MPL-1.1 OR GPL-2.0-or-later
  • sync.c: MPL-1.1 OR GPL-2.0-or-later
  • md_linux.S or md.S: MPL-1.1 OR GPL-2.0-or-later

New files and directories:

@winlinvip winlinvip self-assigned this Sep 5, 2022
@winlinvip winlinvip pinned this issue Sep 5, 2022
@winlinvip winlinvip changed the title 关于ST的未来计划 About develop plan. 关于ST的未来计划 Sep 5, 2022
@winlinvip winlinvip changed the title About develop plan. 关于ST的未来计划 Plan: Migrate to C++98/MIT. 关于ST的未来计划. Sep 5, 2022
@winlinvip winlinvip changed the title Plan: Migrate to C++98/MIT. 关于ST的未来计划. Plan: Migrate to C++98/MIT. 迁移到C++98/MIT,关于ST的未来计划. Sep 5, 2022
@winlinvip winlinvip changed the title Plan: Migrate to C++98/MIT. 迁移到C++98/MIT,关于ST的未来计划. Plan: Migrate to C++98/MIT. 计划迁移到C++98/MIT. Sep 5, 2022
winlinvip added a commit that referenced this issue Sep 5, 2022
winlinvip added a commit that referenced this issue Sep 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant