标签: multistage

在多阶段编译中,我们是否应该使用标准的序列化方法来通过阶段传送对象?

这个问题是在 Scala 3/Dotty 中提出的,但应该推广到 MetaML 系列之外的任何语言。

\n

Scala 3 宏教程:

\n

https://docs.scala-lang.org/scala3/reference/metaprogramming/macros.html

\n

从阶段一致性原则开始,它明确指出在编译阶段定义的自由变量不能被下一阶段使用,因为它的绑定对象不能持久化到不同的编译器进程:

\n
\n

...因此,程序的结果将需要将程序状态本身作为其部分之一进行持久化。我们不想\xe2\x80\x99 这样做,因此这种情况应该被定为非法

\n
\n

这应该被认为是一个已解决的问题,因为许多分布式计算框架需要类似的能力来跨多台计算机持久保存对象,最常见的解决方案(如在 Apache Spark 中观察到的)使用标准序列化/pickling 来创建绑定对象的快照( Java 标准序列化,twitter Kryo/Chill)可以保存在磁盘/堆外内存上或通过网络发送。

\n

教程本身也两次提出了这种可能性:

\n
\n

一个区别是 MetaML 没有 PCP 的等效项 - MetaML 中引用的代码可以访问其直接封闭环境中的变量,但有一些限制和警告,因为此类访问涉及序列化。然而,这并不构成表现力的根本增益。

\n
\n
\n

最后,ToExpr非常类似于序列化框架

\n
\n

相反,Scala 2 和 Scala 3(以及它们各自的生态系统)在很大程度上忽略了这些开箱即用的解决方案,只为原始类型提供默认方法(Liftable在 scala2 中,ToExpr在 scala3 中)。此外,使用宏的现有库在很大程度上依赖于手动定义准引号/引号来完成这项琐碎的任务,从而使源代码变得更长且更难以维护,同时并没有使任何东西变得更快(因为 JVM 对象序列化是高度优化的语言组件)

\n

造成这种现状的原因是什么?我们如何改进它?

\n

scala metaprogramming multistage scala-macros scala-3

8
推荐指数
0
解决办法
162
查看次数

如何在没有多个构建的情况下将 React 应用程序部署到多个环境?

我正在使用 Azure DevOps 设置 CI/CD 管道以自动将 React 应用程序部署到多个环境。据我了解,在 npm 构建期间使用了环境变量 (REACT_APP_*)。如何在不为每个环境创建步骤的情况下设置构建阶段?

我正在使用一个带有 React 前端的新ASP.Net Boilerplate项目。

.

这是我目前所拥有的

我在 package.json 中复制了构建任务以允许多个环境

"scripts": {
  ...
  "build": "set REACT_APP_ENV=production && react-app-rewired build --scripts-version react-scripts-ts",
  "builduat": "set REACT_APP_ENV=uat && react-app-rewired build --scripts-version react-scripts-ts",
...
}
Run Code Online (Sandbox Code Playgroud)

然后在我的 CI 管道中,我复制了构建任务

- script: yarn builduat
  displayName: '[UAT] Yarn build front-end'
  workingDirectory: $(WorkingDirectoryReact)

- script: yarn build
  displayName: '[PROD] Yarn build front-end'
  workingDirectory: $(WorkingDirectoryReact)
Run Code Online (Sandbox Code Playgroud)

我不想为每个环境复制东西,那么理想的解决方案是什么?我真的不想在 CD(部署阶段)期间构建解决方案

continuous-integration multistage reactjs azure-devops aspnetboilerplate

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

使用ansible进行多级部署

如果您有不同的阶段变量,您建议使用ansible组织多阶段部署的方法是什么?

主要思想是为不同阶段定义组变量.

有两个技巧:

我想了解更多关于组织剧本,变量,主持人以及了解您的方法的优缺点的例子.

deployment environment-variables multistage ansible

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

Matlab:如何自定义聚类代码作为多级聚类?

我想聚集大量的数据记录.我正在处理的数据是字符串类型.群集过程需要很长时间.
让我们假设我想将一组电子邮件数据记录集群到集群中,同一个人写的电子邮件被分配到同一个集群(考虑到一个人可能以不同的方式写下他/她的名字).
我想执行多阶段群集:

  • 基于名称的第一阶段聚类,如果两个记录之间的名称距离小于阈值,我们会考虑这些聚类......
  • 数据记录基于其他属性(名称除外)进入群集的第二阶段.

