五千年(敝帚自珍)

主题:【调查】大家都主要用什么写程序? -- 还是不懂

共:💬139 🌺25
全看树展主题 · 分页首页 上页
/ 10
下页 末页
回复
家园 [zt]语言发展路线图 来晚了,不知道贴过没有,希望对大家有用

怎么上传图片啦?

http://www.ihere.org/uploads/photos/10.gif

点看全图

外链图片需谨慎,可能会被源头改

回复
家园 thanks, Clear big picture!
家园 和如此之人做完爱,可用文言文写程序

语法如下:

若...则...然...即...

类推

家园 最高效主题,呼啦一下老程序员们都冒出来了!
家园 计算机语言只不过是人与计算机交互的工具而已

以前在单位写COBOL程序

现在单位用Java写程序

在学校读书的时候主要用C++

业余时间搞网站常用用PHP

在家鼓捣Linux的时候用C

目前正在努力练习Assembler 370...

家园 拽一下

FORTRAN比C或C++快 - 跟程序优化无关。C的速度现在进步了,大概是FORTRAN的90%,以前好像是70%。这事儿Intel的老田有发言权。

画图我以前用SigmaPlot,当然是盗版的,正版的贵死,学生版的USD680(?)

现在用gnuplot,很爽!!! 以前偶尔也用。现在是EXPERT。gnuplot不是GNU plot。

家园 【原创】我见识过的两个好东东

1、没有SQL的数据库不叫数据库

那年,我们接触了dBaseII,在一种叫做NEC的电脑上实习的。那种机器用的是8寸软盘,是我平生用过的最大的软盘。

那时我们学会了一种叫“全屏幕编辑”的方法,为dBaseII具有如此强大的功能吃惊。在此之前,我们写程序要用edlin,一次一行。dBaseII竟然能够在所有变量赋值框之间来回移动,比一句一句的input方便多了。

后来我们开始接触dBaseIII,这时已经用上了PC机了。见到了3.5英寸的软盘,嘿嘿,这个小巧的盘比5寸盘还存储更多东西,真不可思议。

我们可以使用中文了,我们编写的dBaseIII程序可以处理中文字符串了。

我们又见到FoxBase,它在DOS下的速度是dBaseIII的6倍!神奇啊神奇。

我们以前用文本文件来顺序存储和查找档案,有了数据库,一下子变得那样的快捷。

在这个水平下,我们停留了许多年,因为FoxBase几乎无所不能。后来的FoxPro也没有让我动心过,直到遇见了SQL小姐。

在我眼中,SQL小姐是完美的,编程语言都能像她这样,程序员才是电脑的主人。

2、OOP是接近完美设计

那时,我们在字面上争论过,为什么Basic语言是高级语言,而不是“基础”语言。

后来,听到一个名词:结构化程序设计。据老师说,无论什么人,用这个方法开发出来的程序都差不多,便于理解和修改。

最近,我们接触了OOP,才知道这才是编程语言的发展方向,感觉它们向着SQL接近了。

家园 OOP和SQL可是两个世界。

一个是Object-oriented world,另一个是relational data和procedure-base的世界。

家园 【原创】俺来挺一下C++

看了下面的文章,大部分是挺Java的,的确Java同C++相比是领先一代,在下这里要稍微唱一下反调。这个帖子是要说一些Java做不到,但C++可以做到的东西。说的不对的地方,请高手们指出。

先从最简单的一个函数说起,我要实现一个交换两个数的函数,在C++里很容易。

void swap(int &a, int &b)

{

int t = a;

a=b;

b=t;

}

这个函数Java就实现不了,因为Java中没有pointer,而Java的object reference,相当于C++的pointer。Java中没有对应C++的reference的实现,也没有取地址&的操作。扩展一下这个问题,就是Java无法处理多返回值的情况,C++可以通过传入Reference或Pointer来实现,而Java只能将所有返回值group成一个object来返回。

再进一步,如果我想让这个函数对所有type都适用,那么在C++中很简单,用个template就行了,

template<typename T>

void swap(T&a, T&b)

{

T t=a;

a=b;

b=t;

}

这样的话,只要的我的class实现了copy-contructor 和 operator=(),我就可以用这个swap函数,而不局限于int

MyClass a,b;

...

swap(a,b); // exchange value between a and b

这个功能Java更实现不了,因为到目前为止,Java还不能support template,虽然有消息说Java将来会支持template。

不支持template也就无法支持Generic Programming (当然Java developer可以用一些技巧来模拟Generic Programming,但这不是语言本身所支持的)。

