javascript

java

python

c#

node.js

android

reactjs

c++

php

jquery

html

css

git

ruby-on-rails

.net

ios

sql

c

string

ruby

不可知的语言-使用软件事务存储有任何现实世界的经验吗?

似乎最近对STM(软件事务存储)框架和语言扩展有了越来越高的兴趣。 Clojure特别具有出色的实现,它使用MVCC(多版本并发控制)而不是滚动提交日志。 GHC Haskell还具有非常优雅的STM monad,它也可以进行交易组合。 最后,为了稍微说一下我自己的号角,我最近为Scala实现了一个STM框架,该框架静态地强制执行引用限制。

所有这些都是有趣的实验,但似乎仅限于该领域(实验)。 所以我的问题是:你们中的任何人在现实世界中见过或使用过STM吗? 如果是这样,为什么? 它带来了什么好处? 性能如何? (在这一点上似乎有很多相互矛盾的信息)您将再次使用STM还是更喜欢使用其他并发抽象(例如actor)?

trans by 2019-10-09T19:19:24Z

数据库-什么时候应该使用Datomic?

我对数据库服务Datomic感兴趣,但是我不确定它是否适合我从事的项目的需求。 什么时候Datomic是一个好的选择,什么时候应该避免?

trans by 2019-10-09T10:02:06Z

clojure-如何在Java中更改CLASSPATH?

您如何在Java流程中更改Java流程的CLASSPATH?


在您问我“为什么要这么做?”之前 我会尽快解释。

当您运行Clojure REPL时,通常需要在CLASSPATH中添加更多jar来加载Clojure源文件,而我希望这样做而不必重新启动Clojure本身(在Slime上使用它实际上不是一个选择) 在Emacs上)。

这就是原因,但我不希望将此问题标记为某种奇怪的语言,有些奇怪的编辑器,而被可能有答案的大多数Java开发人员忽略。

trans by 2019-10-07T20:50:05Z

Clojure Web框架比较

Clojure有一些Web框架

  • 杂项
  • Webjure
  • 变戏法
  • 胡子

还有一些用于处理某些Web开发子任务的库,例如

  • 为模板而活
  • 打的模板
  • 环以处理具有请求/响应的低级内容
  • ClojureQL的持久性(尽管看起来不太活跃)

还有数百种Java库可供使用。 这里已经讨论了一些方面,并且比较了其中两个。

我不知道这些框架/组件如何在成熟度,范围,易于开发,Django / RoR感觉等方面进行比较。

trans by 2019-10-03T00:34:40Z

我应该在Clojure的哪里使用defrecord?

我在clojure程序中使用了许多映射和结构。 将这些转换为defrecord有什么好处(除了性能之外)?

trans by 2019-09-28T02:59:34Z

Cloju中的Let vs. Binding

我知道它们是不同的,因为一种可以设置2544557721391727627616,而另一种则不能。 但是,我需要帮助他们为什么与众不同。

let16使用给定的绑定创建新作用域,但是binding ...?

trans by 2019-09-27T17:26:16Z

Clojure-命名参数

Clojure是否有命名参数? 如果是这样,您能否提供一个小例子?

trans by 2019-09-22T04:54:26Z

使用命令行界面构建Clojure应用程序?

我刚刚开始使用Clojure(来自Ruby),我想用命令行界面构建一个小应用程序。 如何处理CL的输入/输出?

我注意到有一个clojure.contrib.command-line,但文档很小。

