经过 1.5.x的过渡与 1.6早期版本的不断试错,1.6.x 系列已经基本具备发布 STS 版本的能力
在作者看来,一个合格的 STS 版本至少应该满足以下几个基本条件
1.6.x STS 版本的预期目标
els
声明文件,如果可以标准C实现,附上C文件不知现在主要的试用者在哪个系统平台下使用?
如果语言的主打方向是单片机,何不在短期内专注这一平台,对其他平台暂放一放?达到可实用、项目开始稳定迭代的程度再兼顾?
嗯,如果说最常见的试用平台,应该还是Windows,但是直到目前,Windows的体验其实不是很完整,最新的1.6.4的Windows版本不能装拓展包,只能玩内置模块。
MCU 方面作为重点支持难度挺大的,芯片型号太多,可能只能主要支持一款,剩下的型号由 用户/开发者 去移植、编译固件
其实现在主要是面临一个很尴尬的问题,如果不考虑拓展,现有的标准库(包括单片机的HAL库)与解释器已经可以实现3平台全通用
也就是说 如果不考虑拓展模块的存在,现有的已经实现可用,但是如果没有一套可行的拓展机制,那么进行移植与开发时的工作量会非常大,也很难吸引到别人去移植,模块与拓展的缺乏也会影响使用体验
但关键是做成了一套模块机制,如果不能吸引到感兴趣的人来贡献模块,这套机制的存在价值就很低,这也是之前一直没有投入精力去做的原因,但最近开始逐渐加强实用性方面的建设,所以准备投入时间完善这套机制,为以后的发展先提供一个地基
结合目前来看,我觉得还是先以Windows平台为中心比较好,毕竟这是最常见的系统,而且Windows模块可以很方便地以编译好的二进制发布,工作成本低(Linux上面这样得打不少包,各x86/x64/arm....,用源码包发布还得考虑构建问题),可以从封装一些win32api与一些小型库开始丰富模块。
MCU 平台,嗯,它的情况有些复杂,它的支持可能除了官方板+固件外,都不是面向初学者,而是面向有开发经验的用户的(毕竟要求有能力编译、移植、适配)
Linux 平台之前是中心,主要是因为开发时Linux环境居多,但目前来看Linux接受度远远比不上Windows,如果体验时必须有个虚拟机或者WSL,可能会劝退不少人,Linux就优先级先降一下
Mac没搞过,先搁置一下
补充: 感谢大佬的建议
发了一些宣传视频,还没有发教学视频,因为我不是很擅长更视频,正在找一个愿意合作的up,由他来定期发教学视频
GUI工作还是蛮大的,估计第一步是封装 EasyX 这种小型绘图库,然后封装一些 win32 api(也许可以参考一下vbs的一些函数?)
相对教学视频,何不先像彭贞那样发些短视频演示效果加扫一眼中文代码?不到一分钟即可。
windows GUI 这个坑挺大。即便是封装现有库,也还需对文档与反馈信息等作本地化以及更新等。除非是自身项目需要,否则很考验可持续性。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
#!/bin/els
import('stdlib')
lpt = {}
lpt.plat_windows=1
lpt.root = (lpt.plat_linux and "/els/") or ( lpt.plat_windows and Sys.getenv("LPTROOT") )
lpt.root = ".\\"
lpt.menu = "
-----------------------------------------------------------------
| the Package Manager of Losu |
| |
| list list all packages |
| search find Packages online |
| install Install a Package |
| remove Remove a Package |
| |
-----------------------------------------------------------------
"
RemotePackages ={}
LocalPackages ={}
def lpt.install(pack,ver):
# search Package want to install
lpt.search(pack)
# get version
ver = ver or RemotePackages[pack].lastist
print("开始下载文件......")
# check plat
if RemotePackages[pack][ver][lpt.plat] :
# exsist bin package
var errnum = 0
for src,loc = RemotePackages[pack][ver][lpt.plat]:
if Sdk.downloadfile(lpt.srcurl & pack & "/v" & ver & "/" & loc[1] , lpt.root & loc[2] ) != 0 :
errnum = errnum + 1
print('警告: 文件\t'& lpt.srcurl & pack & "/v" & ver & "/" & loc[1] & "\t下载失败" )
else :
print('成功: 文件\t'& lpt.srcurl & pack & "/v" & ver & "/" & loc[1] & "\t下载成功" )
;
;
if errnum>0 :
print("下载中缺失了一些文件,可以尝试重新安装以修复")
;
else :
lpt.error("该软件包没有适合你计算机的版本",-3)
;
LocalPackages[pack]=ver
print("完成")
;
def lpt.remove(pack) :
lpt.search(pack)
var version = LocalPackages[pack]
var pacfile = RemotePackages[pack][version][lpt.plat] or lpt.error("找不到这个软件包的具体配置,卸载失败",-4)
print("开始卸载......")
for src,loc = pacfile :
if Sdk.rmfile(lpt.root&loc[2]) !=0 :
print("警告: 文件\t"&lpt.root&loc[2]&"\t移除失败")
else :
print("成功: 文件\t"&lpt.root&loc[2]&"\t移除成功")
;
;
LocalPackages[pack]=null
print("完成")
;
def lpt.search(pack) :
if Sdk.downloadfile(lpt.srcurl & pack & "/" & pack & ".elml",lpt.root & "lpt/tmp.elml") !=0 :
lpt.error("找不到\t"&pack,-2)
;
eval(lpt.root & "lpt/tmp.elml",1)
print("找到了\t"& pack )
print("描述\t" & RemotePackages[pack].info )
print("最新的版本为\t" & RemotePackages[pack].lastist )
print("支持的平台有")
for plat,tmp = RemotePackages[pack][RemotePackages[pack].lastist] :
print('\t'&plat)
;
print('完成')
;
def lpt.list():
print("正在列举 ......")
for name,version = LocalPackages:
print(name&"\t"&version)
;
print("完成")
;
def lpt.init():
var fi,s,name,version
print("正在载入本地列表 ......")
fi = File:(lpt.root&'lpt/install.list','in')
if fi.isopen()==0 :
fi = File:(lpt.root&'lpt/install.list','out')
fi.close()
return 1
;
with fi.eof()==0 :
s = fi.lineinput()
if s !="":
name = strtok(s,',')
version = strtok(null,',')
LocalPackages[name]=version
;
;
fi.close()
print('完成')
;
def lpt.deinit():
var fout = File:(lpt.root&"lpt/install.list",'out')
if fout.isopen()==0: lpt.error('拒绝访问,权限不足',-1) ;
for name,version = LocalPackages:
fout.print(name&","&version)
;
fout.close()
;
def lpt.error(src,ex):
print('LPT error:\t'&src)
exit(ex)
;
# main
eval(lpt.root&'lpt/lpt.conf',1)
if argc()==0 : # Init Menu
print(lpt.menu)
exit(0)
;
lpt.init()
if argc()==1 :
if argv(1)=="list" :
lpt.list()
lpt.deinit()
exit(0)
;
;
if argc()==2 : # Install lastist or remove or search
lpt.init()
if argv(1) == "install" : lpt.install(argv(2),null) ;
if argv(1) == "remove" : lpt.remove(argv(2)) ;
if argv(1) == "search" : lpt.search(argv(2)) ;
lpt.deinit()
exit(0)
;
if argc()==3 : # Install lastist or remove or search
lpt.init()
if argv(1) == "install" : lpt.install(argv(2),argv(3)) ;
lpt.deinit()
exit(0)
;
print(lpt.menu)
exit(1)
如果说在Linux发布二进制版本的话,或许可以尝试AppImage之类的通用方案。
登录 后才可以发表评论