标签: theory

引导编译器:为什么?

我理解一种语言是如何自我引导的,但是我还没有找到很多关于为什么要考虑引导的参考.

直观的答案是您正在编写的语言提供了编译器的"基础"语言中找不到的实用程序,并且语言的功能相对非常适合编译器.

例如,引导C++编译器是有意义的 - 在正确使用OOP时,维护编译器可能要容易得多,而不是使用普通的C语言.

另一方面,MATLAB确实使矩阵数学比普通C容易得多,但我在MATLAB中编写MATLAB编译器/解释器时看不出任何明显的好处 - 看起来它的可维护性会降低.类似的视图可以应用于R编程语言.或者一个非常极端的例子是引导Whitespace,它是用Haskell编写的 - 绝对是一个巨大的超级空白集.

引导的唯一原因是利用新语言的功能吗?我知道还有"因为我们可以"的理由,但那不是我想要的:)

theory compiler-construction bootstrapping

30
推荐指数
5
解决办法
9838
查看次数

为什么使用两步方法使用REST删除多个项目

我们都知道通过REST删除单个项目的"标准"方法是向URI发送单个DELETE请求example.com/Items/666.盛大,让我们马上删除很多.因为我们不需要原子删除(或真正的交易,即全部或全部),我们可以告诉客户"运气不好,提出许多请求",但这不是很好.因此,我们需要一种方法来允许客户端请求立即删除许多"项目".

根据我的理解,这个问题的"典型"解决方案是"两步"方法.首先,客户端POST一个项目ID列表,并返回一个URI,如example.com/Items/Collection/1.创建该集合后,它们会调用DELETE.

现在,我看到这很好用,除了我,这是一个糟糕的解决方案.首先,您强制客户端发出两个容纳服务器的请求.其次,'我以为DELETE应该删除一个Item?',不应该在这个URI上调用DELETE有效地取消事务(虽然它不是真正的事务),我们怎么会取消它?真的会更好,如果有某种形式的"执行"的行动,但我不能捣乱很大.它还强制服务器必须考虑'POSTed的JSON看起来更像是修改这些Item的请求,但请求是DELETE ...所以我想我会删除它们'.这种方法也开始在客户端/服务器上强加一种状态,而不是我承认的真实状态,但它有点像.

在我看来,更好的解决方案是简单地调用DELETE example.com/Items(或者可能example.com/Items/Collection暗示这是多次删除)并传递包含您要删除的ID列表的JSON数据.据我所知,这基本上解决了第一种方法的所有问题.它更容易用作客户端,减少服务器必须完成的工作,真正无状态,更具语义性.

我真的很感激这方面的反馈,我错过了一些关于REST的东西,这使得我对这个问题的解决方案不切实际吗?我还希望链接到文章,特别是如果他们比较这两种方法; 我知道这通常不被批准用于SO.我需要能够反驳说只有第一种方法才是真正的RESTfull,证明第二种方法是可行的解决方案.当然,如果我正在咆哮错误的树,请告诉我.

theory rest

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

有效地找到可变数量的字符串集的交集

我有一个可变数量的ArrayList,我需要找到它的交集.字符串数量的实际上限可能在35左右,但可能更多.我不想要任何代码,只需要有效的想法.我有一个实现,我即将开始编码,但想听听其他一些想法.

目前,只是考虑我的解决方案,看起来我应该有Θ(n 2)的渐近运行时间.

谢谢你的帮助!

tshred

编辑:为了澄清,我真的只是想知道是否有更快的方法来做到这一点.比Θ(n 2)快.

java theory big-o intersection set

29
推荐指数
4
解决办法
1万
查看次数

像tap一样的组合方法,但能够返回不同的值吗?

我正在经历一个试图避免临时变量和过度使用条件的阶段,我可以使用更流畅的编码风格.我非常喜欢#tap在我想要获得我需要返回的值的地方使用,但在我返回它之前先做一些事情.

def fluid_method
  something_complicated(a, b, c).tap do |obj|
    obj.update(:x => y)
  end
end
Run Code Online (Sandbox Code Playgroud)

比.程序:

def non_fluid_method
  obj = something_complicated(a, b, c)
  obj.update(:x => y)
  obj # <= I don't like this, if it's avoidable
end
Run Code Online (Sandbox Code Playgroud)

显然上面的例子很简单,但这仍然是ruby社区中非常常见的编码风格.我有时会使用#inject一系列过滤器传递一个对象:

things.inject(whatever) do |obj, thing|
  thing.filter(obj)
end
Run Code Online (Sandbox Code Playgroud)

比.程序:

obj = whatever
things.each do |thing|
  obj = thing.filter(obj)
end
obj
Run Code Online (Sandbox Code Playgroud)

现在我正面临着如下条件的重复使用,并寻找一种更流畅的方法来处理它:

def not_nice_method
  obj = something_complex(a, b, c)
  if a_predicate_check?
    obj.one_more_method_call
  else
    obj
  end
end
Run Code Online (Sandbox Code Playgroud)

(稍微)更清洁的解决方案是以复制为代价避免临时变量:

