小编Ima*_*ist的帖子

Python中没有Multiline Lambda:为什么不呢?

我听说它说多行lambda不能在Python中添加,因为它们会在语法上与Python中的其他语法结构发生冲突.我今天在公共汽车上考虑这个问题,并意识到我想不出多线lambdas碰撞的单个Python构造.鉴于我非常了解这门语言,这让我感到惊讶.

现在,我确定Guido有理由不在语言中包含多行lambdas,但是出于好奇:包含多行lambda的情况会有多么模糊?我听到的是真的,还是有其他原因使Python不允许多行lambda?

python syntax lambda

299
推荐指数
11
解决办法
15万
查看次数

`if __name__ =='__ main __'`相当于Ruby

我是Ruby的新手.我想从包含我想要继续单独使用的工具的模块导入函数.在Python中我会这样做:

def a():
    ...
def b():
    ...
if __name__ == '__main__':
    a()
    b()
Run Code Online (Sandbox Code Playgroud)

这允许我运行程序或将其作为模块导入以使用a()和/或b()单独使用.Ruby中的等效范例是什么?

ruby python program-entry-point

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

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

为什么以null结尾的字符串?或者:以空值终止与字符+长度存储

我正在用C编写语言解释器,我的string类型包含一个length属性,如下所示:

struct String
{
    char* characters;
    size_t length;
};
Run Code Online (Sandbox Code Playgroud)

因此,我必须花费大量时间在我的解释器中手动处理这种字符串,因为C不包含对它的内置支持.我考虑过切换到简单的以null结尾的字符串只是为了符合底层C,但似乎有很多理由不:

如果使用"length"而不是查找null,则内置边界检查.

您必须遍历整个字符串才能找到它的长度.

你必须做额外的事情来处理以null结尾的字符串中间的空字符.

以空值终止的字符串与Unicode处理不佳.

非空终止字符串可以实习更多,即"Hello,world"和"Hello"的字符可以存储在同一个地方,只是具有不同的长度.使用以null结尾的字符串无法做到这一点.

字符串切片(注意:字符串在我的语言中是不可变的).显然,第二较慢(和更容易出错:考虑增加的错误检查beginend对两种功能).

struct String slice(struct String in, size_t begin, size_t end)
{
    struct String out;
    out.characters = in.characters + begin;
    out.length = end - begin;

    return out;
}