现在我们来进一步讨论,我们知道C++有庞大的STL Library, 在STL里包含了各种Container,Iterator,Algorithm等等前人已经帮你完成的东西,大部分情况下,你只需要使用这些东西,而不需要reinvent the wheel,Java Developer会说你说的东西Java也基本能做,比方说Java中也有vector,map什么的Container。但是Java实现不了的(或曰很难实现的)是下列一个情形,假设我要实现一个三元组的Container triplet,<Key, Value1, Value2>,而这个需求并不夸张,因为现实世界有许多3元组关系的对象。用C++的话就很容易实现,

template <typename _Tkey, typename _Tv1, typename _Tv2>

triplet {

......

iterator begin();

iterator end();

// detailed implementation omitted.

......

};

在triplet需要实现begin(), end()返回一个Iterator(实际上是一个struct *,这个struct包含first,second,third三个成员变量,代表key, val1,val2)。(我这里省略了其他具体实现)

具体来说,你需要对这个triplet do some thing,你就可以用STL的算法,

triplet<int, MyClass1, MyClass2> aTriplet;

......

for_each(aTriplet.begin(), aTriplet.end(), DoSomething); //DoSomething 是个function或functor

就可以了,其他各种STL算法都可以应用在这个Container上面。

而要实现这样一个Triplet的功能在Java中是很困难的。

稍微总结一下,Java这些局限是他的主要特点决定的,第一个特点是没有pointer,也就没有取地址&的操作,从程序的reliablity角度来看,是有好处的,因为大部分程序错误跟指针操作有关,但是同时也限制了灵活性。这个是好坏参半,孰优孰劣很难说。第二个特点是没有template,这点我个人觉得是个极大的缺陷,没有template,就失去了Generic Programming的强大武器。虽然很多东西Java也勉强可以做,但毕竟不如C++来得自然。所以Java community一直有将Template引进Java的企图。

(待续〉

家园 好文,请继续

据我所知,好像大部分EDA软件的核心算法使用C++,因为:

要表达复杂的数据结构;template!

内存管理直接影响速度和资源使用效率;

有很多软件可以用于探测memory leakage,如rational;

一些格式转化的接口程序用perl写。

java 用于网络方面的特别多?

家园 有些不同意见,Java(5.0) 现在支持Generics。

不过是在编译器级别实现的,而不是在JVM level实现的,所以功能有了,但执行效率没有上去。

C++的Template本质是Code Repalcement。如果想要最好的Generics,那还得说是.NET 2.0的。Runtime级别的Generics,没有C++ code inflating的问题,性能大幅提高(对于ValueType,200%,对于Refrence type, 15%)

你说的Swap在.NET中支持。用什么语言都行。比如用VB.NET.

    Public Sub Swap(ByRef x As Int32, ByRef y As Int32)
        Dim temp As Integer = x
        x = y
        y = temp
    End Sub
家园 SQL不是数据库的全部,也不是数据库的将来

目前大型金融机构的许多数据仍然存放在层次性数据库(如IMS)或其他不支持SQL的文件系统(如VSAM)里。这些经过优化处理的数据的存取速度远超过关系型数据库。

Google的数据也没有存放在SQL型的数据库里。

家园 【原创】C,偶而用用C++,

C,偶而用用C++,其实这个地球大部分CPU跑的程序是C写的。

其实C++,Java,C#的出现跟C的设计中出了很多差错有relation,C的出现是革命,以后都是改良了,后来出现de最重要的LANGUAGE应该是smalltalk,c# AND java都不过是在找某种中间的平衡。

家园 C#(.NET)看到了Java这个问题

所以,加了个Pass-By-Ref参数传递方式。

原文比的是C++和Java。没有涉及C#。

C++的Template还有一个功能,是提供了compile-time polymorphism。

Java我很久没碰了,不太清楚他的Generic如何实现的?还请Highway兄来扫扫盲。

家园 Java里面也不是不能进行Reference或者返回多个值的
public class swap {
	public swap(Integer[] a, Integer[] b) {
		Integer c = null;
		c = a[0];
		a[0] = b[0];
		b[0] = c;
	}
	static public void main(String[] argv) {
		Integer[] a = new Integer[1];
		Integer[] b = new Integer[1];
		a[0] = new Integer(5);
		b[0] = new Integer(6);
		System.out.println("a="+a[0]);
		System.out.println("b="+b[0]);
		swap s = new swap(a, b);
		System.out.println("a="+a[0]);
		System.out.println("b="+b[0]);
	}
}

这里面的swap函数就可以交换两个数,并在调用的主程序里面反映出来......

全看树展主题 · 分页首页 上页
/ 10
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河