有没有人知道将Java 8代码(源代码级)转换为使用匿名内部类的Java 7代码中的lambda和方法引用的任何工具?我知道Retrolambda,但它适用于字节码级别,而不是源级别.
现在,我有一个工作版本作为IntelliJ插件.我扩展了当前的IntelliJ代码,一次转换包中的所有lambda,而不是单独选择每个lambda并转换为匿名内部类.这种方法的问题在于它无法作为一个独立的工具工作,比如一个maven插件,因为它需要一个IntelliJ上下文才能工作.
编辑:请注意,重点是将lamda /方法引用转换为匿名内部类.我并不担心Java 8中的API更改会被Java 7编译器捕获并报告为编译错误.
我的基本问题是我想通过在我的代码中不包含该头文件来使用头文件中定义的一些结构和函数.
头文件由工具生成.由于我无法访问头文件,因此无法将其包含在我的程序中.
这是我的场景的一个简单示例:
#ifndef FIRST_H_GUARD
#define FIRST_H_GUARD
typedef struct ComplexS {
float real;
float imag;
} Complex;
Complex add(Complex a, Complex b);
// Other structs and functions
#endif
Run Code Online (Sandbox Code Playgroud)
#include "first.h"
Complex add(Complex a, Complex b) {
Complex res;
res.real = a.real + b.real;
res.imag = a.imag + b.imag;
return res;
}
Run Code Online (Sandbox Code Playgroud)
// I cannot/do not want to include the first.h header file here
// but I want to use the structs and functions from the first.h
#include …Run Code Online (Sandbox Code Playgroud) 我有CPU绑定应用程序,我希望加速使用多处理+线程而不是使用纯线程版本.我编写了一个简单的应用程序来检查我的方法的性能,并惊讶地发现多处理和多处理+线程版本的性能比线程和串行版本都要差.
在我的应用程序中,我有一个存储所有工作的工作队列.然后,线程一次弹出一个工作项,然后直接处理(线程版)或将其传递给进程.然后,线程需要等待结果到达,然后再继续下一次迭代.我需要一次弹出一个工作项的原因是因为工作是动态的(不是下面粘贴的原型应用程序代码中的情况)并且我无法预先分区工作并在创建期间将其交给每个线程/进程.
我想知道我做错了什么以及如何加速我的申请.
这是我在16核机器上运行时的执行时间:
Version : 2.7.2
Compiler : GCC 4.1.2 20070925 (Red Hat 4.1.2-33)
Platform : Linux-2.6.24-perfctr-x86_64-with-fedora-8-Werewolf
Processor : x86_64
Num Threads/Processes: 8 ; Num Items: 16000
mainMultiprocessAndThreaded exec time: 3505.97214699 ms
mainPureMultiprocessing exec time: 2241.89805984 ms
mainPureThreaded exec time: 309.767007828 ms
mainSerial exec time: 52.3412227631 ms
Terminating
Run Code Online (Sandbox Code Playgroud)
这是我使用的代码:
import threading
import multiprocessing
import time
import platform
class ConcurrentQueue:
def __init__(self):
self.data = []
self.lock = threading.Lock()
def push(self, item):
self.lock.acquire()
try:
self.data.append(item)
finally:
self.lock.release()
return
def pop(self):
self.lock.acquire() …Run Code Online (Sandbox Code Playgroud) c ×1
concurrency ×1
external ×1
header-files ×1
java ×1
java-7 ×1
java-8 ×1
lambda ×1
python ×1
struct ×1