标签: compilation

为什么Java类用空行编译不同?

我有以下Java类

public class HelloWorld {
  public static void main(String []args) {
  }
}
Run Code Online (Sandbox Code Playgroud)

当我编译这个文件并在生成的类文件上运行sha256时,我得到了

9c8d09e27ea78319ddb85fcf4f8085aa7762b0ab36dc5ba5fd000dccb63960ff  HelloWorld.class
Run Code Online (Sandbox Code Playgroud)

接下来我修改了类并添加了一个如下所示的空白行:

public class HelloWorld {

  public static void main(String []args) {
  }
}
Run Code Online (Sandbox Code Playgroud)

我再次在输出上运行sha256,期望得到相同的结果,但我得到了

11f7ad3ad03eb9e0bb7bfa3b97bbe0f17d31194d8d92cc683cfbd7852e2d189f  HelloWorld.class
Run Code Online (Sandbox Code Playgroud)

我已阅读此TutorialsPoint文章:

只包含空格的行(可能带有注释)称为空行,Java完全忽略它.

所以我的问题是,由于Java忽略空行,为什么两个程序的编译字节码都不同?

即在该差HelloWorld.class一个0x03字节是由替换0x04字节.

java bytecode compilation javac

206
推荐指数
4
解决办法
1万
查看次数

为什么Swift编译时间这么慢?

我正在使用Xcode 6 Beta 6.

这是一段时间以来一直困扰着我的事情,但现在已经达到了几乎无法使用的程度.

我的项目开始有一个相当大的65个Swift文件和一些桥接的Objective-C文件(这实际上不是问题的原因).

似乎对任何Swift文件的任何轻微修改(比如在应用程序中几乎不使用的类中添加简单的空格)将导致重新编译指定目标的整个Swift文件.

经过深入调查后,我发现占用编译器时间的几乎100%是CompileSwiftXcode在swiftc目标的所有Swift文件上运行命令的阶段.

我做了一些进一步的调查,如果我只使用默认控制器保持app委托,编译速度非常快,但随着我添加越来越多的项目文件,编译时间开始变得非常慢.

现在只有65个源文件,每次编译大约需要8/10秒.根本不是很快.

我还没有看到任何帖子在谈论除了这个问题这一个,但它是一个旧版本的Xcode 6.所以我想知道如果我在这种情况下,唯一的一个.

UPDATE

我在GitHub上检查了一些像Alamofire,EulerCryptoSwift的 Swift项目,但没有一个项目有足够的Swift文件来实际比较.我找到的唯一一个大小合适的项目SwiftHN,即使它只有十几个源文件,我仍然可以验证相同的东西,一个简单的空间和整个项目需要重新编译,这开始采取一个很少的时间(2/3秒).

与Objective-C代码相比,分析器和编译都非常快,这真的感觉Swift永远无法处理大型项目,但请告诉我我错了.

使用Xcode 6 Beta 7进行更新

仍然没有任何进步.这开始变得荒谬了.由于缺乏#importSwift,我真的不知道Apple将如何能够优化它.

更新使用Xcode 6.3和Swift 1.2

Apple已添加增量构建(以及许多其他编译器优化).您必须将代码迁移到Swift 1.2以查看这些优势,但Apple在Xcode 6.3中添加了一个工具来帮助您:

在此输入图像描述

然而

不要像我一样快乐.他们用来制作构建增量的图解算器还没有很好地优化.

实际上,首先,它不会查看函数签名更改,因此如果在一个方法的块中添加空格,则将重新编译依赖于该类的所有文件.

其次,它似乎根据重新编译的文件创建树,即使更改不影响它们.例如,如果将这三个类移动到不同的文件中

class FileA: NSObject {
    var foo:String?
}
class FileB: NSObject {
    var bar:FileA?
}
class FileC: NSObject {
    var baz:FileB?
}
Run Code Online (Sandbox Code Playgroud)

现在,如果你修改FileA,编译器显然会标记 …

compilation swift

201
推荐指数
11
解决办法
4万
查看次数

如何修复从源安装PHP时找不到xml2-config的错误?

