没有很多Go代码可以从中学习语言,我确信我不是唯一一个尝试使用它的人.所以,如果您发现了有关该语言的有趣内容,请在此处发布示例.
我也在找
问题似乎已经解决,甚至被打死.聪明的人在这个问题上说过聪明的话.要成为一名优秀的程序员,您需要了解C语言.
或者你呢?
本周我开悟了两次.第一个让我意识到我的假设并不比我背后的知识更进一步,并且考虑到我的机器上运行的软件的复杂性,这几乎是不存在的.但真正开车回家的是Slashdot评论:
最终的结果是,我注意到传统C"裸机"程序员认为实现更高级语言的许多天真的方式.他们在他们影响的项目中做出错误的"优化"决策,因为他们不知道编译器是如何工作的,或者他们理解的天真宏汇编程序模型与良好的运行时系统有多么不同.
然后它击中了我:C只是一个抽象,就像所有其他人一样.即使是CPU本身也只是一种抽象!我从来没有看到它破裂,因为我没有测量它的工具.
我糊涂了.像Dijkstra谈到BASIC一样,我的思想是否已经被肢解,无法恢复?我是否处于不成熟的过早优化状态?对我来说有希望,现在我意识到我什么都不知道吗?有什么需要知道的吗?为什么它如此迷人,我在过去五年写的所有内容都可能是根本错误的?
总结一下:知道更多API文档告诉我的是否有任何价值?
编辑:制作CW.当然这也意味着你现在必须更好地发布解释器/运行时优化的例子:)
我隐约记得几年前读过这篇文章,但我在网上找不到任何参考.
你能给我一个NULL宏没有扩展到0的例子吗?
编辑清晰:今天,它扩展为((void *)0)
,(0)
或(0L)
.但是,有些架构早已被遗忘,而这种情况并非如此,并且NULL扩展到了不同的地址.就像是
#ifdef UNIVAC
#define NULL (0xffff)
#endif
Run Code Online (Sandbox Code Playgroud)
我正在寻找这样一台机器的例子.
更新以解决问题:
我不是在现行标准的背景下提出这个问题,也不是用不正确的术语来扰乱人们.但是,我接受的答案证实了我的假设:
后来的模型使用了[blah],显然是对所有现存的写得不好的C代码的反应,这些代码做出了错误的假设.
有关当前标准中的空指针的讨论,请参阅此问题.
Gentoo Wiki告诉我以下内容:
警告:GCC 4.2及以上版本支持-march = native.-march = native应用超出-march的其他设置,特定于CPU.除非您有特殊原因(例如,distcc交叉编译),否则您应该使用-march = native,而不是下面列出的任何内容.
那些额外的设置是什么?
我正在尝试为Go编写一个GNU风格的命令行解析器,因为该flags
包还没有处理所有这些:
program -aAtGc --long-option-1 argument-to-1 --long-option-2 -- real-argument
Run Code Online (Sandbox Code Playgroud)
显然,我不想使用flags
包,因为我正在尝试更换它.有没有其他方法可以进入命令行?
在我的新工作中,我们出售进口的东西.为了能够出售所述物品,目前每件货物都需要进行以下操作:
=B2*550
我想Monkey
尽可能地从自己变成软件.我以前从未写过任何与电子邮件,Excel,数据库或短信接口的东西,但我很乐意学习它是否能让我免于此.
这是我没有受过教育的心愿单:
这一切都可行吗?如果是,我在哪里开始阅读?你会如何改进它?您认为哪种语言/框架对此非常理想?你会对老板做些什么?
再一次,我发现自己有一套破碎的假设.通过修改经验证的最优算法来考虑虚拟内存,文章本身的性能提升了10倍:
在一个现代多发出CPU上,以几千兆赫的时钟频率运行,最坏情况下每个VM页面故障损失近1000万条指令.如果您使用旋转磁盘运行,则该数字更像是1亿条指令.
如果这些操作导致页面错误和磁盘操作速度慢,那么O(log2(n))算法有什么用呢?对于大多数相关数据集,O(n)或甚至O(n ^ 2)算法可避免页面错误,它将围绕它运行圆圈.
周围有更多这样的算法吗?我们是否应该重新审视我们教育的所有基本组成部分?在编写自己的文章时还需要注意什么?
澄清:
所讨论的算法并不比经过验证的最佳算法快,因为Big-O符号存在缺陷或无意义.它更快,因为经过验证的最优算法依赖于在现代硬件/操作系统中不正确的假设,即所有内存访问都是相同且可互换的.
我在Data.Unique中注意到了这个习语:
uniqSource :: TVar Integer
uniqSource = unsafePerformIO (newTVarIO 0)
{-# NOINLINE uniqSource #-}
Run Code Online (Sandbox Code Playgroud)
保证只运行一次吗?
我最近将我的Qt项目从Linux迁移到Vista,现在我盲目地调试信号.
在Linux上,如果QObject :: connect()在调试版本中失败,我会在stderr上收到警告消息.在Windows上,GUI应用程序没有控制台输出,只有OutputDebugString调用.
我已经安装了DebugView,它很好地捕获了我自己的qDebug()输出,但仍然没有警告失败的信号.
一种可能的解决方案是使用QtCreator的自动完成信号,但我喜欢Eclipse,并且使用两者都是PITA.有关如何在运行时获取信号/插槽信息的任何想法?
编辑:我刚刚实现connect()返回bool,它解决了直接的问题,可能是丑陋的.但是,这并不能解决QMetaObject :: connectSlotsByName()失败的情况,而且这个小部件会自动运行.
请考虑以下代码:
class Foo {
// boring parts omitted
private TcpClient socket;
public void Connect(){
socket.BeginConnect(Host, Port, new AsyncCallback(cbConnect), quux);
}
private void cbConnect(IAsyncResult result){
// blah
}
}
Run Code Online (Sandbox Code Playgroud)
如果socket
在BeginConnect
返回之后抛出异常并且在cbConnect
调用之前抛出异常,它会在哪里弹出?甚至允许扔在后台?