Skip to main content

一个将python函数翻译为c++函数并运行的jit编译器

Project description

将python函数翻译为c++函数并运行

安装

pip install l0n0lc

hello_world.py

import l0n0lc as lc
import math


@lc.映射函数(math.ceil, ['<cmath>'])
def cpp_ceil(v):
    return f'std::ceil({lc.toCString(v)});'


@lc.映射函数(print, ['<iostream>'])
def cpp_cout(*args):
    code = f'std::cout'
    for arg in args:
        code += f'<< {lc.toCString(arg)} << " "'
    code += '<< std::endl;'
    return code

@lc.直接调用函数
def test_直接调用():
    return 123

@lc.jit(每次运行都重新编译=True)
def test_add(a: int, b: int) -> int:
    if a > 1:
        return a + b
    for i in range(1, 10, 2):
        a += i
    for i in [1, 2, 3]:
        a += i
    a = math.ceil(12.5)
    cc = {'a': 1, 'b': 2}
    cc['c'] = 3
    print('输出map:')
    for ii in cc:
        print(ii.first, ii.second) # type: ignore
    aa = [1, 3, 2]
    aa[0] = 134
    print('输出list:')
    for i in range(3):
        print(i, aa[i])
    print('Hello World', a, b)
    return a + b + 1 + test_直接调用()

print('结果:', test_add(1, 3))

执行hello_world.py

$ python hello_world.py
输出map: 
c 3 
a 1 
b 2 
输出list: 
0 134 
1 3 
2 2 
Hello World 13 3 
结果: 140

查看生成的c++代码文件

$ ls -al l0n0lcoutput/ 
total 48
drwxr-xr-x  2 root root  4096 Sep 11 02:32 .
drwxrwxrwx 11 1000 1000  4096 Sep 11 02:32 ..
-rw-r--r--  1 root root   794 Sep 11 02:32 test_add_@0bfbc28de3631ddd.cpp
-rw-r--r--  1 root root   150 Sep 11 02:32 test_add_@0bfbc28de3631ddd.h
-rwxr-xr-x  1 root root 29496 Sep 11 02:32 test_add_@0bfbc28de3631ddd.so

test_add_@0bfbc28de3631ddd.h

#include <cmath>
#include <cstdint>
#include <iostream>
#include <string>
#include <unordered_map>
extern "C" int64_t test_add (int64_t a, int64_t b);

test_add_@0bfbc28de3631ddd.cpp

#include "test_add_@141921ba1aaa0352.h"
extern "C" int64_t test_add (int64_t a, int64_t b)
{
  if ((a > 1))
  {
    return a + b;
  }

  for (int64_t i = 1; i < 10; i += 2)
  {
    a = a + i;
  }

  for (auto i : {1,2,3})
  {
    a = a + i;
  }

  a = std::ceil(12.5);;
  std::unordered_map<std::string, int64_t> cc = {{ u8"a", 1 },{ u8"b", 2 }};
  cc[u8"c"] = 3;
  std::cout<< u8"输出map:" << " "<< std::endl;
  for (auto ii : cc)
  {
    std::cout<< ii.first << " "<< ii.second << " "<< std::endl;
  }

  int64_t aa[] = {1,3,2};
  aa[0] = 134;
  std::cout<< u8"输出list:" << " "<< std::endl;
  for (int64_t i = 0; i < 3; ++i)
  {
    std::cout<< i << " "<< aa[i] << " "<< std::endl;
  }

  std::cout<< u8"Hello World" << " "<< a << " "<< b << " "<< std::endl;
  return a + b + 1;
}

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

l0n0lc-0.7.6.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

l0n0lc-0.7.6-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file l0n0lc-0.7.6.tar.gz.

File metadata

  • Download URL: l0n0lc-0.7.6.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for l0n0lc-0.7.6.tar.gz
Algorithm Hash digest
SHA256 513ac4d9832db5e0bffc675bd21b4dadfe389d4d434a5bcbe81f2bb7b5abad05
MD5 1c0edeadd9c14a113e82c3f8f5ff3c2b
BLAKE2b-256 d3fdbc55d1505e30147e4c09c2ba8e957bb225b8a6d42ec693c92fb342e2b84b

See more details on using hashes here.

File details

Details for the file l0n0lc-0.7.6-py3-none-any.whl.

File metadata

  • Download URL: l0n0lc-0.7.6-py3-none-any.whl
  • Upload date:
  • Size: 13.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for l0n0lc-0.7.6-py3-none-any.whl
Algorithm Hash digest
SHA256 2bb6db8a413bc4e24174fa2f6841dc14257ef1026f94655a837f7e147ccc609f
MD5 4358990ce69ef9417f9b1f1cef9ade3e
BLAKE2b-256 0b69a1c740f17c3cf30f75b4925d99b36be1e970cf9903fedfed9378d8fde62c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page