char* slice(char* in, size_t begin, size_t end)
{
    char* out = malloc(end - begin + 1);

    for(int i = 0; i < end - begin; i++)
        out[i] = in[i + …
Run Code Online (Sandbox Code Playgroud)

c string algorithm performance null-terminated

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

在LLVM上引导语言

我在LLVM之上引导编程语言编译器.目前我大部分时间都在为自编译的C子集编写编译器.当我完成这项工作后,我将从C语言中引导我的语言,保持自我编译.

由于编译器是自编译的,我使用的C的任何功能都必须实现.所以它是一个恒定的平衡:如果我使用太多的功能,我将不得不实现比我想要的更多,但如果我没有实现足够的功能,将很难编写代码.

一个这样的功能是LLVM绑定.在没有LLVM C绑定的情况下生成LLVM中间表示很困难.但是,如果我使用LLVM绑定,当我从C分支时,我必须再次实现它们.

我在这里遇到了一些困难,所以我一直在寻找其他解决方案.有任何想法吗?

c bootstrapping llvm

24
推荐指数
2
解决办法
3308
查看次数

可以用盐水储存盐吗?

我的理解是盐不是秘密的,它只是意图与任何集中标准不同,所以你不能开发彩虹表或类似的攻击来打破使用该算法的所有哈希值,因为盐分断裂彩虹桌.我在这里的理解可能不完全正确,所以如果我错了,请纠正我.

在一个广泛使用的开源软件中,盐会广为人知,这会让你受到攻击,因为现在他们可以简单地攻击哈希的盐渍版本并创建包含盐数据的彩虹表.

我认为,有两种方法可以解决这个问题.首先是使用每个新版本的软件更改salt,但这并不好,因为该软件的新版本将无法再针对旧密码哈希进行测试.

我想到的第二个解决方案是存储每个密码的盐; 换句话说,每个密码都有不同的盐.缺点是盐必须以某种方式与密码哈希相关联,可能只是将它们紧紧地放在数据库中的密码旁边.甚至可以使用用户名(但可能不会,用户名可能太短).

我的问题是,这可以接受吗?直接使用哈希密码存储盐有任何额外的风险吗?在我看来,在源代码中存储salt没有什么不同,因此通过使用密码存储salt不会造成安全性损失.

免责声明:我没有将它用于任何现实生活中的安全系统.事实上,我从未设计过任何类型的密码系统.我只是对自己的安全问题进行了模糊的教育.

security hash salt

23
推荐指数
2
解决办法
6222
查看次数

C/C++中的固定宽度浮点数

int通常是32位,但在标准中,int并不保证具有恒定的宽度.因此,如果我们想要32位,int我们包括stdint.h并使用int32_t.

对于花车有没有相同的东西?我意识到浮点数有点复杂,因为它们不是以同类方式存储的,即符号,指数,有效数.我只想要一个double保证以64位存储1个符号位,10位指数和52/53位有效位(取决于你是否计算隐藏位).

c c++ floating-point double

21
推荐指数
2
解决办法
8240
查看次数

为什么主机中止连接?

我正在自学Python网络,我回想起当我自学线程时,我遇到了这个页面,所以我复制了脚本,为Python 3.1.1更新了它们并运行它们.他们工作得很好.

然后我做了一些修改.我的目标是做一些简单的事情:

  1. 客户端挑选一个整数并将其发送到服务器.
  2. 服务器接收pickle整数,取消它,将其加倍,然后将其pickle并将其发送回客户端.
  3. 客户端接收pickle(和doubled)整数,取消它并输出它.

这是服务器:

import pickle
import socket
import threading

class ClientThread(threading.Thread):
    def __init__(self, channel, details):
        self.channel = channel
        self.details = details
        threading.Thread.__init__ ( self )

    def run(self):
        print('Received connection:', self.details[0])
        request = self.channel.recv(1024)
        response = pickle.dumps(pickle.loads(request) * 2)
        self.channel.send(response)
        self.channel.close()
        print('Closed connection:', self.details [ 0 ])

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('', 2727))
server.listen(5)

while True:
    channel, details = server.accept()
    ClientThread(channel, details).start()
Run Code Online (Sandbox Code Playgroud)

这是客户:

import pickle
import socket
import threading

class ConnectionThread(threading.Thread):
    def run(self):
        client = …
Run Code Online (Sandbox Code Playgroud)

python networking

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

关于不变性影响的经验数据?

今天在课堂上,我的教授正在讨论如何组建课程.该课程主要使用Java,我拥有比老师更多的Java经验(他来自C++背景),所以我提到在Java中应该支持不变性.我的教授让我证明我的答案是正确的,我给出了我从Java社区听到的理由:

  1. 安全性(特别是带螺纹)
  2. 减少对象数量
  3. 允许某些优化(特别是对于垃圾收集器)

教授对我的发言提出质疑,他说他希望看到对这些好处的一些统计测量.我引用了大量轶事证据,但即便在我这样做的时候,我也意识到他是对的:据我所知,还没有一项关于不变性是否真正提供它在实际代码中所承诺的好处的实证研究.我知道它来自经验,但其他人的经历可能有所不同.

那么,我的问题是,是否有关于不变性在现实世界代码中的影响的任何统计研究?

java immutability

16
推荐指数
1
解决办法
472
查看次数

为什么弱指针有用?

我一直在阅读垃圾收集,寻找包含在我的编程语言中的功能,我遇到了"弱指针".从这里:

弱指针就像指针一样,除了弱指针的引用不会阻止垃圾收集,弱指针必须在使用之前检查它们的有效性.

弱指针与垃圾收集器交互,因为它们引用的内存实际上可能仍然有效,但包含的对象与创建弱指针时的对象不同.因此,每当垃圾收集器回收内存时,它必须检查是否有任何引用它的弱指针,并将它们标记为无效(这不需要以这种天真的方式实现).

我以前从未听说过弱指针.我想支持我的语言中的许多功能,但在这种情况下,我不能为我的生活想到这将是有用的情况.对于什么会使用弱指针?

garbage-collection pointers weak-references

15
推荐指数
3
解决办法
5829
查看次数