def not_nice_method
  if a_predicate_check?
    something_complex(a, b, …
Run Code Online (Sandbox Code Playgroud)

ruby theory combinators

29
推荐指数
3
解决办法
3833
查看次数

有人对OLAP Internals有所了解吗?

我对数据库内部有一点了解.我之前实际上已经实现了一个小而简单的关系数据库引擎,使用磁盘上的ISAM结构和BTree索引以及所有类似的东西.这很有趣,也很有教育意义.我知道我更加认识到仔细设计数据库模式和编写查询,因为我对RDBMS如何工作有了更多了解.

但我对多维OLAP数据模型一无所知,而且我很难在互联网上找到任何有用的信息.

如何将信息存储在磁盘上?多维数据集包含哪些数据结构?如果MOLAP模型不使用表,列和记录,那么......什么?特别是在高维数据中,哪种数据结构使MOLAP模型如此高效?MOLAP实现是否使用类似于RDBMS索引的东西?

为什么OLAP服务器在处理即席查询时要好得多?可以在OLTP多维数据集中以毫秒为单位处理在普通关系数据库中可能需要数小时处理的相同类型的聚合.该模型的基本机制是什么使这成为可能?

theory algorithm olap cubes data-structures

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

异步等待性能?

(只是一个理论问题 - 对于非gui应用程序)

假设我有很多这样的代码awaits:

public async Task<T> ConsumeAsync()
    {
          await A();
          await b();
          await c();
          await d();
          //..
    }
Run Code Online (Sandbox Code Playgroud)

每项任务可能需要很短的时间,

问题(再次,理论)

可能是 其中的一个情况总体时间处理所有那些"释放回线",在这里"获取线程回"(红色和绿色:)

在此输入图像描述

花费的时间比单个线程花费更多的时间,可以通过少量延迟完成所有工作,

我的意思是,我想成为最富有成效的人,但相反,因为所有这些来回切换 - 我实际上失去了生产力.

这种情况会发生吗?

c# theory performance async-await

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

窗口在Javascript中真的是全局的吗?

在浏览器中使用这段Javascript:

<script>

console.log(window.someThing);
var x = 12;

function foo() {
   window.otherThing = x;
}

</script>
Run Code Online (Sandbox Code Playgroud)

foo我们可以访问的内部window,我们都知道,但为什么呢?

  • 它是某种特殊的全局变量吗?
  • 或者"根作用域"(在script标记内)是否将它作为隐式局部变量,它是否只是"闭包继承",因为任何其他局部变量(x如上所述)都可以?

那么如何与在script标签内直接声明的变量一致,将其设置为window?的属性?(或者不是这样吗?)

<script>
var x = 12;
function() {
   console.log(window.x);
}
</script>
Run Code Online (Sandbox Code Playgroud)

javascript theory closures scope

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

什么是C++中的标量对象?

据我所知,基本类型是Scalar和Arrays是聚合的,但是用户定义的类型呢?我将以什么标准将它们分为两类?

struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;
Run Code Online (Sandbox Code Playgroud)

c++ theory types

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

递归集合联合:它是如何工作的?

我目前正在下班后的空闲时间参加Coursera的Scala课程,试图最终尝试函数式编程.我目前正在进行一项任务,我们应该"计算"包含一些对象的两个集合的并集.我故意省略细节,因为这对我在这里要问的内容并不重要.然而,相关的是集合被定义为二叉树,每个节点包含一个元素和两个子树.

既然如此; union讲座中的例子如下:

def union(other:BTSet) :BTSet = ((left union right) union other) incl element
Run Code Online (Sandbox Code Playgroud)

问题1:坦率地说,即使在阅读了相关的FAQ和其他论坛帖子之后,我仍然不明白这个功能的工作原理和原因.除了incl在头节点添加(调用)元素之外,在union实现中绝对没有完成"动作" ,它只是一遍又一遍地调用自身.我会非常感谢一些解释......

问题2:课程论坛包含许多帖子,说明这个解决方案根本没有效率,而且还不够好.看到我不明白它是如何工作的我开始并不真正理解为什么它不够好.

请注意,我不以任何方式要求为分配解决方案提供扰流板.我更愿意"为年级做好工作",但我根本不明白我应该在这里做些什么.我不相信课程中提供的说明和指导足以让您了解函数式编程的怪癖,因此我欢迎任何有关如何正确思考而不是如何正确编码的评论/答案.

theory recursion functional-programming scala

26
推荐指数
2
解决办法
4627
查看次数

组成两个函数是什么意思?

Haskell Typeclassopedia 3.2节的练习5要求在声明中提供证据或反例

两个Functors的组合也是一个Functor.

我一开始以为这是在讨论组合fmap由两个单独的a实例定义的方法Functor,但这并没有多大意义,因为就我所知,类型不会匹配.对于两种类型,f并且f',类型fmap将是fmap :: (a -> b) -> f a -> f bfmap :: (a -> b) -> f' a -> f' b,并且实际上看起来并不可组合.那么组成两个是什么意思Functors呢?

theory haskell functor

26
推荐指数
4
解决办法
3648
查看次数