小编Koo*_*sha的帖子

VS Code 中的 Git 提交没有任何消息

如何在 VS Code 中 git 提交我的更改而不显示任何消息?

在我使用的终端中--allow-empty-message -m ''。我曾经可以通过输入一个空格字符在 VS Code 中完成我想要的操作,但现在不再起作用了。

git commit visual-studio-code

11
推荐指数
1
解决办法
7099
查看次数

在 Scala 3 编译时提取和访问字段

在这个博客中已经很好地解释了在 Scala 3 编译时提取案例类的元素的名称和类型:https : //blog.philipp-martini.de/blog/magic-mirror-scala3/ 但是,同一个博客用于productElement获取存储在实例中的值。我的问题是如何直接访问它们?考虑以下代码:

case class Abc(name: String, age: Int)
inline def printElems[A](inline value: A)(using m: Mirror.Of[A]): Unit = ???
val abc = Abc("my-name", 99)
printElems(abc)
Run Code Online (Sandbox Code Playgroud)

如何(更新和的签名printElems)实现,printElems以便printElems(abc)将其扩展为如下所示:

println(abc.name)
println(abc.age)
Run Code Online (Sandbox Code Playgroud)

或者至少这个:

println(abc._1())
println(abc._2())
Run Code Online (Sandbox Code Playgroud)

不是这个:

println(abc.productElement(0))
println(abc.productElement(1))
Run Code Online (Sandbox Code Playgroud)

不用说,我正在寻找一种适用于任意 case 类的解决方案,而不仅仅是Abc. 此外,如果必须使用宏,那就没问题了。但请只使用 Scala 3。

scala scala-macros scala-3

9
推荐指数
1
解决办法
177
查看次数

如何获取赋予方法参数的 Scala 注释

考虑以下注释:

// ok to have more meta
@field
@param
@compileTimeOnly("Only for code generation")
case class Annot(value: String) extends ConstantAnnotation
Run Code Online (Sandbox Code Playgroud)

现在三种用途:

case class A(x: Int, @Annot("z") y: String)
object A:
  def f1(x: Int, y: String @Annot("z")): A = ???
  def f2(x: Int, @Annot("z") y: String): A = ???
Run Code Online (Sandbox Code Playgroud)

我想使用 Scala 3 宏来查找每个注释。

  1. 案例类: Symbol.caseFields为我提供参数列表,并且在每个参数(类型为Symbol)上,方法annotations为我提供了我正在寻找的内容。
  2. 带注释的类型:每个参数都是一个ValDef. 如果param.tpt.tpe匹配,AnnotatedType(tpe, t)那么t就是我正在寻找的注释。
  3. 带注释的方法参数:我​​什么都没有!

知道如何获取为方法中的参数提供的注释吗?当我打印术语/符号/树/...时,在这种情况下我什至看不到“z”。

scala scala-macros scala-3

9
推荐指数
1
解决办法
297
查看次数

std::atomic 中的任何内容都是免等待的?

如果T是 C++ 基本类型,并且如果std::atomic<T>::is_lock_free()返回true,那么是否有任何东西std::atomic<T>是无等待的(不仅仅是无锁的)?像, load, store, fetch_add, fetch_sub, compare_exchange_weak, 和compare_exchange_strong

您是否还可以根据 C++ 标准中指定的内容以及 Clang 和/或 GCC(您选择的版本)中实现的内容进行回答。

我最喜欢的无锁和无等待定义来自C++ Concurrency in Action(免费提供)。如果满足下面的第一个条件,则算法是无锁的,如果满足以下两个条件,则是无等待的:

  1. 如果访问数据结构的线程之一在其操作中途被调度程序挂起,则其他线程必须仍然能够完成其操作而无需等待挂起的线程。
  2. 无论其他线程的行为如何,访问数据结构的每个线程都可以在有限步数内完成其操作。

c++ lock-free language-lawyer stdatomic wait-free

7
推荐指数
1
解决办法
658
查看次数

