为了更好地理解编译器,特别是汇编语言,我一直在尝试一段简单的代码,其中N计算第一个数字的总和,这应该导致N(N+1)/2or N(N-1)/2。
正如代码所示,有两个函数:
#include <cstdint>
// Once compiled with optimization, the generated assembly has a loop
uint64_t sum1( uint64_t n ) {
uint64_t sum = 0;
for ( uint64_t j=0; j<=n; ++j ) {
sum += j;
}
return sum;
}
// Once compiled with optimization, the generated assembly of the following has no loop
uint64_t sum2( uint64_t n ) {
uint64_t sum = 0;
for ( uint64_t j=0; j<n; ++j ) {
sum += …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个proc-macro派生和实现结构的特征,并且我需要结构中的所有字段都实现Display。
我该如何检查?
此外,我如何检查属性是否Iterator也实现了?(我想处理迭代器的项目是否也实现了显示)。
我正在使用syn和quote板条箱。我设法解析struct并生成实现。但对于像Vec和这样的类型Option,我想检查他们是否Iterator正确实现和处理它。
该syn::Field结构具有ty我认为应该作为起点的属性,但是查看文档我无法猜测任何方法来检查此类型是否实现了某种特征。
我的客户有非常严格的设计准则,例如对于 alpha:\n文本不应有 alpha。
\n但是,我似乎无法以类似主题的方式自定义 MaterialDesign\xc2\xb4s alpha 。
\n当然,我可以自定义每个组件,但这很乏味:\nModifier.alpha(1.0f)
当然,我可以将整个应用程序包装在 alpha-Provider 中,但大多数材料组件会覆盖它,例如AppBar,所以这也不能按预期工作。
// my wrapper:\nCompositionLocalProvider(LocalContentAlpha provides 1.0f) { /* my ui */ }\n\n// will be overwritten by \n@Composable\nprivate fun AppBar(...) {\n Surface(...) {\n CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {\n Row(..., content)\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n所以我想我应该做的是提供一个 custom ContentAlpha,因为它几乎用于每个材质组件,但我不知道如何做。你?
假设有一个抽象类BaseClass ...
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable(with = PolymorphicSerializer::class)
abstract class BaseClass {
@SerialName("bid")
var baseId: String? = null
}
Run Code Online (Sandbox Code Playgroud)
...扩展它的类ExtendedClass ...
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
class ExtendedClass
(@SerialName("eid")
var newId: String? = null
) : BaseClass()
Run Code Online (Sandbox Code Playgroud)
...和多态序列化器
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.json.JsonContentPolymorphicSerializer
import kotlinx.serialization.json.JsonElement
object PolymorphicSerializer : JsonContentPolymorphicSerializer<BaseClass>(BaseClass::class) {
override fun selectDeserializer(element: JsonElement): DeserializationStrategy<out BaseClass> {
return ExtendedClass.serializer()
}
}
Run Code Online (Sandbox Code Playgroud)
使用PolymorphicSerializer是因为 JSON 可以反序列化为基于某些属性扩展BaseClass 的不同类(为了简单起见,我只使用了ExtendedClass.serializer())
现在,如果我们尝试将通用 JSON 反序列化为ExtendedClass ...
class DeserializationTest …Run Code Online (Sandbox Code Playgroud) 鉴于以下代码,我有一些与类型双关相关的问题。我看不出这没有违反严格的别名规则,但我无法指出具体的违规行为。我最好的猜测是,将联合成员传递到函数中违反了严格的别名。
以下代码位于Compiler Explorer上。
#include <stdint.h>
union my_type
{
uint8_t m8[8];
uint16_t m16[4];
uint32_t m32[2];
uint64_t m64;
};
int func(uint16_t *x, uint32_t *y)
{
return *y += *x;
}
int main(int argc, char *argv[])
{
union my_type mine = {.m64 = 1234567890};
return func(mine.m16, mine.m32);
}
Run Code Online (Sandbox Code Playgroud)
我的观察:
func不互相别名,func则不违反严格别名。unionfor 类型双关。m16和m32进入func必须违反某些内容。我的问题:
func?我们有一个旧的 ember 应用程序,bower.json配置如下:
{
"name": "my-app",
"dependencies": {
"Faker": "~3.1.0"
}
}
Run Code Online (Sandbox Code Playgroud)
它已经工作了很多年,最近我们在构建时发现以下错误
bower install
bower Faker#~3.1.0 not-cached https://github.com/Marak/Faker.js.git#~3.1.0
bower Faker#~3.1.0 resolve https://github.com/Marak/Faker.js.git#~3.1.0
bower Faker#~3.1.0 ENORESTARGET No tag found that was able to satisfy ~3.1.0
Additional error details:
No versions found in https://github.com/Marak/Faker.js.git
Run Code Online (Sandbox Code Playgroud)
我检查了https://github.com/Marak/Faker.js,错误是正确的。没有了3.1.0,当前版本是6.6.6. 但是 git 提交历史记录3.1.0再也找不到版本了。
有没有办法让我从某个地方找到 3.1.0?看来作者清理了旧版本?