如何在 VS Code 中 git 提交我的更改而不显示任何消息?
在我使用的终端中--allow-empty-message -m ''。我曾经可以通过输入一个空格字符在 VS Code 中完成我想要的操作,但现在不再起作用了。
在这个博客中已经很好地解释了在 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。
考虑以下注释:
// 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 宏来查找每个注释。
Symbol.caseFields为我提供参数列表,并且在每个参数(类型为Symbol)上,方法annotations为我提供了我正在寻找的内容。ValDef. 如果param.tpt.tpe匹配,AnnotatedType(tpe, t)那么t就是我正在寻找的注释。知道如何获取为方法中的参数提供的注释吗?当我打印术语/符号/树/...时,在这种情况下我什至看不到“z”。
如果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(免费提供)。如果满足下面的第一个条件,则算法是无锁的,如果满足以下两个条件,则是无等待的:
以下是三年多前的Macros: The Plan for Scala 3中的一段话:
例如,我们可以定义一个宏注释 @json,将 JSON 序列化器添加到一种类型中。
知道这在 Scala 3 中如何/是否可行吗?
更一般地说,Scala 3 中有什么可以提供“宏注释”功能吗?以下是宏注释 - Scala 2.13的引用:
与以前版本的宏天堂不同,2.0 中的宏注释在以下意义上是正确的:1) 不仅适用于类和对象,而且适用于任意定义,2)允许扩展类来修改甚至创建伴生对象
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 …
考虑以下代码:
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?
std::unordered_map两者std::vector都有reserve增加集合容量的方法,这样就可以在不扩大内部缓冲区的情况下向集合中添加多个元素。然而,std::vector还有一个方法capacity()返回集合的当前容量。std::unordered_map没有这样的方法。std::unordered_map有没有办法获得使用班级已经提供的任何内容的能力?
考虑以下代码。我可以用 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)
如果我替换constexpr为consteval,那么 Clang 会抱怨std::remove_cvref_t<decltype(fun())>:
错误:无法在立即调用之外获取 consteval 函数“fun”的地址
GCC 编译它就好了。为什么?
以下代码的输出只是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那么一切都会好起来的。我是否在调用未定义的行为?