我已经读过可以将Python 2.7代码转换为Web程序集,但是我找不到关于如何这样做的明确指南.
到目前为止,我已经使用Emscripten及其所有必要组件为Web程序集编译了一个C程序,因此我知道它正在运行(使用指南:http://webassembly.org/getting-started/developers-guide/)
为了在Ubuntu机器上执行此操作,我必须采取哪些步骤?我是否必须将python代码转换为LLVM bitcode然后使用Emscripten进行编译?如果是这样,我将如何实现这一目标?
我正在尝试创建一个函数,它从类实例中获取可变数量的属性,并像使用 @property 一样重新定义它们,为属性提供 getter 和 setter。
我想实现这个目标:
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
@property
def dx(self):
return self._dx
@dx.setter
def dx(self, value):
self._dx = value
@property
def dy(self):
return self._dy
@dy.setter
def dy(self, value):
self._dy = value
Run Code Online (Sandbox Code Playgroud)
通过这样做:
decorate_these_attributes(self.x, self.dx, self.dy)
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的:
def decorate_these_attributes(self, *args):
def attr_set(attr, val):
attr = val
for attr in args:
attr_get = lambda: attr
attr = property(attr_get, attr_set)
Run Code Online (Sandbox Code Playgroud)
到目前为止,当我调用该函数时,它没有执行任何操作。对我做错了什么有什么想法吗?
我试图在C中实现正弦函数,但我得到了奇怪的结果.以下是我用来计算正弦的三个函数:
#define PI 3.14159265358979323846
#define DEPTH 16
double sine(long double);
long double pow(long double, unsigned int);
unsigned int fact(unsigned int);
double sine(long double x) {
long double i_x = x *= PI/180;
int n = 3, d = 0, sign = -1;
// fails past 67 degrees
for (; d < DEPTH; n += 2, d++, sign *= -1) {
x += pow(i_x, n) / fact(n) * sign;
}
return x;
}
long double pow(long double base, unsigned int exp) …Run Code Online (Sandbox Code Playgroud) 我有一个要编译为 Web 程序集的 CMake 项目。为此,我使用了项目基本文件夹中的以下命令:
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=/home/ubuntu/emsdk/emscripten/1.38.6/cmake/Modules/Platform/Emscripten.cmake -G "Unix Makefiles"
Run Code Online (Sandbox Code Playgroud)
这成功地(或至少我认为)生成了一个.wasm文件和一个.js文件以及各种 cmake 和 make 文件。
我还希望它生成一个 html 文件,就像你可以使用emcc(即emcc example.c -s WASM=1 -o output.html)。
是否有可能做到这一点?
我正在使用命令编译我的项目cmake .. -G "CodeBlocks - Ninja,它工作正常,但是当我运行 valgrind 时,它不显示任何行号。这是我正在使用的 valgrind 命令:valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --log-file="log.txt" ./pony_gpExe。
以下是输出的示例:
==5402== Use of uninitialised value of size 8
==5402== at 0x40447B: get_double_arr_length (in /home/robbie/Dropbox/MIT/pony_gp_ubuntu/build/pony_gpExe)
==5402== by 0x405184: get_test_and_train_data (in /home/robbie/Dropbox/MIT/pony_gp_ubuntu/build/pony_gpExe)
==5402== by 0x4027B3: setup (in /home/robbie/Dropbox/MIT/pony_gp_ubuntu/build/pony_gpExe)
==5402== by 0x402861: main (in /home/robbie/Dropbox/MIT/pony_gp_ubuntu/build/pony_gpExe)
==5402== Uninitialised value was created by a stack allocation
==5402== at 0x405149: get_test_and_train_data (in /home/robbie/Dropbox/MIT/pony_gp_ubuntu/build/pony_gpExe)
Run Code Online (Sandbox Code Playgroud)
不确定这是否有帮助,但这是我的主要 CMakeLists.txt:
cmake_minimum_required(VERSION 3.4.3)
project (pony_gp)
set(DIR ${pony_gp_SOURCE_DIR})
file(GLOB_RECURSE pony_gp_SOURCES "${DIR}/src/*.c")
file(GLOB_RECURSE pony_gp_HEADERS …Run Code Online (Sandbox Code Playgroud) c ×2
cmake ×2
emscripten ×2
python ×2
webassembly ×2
debugging ×1
decorator ×1
lambda ×1
trigonometry ×1
valgrind ×1