[http://github.com/richhickey/clojure-contrib/blob/ffa868411cda6c617105b52b4f6f9e0f37ee8c24/src/clojure/contrib/command_line.clj]

trans by 2019-09-19T14:59:18Z

为什么Clojure有5种方法来定义一个类而不是仅一种?

Clojure具有gen-class,reify,proxy以及deftype和defrecord来定义类新的数据类型。 对于一种重视语法简单性并且讨厌不必要的复杂性的语言,这似乎是一种畸变。有人可以解释为什么会这样吗? 普通的Lisp风格的defclass是否足够?

trans by 2019-09-18T22:43:30Z

clojure - 匿名函数速记

使用短符号#(..)有一些我不了解匿名函数的东西

以下作品:

REPL>  ((fn [s] s) "Eh")
"Eh"

但这不是:

REPL>  (#(%) "Eh")

这有效:

REPL> (#(str %) "Eh")
"Eh"

我不明白的是为什么(#(%)“Eh”)不起作用,同时我不需要使用str in((fn [s] s)“Eh”)

它们都是匿名函数,它们都带有一个参数。 为什么简写符号需要一个函数而另一个符号不需要?

trans by 2019-09-16T02:54:54Z

术语 - Clojure期货与承诺有何不同?

期货和承诺都会阻止,直到他们计算出它们的价值,那么它们之间有什么区别呢?

trans by 2019-09-15T21:57:57Z

clojure - 函数式编程是否与Web开发相关?

我最近看到了很多关于函数式编程的知识,而Clojure看起来特别有趣。 虽然我“理解”它的基本描述,但是如果我可以的话,我无法弄清楚如何在日常工作中使用它作为Web开发人员。 我所阅读的很多内容都集中在函数式编程的数学方面,而不是常规OO中的典型编程情况。

我有错误的结束吗? 函数式编程与Web开发完全无关吗? 如果没有,是否有任何关于它'用于网络'的例子?

trans by 2019-09-13T21:38:58Z

算法 - 懒惰地生成排列

我正在寻找一种算法来生成集合的排列,这样我就可以在Clojure中创建它们的惰性列表。 即,我想迭代一个排列列表,其中每个排列都不计算,直到我请求它,并且所有排列不必一次存储在内存中。

或者,我正在寻找一种算法,在给定某个集合的情况下,它将返回该集合的“下一个”排列,以这种方式在自己的输出上重复调用该函数将循环遍历原始集合的所有排列, 一些订单(订单无关紧要)。

有这样的算法吗? 我见过的大多数排列生成算法都倾向于一次性生成它们(通常是递归的),它们不能扩展到非常大的集合。 Clojure(或其他函数式语言)中的实现会很有帮助,但我可以从伪代码中找出它。

trans by 2019-09-13T18:43:18Z

clojure - Lisp-1和Lisp-2有什么区别?

我试图理解Lisp-1和Lisp-2之间的区别以及它与Clojure的关系,但我仍然不理解。 任何人都可以开导我吗?

trans by 2019-09-03T11:19:20Z

在多个文件上拆分Clojure命名空间

在使用:gen-class进行提前编译时,是否可以在多个源文件上拆分Clojure命名空间? (:main true)(defn- ...)如何发挥作用?

trans by 2019-08-29T19:15:12Z

什么是Clojure有用?

人们使用Clojure的真实应用是什么?

I use Groovy for glue stuff, Java for big systems, Python/Perl scripts for parsing and glue. I could see myself calling into Clojure from Java but I can't see where I would use it in its own right. It strikes me it would be easier to use almost any scripting language for adhoc tasks.

I'm not a Groovy expert or a fanboy by any means but it strikes me that it has a better support framework, tools and a lot of the language constructs (closures, functional programming). The same could be said for Scala.

难道它的未来是作为嵌入其他系统的语言吗?

trans by 2019-08-28T21:56:39Z

为Cloju提供Emacs / Swank / Paredit的温和教程

我正在转向Emacs来处理Clojure / Lisp。为了能够执行以下操作,我需要在Emacs上设置的所有信息是什么?

  1. 自动匹配/生成相应的关闭括号
  2. autoindent Lisp / Clojure风格,而不是C ++ / Java风格
  3. 语法突出显示
  4. 调用REPL
  5. 能够将文件中的一部分代码加载到REPL中并进行评估。

如果我在Emacs上进行设置之后还可以获得命令列表来获取这些内容,那将是很棒的。

trans by 2019-08-28T18:41:44Z

解释C,Clojure,Python,Ruby,Scala等基准测试

放弃

我知道人工基准是邪恶的。 他们只能针对非常具体的狭隘情况显示结果。 我不认为一种语言比另一种语言更好,因为有些愚蠢的替补。 但我想知道为什么结果如此不同。 请在底部查看我的问题。

数学基准描述

基准是简单的数学计算,可以找到相差6的素数对(所谓的性感素数)例如。 低于100的性感素数将是:is-prime?

结果表

在表中:以秒为单位的计算时间运行:所有除了因子在VirtualBox中运行(Debian unstable amd64 guest,Windows 7 x64主机)CPU:AMD A4-3305M

  Sexy primes up to:        10k      20k      30k      100k               

  Bash                    58.00   200.00     [*1]      [*1]

  C                        0.20     0.65     1.42     15.00

  Clojure1.4               4.12     8.32    16.00    137.93

  Clojure1.4 (optimized)   0.95     1.82     2.30     16.00

  Factor                    n/a      n/a    15.00    180.00

  Python2.7                1.49     5.20    11.00       119     

  Ruby1.8                  5.10    18.32    40.48    377.00

  Ruby1.9.3                1.36     5.73    10.48    106.00

  Scala2.9.2               0.93     1.41     2.73     20.84

  Scala2.9.2 (optimized)   0.32     0.79     1.46     12.01

[* 1] - 我不敢想象需要多长时间

代码清单

C:

int isprime(int x) {
  int i;
  for (i = 2; i < x; ++i)
    if (x%i == 0) return 0;
  return 1;
}

void findprimes(int m) {
  int i;
  for ( i = 11; i < m; ++i)
    if (isprime(i) && isprime(i-6))
      printf("%d %d\n", i-6, i);
}

main() {
    findprimes(10*1000);
}

红宝石:

def is_prime?(n)
  (2...n).all?{|m| n%m != 0 }
end

def sexy_primes(x)
  (9..x).map do |i|
    [i-6, i]
  end.select do |j|
    j.all?{|j| is_prime? j}
  end
end

a = Time.now
p sexy_primes(10*1000)
b = Time.now
puts "#{(b-a)*1000} mils"

斯卡拉:

def isPrime(n: Int) =
  (2 until n) forall { n % _ != 0 }

def sexyPrimes(n: Int) = 
  (11 to n) map { i => List(i-6, i) } filter { _ forall(isPrime(_)) }

val a = System.currentTimeMillis()
println(sexyPrimes(100*1000))
val b = System.currentTimeMillis()
println((b-a).toString + " mils")

Scala优化is-prime?(与Clojure优化相同的想法):

import scala.annotation.tailrec

@tailrec // Not required, but will warn if optimization doesn't work
def isPrime(n: Int, i: Int = 2): Boolean = 
  if (i == n) true 
  else if (n % i != 0) isPrime(n, i + 1)
  else false

Clojure的:

(defn is-prime? [n]
  (every? #(> (mod n %) 0)
    (range 2 n)))

(defn sexy-primes [m]
  (for [x (range 11 (inc m))
        :let [z (list (- x 6) x)]
        :when (every? #(is-prime? %) z)]
      z))

(let [a (System/currentTimeMillis)]
  (println (sexy-primes (* 10 1000)))
  (let [b (System/currentTimeMillis)]
    (println (- b a) "mils")))

Clojure优化is-prime?

(defn ^:static is-prime? [^long n]
  (loop [i (long 2)] 
    (if (= (rem n i) 0)
      false
      (if (>= (inc i) n) true (recur (inc i))))))

蟒蛇

import time as time_

def is_prime(n):
  return all((n%j > 0) for j in xrange(2, n))

def primes_below(x):
  return [[j-6, j] for j in xrange(9, x+1) if is_prime(j) and is_prime(j-6)]

a = int(round(time_.time() * 1000))
print(primes_below(10*1000))
b = int(round(time_.time() * 1000))
print(str((b-a)) + " mils")

因子

MEMO:: prime? ( n -- ? )
n 1 - 2 [a,b] [ n swap mod 0 > ] all? ;

MEMO: sexyprimes ( n n -- r r )
[a,b] [ prime? ] filter [ 6 + ] map [ prime? ] filter dup [ 6 - ] map ;

5 10 1000 * sexyprimes . .

巴什(zsh中):

#!/usr/bin/zsh
function prime {
  for (( i = 2; i < $1; i++ )); do
    if [[ $[$1%i] == 0 ]]; then
      echo 1
      exit
    fi
  done
  echo 0
}

function sexy-primes {
  for (( i = 9; i <= $1; i++ )); do
    j=$[i-6]
    if [[ $(prime $i) == 0 && $(prime $j) == 0 ]]; then
      echo $j $i
    fi
  done
}

sexy-primes 10000

问题

  1. 为什么Scala如此之快? 是因为静态打字吗? 或者它只是非常有效地使用JVM?
  2. 为什么Ruby和Python之间存在如此巨大的差异? 我认为这两者并没有多少完全不同。 也许我的代码错了。 请赐教! 谢谢。 UPD是的,这是我的代码中的错误。 Python和Ruby 1.9非常相同。
  3. Ruby版本之间的生产力真正令人印象深刻。
  4. 我可以通过添加类型声明来优化Clojure代码吗? 会有帮助吗?
trans by 2019-08-27T16:15:20Z

在Clojure中有一种简单的方法来转换列表类型?

当我想要一个向量时,我经常发现自己使用了一个惰性列表,反之亦然。 此外,有时我有一个地图矢量,当我真的想要一组地图时。 是否有任何辅助函数可以帮助我在这些类型之间进行转换?

trans by 2019-08-27T08:32:19Z

如何在Cloju中将惰性序列转换为非惰性序列

我在Clojure中尝试了以下内容,期望返回一个非惰性序列的类:

(.getClass (doall (take 3 (repeatedly rand))))

但是,这仍然返回clojure.lang.LazySeq.我的猜测是doall确实评估整个序列,但返回原始序列,因为它仍然可用于记忆。

那么从懒惰中创建非懒惰序列的惯用手段是什么?

trans by 2019-08-24T10:34:37Z

1 2 3 4 下一页 共4页