当我尝试从Ubuntu上的源代码安装php 5.3 stable(从http://www.php.net/downloads.php下载压缩的安装文件)并运行时出现./configure此错误:

configure: error: xml2-config not found. Please check your libxml2 installation.
Run Code Online (Sandbox Code Playgroud)

php compilation php-5.3

196
推荐指数
4
解决办法
14万
查看次数

Visual Studio中"首选32位"设置的目的是什么?它实际上是如何工作的?

在此输入图像描述

我不清楚编译器在需要时如何自动知道编译为64位.它如何知道什么时候可以自信地针对32位?

我很好奇编译器在编译时如何知道要定位的架构.它是否分析代码并根据它发现的内容做出决定?

.net c# compilation cpu-architecture visual-studio

195
推荐指数
2
解决办法
6万
查看次数

警告:API'variable.getJavaCompile()'已过时,已替换为'variant.getJavaCompileProvider()'

在Syncing Gradle时突然,我收到此错误:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'

apply plugin: 'io.fabric'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.2"
    defaultConfig {
        applicationId "..."
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "..."
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        versionNameSuffix = version_suffix

        [...]
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

            [...]
        }
        debug {
            [...]
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.61"
    implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation "com.android.support:preference-v7:28.0.0"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4' …
Run Code Online (Sandbox Code Playgroud)

android compilation android-studio android-gradle-plugin google-fabric

188
推荐指数
10
解决办法
12万
查看次数

如何使用/创建动态模板来使用Angular 2.0编译动态组件?

我想动态创建模板.这应该用于ComponentType运行时构建一个并在托管组件内部放置(甚至替换)它.

直到我使用RC4 ComponentResolver,但RC5我收到消息:

ComponentResolver不推荐用于动态编译.使用ComponentFactoryResolver连同@NgModule/@Component.entryComponents或ANALYZE_FOR_ENTRY_COMPONENTS提供商,而不是.对于仅运行时编译,您也可以使用Compiler.compileComponentSync/Async.

我发现了这个(官方的angular2)文件

Angular 2同步动态组件创建

并了解我可以使用其中之一

  • 一种动态的ngIfComponentFactoryResolver.如果我将已知组件传递到托管内部@Component({entryComponents: [comp1, comp2], ...})- 我可以使用.resolveComponentFactory(componentToRender);
  • 真正的运行时编译,带Compiler...

但问题是如何使用它Compiler?上面的注释说我应该打电话:Compiler.compileComponentSync/Async- 那怎么样?

例如.我想为一种设置创建(基于一些配置条件)这种模板

<form>
   <string-editor
     [propertyName]="'code'"
     [entity]="entity"
   ></string-editor>
   <string-editor
     [propertyName]="'description'"
     [entity]="entity"
   ></string-editor>
   ...
Run Code Online (Sandbox Code Playgroud)

在另一种情况下这个(string-editor被替换text-editor)

<form>
   <text-editor
     [propertyName]="'code'"
     [entity]="entity"
   ></text-editor>
   ...
Run Code Online (Sandbox Code Playgroud)

等等(editors属性类型的不同数量/日期/引用,跳过一些用户的某些属性......).即这是一个例子,真正的配置可以生成更多不同和复杂的模板.

该 …

compilation typescript angular2-compiler angular

185
推荐指数
10
解决办法
13万
查看次数

编译器如何编译自己?

我正在网站http://coffeescript.org/上研究CoffeeScript ,它有文本

CoffeeScript编译器本身是用CoffeeScript编写的

编译器如何编译自己,或者这个语句是什么意思?

compilation

167
推荐指数
6
解决办法
6947
查看次数

OPTION(RECOMPILE)总是更快; 为什么?

我遇到了一个奇怪的情况,附加OPTION (RECOMPILE)到我的查询导致它在半秒内运行,而省略它会导致查询花费超过五分钟.

从查询分析器或我的C#程序执行查询时就是这种情况SqlCommand.ExecuteReader().打电话(或不打电话)DBCC FREEPROCCACHEDBCC dropcleanbuffers没有任何区别; 查询结果总是立即返回,OPTION (RECOMPILE)如果没有它,则会超过五分钟.始终使用相同的参数调用查询[为了此测试].

我正在使用SQL Server 2008.

我对编写SQL OPTION非常熟悉,但之前从未在查询中使用过命令,并且在扫描此论坛上的帖子之前不熟悉计划缓存的整个概念.我从这些帖子中了解到,这OPTION (RECOMPILE)是一项昂贵的操作.它显然为查询创建了一个新的查找策略.那么为什么然后,省略它的后续查询OPTION (RECOMPILE)是如此之慢?后续查询是否应该使用在前一次调用中计算的查找策略,其中包括重新编译提示?

拥有一个需要在每次调用时重新编译提示的查询是否非常不寻常?

对于入门级问题我很抱歉,但我无法真正做到这一点.

更新:我被要求发布查询...

select acctNo,min(date) earliestDate 
from( 
    select acctNo,tradeDate as date 
    from datafeed_trans 
    where feedid=@feedID and feedDate=@feedDate 

    union 

    select acctNo,feedDate as date 
    from datafeed_money 
    where feedid=@feedID and feedDate=@feedDate 

    union 

    select acctNo,feedDate as date 
    from datafeed_jnl 
    where feedid=@feedID and feedDate=@feedDate 
)t1 
group by t1.acctNo
OPTION(RECOMPILE)
Run Code Online (Sandbox Code Playgroud)

从查询分析器运行测试时,我预先添加以下行:

declare @feedID int
select @feedID=20

declare …
Run Code Online (Sandbox Code Playgroud)

sql sql-server compilation hint sql-server-2008

156
推荐指数
3
解决办法
17万
查看次数

使用G ++编译多个.cpp和.h文件

我刚刚继承了一些C++代码,这些代码写得不好用一个cpp文件,其中包含main和一堆其他函数.还有一些.h文件包含类及其函数定义.

到目前为止,该程序是使用该命令编译的g++ main.cpp.现在我已经将类.h.cpp文件分开了,我需要使用makefile还是我仍然可以使用g++ main.cpp命令?

c++ makefile compilation header

148
推荐指数
7
解决办法
28万
查看次数

Java是编译语言还是解释编程语言?

在过去,我使用C++作为编程语言.我知道用C++编写的代码经过编译过程,直到它成为目标代码"机器代码".

我想知道Java在这方面是如何工作的.用户如何编写由计算机运行的Java代码?

java compilation interpretation

144
推荐指数
7
解决办法
16万
查看次数