小编jam*_*her的帖子

如何将当前工作目录设置为脚本目录?

我正在写一个bash脚本.我需要当前的工作目录始终是脚本所在的目录.

默认行为是脚本中的当前工作目录是我运行它的shell的目录,但我不想要这种行为.

bash scripting path

500
推荐指数
7
解决办法
35万
查看次数

在python中移动列表的有效方法

在python中移动列表的最有效方法是什么?现在我有这样的事情:

>>> def rotate(l, n):
...     return l[n:] + l[:n]
... 
>>> l = [1,2,3,4]
>>> rotate(l,1)
[2, 3, 4, 1]
>>> rotate(l,2)
[3, 4, 1, 2]
>>> rotate(l,0)
[1, 2, 3, 4]
>>> rotate(l,-1)
[4, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

python list

244
推荐指数
10
解决办法
26万
查看次数

减少Haskell程序中的垃圾收集暂停时间

我们正在开发一个程序,它接收和转发"消息",同时保留这些消息的临时历史记录,以便它可以告诉您消息历史记录(如果请求).消息以数字方式标识,通常大小约为1千字节,我们需要保留数十万条这些消息.

我们希望优化此程序的延迟:发送和接收消息之间的时间必须低于10毫秒.

该程序是用Haskell编写的,并用GHC编译.但是,我们发现垃圾收集暂停对于我们的延迟要求来说太长了:在我们的实际程序中超过100毫秒.

以下程序是我们的应用程序的简化版本.它使用a Data.Map.Strict来存储消息.消息ByteString由a标识Int.以递增的数字顺序插入1,000,000条消息,并且不断删除最旧的消息以使历史记录最多保留200,000条消息.

module Main (main) where

import qualified Control.Exception as Exception
import qualified Control.Monad as Monad
import qualified Data.ByteString as ByteString
import qualified Data.Map.Strict as Map

data Msg = Msg !Int !ByteString.ByteString

type Chan = Map.Map Int ByteString.ByteString

message :: Int -> Msg
message n = Msg n (ByteString.replicate 1024 (fromIntegral n))

pushMsg :: Chan -> Msg -> IO Chan
pushMsg chan (Msg msgId msgContent) =
  Exception.evaluate $
    let
      inserted = Map.insert …
Run Code Online (Sandbox Code Playgroud)

performance garbage-collection haskell latency ghc

125
推荐指数
4
解决办法
6600
查看次数

Bash脚本的语义?

我知道的比任何其他语言都要多,每次我需要一些小东西时,我都会通过谷歌搜索"Bash".因此,我可以拼凑出似乎有用的小脚本.不过,我并不真正知道发生了什么事情,我希望的是更正式的介绍bash作为编程语言.例如:评估顺序是什么?范围规则是什么?什么是打字规则,例如一切都是字符串?程序的状态是什么 - 它是字符串到变量名的键值赋值; 还有更多,例如堆栈?有堆吗?等等.

我想咨询GNU Bash手册以获得这种洞察力,但它似乎并不是我想要的; 它更像是句法糖的清单,而不是核心语义模型的解释.在线的百万个"bash教程"只会更糟.也许我应该先学习sh,并将Bash理解为一种语法糖?不过,我不知道这是否是一个准确的模型.

有什么建议?

编辑:我被要求提供一些理想我正在寻找的例子.我认为"形式语义"的一个相当极端的例子是本文关于"JavaScript的本质".也许一个稍微不那么正式的例子是Haskell 2010报告.

bash formal-semantics

86
推荐指数
2
解决办法
3044
查看次数

工艺,线程,绿线,原始线程,纤维,协同程序:有什么区别?

我正在阅读并发性.对于那些含有令人困惑的类似定义的术语,我有点过头了.即:

  • 流程
  • 主题
  • "绿线"
  • Protothreads
  • 纤维
  • 协同程序
  • Go语言中的"Goroutines"

我的印象是,区别在于(1)是真正的并行还是多路复用; (2)是在CPU,OS还是在程序中管理; 和(3..5)我无法辨认的其他一些事情.

这些并行方法之间的差异是否有简明扼要的指导?

parallel-processing concurrency multithreading process fiber

46
推荐指数
2
解决办法
7628
查看次数

类型(c→d)→(a→b→c)→(a→b→d)的Haskell函数组合算子

普通的功能组成属于这种类型

(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)

我认为这应该概括为类型:

(.) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
Run Code Online (Sandbox Code Playgroud)

一个具体的例子:计算差分平方.我们可以写diffsq a b = (a - b) ^ 2,但感觉我应该能够编写(-)(^2)编写类似的东西diffsq = (^2) . (-).

当然,我不能.我可以做的一件事是使用一个元组而不是两个参数(-),通过转换它uncurry,但这不一样.

有可能做我想要的吗?如果没有,我误解的是什么让我认为它应该是可能的?


注意:这里已经有效地提出这个问题,但是没有给出答案(我怀疑必须存在).

haskell pointfree function-composition

39
推荐指数
5
解决办法
9075
查看次数

Haskell GHC:模式与N个构造函数匹配的时间复杂度是多少?

假设我们有以下Haskell:

data T = T0 | T1 | T2 | ... | TN

toInt :: T -> Int
toInt t = case t of
  T0 -> 0
  T1 -> 1
  T2 -> 2
  ...
  TN -> N
Run Code Online (Sandbox Code Playgroud)

在这里使用什么算法来执行模式匹配?我看到两个选择:

(1)线性搜索,类似于

if      (t.tag == T0) { ... }
else if (t.tag == T1) { ... }
else ...
Run Code Online (Sandbox Code Playgroud)

(2)二进制搜索,在这个特定任务中是明智的:在t.tag集合{ TO... T1023}中搜索.但是,在模式匹配通常具有许多其他功能和概括的情况下,可能不会使用此功能.

使用GHC进行编译,使用什么算法,对于模式匹配,使用N的时间复杂度ttoInt多少?

compiler-construction complexity-theory haskell pattern-matching

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

CSS:"display:auto;"?

auto几个CSS属性提供的选项非常有用.但是,该display属性似乎没有.我希望这可以display根据标签将属性设置为浏览器默认值; 例如,a <div>会重置为display: block;,但是<span>会重置为display: inline;.

  1. 有没有display: auto相同的我错过了?
  2. 如果没有,为什么不呢?
  3. 什么是最优雅的解决方法?(我正在以编程方式工作,特别是使用jQuery.)

css

33
推荐指数
3
解决办法
2万
查看次数

Sign in With Google (GSI) 库的 TypeScript 类型声明在哪里?

我正在使用Google“GSI”库实现“使用 Google 登录” 。我的应用程序使用 Next.js 和 TypeScript,所以我正在寻找:

  1. npm包含 GSI 客户端库的包。
  2. GSI 客户端库的 TypeScript 类型声明。

我无法找到其中任何一个:我只看到一个从中加载的脚本https://accounts.google.com/gsi/client,以及一个非正式的 API 参考here

在 npm 上哪里可以找到 GSI 库和类型声明?

npm typescript google-signin

31
推荐指数
4
解决办法
7445
查看次数

Java中两组的对称差异

TreeSet我的应用程序中有两个:

set1 = {501,502,503,504}
set2 = {502,503,504,505}
Run Code Online (Sandbox Code Playgroud)

我想获得这些集的对称差异,以便我的输出将是集合:

set = {501,505}
Run Code Online (Sandbox Code Playgroud)

java collections set

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