Scala 3 中的宏注释

以下是三年多前的Macros: The Plan for Scala 3中的一段话:

例如,我们可以定义一个宏注释 @json,将 JSON 序列化器添加到一种类型中。

知道这在 Scala 3 中如何/是否可行吗?

更一般地说,Scala 3 中有什么可以提供“宏注释”功能吗?以下是宏注释 - Scala 2.13的引用:

与以前版本的宏天堂不同,2.0 中的宏注释在以下意义上是正确的:1) 不仅适用于类和对象,而且适用于任意定义,2)允许扩展类来修改甚至创建伴生对象

scala scala-macros scala-macro-paradise scala-3

7
推荐指数
2
解决办法
1071
查看次数

Why does Oracle claim java.util.Random.nextFloat() generates 2^24 possibilities and not 2^23?

According to the documentation for java.util.Random, the Java class implements nextFloat by next(24) / ((float)(1 << 24)) (ie. a random non-negative integer with 24 bits divided by 224). The documentation claims that all 224 possible values can be returned. They are between 0 (inclusive) and 1 (exclusive). However, I don't think that is true.

First, note that according to the IEC 559 (IEEE 754) standard, float has 23 fraction bits. But there is an implicit leading …

java random floating-point

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

在原子多线程代码中删除容器

考虑以下代码:

struct T { std::atomic<int> a = 2; };
T* t = new T();
// Thread 1
if(t->a.fetch_sub(1,std::memory_order_relaxed) == 1)
  delete t;
// Thread 2
if(t->a.fetch_sub(1,std::memory_order_relaxed) == 1)
  delete t;
Run Code Online (Sandbox Code Playgroud)

我们确切地知道线程 1 和线程 2 之一将执行delete. 但是我们安全吗?我的意思是假设线程 1 将执行delete. 它是保证当线程1开始delete,线程2甚至不会看t

c++ multithreading atomic stdatomic

6
推荐指数
1
解决办法
218
查看次数

如何找到std::unordered_map的当前容量?

std::unordered_map两者std::vector都有reserve增加集合容量的方法,这样就可以在不扩大内部缓冲区的情况下向集合中添加多个元素。然而,std::vector还有一个方法capacity()返回集合的当前容量。std::unordered_map没有这样的方法。std::unordered_map有没有办法获得使用班级已经提供的任何内容的能力?

c++ unordered-map vector

6
推荐指数
1
解决办法
2057
查看次数

decltype(fun()) 用于 consteval 方法

考虑以下代码。我可以用 GCC 10.2.0 和 Clang 11.0.0 编译它(正如预期的那样):

#include <iostream>

template<int> 
struct T {
  static constexpr auto fun() noexcept { return 0; }
  using type = std::remove_cvref_t<decltype(fun())>; 
};

int main() {
    decltype(T<1>::fun()) a = 1;
    std::cout << a; 
}
Run Code Online (Sandbox Code Playgroud)

如果我替换constexprconsteval,那么 Clang 会抱怨std::remove_cvref_t<decltype(fun())>

错误:无法在立即调用之外获取 consteval 函数“fun”的地址

GCC 编译它就好了。为什么?

c++ c++20 consteval

6
推荐指数
1
解决办法
109
查看次数

类型类 + 内联方法是否未定义?

以下代码的输出只是list(没有打印数字)。

trait TC[A]:
  inline def show(value: A): Unit

object TC:
  given TC[Int] with
    inline def show(value: Int): Unit = println(value)
  given[A:TC]: TC[List[A]] with
    inline def show(value: List[A]): Unit =
      println("list")
      value.foreach(x => summon[TC[A]].show(x))

@main
def main: Unit =
  import TC._
  val value = 1 :: 2 :: 3 :: Nil
  summon[TC[List[Int]]].show(value)
Run Code Online (Sandbox Code Playgroud)

如果我删除,inline那么一切都会好起来的。我是否在调用未定义的行为?

scala typeclass scala-3

6
推荐指数
0
解决办法
66
查看次数