登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> CLQ工作室开源代码 >> 主题: ⭐各语言转换器或开源库收集     [回主站]     [分站链接]
标题
⭐各语言转换器或开源库收集
clq
浏览(394) + 2022-07-24 17:12:37 发表 编辑

关键字:

[2024-01-03 12:45:08 最后更新]
各语言转换器或开源库收集

最近在做这样的工作,发现现在有些工具/库的转换非常成熟,是相当可用的。因此收集一下。
(图标来自 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元素的绘制和事件处理都集中在一个函数内,而不是使用传统的事件驱动方式。


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

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 星标项目进行注释的网站。


总数:2 页次:1/1 首页 尾页  
总数:2 页次:1/1 首页 尾页  


所在合集/目录
开发语言转换器 更多
AssemblyScript 更多
WebAssembly 更多
编译器及实现 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1