r*********r 发帖数: 3195 | 1 the visiting programmer 有找master foo 这闲工夫,
不如把 unix command 的源程序都看一遍。
像什么 find, xargs, sort之类的,解释起来很费劲。
很多书费了半天劲,举了若干垃圾例子,还是讲不清楚。
源代码看一下其实很简单。 |
|
F*********k 发帖数: 42 | 2 各位大牛。。
我在看Andrei Alexandrescu的那本 Modern c++ design 的书,有个问题不是很明白,
不知哪位大牛看过给我解答一下。。。
书的第四章 Small-Object Allocation 里边,他设计的程序是不是存在这样一个隐患?
如果次序是这样的话:
allocate obj _aa, _bb, _cc;
deallocate _cc;
deallocate _aa;
new allocation request; // 根据他的code他会使用last deallocate的location,
// 就是 _aa
another new allocation requrest; // 根据他的code,他会使用_aa的下一个 memory
// block,那不是_bb么?我_bb没有
// deallocate啊,这不是overwrite了么?
他给出了书里边... 阅读全帖 |
|
x****u 发帖数: 44466 | 3 你确定java可以动态改代码?
字节码里面已经没有源程序了,你改什么啊。 |
|
c*****m 发帖数: 1160 | 4 子曰:「名不正,則言不順;言不順則事不成」。
《Code Complete》这本书不断督促程序员要给程序的各个地方取个好的准确的名字:
不管是Calss名字,函数名字,还是变量名字,都要精准地表达它所代表的类、函数、
变量。书里提到一点:一个程序所提供的函数接口,如果读者不能理解怎么使用,那么
那个程序应该返工。
以前我初学编程的时候,连源程序本身的长度都要追求节省;用磁带来保存,每个字节
都很珍贵。所以最常用的变量是a、b、c、i、j、k,担心用长变量浪费空间;况且那时
候Basic限制变量名不能长于8个字节,用“有意义的变量名”是一件很奢侈的事情。星
移斗转,现在存储空间已经不成问题,变量名长度已经没有限制(65535字节, last
time I checked),甚至你可以用中文作为变量名。以前追求程序跑得快,现在追求程
序读得快、易维护。把程序写得好看,即使你自己得了失忆症也能很快上手。
Always code as if the person who will maintain your code is a maniac
serial killer that kno... 阅读全帖 |
|
c*********e 发帖数: 16335 | 5 噢,你说的和我的这个帖子不相干。我只是参考一下人家的css,js源程序,不是整个插
件。 |
|
S*******s 发帖数: 13043 | 6 就是类似于visual C++里面资源文件的概念,可以在ide里编辑,又可以被程序直接(严
格的说不是直接,IDE做了一些工作)引用。
具体地说,在python写的程序里面要把一个xml文件发出去。现在的做法就是把这个文
件作为字符串常量写到程序里。
想把这个文件单独也放到project里,好处是可以用eclipse带的编辑器编辑管理。可是
怎么让python引用这个文件呢,能不能直接引用成字符串,就像在vc里调资源文件一样
,不用写程序打开文件读,有什么手段吗?。 |
|
|
|
S*******s 发帖数: 13043 | 9 你的回答看起来很轻松的样子,怎么追问一下就消失了? |
|
p**o 发帖数: 3409 | 10 没太看明白你要干什么,像是用的是自创的一套词汇描述一个奇怪的需求,槽都无从吐
起。 |
|
S*******s 发帖数: 13043 | 11 就是我要一个很长的字符串:
myXML="""
<##@$@ #@$@#$>
#@$@#$@#$@#@#$
<100000 characters>
"""
这么大的一个字符串弄到程序里太难看了,而且也不好编辑。比如这个字符串其实是一
个xml,可是弄到引号中间那些xml editor提供的功能就都使不上了。想把这个字符串存
成单独的一个文件,放在project里。那么怎么在程序中使用这个文件呢?当然最直接
的方法就是把它当普通文本文件来操作。有没有更漂亮点的方法? |
|
a*****e 发帖数: 1700 | 12 你有这样的感觉没错,Python 的这些概念都来源于 FP,事实上,从 Lisp 引入 GC 开
始,非常多的 FP 的特征,已经越来越普遍地进入到其它非 FP 的语言。
我想你要问的是,既然这样,为什么要学习 Haskell 或者 FP?
我给几个 Haskell 有,但是你在 python 里面学不到的东西吧:
1. Strong type system
duck typing 看似更灵活,但是实际上它只是一个 sum of all types,没办法保证
type safty。有时候更 general 不是好事情,反而是有限制,尤其是编译器能够通过
静态检查就能确保程序遵守了这些限制,更有益处。举个例子,很多语言都有 SQL 的
库可用,但有几个能够静态检查,确保所有发出的 SQL 查询都是合法的?再比如,一
个程序需要处理平衡二叉树,你能够通过静态检查就确保不会发生不平衡的情况出现吗
?这些只有强类型的 abstract datatype 才能做到。
如果你要进一步学习 type system,那么 LYAH 这本书是不够的,需要看一些程序语言
的教科书。
2. Monad
首... 阅读全帖 |
|
m*********t 发帖数: 527 | 13 我怎么听起来觉得你在举反例呢。。。。这个 case 里面编译器干的是多余(可能不安
全)的事情吧。
“编译器居然把所有的计
算(从 src image 读入数据,计算,写入 dst image)化简为直接向 dst image 写入
constant。
”
最终程序得到想要的结果呢还是不是?你觉得这个是好事?
3. Fusion
这个牵涉到编译器的技术,可能不是所有人感兴趣。不过那些认为高级语言,或者是抽
象层高的编程方式,肯定是没有效率的说法,可以休矣。
举个我今天遇到的例子,一个 image convolution 的 Haskell 程序,居然把 memory
bandwidth 耗尽,比 C 程序快了近十倍,然后 4 thread 和 1 thread 执行起来时间
是一样的,完全没有道理,让我同事很伤脑筋。后来经过分析机器码发现,是因为源程
序里用来测试的 image 也是写在程序里通过一个函数生成的,编译器居然把所有的计
算(从 src image 读入数据,计算,写入 dst image)化简为直接向 dst image 写入
constant。
虽然是个极端的例子,但... 阅读全帖 |
|
t*****n 发帖数: 4908 | 14 这方面,采取 immutable 的数据结构也会更适合 modern CPU,比如 cache-friendly
(sharing, no read/write barrier),比如 SIMD ,比如 thread 间数据的交换,可
以尽量避免 CAS 等。就连 Garbage Collection 也可以针对 cache 进行优化,而不需
要修改应用层面的东西。Scientific Computing 很多时候追求高效,结果把 C 或者
Fortran 的源程序调得乱糟糟,事后很难维护,长远来看是得不偿失的。
真能码字。不过计算远没有你想的那么差。只有低水平的编程者,没有生来就乱的语言
。高手写的fortran,远胜入门者写的fp。
Haskell
) |
|
a*****e 发帖数: 1700 | 15 你有这样的感觉没错,Python 的这些概念都来源于 FP,事实上,从 Lisp 引入 GC 开
始,非常多的 FP 的特征,已经越来越普遍地进入到其它非 FP 的语言。
我想你要问的是,既然这样,为什么要学习 Haskell 或者 FP?
我给几个 Haskell 有,但是你在 python 里面学不到的东西吧:
1. Strong type system
duck typing 看似更灵活,但是实际上它只是一个 sum of all types,没办法保证
type safty。有时候更 general 不是好事情,反而是有限制,尤其是编译器能够通过
静态检查就能确保程序遵守了这些限制,更有益处。举个例子,很多语言都有 SQL 的
库可用,但有几个能够静态检查,确保所有发出的 SQL 查询都是合法的?再比如,一
个程序需要处理平衡二叉树,你能够通过静态检查就确保不会发生不平衡的情况出现吗
?这些只有强类型的 abstract datatype 才能做到。
如果你要进一步学习 type system,那么 LYAH 这本书是不够的,需要看一些程序语言
的教科书。
2. Monad
首... 阅读全帖 |
|
m*********t 发帖数: 527 | 16 我怎么听起来觉得你在举反例呢。。。。这个 case 里面编译器干的是多余(可能不安
全)的事情吧。
“编译器居然把所有的计
算(从 src image 读入数据,计算,写入 dst image)化简为直接向 dst image 写入
constant。
”
最终程序得到想要的结果呢还是不是?你觉得这个是好事?
3. Fusion
这个牵涉到编译器的技术,可能不是所有人感兴趣。不过那些认为高级语言,或者是抽
象层高的编程方式,肯定是没有效率的说法,可以休矣。
举个我今天遇到的例子,一个 image convolution 的 Haskell 程序,居然把 memory
bandwidth 耗尽,比 C 程序快了近十倍,然后 4 thread 和 1 thread 执行起来时间
是一样的,完全没有道理,让我同事很伤脑筋。后来经过分析机器码发现,是因为源程
序里用来测试的 image 也是写在程序里通过一个函数生成的,编译器居然把所有的计
算(从 src image 读入数据,计算,写入 dst image)化简为直接向 dst image 写入
constant。
虽然是个极端的例子,但... 阅读全帖 |
|
t*****n 发帖数: 4908 | 17 这方面,采取 immutable 的数据结构也会更适合 modern CPU,比如 cache-friendly
(sharing, no read/write barrier),比如 SIMD ,比如 thread 间数据的交换,可
以尽量避免 CAS 等。就连 Garbage Collection 也可以针对 cache 进行优化,而不需
要修改应用层面的东西。Scientific Computing 很多时候追求高效,结果把 C 或者
Fortran 的源程序调得乱糟糟,事后很难维护,长远来看是得不偿失的。
真能码字。不过计算远没有你想的那么差。只有低水平的编程者,没有生来就乱的语言
。高手写的fortran,远胜入门者写的fp。
Haskell
) |
|
W*******e 发帖数: 1268 | 18 C的指针也很多,GCC的代码往下走几层到处都是指针函数互相调用,以前Borland和VC
开放的部件代码很多也是这样的。好像用指针函数和指针对象除了灵活以外,同时能有
效的减少obj文件大小。我读过一些牛人写的程序,编译后的目标代码比源程序还小。 |
|
a*****8 发帖数: 261 | 19 最近编译一个project, 发现几乎每个源程序的目录都有一个makefile,还好像是标准
。为什么搞这么复杂呢?以前不都是一个makefile吗?手写这么多makefile不麻烦吗?
谢谢 |
|
w*s 发帖数: 7227 | 20 网页打开都没问题,你点个checkbox,然后按submit,
后台就把用一个小程序把debug_level turn on.
如果uncheck,再submit, debug level就off。很简单的CGI。
但用上述的那个web security application来攻击我的网页,
很容易就把我的debug level改来改去。
我估计就是从网页的源程序看见有这个checkbox,然后模拟把check或者uncheck往web
server上送。
server分不清是不是用户从网页上click的,于是也傻呼呼地执行了。
当然是我傻。
但不知道怎么改。有劳大侠了。 |
|
o**2 发帖数: 168 | 21 这个范例展示的是FMP其中的一个feature: callFunction()。其实展示的内容和前两天
给出的代码片断是一样的,不过这里的是完整的、大家可以在自己的机器上运行的范例。
通过这个范例,大家可以观察:
1) 分别运行OopMain和FmpMain,visual地比较CPU的usages。
2) 比较OopMain和FmpMain源程序的异同。
3) FMP的灵活性,和其本身的大小(大约20K的jar,Java版的源码也就是900行)。
FMP把callFunction()设计成一个普通method call的replacement,当这个method本身
是相当独立的,就象这个范例展示的一样。 |
|
c********l 发帖数: 8138 | 22 Thanks
这个方案的关键是:只要项目的file system里面有有效的.git的目录
那么egit就会被激活
最后一句:如果git global config之前没有设置,那么egit会不会就不能成功激活了?
另外,eGit需要不需要depend系统里面的git客户端?比如从git-scm上下载的源程序? |
|
|
s*****n 发帖数: 169 | 24 不错。有明白人。我是开个玩笑。不过我正在做的JVM是直接读bytecode instructions
, 然后执行。不是读源程序。至于为什么要做着个东西,是和research有关。举个例子
,你想做自动测试,必须知道JVM的反馈信息。但是JVM不会给你你想要的信息因为安全
原因。Java reflection, AspectJ 也不行。
有人感兴趣,我可以open source. 合作开公司也许行。目前的版本是Java写的。的确
是在标准jvm里运行自己的jvm运行java 编译过的程序,i.e., xxx.class files。 |
|
S*A 发帖数: 7142 | 25 那这个会是很有意义的一件事情,帮助界定你的单机
网络带宽上限可以去到是多少。如果简单的 echo check
sum 都上不去,那就更不用讨论复杂的 app 逻辑和
写盘部分了。
和 netperf 不一样,不能盲收盲发。建议是收一个
256 byte 的数据包,做个 sum 然后发回去。
这样可以避免编译器优化掉那些读的指令。
这样也好顺便和那些 J2EE 的服务器比比性能。
程序应该很简单,如果能 share 出程序(不需要
源程序,有 exec 就行),大家也好验证。 |
|
|
T********i 发帖数: 2416 | 27 大家都是搞技术的。bullshit没意思。
高质量的关键,在于个人的水平和态度。这个,根本不是什么regulation能够完全保障
的。
我搞mission critical system,也是战战兢兢,如履薄冰。任何时候不能有丝毫大意
。测试测试再测试。至于regulation,都是扯淡。再严格的规定,再烂的产品,说糊弄
过去就糊弄过去。
我的系统,几十万行代码。源程序都不让别人读的。不也运行着么?
所以说,我一向认为,任何给别人用的系统。都应该让人家meet the developer。整个
team列出来。谁做的哪一块列清楚。将来哪一部分垃圾暴露了,责任人走到天涯海角都
给丫挖出来。死了都可以抠出来鞭尸。
这是解决猪一样队友的根本方法。 |
|
S*A 发帖数: 7142 | 28 问题关键是你根本没有指定 TARGET 到源文件的
依赖关系。没有依赖关系,只要 TARGET 存在就是
最新的了。
你要在后面加类似这么一个就好了:
$(TARGET): $(wildcard *.c *.h)
我注意到你有子目录,我的 wildcard 没有包括子目录。
你直接手动把子目录的源程序手动展取代了 wildcard 就好了。
最根本的问题是你完全没有制定文件的依赖关系。
这样就把 makefile 当成 bash 来用了。 |
|
S*A 发帖数: 7142 | 29 我可以告诉你的是我的实验通过了,就是在4G 的笔记本上,
服务器端程序没有改。(其配置有改)。这个buffer 我的确
没有碰。你能指出 kernel allocate buffer 的代码在那里吗?
我们可以一起看看是不是空连接就已经分配 window buffer 了。
我粗略看了一下,没有在连接的时候找到。如果你很确定知道
buffer 在那里分配的,有 kernel 源程序最好。那值得研究一下
为什么我的机器没有 crash. |
|
S*A 发帖数: 7142 | 30 我可以告诉你的是我的实验通过了,就是在4G 的笔记本上,
服务器端程序没有改。(其配置有改)。这个buffer 我的确
没有碰。你能指出 kernel allocate buffer 的代码在那里吗?
我们可以一起看看是不是空连接就已经分配 window buffer 了。
我粗略看了一下,没有在连接的时候找到。如果你很确定知道
buffer 在那里分配的,有 kernel 源程序最好。那值得研究一下
为什么我的机器没有 crash. |
|
w***g 发帖数: 5958 | 31 我觉得可能跟C里面的条件编译类似。源程序里这些FFTT什么的都是变量,一编译变成
常量了,但编译器又没有做优化,就出来这种东西。 |
|
w***g 发帖数: 5958 | 32 前面的回复了的除了SSA以外,别的都是不懂装懂,一看就知道有多少水平。竟然还有
人说这个不是c的强项。你这个问题问得挺好,我给你演示一下。源程序叫hello.c,
贴在最后
$ make hello
$ objdump -t hello | grep XXX
00000000004006ec g F .text 00000000000001b1 XXX_TEXT
0000000000601070 g O .data 0000000000000004 XXX_DATA
0000000000400968 g O .rodata 0000000000000001 XXX_RODATA
0000000000601078 g O .bss 0000000000000004 XXX_BSS
$ ./hello
Global:
&XXX_DATA: 0x601070
&XXX_BSS: 0x601078
... 阅读全帖 |
|
w***g 发帖数: 5958 | 33 开源的无所谓。如果你不想开源,或者客户没有下载源程序运行make的能力,那么我的
建议是centos 5.6,至少用vagrant之类的搞个centos 5.6做编译。这样基本上保证了
编译出来的二进制程序在哪儿都能跑。还有toolchain得花心思弄一下。网上可以弄到
gcc-4.7的yum respository,剩下各种自己依赖的library最好都用--enable-static -
-disable-shared外加export CFLAGS=-fPIC编译。这样可以弄出来静态编译的动态链接
库。很多环境,像java /python/matlab等和C++接口都需要你提供动态链接库,但是如
果你的动态链接库如果静态链接自带各种库的话能省很多事。不过Linux底下的静态链
接有一个问题,就是getaddrinfo/gethostbyname在静态链接的情况下没有解析域名的
能力,只能接受IP地址。如果程序需要域名解析,那libc还是只能动态链接。
新版本的ubuntu用户界面极其傻x。不过xubuntu挺不错。
我其实很惊异于我接触的那些公司(都有自己的机房)都还在用cento... 阅读全帖 |
|
|
S*A 发帖数: 7142 | 35 你可以试验一下嘛。我的c程序实现的
lcs源程序都在,你用go实现应该比c
代码还短。
我的基准是1个core的。如果那个go
是用了4个core那更慢。是 40倍不是
12倍。
SequenceMatcher |
|
S*A 发帖数: 7142 | 36 这个源码都给人家了,基本上是不可能的。
特别是截获命令行开关这些,在源码里一定可以找到的。
人家去掉就是了。
比较普遍的方法是用人家生成的 exe 里面做反汇编。
做execution flow 和 data flow analyses。 和用
源程序生成的代码比较。编译器要尽可能接近,
编译开关接近。
如果指令流有很高相似度,特别是 execution flow
graph 有高度类似,基本上可以确定是同一文件
生成的。
在汇编级别上是比较容易比较出是不是同一文件
编译出来的。有 firm 有工具专门做这个 consulting。
给打官司服务的。 |
|
S*A 发帖数: 7142 | 37 没有用的。如果人家可以理解程序并修改,把后面的token
使用部分去掉就可以了。
还有就是修改程序,和网站连接的时候直接 dump 所有接受
的 token。 然后修改程序跑的时候本地装入 token 就可以了。
如果人家有全部的源程序,你这样的保护是没戏的。 |
|
S*A 发帖数: 7142 | 38 不断变化没有用,人家可以修改拿日期的
地方永远拿第一次dump下来的日期。
用户名全部人和第一次dump一样。
然后把程序显示用户名和时间的地方替换回来。
方法多了去了。人家能理解你的程序
的话,直接把token依赖去掉。
多少破解没源程序都可以做。
有源程序还不易如反掌 |
|
S*A 发帖数: 7142 | 39 bing go。
这个等价于没有给完整的程序。
需要依赖服务器。但是运行逻辑
要在服务器上而且不容易反向工程
出逻辑。
所以和原来的命题给(完整)源程序
已经不是一回事了。 |
|
a*****e 发帖数: 1700 | 40 我不是很理解你说的用 monad 描述 parsing 和 monad 表述 I/O 有什么关系,
是说 parser combinator 可以用 monad 实现吗?parser combinator 同样可以用
applicative 或者 arrows 实现,和 monad 的实现各有优劣。
我说 I/O compose like monads 前面还要加一个定语: sequential,这是因为需要
确保副作用发生的先后顺序。不加限制的 function composition 做不到这点,但
不加限制的 monad composition 可以做到这点。
而且 text composition 明显是个 monoid,先后顺序不重要,结果一致就好。
为什么说 sequential I/O 可以用 Monad 表述,是因为 sequential I/O 之间的
composition 满足 monad laws,而不是源程序可以写成什么样子,同时它也
不依赖于语言本身的求值顺序等特征。 |
|
g*****g 发帖数: 34805 | 41 源程序少个分号,还编译出错呢,这跟鲁棒有什么关系? |
|
w***g 发帖数: 5958 | 42 正经点的语言都会bootstrap。一个新语言出来,用这个语言写自己的编译器是
最好的test case。可以用java写java编译器,最后生成出.class运行在jvm上。
jvm本身不能是.class,那样就会出现循环依赖的问题。但jvm对应的是虚拟CPU
而不是编译器。理论上java编译器可以直接把java源程序编译成x86机器指令,
那样就不需要jvm了; 理论上也可以做出直接跑jvm指令的CPU,那样也就不需要
C++写的jvm了。
如果要纠结CPU是用啥实现的,那就是VHDL, verilog之类的了。
现在的趋势是java的popularity也在下降,非要和C++比,其实是五十步笑百步。
C++有它的圈子,确实比较小,但要按能量说,未必比java小。 |
|
n*********2 发帖数: 357 | 43 有两台64-bit机器, 都装了Ubuntu 14.04 trusty, Python 2.7.6 和python-dpkt
package (1.6+svn54-1).
然后运行同样的 Python code, 一个运行无误。 另一个报告下列错误:
Traceback (most recent call last):
File "analyze.py", line 88, in
elif ip.p==dpkt.ip.IP_PROTO_ICMP:
AttributeError: 'str' object has no attribute 'p'
看了一下源程序, ip 变量唯一赋值的地方是
eth=dpkt.ethernet.Ethernet(pkt)
ip=eth.data
这个是什么问题? 为什么第一台机器运行良好?而第二台机器把 ip 看成 str?
谢谢! |
|
|
w***g 发帖数: 5958 | 45 pthread是很傻x. 不过C++11以后C++线程已经满血复活了, 不会比java差.
我这里有一个简单源程序攻略 (以前贴过), 总结了
C++11里线程相关的主要特性.
程序里主要是中文注释, 浏览器看可能有乱码. 需要下下来用编辑器看.
http://www.wdong.org/thread-tutorial.cpp
可以运行, g++编译用
g++ -pthread -std=c++11 thread-tutorial.cpp
C++是用来写算法的, 不适合实现业务逻辑. |
|
m*****n 发帖数: 3575 | 46 但是出毛病是在慢慢运行中逐渐出毛病的
那么只要保留着当初拷贝来的源程序
替换过去,还会保证一段时间不出毛病?
这样破解也很简单,
过一天重新拷一次就够了? |
|
t*****r 发帖数: 39 | 47 使用Origin的LabTalk使工作简化
(Origin Pro 6.1 以上)
我们常常遇到这种情形:
从试验仪器上拿到数据,画成图形.
那么能不能用一个简单的方法,比如,点击一个按钮,选中文件,然后,
图就按要求画出来了?当然可以,Origin的LabTalk功能很强,这种任务
还算比较基本.Origin有个论坛,各种各样的问题都可以讨论,我从上面
学到了怎么做下面这个程序,希望能对各位的工作有帮助.或者帮我改进改进.
先看源程序:
[main]
%L="C:\Data";
win -c %H; //Delete the empty worksheet
win -t wks Origin;
%W=%H;
%W!wks.joinmode=0; // Set %W worksheet to append mode
delete %(%W,2); delete %(%W,1);
FDLOG.DlgName$="Import DSC/DTA Files (TA Format)"; // Title Bar text
FDLog.CheckName$="DTA Files (Please |
|
|
g*****g 发帖数: 34805 | 49 LOL, 外行冒充内行。加密是依赖密钥的长度来保障强度。
如果你不能截获我的密钥,而且密钥够长,比如2048bit,
就算我把加密解密的源程序给你又如何。 |
|
d****n 发帖数: 12461 | 50 如果源程序可以把输出变成数据库的话,不知道效率会不会提高很多。当然可以用
ramdisk然后定时移动到硬盘上。 |
|