计算成对距离.现在我正处于聚类阶段.我想使用以下代码进行dbscan群集:

function [IDX, isnoise] = dbscan_strings(X,epsilon,MinPts)
C = 0;
n = size(X,1); 
IDX = zeros(n,1);
D = pdist2(X,X,@intersection);
visited = false(n,1);
isnoise = false(n,1);
for i = 1:n
    if ~visited(i)
        visited(i) = true;
        Neighbors = RegionQuery(i);
        if numel(Neighbors)<MinPts
            % X(i,:) is NOISE
            isnoise(i) = true;
        else
            C = C+1;
            ExpandCluster(i,Neighbors,C);
        end
    end
end

function ExpandCluster(i,Neighbors,C)
    IDX(i) = C;
    k = 1;
    while true
        j = Neighbors(k);
        if ~visited(j)
            visited(j) = true;
            Neighbors2 = …
Run Code Online (Sandbox Code Playgroud)

matlab cluster-analysis multistage

5
推荐指数
1
解决办法
355
查看次数

docker多阶段构建期间的Gradle依赖项缓存?

我有以下 Dockerfile

FROM gradle:jdk13 AS appbuild
WORKDIR "/home/gradle/"
COPY --chown=gradle:gradle "./build.gradle" "/home/gradle/"
RUN gradle dependencies
COPY --chown=gradle:gradle "./src/" "/home/gradle/src/"
RUN gradle build --info

FROM openjdk:13
ENV LANG en_US.UTF-8
COPY --from=appbuild "/home/gradle/build/libs/frontend.jar" "/frontend.jar"
CMD ["java", "-jar", "-Dspring.profiles.active=default", "/frontend.jar"]
Run Code Online (Sandbox Code Playgroud)

我的目标是在每次构建 docker 镜像时防止 gradle 下载依赖项。

该命令会gradle dependencies下载所有必需的 Java 库,以防它们丢失。

在第一个gradle dependencies命令之前,我只复制了 build.gradle 以便只下载依赖项并缓存它们。

当我运行gradle build命令时,它为什么要再次下载所有文件?它们已经存在于其中一层中。

我试过用RUN gradle clean build --info || return 0而不是gradle dependencies,都是一样的。

dependencies build gradle multistage docker

3
推荐指数
1
解决办法
1594
查看次数

Docker:多阶段构建会产生多个镜像

给出这个多阶段构建的小例子

FROM node:10 AS ui-build
WORKDIR /usr/src/app

FROM node:10 AS server-build
WORKDIR /root/

EXPOSE 3070

ENTRYPOINT ["node"]
CMD ["index.js"]
Run Code Online (Sandbox Code Playgroud)

为什么这会在我的本地文件系统上产生 3 个图像?

"<none>";"<none>";"58d63982fbef";"2020-04-15 17:53:14";"912MB"
"node";"10";"bd83fcefc19d";"2020-04-14 01:32:21";"912MB"
"test";"latest";"3913dd4d03b6";"2020-04-15 17:53:15";"912MB"
Run Code Online (Sandbox Code Playgroud)

我期望两个镜像,基础镜像和服务器构建镜像。我使用了标准的 docker build 命令,即

docker build -t test . 
Run Code Online (Sandbox Code Playgroud)

那么图像的哪些部分是空的,哪些是测试的?

我很困惑

multistage docker

2
推荐指数
1
解决办法
980
查看次数

生成字符串并在运行时将其作为程序执行

这是一个难以理解的问题,我不确定它的正确用语是什么(如果有的话).我很好奇什么语言允许你在程序执行期间"构建"一个字符串,然后作为程序的一部分执行它.我所知道的唯一一种允许你这样做的语言是Snobol.

然而,阅读Tcl的维基百科条目,听起来它也可以做到这一点?

我一直认为这是一个很好的功能,即使它可能没有太多使用.谢谢.

PS:会用Snobol,Spitbol标记这个,但没有创建新标签的声誉.

programming-languages eval metaprogramming multistage snobol

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