clq
浏览(703) +
2022-07-24 17:12:37 发表
编辑
关键字:
[2025-03-15 13:46:11 最后更新]
各语言转换器或开源库收集 最近在做这样的工作,发现现在有些工具/库的转换非常成熟,是相当可用的。因此收集一下。 (图标来自 https://www.runoob.com/charsets/ref-emoji.html) 1.TypeScript 相关 因为 ts 本身就是要转换成 js 才能用的,可能是因此它的 AST 树什么的设计上就好转换吧,所以它的转换器是非常有可用度的。 2.ts2c https://github.com/andrei-markeev/ts2c https://andrei-markeev.github.io/ts2c/ 在查找 ts2 c# 工具时意外找到的,非常有意思。可用度未知。 2023.2 更新 意外发现它还有一个扩展版本,那说明它的可用性还是可以的。 https://github.com/andrei-markeev/ts2c-target-esp-idf 应该是支持 esp 环境的开发,也算是一个扩展 tsc 的示例了。 3.TypeLite 套件 应该也是一个冷门工具,不过记录一下。 https://www.open-open.com/news/view/1e72156 快速将C#类型转成TypeScript介面定义 “ 使用 TypeScript 处理 AJAX 请求时,常需要在前端定义与 C# 物件属性一致的 TypeScript 类型,以便将后端传来的 JSON 资料还原成强类型物件。针对较正式的资料模型,我会用 CodeGen 方式同步 C# 与 TypeScript 端的类型定义(顺便处理多语系问题)。但蛮多时候处理对象只是零散的小类型,不必杀鸡用牛刀,针对这类需求,推荐一个好用工具-TypeLITE。 在 NuGet 查关键字"typelite",很快就可找到 TypeLite 套件。 ” 4. https://github.com/RafaelSalguero/CSharp2TS 这是一个很简单的 C# 转 ts 的 vscode 插件。 5. java 1.6 后可直接运行 js 。 另外 https://github.com/mozilla/rhino 也一直在更新。 6. https://github.com/aws/jsii https://aws.amazon.com/cn/blogs/china/generate-python-java-dotnet-software-libraries-from-typescript-source/ 7. golang 运行 javascript https://github.com/robertkrimen/otto otto err https://github.com/dlclark/regexp2 7.2 golang 运行 javascript https://github.com/dop251/goja 这个的星数没有 otto 多,不过也有 3k+ ,另外它写明了至少灵感来自于 otto 7.3 https://github.com/grafana/k6/ https://www.cnblogs.com/rongfengliang/p/14232784.html goja 支持es6的一种方法 goja 对于es6 的module 模式是不支持的,但是我们可以通过扩展模式支持 goja 的更新很近,不过它指明了要 go 1.16 以上。而 otto 还是支持 1.10 的。 8. C# 运行 js https://github.com/sebastienros/jint/ https://www.jb51.net/article/233715.htm ast js https://blog.csdn.net/weixin_40539892/article/details/89327076 9.(补充 2.1) 用 tsc 加 zig 和可做出很有趣的组合。似乎 tsc 还不支持 class ,不过可以根据 https://www.5axxw.com/wiki/content/rnryfz 中的示例改成结构体中的成员函数,用 c++ 的估计很失望,不过对我们就是要用纯 c 模拟类的就太合适了! 最后生成的 c 语言代码还可以再用 zig 转换成 zig 后加上 try 异常处理。 这样的话没有 seh 也基本解决了 c 语言的异常问题。对于我来说,zig 的出现还解决了一个大问题,原来我们就是用的纯 c 写基础库,业务逻辑是用的 lua ,但一直担心在性能高的地方还是得上纯 c ,这时候业务逻辑就不能用 比较放松的方式来写了。而 zig 的出现解决了这个问题,在相对比较“乱”或者是没太多精力精心编写的逻辑代码现在可以在性能有要求时由 lua 转用 zig ,完美!至少目前来说是这样。(golang 其实在这个场合不太合适) 以下是结构体中的 js 转换成 c 语言的结果示例,直接在 https://andrei-markeev.github.io/ts2c/ 中输入,转换。就可以看到,还是比较好用的 ---------------------------------------------------------------- console.log("Hello world!"); function a(){} var obj = { key: "hello" }; obj["newKey"] = a; ---------------------------------------------------------------- #include |stdlib.h| #include |assert.h| #include |stdio.h| struct obj_t { const char * key; void (*newKey)(); }; static struct obj_t * obj; void a() { } int main(void) { printf("Hello world!\n"); obj = malloc(sizeof(*obj)); assert(obj != NULL); obj->key = "hello"; obj->newKey = a; free(obj); return 0; } ---------------------------------------------------------------- 10. https://github.com/hazzard993/LuaToTypeScript 另外一个没有星的国人作品,似乎也还是可以的 https://github.com/xiangnanscu/lua2js 11. 有类型的 luau ,查找 lua 的 vscode 插件时发现的。 不过它的实现语言是 c++ ,并且要求 c++11 甚至某些功能要求 c++17 这显然是个大问题。 https://baijiahao.baidu.com/s?id=1715651153158895793&wfr=spider&for=pc https://www.xujun.org/note-146982.html https://github.com/Roblox/luau/releases/tag/0.520 12. https://github.com/TypeScriptToLua/TypeScriptToLua 想要写有类型的 lua ,推荐还是用这个,可以完美的转换成 lua ,我见过有个大神的 lua 项目也是这样用的,源码就是 TypeScript 的,运行时转换成 lua 。这比 luau 的实现要实际得多。 不过,我在使用的时候加了参数 “ --allowJs --noImplicitSelf true” 。否则转换出来的东西会很怪异。我对它转换出来的东西一定要加上 prototype 也是不太喜欢。 不过确实可以良好运行。 ---- 更新:那个大神的项目是 https://github.com/jose-elias-alvarez/typescript.nvim 13. https://github.com/fyne-io/fyne 这是一个 ui 库,不过因为它是 golang 的所以特意放过来。据说是纯 golang 下星最高的,我主要是看它在国内有很多人的推荐,有些好奇。 特别是它支持 ios 和安卓,想看看它是不是可以替代 qt - 至少某些情况下。 14. https://github.com/ddliu/motto Motto提供了类似于Nodejs的模块环境,可以在golang中运行javascript文件。基于 otto 。 15. js 语法标准中的 ES6 转 ES5 的方法 http://newbt.net/ms/vdisk/show_bbs.php?id=64324DAD2BBFAD6B14712BC1F172E642&pid=164 16. https://zhuanlan.zhihu.com/p/55479666 JavaScriptCore JavaScriptCore是一个C++实现的开源项目。使用Apple提供的JavaScriptCore框架,你可以在Objective-C或者基于C的程序中执行Javascript代码,也可以向JavaScript环境中插入一些自定义的对象。JavaScriptCore从iOS 7.0之后可以直接使用。 17. rhino https://github.com/mozilla/rhino https://www.jianshu.com/p/048229e8d59b 安卓中目前是无法使用 ScriptEngineManager 的。所以要用第三方库。 18. lua 与 u3d 的非常多 https://www.zhihu.com/question/28619506 据说 slua 最好 https://github.com/pangweiwei/slua https://github.com/Tencent/luapanda lua 在 vscode 下的调试器。 19. https://github.com/jasonsantos/luajava 似乎用的人也比较多,不过原地址 www.keplerproject.org/luajava/ 似乎已经不维护了。 20. u3d 生成类参考文件的方法 http://newbt.net/ms/vdisk/show_bbs.php?id=DC426EF15A8B070E53BE3927EF53CE12&pid=160 21. 据说 kotlin 也可以转换成 js https://www.kotlincn.net/docs/reference/js-overview.html 22. c/c++ 编译为 js 的标准官方方法 【来自大神 阮一峰 大侠的 blog】 https://www.ruanyifeng.com/blog/2017/09/asmjs_emscripten.html https://emscripten.org/ Emscripten 简介 虽然 asm.js 可以手写,但是它从来就是编译器的目标语言,要通过编译产生。目前,生成 asm.js 的主要工具是 Emscripten。 Emscripten 的底层是 LLVM 编译器,理论上任何可以生成 LLVM IR(Intermediate Representation)的语言,都可以编译生成 asm.js。 但是实际上,Emscripten 几乎只用于将 C / C++ 代码编译生成 asm.js。 C/C++ ⇒ LLVM ==> LLVM IR ⇒ Emscripten ⇒ asm.js "[其中阮神说用比较难安装,下载 sdk 比较好] RedNax 说: 安装emscripten的更简单办法(自称)是DockerHub: https://hub.docker.com/r/apiaryio/emcc/ 这个直接可以编译WebAsm了。 顺便推销我自己用Emscripten包的unrar作例子: https://github.com/YuJianrong/node-unrar.js " emscripten的Docker image的話 這個可能更好,維護得更密集: https://hub.docker.com/r/trzeci/emscripten/ 我从网上下了一个C语言的库,希望可以编译成asm.js,但现在只生成wasm,老大指教一下原因? jupiterben 说: -s WASM=1改成0 killinux 说: https://bellard.org/jslinux/ 这个最新版的就是用的Emscripten 和tinyemu,脑洞爆炸了 -------------------------------------------------------- 从作者 https://bellard.org/jslinux/tech.html 的描述来看 asm.js(http://asmjs.org/) 和 emscripten(http://kripken.github.io/emscripten-site/) 并不是同一个东西,他用前者代替了后者或者相反。 -------------------------------------------------------- " 四、用途 asm.js 不仅能让浏览器运行 3D 游戏,还可以运行各种服务器软件,比如 Lua、Ruby 和 SQLite。 这意味着很多工具和算法,都可以使用现成的代码,不用重新写一遍。 另外,由于 asm.js 的运行速度较快,所以一些计算密集型的操作(比如计算 Hash)可以使用 C / C++ 实现,再在 JS 中调用它们。 真实的转码实例可以看一下 gzlib 的编译,参考它的 Makefile 怎么写。 " -------------------------------------------------------- “ asm.js 只提供两种数据类型。 32位带符号整数 64位带符号浮点数 垃圾回收机制 asm.js 没有垃圾回收机制,所有内存操作都由程序员自己控制。asm.js 通过 TypedArray 直接读写内存。 下面就是直接读写内存的例子。 var buffer = new ArrayBuffer(32768); var HEAP8 = new Int8Array(buffer); function compiledCode(ptr) { HEAP[ptr] = 12; return HEAP[ptr + 4]; } 如果涉及到指针,也是一样处理。 size_t strlen(char *ptr) { char *curr = ptr; while (*curr != 0) { curr++; } return (curr - ptr); } 上面的代码编译成 asm.js,就是下面这样。 function strlen(ptr) { ptr = ptr|0; var curr = 0; curr = ptr; while (MEM8[curr]|0 != 0) { curr = (curr + 1)|0; } return (curr - ptr)|0; } ” 这段说明很奇怪,按道理说标准 js 似乎是不能操作二进制的。是说使用 int8 的数组吗? 而且又说浏览器能跑编译出来的 js 又有人说 safari 不支持,奇怪。 23. https://github.com/fengari-lua/fengari 这似乎是一个成熟的 js 环境下的 lua 脚本库。从页面上看它解决了二进制的问题。 同时支持 node 和 web 。 “ Strings Lua strings are 8-bits clean and can embed \0. Which means that invalid UTF-8/16 strings are valid Lua strings. Lua functions like string.dump even use strings as a way of storing binary data. To address that issue, Fengari uses Uint8Array objects containing the raw bytes to implement lua strings. To push a JS string on the stack you can use lua_pushliteral which will convert it to an array of bytes before pushing it. To get a Lua string on the stack as a JS string you can use lua_tojsstring which will attempt to convert it to a UTF-16 JS string. The latter won't give you what you expect if the Lua string is not a valid UTF-16 sequence. You can also convert strings with luastring_of, to_luastring, to_jsstring and to_uristring. ” https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array 中文版本居然和这个版本不太一样 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array#%E6%B5%8F%E8%A7%88%E5%99%A8%E5%85%BC%E5%AE%B9%E6%80%A7 兼容性说明 从 ECMAScript 2015 开始,Uint8Array 构造函数需要通过 new 操作符调用。即日起如果没有使用 new 调用 Uint8Array 的构造函数,将会抛出 TypeError 。 var dv = Uint8Array([1, 2, 3]); // TypeError: calling a builtin Uint8Array constructor // 不使用 new 将会被禁止 var dv = new Uint8Array([1, 2, 3]); ---- https://zhuanlan.zhihu.com/p/349655250 处有比较详细的说明。 24. https://github.com/c-smile/quickjspp " 如果你想为RmlUi集成一个JavaScript引擎,那么QuickJs可能是不二之选(V8太大了),然而QuickJs在Windows下编译比较麻烦,这个时候你可能需要借助Sciter作者开源的这个库:https://github.com/c-smile/quickjspp " https://zhuanlan.zhihu.com/p/528968940 25. 今天才知道原来 “Free Pascal 团队维护着一个用于 pascal 到 Javascript 的编译器,称为 pas2js” https://freepascal.cn/ https://gitlab.com/freepascal.org/fpc/ https://wiki.freepascal.org/pas2js “FPC 已迁移至 Gitlab” 26. 一个据说 u3d 都在使用的 c/c++ 版本的 gc 库。 https://blog.csdn.net/weixin_45981643/article/details/105939300 " 贝姆垃圾收集器(Boehm-Demers-Weiser garbage collector)也就是著名的Boehm GC,是计算机应用在C/C++语言上的一个保守的垃圾回收器(garbage collector),可应用于许多经由C/C++开发的专案,同时也适用于其它运行环境的各类编程语言,包括了GNU版Java编译器运行环境,以及Mono的Microsoft .NET移植平台。同时支持许多的作业平台,如各种Unix操作系统,微软的操作系统(Microsoft Windows),以及麦金塔上的操作系统(Mac OS X),还有更进一步的功能,例如:渐进式收集(incremental collection),平行收集(parallel collection)以及终结语意的变化(variety of finalizer semantics) 垃圾收集器作用于未变性的(unmodified)C程序,只要简单的将malloc调用用GC_malloc取代,将realloc取代为GC_realloc调用,如此一来便不需要使用到free的函式。下列的代码展示出如何用Boehm取代传统的malloc以及free。. #include "gc.h" #include assert.h #include stdio.h int main() { int i; GC_INIT(); for(i = 0; i < 10000000; I) { int **p = (int **) GC_MALLOC(sizeof (int *)); int *q = (int *) GC_MALLOC_ATOMIC(sizeof (int)); assert(*p == 0); *p = (int *) GC_REALLOC(q, 2 * sizeof (int)); if(i % 100000 == 0) printf("Heap size = %d\n", GC_get_heap_size()); } return 0; } " 来自 https://github.com/remobjects/gc https://github.com/ivmai/bdwgc ---------------------------------------------------------------- https://www.cnblogs.com/lancidie/ “ 运行时的另外一个重要的部分,就是垃圾收集器。在Unity 5中,我们使用libgc垃圾收集器。它是一个典型的贝姆垃圾收集器(Boehm-Demers-Weiser garbage collector)。(译注:相对使用保守垃圾回收策略)。然而我们的libil2cpp被设计成可以方便使用其他垃圾回收器。因此我们现在也在研究集成微软开源的垃圾回收器(Microsoft GC)。对于垃圾回收器这一点,我们会在后续的一篇中专门的讨论,这里就不多说了。 ” 什么是IL2CPP? 从技术层面上来说,我们说的IL2CPP包含了两部分: 一个进行 预先编译(译注:ahead-of-time,又叫AOT,以下一律使用AOT缩写)的编译器 一个支持虚拟机的运行时库 AOT编译器将由.NET 输出的中间语言(IL)代码生成为C++代码。运行时库则提供诸如垃圾回收,与平台无关的线程,IO以及内部调用(C++原生代码直接访问托管代码结构)这样的服务和抽象层。 AOT编译器 IL2CPP AOT编译器实际的执行文件是il2cpp.exe。在Windows平台你可以在Unity安装路径的Editor\Data\il2cpp目录下找到。对于OSX平台,它位于Unity安装路径的Contents/Frameworks/il2cpp/build目录内。 il2cpp.exe这个工具是一个托管代码可执行文件,其完全由C#写成。在开发IL2CPP的过程中,我们同时使用.NET和Mono编译器对其进行编译。 il2cpp 接受来自Unity自带的或者由Mono编译器产生的托管程序集,将这些程序集转换成C++代码。这些转换出的C++代码最终由部署目标平台上的C++编译器进行编译。 27. Vala使用类似C#的语法,编译过程是先转换成C源码,然后使用标准的C编译器,生成二进制执行文件,这样编译出的文件,执行速度飞快。同时,这样的编译过程,对系统的编译环境要求很低,只要你的系统自带了C编译环境(这对于几乎任何系统都不成问题)。 https://valadoc.org/ 在Windows下安装Vala 下载Vala IDE。最新版本为Valide 0.7.1。在安装Vala IDE的过程中,可以选择自动下载并安装Vala以及MinGW(minimalist GNU environment for Windows,MinGW提供了GNU C Compiler),也可以手动下载安装vala。 下载libgee。libgee提供了非常丰富的容器类和接口,比如ArrayList, HashSet, HashMap等等。下载后直接把包中的include、lib、bin、share目录解压到vala安装目录下,覆盖原有的include、lib、bin、share目录。 下载MinGW API for MS-Windows。下载后直接把包中的include、lib目录解压到vala安装目录下,覆盖原有的include,lib目录。如果不安装这个MinGW API,在编译使用到GTK的程序时,会报不能加载libcomdlg32的错误。 https://code.google.com/archive/p/vala-win32/downloads https://github.com/GNOME/vala NOTE: in order to get code intelligence, you must install the Vala Language Server (https://github.com/benwaffle/vala-language-server). -------------------------------------------------------- https://blog.csdn.net/weixin_34187862/article/details/89444038 " 容器 Vala 实现了一些常用的泛型容器,例如单向列表、双向列表、并发式列表、队列、哈希表、红黑树等。这些容器是以库的形式实现的,这个库叫 Gee,其 API 文档见 http://valadoc.org/#!wiki=gee-0.8/index " 27.1 https://gitlab.gnome.org/esodan/gvls vala 的另一个语言服务器,支持 vscode 。代码很值得一看。 28. Wasmer支持基于WebAssembly的超轻量级容器,该容器可以在任何地方运行:从台式机到云和IoT设备,还可以以任何编程语言嵌入。 https://github.com/wasmerio/wasmer https://github.com/wasmerio https://docs.wasmer.io/ https://wasmer.io/ https://www.jianshu.com/p/0935f004c01f " 上一篇文章分享了基于wasm的openssl实践,讲述了openssl的MD5算法如何在浏览器中执行。在探索过程中发现了openssl是可以通过wasm编译后直接run,并且有自己的runtime,这是因为openssl.wasm是通过wasmer编译运行的,这一篇文章分享制作具有运行时的openssl.wasm " Docker的创始人Solomon Hykes曾说过,如果WebAssembly和WASI出现在2008年,那我们可能并不需要创建Docker了 " typescript编译到wasm的项目AssemblyScript也非常火. " 28.2 https://www.assemblyscript.org/getting-started.html#working-with-your-module 有文章说 assemblyscript 要从 github 下载,因为 npm 不支持更新了。不过至少当前 2023.8 仍然能直接从 nodejs 中直接安装就可以,非常的方便。 方法直接来自上面的官方链接,按文档依次在 nodejs 环境下执行几个命令即可,至少我测试的时候速度非常快。 http://newbt.net/ms/vdisk/show_bbs.php?id=C1E964DEF4CA419BECB651BDCF6C140D&pid=159 29. WAPM WAPM是WebAssembly Package Manager的缩写,为可以独立使用的Wasmer Runtime做的软件包管理器。可以理解为通过Wasmer软件包编译出来的.wasm文件是可以独立运行的,WAPM就是为了管理这些能独立运行的runtime而存在的。 https://www.jianshu.com/p/0935f004c01f https://wapm.io/ 30. https://zhuanlan.zhihu.com/p/432454443 Skia 是 Flutter、Chromium 以及 Android 项目中都使用了的 2d 图形库。为了能够让 Flutter 在浏览器中运行,Google 的工程师将 skia 编译成了能够在浏览器中运行的 WebAssembly 版本。 在看到 flutter 能够在 web 中运行的那一刻,我第一个想到的是,能不能直接在浏览器中直接进行设计并生成代码呢? Figma 是一个能够在浏览器中运行的类似 Sketch 的扁平化 UI 设计工具,它使用了 C++ 和 WebGL,这一套技术栈看着就比较复杂,要做类似的产品似乎很困难。 但有了 canvaskit,在浏览器中要实现类似功能,就很有希望。因为我们可以确认的是,chrome、flutter 有的渲染能力,我们通过使用 canvaskit 都能够实现。 于是,第一步我想尝试开始做一个在浏览器中渲染 sketch 设计稿文件的项目。 Demo 地址:https://skeditor.github.io/ 仓库地址:https://github.com/skeditor/skeditor 30.2 Skia 有很成熟的 java 和 delphi 版本。 Skia4Delphi https://github.com/skia4delphi/skia4delphi 31. 通过研究 https://wapm.io/ 可以知道这些 webasm 编译后的各个程序是可以直接在 windows 下运行的。基本上就是另外一个虚拟机。 下载地址为 https://github.com/wasmerio/wasmer/releases/ 来源为 https://wapm.io/ 中的 "get start" 按钮点击后的对话框页面: “ Install the Wasmer Standalone runtime If you haven't done so already, install the Wasmer Command Line Interface (CLI) for Windows or macOS/Linux: iwr https://win.wasmer.io -useb | iex ” 这个地址中就是一个脚本,脚本中写明了下载的地址。 32. 搜索 “java WebAssembly” 33. lazarus/freepascal 似乎支持 WebAssembly 编译 https://wiki.lazarus.freepascal.org/WebAssembly/Compiler make clean all OS_TARGET=embedded CPU_TARGET=wasm32 BINUTILSPREFIX= OPT="-O-" PP=fpc 34. 一些 svg 转换成 png 的库 ---- Node.js 和Sharp npm http://www.ioohu.com/News/1/84585.html https://sharp.pixelplumbing.com/ ---- phantomjs:一个基于WebKit的服务器端JavaScript API,它基于 BSD开源协议发布。PhantomJS无需浏览器的支持即可实现对Web的支持,且原生支持各种Web标准,如DOM 处理、JavaScript、CSS选择器、JSON、Canvas和可缩放矢量图形SVG,由于在linux下的二进制库还在准备中,所以需要单独下载源码编译。 https://blog.csdn.net/cangkukuaimanle/article/details/46778041/ ---- java 版本的 https://xmlgraphics.apache.org/batik/tools/rasterizer.html https://blog.csdn.net/zp357252539/article/details/125000449 ---- 有一个 golang 版本的,不过它似乎是用浏览器的。 https://github.com/ajstarks/svgo/issues/23 ---- 这里有个搞来搞去还是调用了 cairo 的 golang 库 ... 虽然搞笑,不过也可以当做一个示例。 https://github.com/rogpeppe/misc/blob/master/svg/render.go from https://github.com/jilieryuyi/wing-svg/blob/master/3/main.go 这其中用到的 librsvg-2.35 还是 c 语言代码,而 librsvg-2.55 却是 rust 代码了。 https://download.gnome.org/sources/librsvg/?C=M&O=A ---- svg 官方教程 https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Basic_Shapes https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Paths 35. https://github.com/Automattic/node-canvas 这是一个 9k 星的项目!!! 应该是可以服务器上来使用 js 的 Canvas About Node canvas is a Cairo backed Canvas implementation for NodeJS. 36. evanw/esbuild golang 写的一个非常多星的“另外一个 js 打包器”。它一样能将 ts 转换为 js https://esbuild.github.io/api/#build-api https://github.com/evanw/esbuild https://cloud.tencent.com/developer/news/591916 package main import "io/ioutil" import "github.com/evanw/esbuild/pkg/api" import "os" func main() { ioutil.WriteFile("in.ts", []byte("let x: number = 1"), 0644) result := api.Build(api.BuildOptions{ EntryPoints: []string{"in.ts"}, Outfile: "out.js", Write: true, }) if len(result.Errors) > 0 { os.Exit(1) } } ------------------------------ echo 'let x: number = 1' > in.ts esbuild in.ts --outfile=out.js cat out.js let x = 1; 37. java 转换为 ts/js 的库。从页面上看相当可用 A transpiler from Java to TypeScript/JavaScript https://github.com/cincheo/jsweet https://www.jsweet.org/ 37.2 Java Parser 一个可将 java 生成 ast 然后再格式化的库。 https://www.sohu.com/a/212579385_100063030 (下面的是一篇非常好的文章) https://cloud.tencent.com/developer/news/740798 http://newbt.net/ms/vdisk/show_bbs.php?id=21FA0D2AD618822DE820D780C5862CB3&pid=160 38. https://zhuanlan.zhihu.com/p/63530994 https://github.com/searchfe/ts2php ts2php, 将你的 TypeScript 代码转换为 PHP 39. rust gui 搜索引出的一些库。 https://www.zhihu.com/question/512935621 "2022 年了,Rust 有哪些成熟的 GUI 库,要求跨平台、非 web ?" sciter https://sciter.com/ 看上去它是一个基于web技术的GUI框架,但它做了超级多的精简工作,编译后的程序也就6M左右,占用的内存也小很多。 大部分CSS的特性都支持,少量不支持的特性,它也提供了自己内置的实现方式。 它现在已经内置了QuickJS解析引擎,所以绝大多数ES6的特性都支持。 对大数据列表渲染也有原生内置的支持。 它分免费版和付费版,免费版是动态连接的,也就多出一个sciter.dll,付费版也不贵,可以静态连接。 这个库是Andrew Fedoniouk维护了十几年的库了,虽然还是有一些小问题,但总体还是稳定的。 360、搜狐、teamviewer都是他的客户 fltk 简单、易用,但还不全功能。 flutter_rust_bridge 这个似乎是比较现实的选择。 https://github.com/fzyzcjy/flutter_rust_bridge 39.2 https://www.cnblogs.com/amboke/p/16648876.html 不需要 xcode 直接用 rust 加 Bevy 开发 ios 应用。 40. 这是一个我想要的终极语言。 https://github.com/pfusik/cito 就专门是用来写多语言库的,它本身用 c# 写成。 Ć is not a general-purpose programming language. Instead, it is meant for implementing portable reusable libraries. 它是有 vscode 扩展的。 https://github.com/pfusik/cito/issues/64 打算用来写下 zig 的 c 代码。 41.⭐ 重磅。lua 中的 typescript https://github.com/teal-language/tl 带类型的 lua 其实有好多种,但见过的几种实现环境都有局限。而这一版本是直接编译为 lua 的,并且自身是用 lua 写成! 这就完美的解决了其他版本的问题。为什么有了 ts 向 lua 的转换器还要推荐这项呢? 因为 typescript 的语法演变下去其实挺令人担心,有了这个就不用担心哪天 ts 自己作死。而且 js 系列语言对运行库的要求还是太高了,我觉得 lua 在相当长的时间里都还会是 c 语言的最佳搭档。 介绍自 https://zhuanlan.zhihu.com/p/40300705 作者本人也扩展有一个版本 https://github.com/TiancJester/TypeLua 文中介绍的其实主要是一个早期的版本 https://github.com/andremm/typedlua http://newbt.net/ms/vdisk/show_bbs.php?id=1C8AB1D62C7D5A1C694DC8AF78B94F6A&pid=164 另外,他们都提到了 https://luarocks.org/ 这应该是一个 lua 的包管理器。 更新:目前 tl 的说明上说它在 web 上运行的环境为 js 的 lua 虚拟机 https://github.com/fengari-lua/fengari 42. b站上看到有人用得很酷的 gnome-builder 在最新的 linux mint 21 下可以直接安装 sudo apt-get install gnome-builder 42.2 https://github.com/GNOME/gnome-sound-recorder/blob/master/meson.build 使用了一个叫 gjs 的东西,使得可以用 ts 来开发 gtk 程序。 这个是 gnome-builder 自带的示例。 http://garfileo.is-programmer.com/2011/9/22/gjs-basic.29644.html gjs 提供了 imports.gi 对象,使用它可以导入被 GObject Introspection(GI)认可的 typelib 二进制文件所关联的 GNOME 模块对应的 JavaScript 对象,然后 gjs 便可以访问底层基于 GObject 库实现的 C 程序库。看下面的示例: const GLib = imports.gi.GLib; print (GLib.get_home_dir ()); 当使用 gjs 执行这个脚本程序时,便会在终端中输出 $HOME 的值。 42.3 https://developer.gnome.org/documentation/tutorials/beginners/components/window.html https://rmnvgr.gitlab.io/gtk4-gjs-book/introduction/basics/ 43. “ Dart官方工具 analyzer 对AST有了一些了解和认知后,接下来就要思考,如何将Dart代码转换为AST。好在Dart官方很贴心的提供了一个工具包analyzer,通过这个工具包提供的方法,我们可以将一份Dart源代码生成AST对象。当然,这个工具包除了可以生成AST对象外,还可以做一些代码分析,找出一些语法错误或潜在风险警告等。在官方文档里有介绍,比如代码格式化工具dartfmt、代码文档生成工具dartdoc、代码语法预分析服务Dart Analysis Server等都使用了此工具包。 ” https://juejin.cn/post/6844904121300959246 下面是一个双平台的蓝牙示例 https://www.jianshu.com/p/1b21895e3674 “flutter 完美处理iOS Android两端蓝牙权限,解决Android12蓝牙扫描崩溃” 44. ios 和 android 中实现 js 调用的官方方法。 https://github.com/facebook/hermes https://www.jianshu.com/p/d653d34ebd79/ iOS7之后,JavaScriptCore的引入,使得Objective-C与JavaScript的交互更为容易 https://blog.csdn.net/idaretobe/article/details/128279887 JavaScriptCore,V8,Hermes 和 QuickJS 这 4 个 JSVM 45. https://zhuanlan.zhihu.com/p/436090437 这篇文章总结了一些 rust 转换成 js/ts 相关的库和当前发展现状。 46. https://github.com/google/gvisor 这其实是一个虚拟机 https://developer.moduyun.com/column/detail/37317.html 文章 “安卓实现安卓-光速虚拟机技术内幕” 47. javaparser java 的 ast 操作库。很显然也有 c# 的 ast 库。 https://github.com/javaparser/javaparser https://blog.csdn.net/kaishizhangcheng/article/details/121712003 为什么需要Javaparser 相对于antlr4,Javaparser提供了更多的API,专门操作Java文件,使用起来更简单. 使用 .解析多个Java文件 .修改Java文件 .生成Java代码 48. https://github.com/webview/webview https://pkg.go.dev/github.com/webview/webview 其实是绑定本机的浏览器。 49. https://zhuanlan.zhihu.com/p/472805041 c++20 中的 import 和模块机制。 50. https://github.com/yuroyoro/goast-viewer/blob/master/ast.go golang 的 ast 示例。 51. https://github.com/dart-archive/ts2dart typescript 转换为 dart 的,不过已经不更新。据说是已有更好的方法 https://www.thinbug.com/q/38921004 这里有个两者语法的简要对比,基本上做脚本也够用了。 https://github.com/jeroenouw/dart-compared-to-typescript https://developer.aliyun.com/ask/319744 “ 通过 TypeScript 提供的能力,我们可以直接把一份 TS 的代码从源码解析到AST,而后通过遍历 AST 生成对应的 Dart 代码。同时其中通过 getTypeChecker.getTypeAtLocation 等 API 获取到 AST 对应的 TS 类型。然后通过把 TS 类型转换成对应的 Dart 类型。对于不支持的类型降级到 dynamic ,把原有的完整类型信息输出到对应的注释里。 ” 另外 Dart提供了将Dart编译为JavaScript的工具——dart2js。 格式: dart2js dart文件名 --out=js文件名 例如: //例1 dart2js D:\contra\app.dart --out=D:\contra\app.dart.js //例2 D:\dart\dart-sdk\bin\dart2js.bat D:\contra\app.dart --out=D:\contra\app.dart.js https://zhuanlan.zhihu.com/p/127075348 “ 比如同样是「编译成 javascript」,在开发时 dartdevc 会把每个 dart 文件单独翻译成 javascript,这样代码体积很大,且不够优化;而运行时 dart2js 会把当前项目的所有依赖一起编译,做 tree shaking,并且根据调用树优化生成的代码。最终,发布给用户的代码体积非常精简,代码的执行效率也是最好的。 ” https://qastack.cn/programming/7716004/will-dart-support-the-use-of-existing-javascript-libraries https://www.saoniuhuo.com/question/detail-2252339.html https://pub.dev/packages/flutter_js https://github.com/abner/flutter_js https://stackoverflow.com/questions/66145501/how-to-use-a-js-library-and-a-js-function-in-a-flutter-mobile-app “ d4so4syb1# 你可以使用https://pub.dev/packages/flutter_js包。它允许在移动和桌面flutter应用中评估纯javascript代码。所谓纯,我的意思是包不是一个浏览器引擎,所以没有web API,本地存储或其他浏览器API可用。但你可以捆绑一些javascript代码包含javascript库,如moment,如果只依赖于javascript的话,可能是你在问题中提到的那个. flutter_js注入到javascript引擎中,比如console.log,xhr和fetch。但这就是全部。有一个发送消息通道,你可以使用它来将对象注入引擎,你可以提供对象,这些对象将被实现和dart,但将被共享到javascript全局空间。 在Flutter web中,javascript集成可以使用另一个答案中提到的包:js。 免责声明:我是flutter_js包的作者 ” flutter/dart 中集成 ffi/c/c++/opencv 的方法,这是官方支持的,上面的那个可能也是,因为作者自述使用的是 quickjs https://zhuanlan.zhihu.com/p/458327499 https://zhuanlan.zhihu.com/p/458488070 https://github.com/westracer/flutter_native_opencv 52. https://github.com/exaloop/codon 将 python 编译为本机的编译器。https://csdnnews.blog.csdn.net/article/details/129512127 另外字节跳动有一个类似的 https://bytedance.github.io/matxscript/zh-CN/index.html https://github.com/bytedance/matxscript 52.2 https://www.bookstack.cn/read/godot-3.5-zh/f9c328f5c1cf8c98.md 免费引擎 godot 自带的脚本也是 python 风格的。不过据说它通过扩展模块可支持其他语言。 例如 typescript 的示例 https://zhuanlan.zhihu.com/p/257408208 https://github.com/Geequlim/ECMAScript https://csdnnews.blog.csdn.net/article/details/129373700 53. 生成 java 语言 ast 的另一种方法 https://blog.csdn.net/qq_42714262/article/details/119414462 相关jar包下载 用ASTParser时,需要引入的包如下: org.eclipse.core.contenttype.jar org.eclipse.core.jobs.jar org.eclipse.core.resources.jar org.eclipse.core.runtime.jar org.eclipse.equinox.common.jar org.eclipse.equinox.preferences.jar org.eclipse.jdt.core.jar org.eclipse.osgi.jar jar包下载 打开网址:https://mvnrepository.com/ 另 https://blog.csdn.net/lovelion/article/details/19050155/ 54. 两个 java 的语言服务器 https://github.com/eclipse/eclipse.jdt.ls https://github.com/redhat-developer/vscode-java 后面那个好像就是现在 vscode 中使用的。 55. https://zhuanlan.zhihu.com/p/51174224 提到的两个语言转换库 https://github.com/facebook/jscodeshift https://github.com/reactjs/react-codemod 原作者是 js2flowchart 的作者 https://github.com/Bogdan-Lyashenko/js-code-to-svg-flowchart 56. https://github.com/sveltejs/svelte svelte 这是一个编译为普通 js /css 的 web 框架,居然流行度极高。和 vue 这些完全不同。 " Svelte 在 构建/编译阶段 将你的应用程序转换为理想的 JavaScript 应用,而不是在 运行阶段 解释应用程序的代码。这意味着你不需要为框架所消耗的性能付出成本,并且在应用程序首次加载时没有额外损失。 " 以下是两篇介绍,特别是第二篇非常好。 https://zhuanlan.zhihu.com/p/448469958 https://mp.weixin.qq.com/s?__biz=MzUzMjM1MzE2MA==&mid=2247498571&idx=1&sn=0abe6a15856272a4293dd58ecc9833e1&chksm=fab622accdc1abba1d3a40b0aa4917102a16b5521706738396ec4cf44330d01789076edbc658&scene=27 “前端新宠 Svelte 带来哪些新思想?赶紧学起来!” https://github.com/topics/compiler 57. https://coder.com/docs/code-server/latest/npm https://github.com/coder/code-server code-server 就是在线版本的 vscode。在 windows 下要用 npm 安装。另外感觉资源消耗太大了。 感觉还是用 vscode 的编辑器 Monaco Editor 为好。 https://github.com/microsoft/monaco-editor 58. https://github.com/justinmeiners/lc3-vm 一个据说只有几百行的虚拟机 https://www.jianshu.com/p/29c008e404ef 中文翻译 https://blog.csdn.net/LxXlc468hW35lZn5/article/details/128125398 原文地址:https://justinmeiners.github.io/lc3-vm/ 这是个水平挺低的翻译版 作者:Justin Meiners and Ryan Pendleton 文中的最终代码和其他一些资源在这里可以找到:GitHub repo 58.2 https://github.com/hadialqattan/lc3-vm-golang lc-3 机器的 golang 实现 它还介绍了一个 web 版本 https://wchargin.com/lc3web/ 58.4. 另一个需要 c11 的版本 https://github.com/nomemory/lc3-vm https://www.andreinc.net/2021/12/01/writing-a-simple-vm-in-less-than-125-lines-of-c 59. delphi 中运行 js 的库 https://github.com/EricGrange/DWScript https://github.com/CWBudde/ts2pas 60. 神器 CodeTyphon CodeTyphon 与 pas2js 。 https://www.jianshu.com/p/14455ea5f0b1 https://www.pilotlogic.com/sitejoom/index.php/wiki/150-wiki/ct-tutorials/pas2js/718-pas2js-first-gui-web-application.html 技术栈应该是来自 lazarus 。 61. pascal 写的 pascal 的 vscode 兼容语言服务器 lsp 。用在一个 pas 插件中的. https://github.com/coolchyni/pascal-language-server 它自述是来自 https://github.com/genericptr/pascal-language-server 两者的人气都很少。不过这也是实现语言服务器的好参考。 这个 vscode 插件名为 FreePascal Toolkit 不过 github 在线版本通用的插件很牛的就叫做 “Pascal”... :) 。 62. imgui 一个新的 gui 系统,有 golang 的绑定,原始应该是 c++ 的。 https://github.com/AllenDang/giu https://blog.csdn.net/zhong1213/article/details/109159101 https://zhuanlan.zhihu.com/p/641279951?utm_id=0 “准备相关库和环境:通常使用的库是Dear ImGui,它支持多种编程语言和图形API” “ GUI(图形用户界面)是指通过图形化方式与计算机进行交互的用户界面,它可以让用户通过点击、拖拽等操作来完成任务。IMGUI(即时模式图形用户界面)是一种在游戏开发中常用的GUI设计方式,它的特点是将GUI元素的绘制和事件处理都集中在一个函数内,而不是使用传统的事件驱动方式。 ” -------- 更新一下 golang 安卓下相关的 https://blog.csdn.net/kaisoft/article/details/84779208 他用的似乎是自己的库,也可以看一下 https://github.com/gooid/imgui 老外的 https://github.com/inkyblackness/imgui-go 最多星,不过它说明了不再维护,推荐了两个相关项目 “ This repository is no longer maintained as per 2022-12-31. Please consider using https://github.com/AllenDang/cimgui-go instead. That project is an auto-generated wrapper and makes it easier to be at the latest version of Dear ImGui. You may also have a look at this fork https://github.com/eliasdaler/imgui-go , the owner intended to continue to support it. ” 不过传言 imgui 的控件对中文支持不完善,见 https://www.zhihu.com/question/267602287/answer/1198305306?utm_id=0 在其中有推荐 https://github.com/KorokEngine/Korok/tree/master/gui https://korok.io/ https://www.jianshu.com/p/21db9977184b https://zhuanlan.zhihu.com/p/34248334 另外评论说有个和 imgui 并列的库 https://github.com/golang-ui/nuklear “ 现在比较流行的两个imgui库,ocornut/imgui 和 vurtun/nuklear 前者更早一些,提供了大部分常用控件的绘制,但是都没有实现布局/动画的功能(好像作者也说了不打算实现..),nuklear其实有点跟随dear-imgui的意思,代码都实现的差不多。 作者:刘照云卡 链接:https://www.zhihu.com/question/267602287/answer/326603864 ” Nuklear 原始库好像也不再更新了,不过它的后续项目更新也很多,在 https://github.com/Immediate-Mode-UI/Nuklear “Dear ImGui”官方的更新是非常多的,也许已经解决了这些问题 https://github.com/ocornut/imgui 说实在的,opengles 我也是会一点的,用来做 gui 实在不算难,搞不懂 fyne 它们怎么做得这么烂 ... 我是没时间,有时间我做一个给你们打个样(好吧,开玩笑的) ... :) 62.2 https://www.wxwidgets.org/ https://github.com/wxWidgets/wxWidgets https://github.com/pkulchenko/wxlua 和现在流行的 ui 不同,wxwidgets 是建立在操作系统原生 ui 接口上的,有时候这点非常重要。 63. https://docs.godotengine.org/zh_CN/latest/getting_started/first_3d_game/index.html godot 是一个现在非常流行的开源 3d 引擎。类似 u3d, cocos 3d 。 使用的开发语言是 gdscript 。 63.2 G3N golang 的开源 3d 游戏引擎 https://www.5axxw.com/wiki/content/xzom8d 从它的 gui 源码上看,是通过 c 调用的 opengl 来实现的,虽然现在 macos 准备不支持 opengl 了,不过实现得很是短小精干,可以参考。 63.3 https://www.zhihu.com/question/420704814/answer/2547947685?utm_id=0 GoCavans是一个golang封装的3D模型动画演示库,提供了gltf、obj 等多种模型格式加载,支持天空盒、灯光和脚本动画编辑等功能。相比于 g3n 等3D框架,GoCavans 更轻量并且简单易用。 64.⭐github.com/gopherjs/gopherjs/ 今天研究 fyne 源码的时候意外的发现了一个名为 gopherjs 的库。本以为很小众,不料一查资料大吃一惊,原来是一个成熟的项目。 简单说就是 TypeScript !!! 只是源语言是 golang ,有一个名为 https://github.com/hexops/vecty 的项目,它的 start 达到了 27K! 这已经是一个正式流行的库了。 这是它的一些转换自 js 的库 https://github.com/gopherjs/gopherjs/wiki/bindings 其中有一个可能过时的用来写 chrome 扩展的库,可参考 https://github.com/fabioberger/chrome 64.2 https://github.com/hexops/vecty golang 的 "React" 。 参考下面一篇很值得一看的文章。里面有非常多的知识。 https://studygolang.com/articles/34808?fr=sidebar " 尽管 Go 官方对 Mobile 的支持力度大于 Web,但是 gopher 们对 Web 前端的支持度远远高出 Mobile。GopherJS 在社区的活跃度从 13 年 8 月开始一直很高,从图中我们可以看出,Gopher 们也有着和 Javascript 程序员们共同的梦想,使用一种语言统一前后端。 " 64.3 TinyGo https://link.zhihu.com/?target=https%3A//github.com/tinygo-org/tinygo 来自 https://zhuanlan.zhihu.com/p/632823158 “【译】WebAssembly” 这是关于 golang 中编译为 WebAssembly 的文章,非常值得一看。 " 改为使用TinyGo生成 Wasm 文件。 TinyGo 支持针对嵌入式设备的 Go 语言子集,并具有 WebAssembly 输出目标。 虽然它确实有局限性(还不是完整的 Go 实现),但它仍然相当强大并且生成的 Wasm 文件……很小。~10kB 并不罕见。“Hello world”示例是 575 个字节。如果你gz -6这样做,它会下降到 408 字节。 该项目的开发也非常活跃,因此其功能正在迅速扩展。有关将 WebAssembly 与 TinyGo 结合使用的更多信息,请参阅https://tinygo.org/docs/guides/webassembly/ 。 " 65. 虚幻5引擎上的脚本语言-AngelScript https://zhuanlan.zhihu.com/p/567829611 AngelScript 应该早已存在,之所以很多人没听说,原因也很简单。理论上说它只是 c++ 的脚本方言,应用范围有限,谈不上是一门完整的语言。 类似于 delphi 里的 FastScript ,不过对于 c++ 为基础的项目,比如 ue5 来说,那就是大大的利好。因为 lua 虽然好,但函数注册实在太幸苦了。 https://jingyan.baidu.com/article/63acb44a0e759661fcc17ed6.html 官网似乎是在 http://www.angelcode.com/angelscript/ 不过我对 c++ 已经失望,不打算再研究 c++ 。改天研究看看纯 C 环境下是否比 lua 好集成。 66. DelphiAST - delphi 版本的 ast 树生成库 https://github.com/RomanYankovsky/DelphiAST https://github.com/WouterVanNifterick/C-To-Delphi/releases 67. acorn https://github.com/acornjs/acorn https://zhuanlan.zhihu.com/p/307356574?utm_source=wechat_session “ Acorn.js A tiny, fast JavaScript parser, written completely in JavaScript. 一个完全使用 javascript 实现的,小型且快速的 javascript 解析器 本次实践我们将使用 acorn.js ,它会帮我们进行词法分析,语法解析并转换为抽象语法树。 Webpack/Rollup/Babel(@babel/parser) 等第三方库也是使用 acorn.js 作为自己 Parser 的基础库。(站在巨人的肩膀上啊!) The Estree Spec 最开始 Mozilla JS Parser API 是 Mozilla 工程师在 Firefox 中创建的 SpiderMonkey 引擎输出 JavaScript AST 的规范文档,文档所描述的格式被用作操作 JAvaScript 源代码的通用语言。 随着 JavaScript 的发展,更多新的语法被加入,为了帮助发展这种格式以跟上 JavaScript 语言的发展。The ESTree Spec 就诞生了,作为参与构建和使用这些工具的人员的社区标准。 acorn.js parse 返回值符合 ESTree spec 描述的 AST 对象,这里我们使用@types/estree 做类型定义。 ” 68. https://github.com/BeRo1985/besen delphi/lazarus 版本的纯 pascal 实现的 js 运行引擎。似乎这是能找到的唯一的项目,其他的有用 windows 内置微软引擎的,有用浏览器的,有用各种 c++ 版本的 dll 的。 但现在 delphi/lazarus 实际上是成熟的跨平台环境,用那些 windows 上才方面的引擎肯定是不合适的。 所以这个引擎还是很重要的,对于我来主是补齐了常用环境的所有跨平台语言环境,或者是常用工作环境的所有 js 代码兼容。之前已经有了 golang/安卓原生 java 下的 js 环境。 安卓那个还挺难弄的,以后我出一个项目示例一下,因为我现在并不用它,暂时用的 ts 转 lua ,更主要的是现在很多语言比较 qt 对安卓的支持非常好,实在没动力再做原生 ui 。 这个项目只有 200 星,对于普通项目算高了,但对于基础库实在不高,所以我一直也没搜索到过它,基本上也没搜索到和它有关的中文文章(英文都很少)。我也是在 https://github.com/exilon/awesome-delphi 偶然看到的介绍。不过从它的测试用例来看应该完成度很高,有英文文章提到它速度不是很快,但没有说它兼容性有什么问题。所以应该还是实用的。 69. antlr4 最近偷懒用了一下这个生成式引擎。目前来说已经支持 python3,golang,js 发展还蛮快的。 https://blog.csdn.net/luofengmacheng/article/details/136046608 antlr4 -Dlanguage=Python3 expr.g4 用 pip 安装环境比较简单一点。另外听说不支持 java8 所以最好有 java11 或以上的环境。 69.2 https://blog.csdn.net/narcissus2_/article/details/119926239 Antlr4ts 全称是antlr4 typescript版本。 主要是生成typescript可以使用的库文件。 因为目前react主要是使用typescript作为开发语言,Antlr4ts可以自动的生成相关的visitor类库,以供语法树的遍历。 antlr4ts有它关于visitor遍历特定的语法,具体可以参考他们github主页。 目前项目中的按antlr4对于visitor的使用也比较规范,参考当前项目也是可以的。 70. Parsing Expression Grammars 关键字在 github 上很多. 这是我装了一个 ai 代码助手后问它有什么代码分析器的时候意外发现的。它推荐了一个叫 PEG.js 项目,我当时还想怎么叫这个怪名,今天偶然发现了一个 delphi 版本也是有这个字样,才知道 原来在英文世界 PEG 是一个专有名词。指的是通用语法文件可以生成表达式分析器的工具。不过尚不知道 PEG.js 这样的是否能完整解析一个源码文件。理论上应该不成问题吧。 参考: PEG.js 还有 https://github.com/taocpp/PEGTL https://github.com/pointlander/peg https://github.com/search?q=Parsing%20Expression%20Grammars&type=repositories 71. 意外得知 python 的内置 ast 库也是可以解析 c,java,css,typescript(不确定) 等好几种代码的。 另外查找它的相关资料时发现 python 也有一个和 antlr 差不多能支持自定义文法的解析器。星数还很高。 ----------------------------------------------- https://github.com/lark-parser/lark https://blog.csdn.net/liuyuan_jq/article/details/137432643 参考 https://github.com/lark-parser/lark/blob/master/examples/calc.py Python-Lark是一个强大的、现代的解析库,专为Python开发者设计,用于处理各种语法结构的文本解析任务。这个库的出现旨在简化和优化文本解析的过程,使开发者能够高效地构建解析器,处理从简单的命令行语法到复杂的编程语言语法等各种输入。 使用Python解析TypeScript代码的工具和库 除了ast模块之外,Python还提供了一些其他的工具和库,可以帮助我们解析 比如ply和pyleri, 1).+使用ast模块解析TypeScript代码 2).+使用ply和pyleri解析TypeScript代码 3).+使用lark解析TypeScript代码 http://newbt.net/ms/vdisk/show_bbs.php?id=B56D08FF49D7E8611EDB6F4795C643FB&pid=160 71.2 -- https://github.com/search?q=parsing%20toolkit&type=repositories BNF(Backus-Naur Form)是一种用于描述语言结构的文法表示方法。它由美国数学家约翰·伯纳德·纳尔逊(John Backus Naur)于1962年提出,用于描述自然语言。 https://blog.csdn.net/gitblog_00063/article/details/138744646 Chevrotain的核心在于它的灵活性和效率。你可以直接在JavaScript中编写和修改语法规则,这使得开发过程更加敏捷,调试也更为方便。此外,Chevrotain还提供了丰富的API和DSL(领域特定语言),用于创建和操作词法分析器和解析器。一个值得注意的特性是其内置的支持LL(K)和通过第三方插件实现的LL(*)解析,这使得处理复杂语法结构变得轻松。 它有个在线编辑器,非常的方便 https://chevrotain.io/playground/ https://devpress.csdn.net/react/62ed776cc6770329307f263e.html 72. https://github.com/zaach/jison jison 非常不出名。不过实际上比 chevrotain 正式得多,它是 babel 的解析库 acorn 的原始制作工具。即 js 版本的 yacc ,不过我看它似乎有种 json 新接口比 yacc 更现代化更易用得多。改天试试。 教程 https://huzhenghui.blog.csdn.net/article/details/107000680 实例 https://blog.csdn.net/fifteen718/article/details/82783246 让编辑器支持代码提示的方法 https://cloud.tencent.com/developer/article/2405677 73. RISC-V 指令集只有几十个,非常适合用来练手。相关的内容非常多,看了一下当当上的书也非常多,所以可能要另外开贴。 不过现在网上排名非常先前的那些文章说的要先编译专用版本 gcc 的情况,至少在我常用的 linux mint 下是可能直接安装的,并不需要编译。ubuntu 应该软件库里也有的。 这有个 rust 写的在线模拟操作系统,很有意思。让我想起了我很喜欢的 lc3 。 https://github.com/d0iasm/rvemu https://github.com/mit-pdos/xv6-riscv https://rvemu.app/xv6.html https://rvemu.app/ upload: Upload local RISC-V binaries for the execution on the emulator. ls: List the files you uploaded. run [file]: Execute a file which you uploaded or some files are already embedded. help: Print all commands you can use. RISC-V Online Simulator 在线虚拟机 https://venus.kvakil.me/ 可以在里面写汇编代码,然后它会转换成二进制代码! 73.2 ubuntu 支持的 RISC-V 开发板 https://wiki.ubuntu.com/RISC-V 好消息是有几款国产的便宜实惠型也在列。 Ubuntu 24.04 (Noble Numbat) preinstalled images for Allwinner Nezha D1 LicheeRV Dock Microchip PIC64GX1000 Curiosity Kit Microchip Polarfire Icicle Milk-V Mars QEMU SiFive HiFive Unmatched StarFive VisionFive StarFive VisionFive 2 are available at https://cdimage.ubuntu.com/releases/24.04/release/. 74. 惊喜地发现 arm 也有在线的虚拟 cpu https://cpulator.01xz.net/?sys=arm 另外它也可以模拟 RISC-V 来自 https://blog.csdn.net/qq_19859865/article/details/142537207 75. https://github.com/johnfn/ts2gd Compile TypeScript to GDScript for Godot 75.2 https://github.com/TranscryptOrg/transcrypt Python 3.9 to JavaScript compiler - Lean, fast, open! 还有其他一些 https://baijiahao.baidu.com/s?id=1826175265755516496&wfr=spider&for=pc 76. 重磅!微软的新编译器,看 delphi/c# 之父的视频,编译 vscode 只需要 5 秒钟 https://github.com/microsoft/typescript-go
clq
2022-12-06 13:52:14 发表
编辑
https://blog.csdn.net/weixin_31814585/article/details/114087360 java assembly_第一个运行WebAssembly的Java库:Wasmer JNI yyyshdy 于 2021-02-13 00:11:24 发布 863 收藏 文章标签: java assembly 版权 Wasmer JNI是一个可以直接在Java中执行WebAssembly的库。它嵌入了WebAssembly运行时Wasmer,Wasmer JNI开源项目是:https://github.com/wasmerio/java-ext-wasm 让我们从一个简单的Rust程序开始,将其编译为WebAssembly,然后在Java中执行: #[no_mangle] pub extern fn sum(x: i32, y: i32) -> i32 { x + y } 汇编WebAssembly后,我们得到这样一个文件:这里,命名为simple.wasm。 以下Java程序sum通过传递5和37作为参数来执行导出的函数: import org.wasmer.Instance; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; class SimpleExample { public static void main(String[] args) throws IOException { // Read the WebAssembly bytes. byte[] bytes = Files.readAllBytes(Paths.get("simple.wasm")); // Instantiate the WebAssembly module. Instance instance = new Instance(bytes); // Get the `sum` exported function, call it by passing 5 and 37, and get the result. Integer result = (Integer) instance.exports.getFunction("sum").apply(5, 37)[0]; assert result == 42; instance.close(); } } 我们已经用Java成功执行了一个Rust程序,该程序首先需要编译为WebAssembly。这非常简单。该API与标准JavaScript API或我们为PHP,Python,Go,Ruby等设计的其他API非常相似。
clq
2023-02-03 10:07:22 发表
编辑
https://app.astralapp.com 给 github 星标项目进行注释的网站。
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.