V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LEXUGE
V2EX  ›  程序员

Rust 编写的化学方程式配平库

  •  
  •   LEXUGE ·
    LEXUGE · 2018-05-19 08:14:58 +08:00 · 4979 次点击
    这是一个创建于 2378 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近用 Rust 编写了一个化学方程式的配平库。
    主要的算法实现是 基于正则的 Parser 和高斯-约当消元算法

    整个 lib 原生使用 generic type,所以支持各种需求的超大运算。

    Github 地址:
    lib_xch (算法实现库)
    xch-ceb (调用库的实现)

    欢迎提出意见与建议以及求 Star 可以有理由地提出批评

    25 条回复    2018-05-21 20:08:38 +08:00
    frozenthrone
        1
    frozenthrone  
       2018-05-19 08:51:07 +08:00 via iPhone
    666
    LEXUGE
        2
    LEXUGE  
    OP
       2018-05-19 09:22:15 +08:00
    感谢大家的支持
    尽管这个项目对工业生产没什么用
    YuuuZeee
        3
    YuuuZeee  
       2018-05-19 09:24:59 +08:00
    好厉害!!!
    LEXUGE
        4
    LEXUGE  
    OP
       2018-05-19 09:30:17 +08:00
    @YuuuZeee 看了一下你的项目,过奖了
    muziki
        5
    muziki  
       2018-05-19 09:33:18 +08:00 via iPhone
    legal_check_util 里面的 check_char 可以用 pattern matching 重写一下
    muziki
        6
    muziki  
       2018-05-19 09:42:49 +08:00 via iPhone
    有些 vec::new 操作能估计出最低开销的话用 with_capacity 能快一点(不过性能影响不大就是了)
    LEXUGE
        7
    LEXUGE  
    OP
       2018-05-19 09:48:07 +08:00
    @muziki 嗯,好的,会改进的
    之前没有了解过 pattern matching.....
    LEXUGE
        8
    LEXUGE  
    OP
       2018-05-19 09:50:16 +08:00
    @muziki 这个我觉得性能损失不大?
    muziki
        9
    muziki  
       2018-05-19 09:52:59 +08:00 via iPhone
    嗯,这种程度的操作几乎忽略不计
    输出的数据考虑用 serde 封装一下?现在的数据结构有点儿 raw
    LEXUGE
        10
    LEXUGE  
    OP
       2018-05-19 10:20:56 +08:00
    @muziki 初学 Rust,全都用了 Result,我了解之后会改进的
    wspsxing
        11
    wspsxing  
       2018-05-19 10:23:42 +08:00 via Android
    厉害啊,化学方程式都出来了
    LEXUGE
        12
    LEXUGE  
    OP
       2018-05-19 10:25:10 +08:00
    @muziki 你是指 handler_api 的结果吗?
    这个规模用 struct 也还好吧。如果将来返回复杂了,我会使用 serde 的。
    Brucepac
        13
    Brucepac  
       2018-05-19 11:05:56 +08:00
    看到了楼主的博客,小伙子,年轻有为啊
    LEXUGE
        14
    LEXUGE  
    OP
       2018-05-19 11:07:38 +08:00
    LEXUGE
        15
    LEXUGE  
    OP
       2018-05-19 11:08:09 +08:00
    @Brucepac 也只是随意折腾,没什么实际水平,参加 OI 的才厉害
    changwei
        16
    changwei  
       2018-05-19 14:21:47 +08:00 via Android
    要是我读中学的时候就有这个库,嘿嘿嘿
    cyancat0525
        17
    cyancat0525  
       2018-05-19 14:44:30 +08:00 via Android
    @changwei 可能上不了大学?
    XiaoJSoft
        18
    XiaoJSoft  
       2018-05-19 15:11:45 +08:00
    之前写的,可供参考: https://github.com/bce-toolkit/bce
    LEXUGE
        19
    LEXUGE  
    OP
       2018-05-20 07:30:35 +08:00
    @XiaoJSoft 谢谢
    遇到前辈了
    LEXUGE
        20
    LEXUGE  
    OP
       2018-05-20 07:36:58 +08:00
    @cyancat0525 有可能。。。
    geelaw
        21
    geelaw  
       2018-05-20 14:56:42 +08:00
    我小时候也喜欢玩这个 (★ ω ★) [不过我是坚定的 C family 使用者,而且当时 regex 还不是标准,所以是手工写 lexer 和 parser

    不过实际上我有遇到过不满秩的方程(在考试里还是什么的),需要质量守恒定律之外的内容才能配平的情况。
    LEXUGE
        22
    LEXUGE  
    OP
       2018-05-20 15:04:39 +08:00
    @geelaw 我在测试的时候也遇到过
    在设计算法时看相关论文也提到过,但是因为数量少,所以就忽略了。至今未找到解决方案。。。
    XiaoJSoft
        23
    XiaoJSoft  
       2018-05-20 21:02:54 +08:00
    @LEXUGE 这一方面我有解决...方案是输出通解(关键字:基础解系)...可以参考我的程序,当然未必能满足所有人的需求,但就目前而言应该是你能找到的类似程序中最好的,所以你可以参考我的一些做法来拿 Rust 重写一份。
    商业化未尝不可,但是你得知道到底是谁需要这个。举个例子,这个程序的最初模型是拿 VB 写的,我放到了 GoogleCode 上,然后前几年有几个中学的化学老师把它改成了 Office 插件(不好意思相关页面找不到了,我忘加收藏夹了),你看这不就是一个很好的思路吗...
    像我这边的商业尝试虽然不能太透露给你,不过我可以说如果你做好了以后是可以在工业和教学上使用的。如果你喜欢的话可以考虑更深入一些,可以参考 EPAM 公司的开源产品( Indigo 之类的)。
    另附我的程序的 OSC 页面: https://www.oschina.net/p/bce
    GitHub 之前发过了就不再说了...
    XiaoJSoft
        24
    XiaoJSoft  
       2018-05-20 21:16:30 +08:00
    @LEXUGE 另外,自己写 Parser 是有必要的(或者至少是使用 Yacc 之类的东西),前提是你打算把这个项目一直做下去的话。到后期你会觉得 AST 这种神奇的东西真的是很有用的。比如当你需要把方程式渲染成 Web 页面可以显示的东西或者是 Latex 之类的东西的话这种就很有用了。
    总之,要搞这个的话学好线性代数和编译原理是肯定没错的啦 ~
    LEXUGE
        25
    LEXUGE  
    OP
       2018-05-21 20:08:38 +08:00
    @XiaoJSoft 嗯,感谢前辈指点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1751 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:44 · PVG 00:44 · LAX 08:44 · JFK 11:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.