似乎最近对STM(软件事务内存)框架和语言扩展的兴趣日益增加. 特别是Clojure有一个很好的实现,它使用MVCC(多版本并发控制)而不是滚动提交日志.GHC Haskell也有一个非常优雅的STM monad,它也允许交易组成.最后,为了给自己的号角做一点点,我最近为Scala实现了一个静态强制引用限制的STM框架.
所有这些都是有趣的实验,但它们似乎仅限于那个领域(实验).所以我的问题是:你们有没有在现实世界中看到过或使用过STM?如果是这样,为什么?它带来了什么样的好处?性能怎么样?(关于这一点似乎存在大量相互矛盾的信息)你会再次使用STM还是更喜欢使用像actor这样的其他并发抽象?
我一直在给新的Log4j2.从迁移文档中可以看出,XML Schema/DTD规范已被废除.
这似乎是倒退一步.当然应该可以将XML Schema或DTD与我联系起来,log4j2.xml
以协助编写和验证.我无法在文档中找到任何有用的东西,也没有找到XML Schema或DTD本身.
那么:在Log4j2中,我应该如何将XML Schema与log4j2.xml
?
我试图找到Clojure所谓的STM和Haskell中实现的STM之间的差异.除了实际的语言语义差异外,我有点困惑,因为Rich Hickey在演讲中说Clojure的STM实现与其他任何东西都有很大不同,但我不理解除语言选择之外的差异.
haskell language-comparisons transactional-memory clojure stm
在我的一个实体中,我有一个被称为受保护的属性insert_date
,它是一个日期时间.
当我之后提取数据时,我没有将日期作为字符串,我得到一个对象.我的var转储:
<pre class='xdebug-var-dump' dir='ltr'> <b>object</b>(<i>DateTime</i>)[<i>1560</i>] <i>public</i> 'date' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'2011-08-26 12:40:29'</font> <i>(length=19)</i> <i>public</i> 'timezone_type' <font color='#888a85'>=></font> <small>int</small> <font color='#4e9a06'>3</font> <i>public</i> 'timezone' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'Europe/London'</font> <i>(length=13)</i> </pre><pre class='xdebug-var-dump' dir='ltr'> <b>object</b>(<i>DateTime</i>)[<i>1571</i>] <i>public</i> 'date' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'2011-08-26 12:40:29'</font> <i>(length=19)</i> <i>public</i> 'timezone_type' <font color='#888a85'>=></font> <small>int</small> <font color='#4e9a06'>3</font> <i>public</i> 'timezone' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'Europe/London'</font> <i>(length=13)</i>
Run Code Online (Sandbox Code Playgroud)
我试过了:
foreach($dateObj as $date) {
}
Run Code Online (Sandbox Code Playgroud)
但是它没有提取......我如何从这个对象中获取日期属性?即使$insert_date->date
不起作用.
我希望能够在vim中阅读手册页.由于某种原因,似乎vim无法通过管道读取程序的输出(即'(man ls)| vi'似乎不起作用,奖励指向可以解释原因的人),并获得围绕这个,我一直在使用以下小脚本:
tempo = `mktemp`
man $1 > $tempo ; vi $tempo
Run Code Online (Sandbox Code Playgroud)
这个脚本使用的临时文件,我觉得工作正常,但我想知道是否有一个很好的方法来阅读vim中的手册页而不需要制作临时文件
许多插件使他们的公共映射界面可以通过<Plug>
地图访问.然后,用户可以将这些映射用作他们自己映射的钩子,例如:nmap <Leader>fu <Plug>fooPluginUnlinkRootDir
.
最近我遇到了一些将地图名称放在括号中的插件,例如
<Plug>(textobj-indent-a)
在textobj-indent插件中,<Plug>(LineJugglerBlankUp)
在LineJuggler插件中.此语法未在帮助文件中的任何位置记录,也不会使用任何捆绑的Vim运行时文件.不过,这些插件可以很好地完成它们的工作.
括号的动机是什么?使用它们有什么好处吗?是否应该鼓励插件作者遵循这种做法(作为最佳实践)?
创建嵌套的dosync调用时会发生什么?子事务是否会在父范围内完成?如果父事务失败,这些子事务是否可逆?
据我所知,实现软件事务内存有几种不同的算法(这是一个非常活跃的研究领域).我在哪里可以找到(不必深入研究源代码)在不同语言和库中使用,特别是在Clojure和Haskell(GHC)中?
当我在Clojure中学习传感器时,它突然让我想起了他们提醒我的:Java 8流!
甲流是不是一个数据结构,用于存储内容; 相反,它通过计算操作管道传递来自诸如数据结构,数组,生成器函数或I/O通道的源的元素.
Clojure的:
(def xf
(comp
(filter odd?)
(map inc)
(take 5)))
(println
(transduce xf + (range 100))) ; => 30
(println
(into [] xf (range 100))) ; => [2 4 6 8 10]
Run Code Online (Sandbox Code Playgroud)
Java的:
// Purposely using Function and boxed primitive streams (instead of
// UnaryOperator<LongStream>) in order to keep it general.
Function<Stream<Long>, Stream<Long>> xf =
s -> s.filter(n -> n % 2L == 1L)
.map(n -> n + 1L)
.limit(5L);
System.out.println(
xf.apply(LongStream.range(0L, …
Run Code Online (Sandbox Code Playgroud) clojure ×6
stm ×5
haskell ×3
java ×2
vim ×2
concurrency ×1
datetime ×1
doctrine ×1
doctrine-orm ×1
java-8 ×1
java-stream ×1
linux ×1
log4j ×1
log4j2 ×1
manpage ×1
php ×1
scala ×1
transducer ×1
unix ×1
vi ×1
vim-plugin ×1