==以下是吐槽==
我们实验室的主要应用程序,从90年代一直开发至今, 原来是GPL授权, 后来变成private的了~~~~
几十个参数设置不佳或者不匹配会出段错误,
会出段错误,
段错误,
误
实验室的人肉版本控制系统:导师
PS:这个是有典故的, 负责做软件的其他组同学过来参观, 看我们的版本都是用日期命名, 好奇问我们用什么VCS, 我说没有, 老板说我们有版本控制, 手动的
经过多方努力, 我们的程序终于初具面向对象功能了!就是把原来的全局数组+子程序用30几个参数的函数包起来, 每一个参数都是几十万长度的Array(幸好Fortran是传指针)
循环人肉展开, 有的同学不会用循环, 直接写成 x(1) =1 x(2) = 3 x(3)=5, 省的编译器展开循环了。。。。
上古神器goto, 程序里有一个核心部分从1995年以后就没人动过, 原理是一个循环, 中间会有各种条件跳出, 然而并没有用结构化循环, 全尼玛是goto实现的, 后来说要优化这一部分, 果断找浪潮的工程师, 还是为他们捏一把汗。
什么, 你要改一个参数?在源代码里xx行, 找过去是这么写的
switch=0 if(switch==1) then balabala else if (switch ==0 ) then balabala end if
改完之后重新编译一遍就行了。尼玛不把参数拿到配置文件至少用个宏啊。
上面说到的switch还算是良心之作, 一个师姐写的概念验证程序(大概也有5000+行), 里面的开关选项是这么写的:
real :: switch = 0.0 if( switch == 0.0 ) then balabala else if ( switch == 1.0) then balabala end if
当时我心中万千草泥马跑过, 心想现在的编译器擦屁股能力还真强, 这都能得出正确结果
就这破程序做出来的结果还上过Science