请注意,这不是微软为了传播托管代码的概念而进入大气层的.NET CLR.大多数人都知道托管代码已存在很长时间,并且与火箭科学无关.
我想知道的是为什么计算机发展中运行时安全的概念来得太晚了.
我知道这就像问"为什么第一辆T型福特不带安全气囊和安全带?".尽管如此,这个问题的相关性仍然存在,因为保护已知的危险在人性中是很好的.例如,第一辆T-Ford的速度不够快,无法激发安全气囊的研究.它的速度不够快,人们常常做出致命的判断错误,以至于它会激励安全带成为许多国家的法律和标准.
在计算机进化中,它几乎是另一种方式.我们开始使用汇编程序,相当于以200英里每小时的速度驾驶T-Ford.我有幸与这个时代的几个老卡车司机交谈,听到这些关于手工组装汇编代码,人工调试器,格栅代码等的故事.如果我们在C中犯了一个非常讨厌的错误,我们可能会结束蓝屏.几十年前,你最终可能会损坏硬件而上帝知道什么.但这对我来说是一个谜 - 几十年来,我们所做的一切都是为了减少痛苦,因为蓝屏(很抱歉使用MS作为任何东西的原型).
保护免受已知危险的不仅仅是在人性中,在任何程序员的本性中,自动化和系统化常见设施也是如此,例如错误检查,内存诊断,日志框架,备份维护等.
为什么程序员/人类没有开始自动完成确保他们提供给系统的代码不会损害系统的任务?是的,当然,表现.但是,嘿,这是在任何严重渗透的硬件标准之前.为什么主板没有设计总线架构和额外的处理器来促进"托管代码"?
模特T福特是否有任何比喻不足以让我失踪?
我们在我们的应用程序中使用NSCache进行UIImages.这适用于小于7的iOS版本.当发生内存警告时,NSCache会按预期释放对象.但是,在iOS 7上,我们的应用程序在第一次内存警告后不久崩溃.因此,似乎从未发布与NSCache一起存储的对象,但缓存正在增长,直到应用程序崩溃.用仪器进行分析证实了这种怀疑.
是否有其他人遇到此问题,您是否找到了解决方法或已经跟踪错误?
看起来这些人有同样的问题:http://www.photosmithapp.com/index.php/2013/10/photosmith-3-0-2-photo-caching-and-ios-7/
我创建了一个小样本应用程序来说明问题.按下按钮时,将-(IBAction)fillCache:(id)sender调用该方法.从那时起,计时器-(void)addImageToCache:(id)sender每100毫秒调用一次.在此方法中,生成UIImage并将其写入缓存.
在带有iOS 7.0.3的iPad Mini及其512 MB内存中,它在约350次迭代后崩溃.
在具有iOS 5和512 MB内存的iPad 2上,它在某些时候也会崩溃,但仅在至少3000次迭代之后才会崩溃.仪器显示每次发生内存警告时,UIImage实例的数量会减少.在iOS 7上并非如此.
- (IBAction)fillCache:(id)sender
{
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(addImageToCache:) userInfo:nil repeats:YES];
}
- (void)addImageToCache:(id)sender
{
@autoreleasepool {
CGRect rect = CGRectMake(0, 0, 500, 500);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSString *poolKey = [NSString stringWithFormat:@"junk_%d", count++];
[self.cache setObject:image forKey:poolKey];
}
}
Run Code Online (Sandbox Code Playgroud) 我想参数化,需要在通用型工作的方法A为其中LabelledGeneric可以检索.这是天真的方法
case class Foo(bar: String, baz: Boolean)
def params[A](a: A) = {
val lbl = LabelledGeneric[A]
val keys = Keys[lbl.Repr].apply
...
}
val myThingy = params(Foo)
Run Code Online (Sandbox Code Playgroud)
当然,潜在的宏抱怨.它不够了解A:
类型A不是类或特征
所以,我试着LabelledGeneric推断
def params[A](a: A)(implicit lbl: LabelledGeneric[A]) = {
val keys = Keys[lbl.Repr].apply
...
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但Repr不再知道这种类型HList了
类型参数[lbl.Repr]不符合方法apply的类型参数bounds [L <:shapeless.HList]
好吧,让我们试着更精确
def params[A, Repr <: HList](a: A)(implicit lbl: LabelledGeneric.Aux[A, Repr]) = {
val keys = Keys[lbl.Repr].apply
...
}
Run Code Online (Sandbox Code Playgroud)
现在,Repr绝对是一个HList …
我正试图找一个能让我做Shamir的秘密分享的课程.
我在C#中找到了一个程序,允许你这样做,但它不提供源代码.我只是想知道是否有人有一个已经做我需要的课程.
在示例中
NSString *message = @"Hello";
message = @"World";
Run Code Online (Sandbox Code Playgroud)
如果消息只是一个指针,为什么我不需要明确说出消息中的任何内容现在等于*message = @"World";C中的字符串或类似?
我只想使用以下函数在视图中绘制一个简单的矩形:
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
if (self.drawTextBouble) {
[[UIColor blueColor] setFill];
UIBezierPath *aPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(40, 0, 230, 120) cornerRadius:12.0];
[aPath fill];
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码用纯黑色背景填充视图,矩形外面不透明.我怎样才能解决这个问题?
编辑:
下面的解决方案正在运行,但这也有效:
[self setOpaque:NO];
Run Code Online (Sandbox Code Playgroud) 我有这种情况(剥离到必要部分)
class Foo[L <: HList](columns: L) {
class toRecord(row: Row) extends Poly1 {
implicit def caseColumn[T] = at[Column[T]] { /* map to a record field */ }
}
def asRecord = {
val resultSet: Stream[Row] = // computation to get result set
resultSet.map { row =>
val m = new toRecord(row) // this can't work
columns.map(m)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为map想要一个稳定的标识符,m而不是.所以我需要Poly1 singleton objects在结果集中有多少行.
这是与此处讨论的问题相同的问题:https://groups.google.com/forum/#!topic /shapeless-dev/P5DXRgnzqkY,但我无法找到使其工作的方法.
在链接的讨论中,Miles Sabin提出了folda Poly2而不是a …
当使用以下语法定义启用柯里化的函数时:
def sum(x: Int)(y: Int)(z: Int) = x + y + z
Run Code Online (Sandbox Code Playgroud)
仍然需要在任何对柯里化调用的调用后加上sumwith 的后缀_:
sum _
sum(3) _
sum(3)(2) _
Run Code Online (Sandbox Code Playgroud)
否则编译器会抱怨。
所以我采取了:
val sum = (x: Int) => (y: Int) => (z: Int) => x + y + z
Run Code Online (Sandbox Code Playgroud)
无需_.
现在的问题是:为什么需要多参数列表版本_才能启动柯里化?为什么这两个版本的语义在所有上下文中都不相同?
另外,后一个版本是否会受到某种阻碍?它有任何警告吗?
考虑:
trait Validation {
def isValid(str: String): Boolean
}
class AlwaysValid extends Validation {
override def isValid(_: String) = true
}
Run Code Online (Sandbox Code Playgroud)
产量
<console>:1: error: identifier expected but '_' found.
override def isValid(_: String) = true
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?或者这只是语言设计师遗漏的东西?
也许这是关于命名参数传递但这只适用于非覆盖,因为覆盖自动"继承"来自重写方法的参数名称,所以这不可能是:
trait Foo {
def bar(arg0: String): String
}
class Baz extends Foo {
override def bar(blabla: String) = "hello"
}
new Baz().bar(arg0 = "world") // works, even though the arg name is blabla in Baz
Run Code Online (Sandbox Code Playgroud)
此外: _允许在lambda中,甚至多次:
scala> val x: Int => …Run Code Online (Sandbox Code Playgroud) 看代码,
case class Wrapped[A](elem: A)(implicit ordering: Ordering[A])
extends Ordered[Wrapped[A]] {
def compare(that: Wrapped[A]): Int = ordering.compare(this.elem, that.elem)
}
Run Code Online (Sandbox Code Playgroud)
我在case class这里定义一个.
然后打电话
Wrapped(1,2,2,4).
令我惊讶的是,即使Wrapped(1,2,3,4,5)(任意数量的参数)也能正常工作而不会编译错误.