范文一:电影的发展史
美国无声电影
1893年,T.A.爱迪生发明电影视镜并创建“囚车”摄影场,被视为美国电影史的开端。1896年,维太放映机的推出开始了美国电影的群众性放映。
19世纪末20世纪初,美国的城市工业发展和中下层居民迅速增多,电影成为适应城市平民需要的一种大众娱乐。它起先在歌舞游乐场内,随后进人小剧场,在剧目演出之后放映。
1905年在匹兹堡出现的镍币影院(入场券为5美分镍币)很快遍及美国所有城镇,到1910年每周的电影观众多达3600万人次。当时影片都是单本一部的,产量每月400部,主要制片基地在纽约,如爱迪生公司、比沃格拉夫公司和维太格拉夫公司。1903年E(S(鲍特的《一个美国消防员的生活》和《火车大劫案》,使电影从一种新奇的玩艺儿发展为一门艺术。影片中使用了剪辑技巧,鲍特成为用交叉剪辑手法造成戏剧效果的第一位导演。
电影收益高,竞争激烈。1897年,爱迪生即为争夺专利进行诉讼,到1908年,成立了由爱迪生控制的电影专利公司,公司拥有16项专利权。到1910年,电影专利公司垄断了美国电影的制作、发行和放映。独立制片商为摆脱专利公司的垄断,相继到远离纽约和芝加哥的洛杉机郊外小镇好莱坞去拍片,那里自然条件得天独厚,又临近墨西哥边境,一旦专利公司提出诉讼便可逃离。D(W(格里菲斯1907年加入比沃格拉夫公司,次年导演了第一部影片《陶丽历险记》。至1912年已为该公司摄制了近400部影片,把拍片重心逐渐移向好莱坞,并发现和培养了许多后来的名演员,如M.塞纳特、M.壁克馥和吉许姐妹等。
第一次世界大战前夕,镍币影院逐渐被一些条件较好的电影院所代替;电影专利公司的垄断权势逐渐消失,终于在1915年正式解体。此时以格里菲斯为代表的一批新的电影艺术家已经出现。制片中心也从东海岸移到好莱坞。第一次世界大战不同程度地破坏和损害了欧洲各国的电影业,却促成了美国电影的勃兴。美国电影源源不断地涌人欧洲市场。到第一次世界大战结束时,已经建立起在欧洲的霸权地位。
导演格里菲斯、T.H(英斯和塞纳特对美国早期电影的发展作出了贡献。C.卓别林于1914年拍摄了第一部影片《谋生》,立即吸引了全世界观众。1919年,卓别林、D.范朋克、壁克馥3位著名演员和格里菲斯一道创办了联美公司,以发行他们独立制作的影片。20年代,美国影片生产的结构从以导演为中心逐步转化为以制片人为中心的体制。“制片人中心”模式形成了20年代的“明星制度”,各大公司均拥有一批明星。除卓别林、范朋克和璧克馥外,先后成名的还有R.“胖子”亚布克尔、T.巴拉、J.和L.巴里摩尔兄弟、L.查尼、吉许姐妹、M.马许、T.米克斯、G.史璜逊、J.基尔伯特、G.嘉宝、B.基登、N.希拉、H.劳埃德和早逝的R.范伦铁诺。
“好莱坞”此时己成为“美国电影”的同义语。由于在明星制度鼎盛时期有些明星的行为不检点招致公众的抨击,美国电影业成立了“美国制片人与发行人协会”,在W.H.海斯的主持下这一组织制订了“伦理法典”,以便在审查影片时剔除其中不合乎美国公众道德观念和生活方式的情节、对话和场面。这就是著名的海斯法典,它对美国电影的约束一直延续到1966年。
严格的审查制度使美国无声电影的主要成就表现在喜剧片、西部片和历史片3个方面。喜剧片的佳作首推卓别林的《寻子遇仙记》(1921)、《淘金记》(1925)和《马戏团》(1928),基登
的《航海者》(1924)和《将军》(1926),H.劳埃德的《大学新生》(1925);西部片主要有《篷车》(1923)、《铁骑》(1924)和《小马快邮》(1925)等;历史片有C.B.地密尔的《十诫》(1923)和《万王之王》(1927),格里菲斯的《暴风雨中的孤儿们》(1922),R.英格兰姆的《启示录四骑士》(1921)等。
第一次世界大战后,不少欧洲导演陆续来到好莱坞,他们的才能不同程度地受到了制片公司的抑制和扼杀。他们和美国导演一道,拍摄出无声电影的最后一批重要影片,如F.鲍沙其的《七重天》(1927)、C.勃朗的《肉与魔》(1927)、H.金的《史泰拉恨史》(1925)和K.维多的《大检阅》(1925)等。R.J.弗拉哈迪的《北方的纳努克》(1922)则为纪录电影奠定了基础。
20年代中期,豪华的电影院已基本上取代了镍币影院。20年代末期,好莱坞电影为战胜商业无线电广播这样的竞争对手,在音响方面进行了一次革命,产生了有声电影。
美国早期有声电影
1926年,华纳兄弟影业公司拍摄了用唱片来配唱的由J.巴里摩尔主演的歌剧片《唐璜》(A.克罗斯兰导演)。1927年10月6日又首映了由A.克罗斯兰导演、A.乔生主演的有歌唱、对白、声响的《爵士歌手》,这是世界上第一部有声故事片.1928年7月6日华纳公司又推出了“百分之百的有声片”《纽约之光》。自此,有声电影全面推开。至1930年,除卓别林继续拍摄了几部无声片外,全部故事片均为有声片。 在导演中间最先适应有声片制作并拍摄出富于创造性影片的有:R.马莫里安的《喝彩》(1929)和使用了主观镜头的《化身博士》(1932),L.迈尔斯东的《西线无战事》(1930)和《头版新闻》(1931)、刘别谦的《爱情的检阅》(1929)和《微笑的中尉》(1931),K.维多的《哈利路亚》(1930)。卓别林也拍摄了他的第一部有声片《城市之光》(1931)。 好莱坞的制片公司是1912年开始相继建立的。随着1928年雷电华影业股份有限公司的组建,形成了美国电影业的8家大公司。它们包括5家较大的影片公司,即派拉蒙(组建于1914)、20世纪福斯(始建于1915,合并于1935)、米高梅(合并于1924)、华纳兄弟(1923)和雷电华(1928);3家较小的公司,即环球(1912)、哥伦比亚(1924)和联美(1919)。
美国电影黄金时代
美国电影中的特殊现象——类型影片,在30年代获得了充分的发展。最初的类型片是无声电影时代的喜剧片、闹剧片和西部片,到30年代初期,歌舞片、盗匪片、侦探片、恐怖片等类型相继出现并得到繁荣发展。类型电影是美国经济、社会和文化需要的直接产物,它们中成为经典作品的有歌舞片《四十二街》 (1933)、《掘金女郎》(1933)、《大礼帽》(1935)、《风月无边》 (1936)和《齐格飞大歌舞》(1936);盗匪片《小恺撒》(1931)、《公敌》 (1931)、《疤面人》(1932)和《吓呆了的森林》(1936);恐怖片《吸血鬼》(1931)和《弗兰肯斯坦》(1931)等。
除上述类型影片外,30年代还产生了大量成为美国电影史中代表作的影片,如F.卡普拉的《一夜风流》(1934)、《第兹先生进城》(1936)和《斯密斯先生到华盛顿》(1939);卓别林的《摩登时代》 (1936);J.克伦威尔的《人类枷锁》(1934);G(顾柯的《八时餐会》 (1933)和《小妇人》(1933);M(柯蒂斯的《新新监狱两万年》(1933)、 《黑色的愤怒》(1935)和《侠盗罗宾汉》(1938);V.弗莱明的《勇敢船长》(1937)、《绿野仙踪》(1939)和《乱世佳人》(1939);J.福特的《告密者》(1935)、《青年林肯》(1939)、《关山飞渡》(1939)、《怒火之花》
(1940)和《青山翠谷》(1941);E.戈尔汀的《大饭店》(1932);A.希区 柯克在美国导演的第一部影片《蝴蝶梦》(1940);F.朗格的《狂怒》 (1936);M.李洛埃的《我是越狱犯》(1932);刘别谦的《风流寡妇》 (1934);J.von斯登堡的《摩洛哥》(1930)和《上海快车》(1932,;W.惠勒的《红衫泪痕》(1938)和《呼啸山庄》(1939)等。此外,H.霍克斯、H.金、R.马莫里安、R.华尔许等亦拍摄了多部质量优秀的影片。
当时对美国电影发展作出贡献的还有众多的表演艺术家,其 中包括F.亚斯坦、H.鲍嘉、C.鲍育、G.古柏、J.克劳藻、B.戴维斯、 O.德.哈维兰、H.方达、C.盖博、C.格兰特、K.赫本、E.G(鲁宾逊、 J.史都华和R.泰勒等。优秀的电影家中还包括摄影师G.托兰和黄宗霑。此外,童星S.邓波儿等主演的影片对于鼓舞30年代的美国民众起了特殊的作用。 从20年代末开始,W.迪斯尼创造了米老鼠、唐者鸭等一系列家喻户晓的动画形像;从1938年的《白雪公主和七个小矮人》开始,创造了《木偶奇遇记》(1940)、《幻想曲》(1940)、《小鹿班比》 (1942)等脍炙人口的动画长片,使美国动画片的影响遍及世界。 好莱坞在30年代发展为美国一个文化中心,众多的作家、音乐家及其他人士相继来到这一电影都城。他们之间相互影响,拍摄出一批社会意识较强的影片,如上述《斯密斯先生到华盛顿》、 《新新监狱两万年》、《黑色的愤怒》、《告密者》、《怒火之花》、《青山 翠谷》、《狂怒》、《我是越狱犯》以及《巴斯德传》(1935)、《左拉传》 (1937);《华莱士传》(1939)、《他们不会忘记》(1937)、《黑色军团》 (1936)和《穷巷之冬》(1936)。年轻的O.威尔斯1941年导演的《公 民凯恩》吸取了经典美国电影的精华,导演了这部从叙事结构到镜 头结构均有重大创新的影片,把美国电影推向一个新的高点。威 尔斯的《公民凯恩》和《安倍逊大族》(1942)对以后电影的结构、摄 影和电影理论的影响十分深远。
美国的纪录片在30年代中期,在英国的J.格里尔逊和荷兰的 J.伊文思的影响下再次受到重视,拍摄了《开垦平原的犁》(1936)、 《河流》(1937)和《城市》(1939)等。第二次世界大战爆发后,除为军方摄制了大批军事训练片和战争纪录片外,还摄制了数量相当 可观的堪称经典之作的纪录片,如J.福特的《中途岛战役》(1942), J.休斯登的《来自阿留申群岛的报告》(1943)、《圣被得罗之役》 (1945),W.惠勒的《孟菲斯美女》(1944),L.德.罗歇蒙的《战时女朗》(1944)等。卡普拉率领他的分队自1942年起用资料片和缴获 的敌方影片制作出《我们为何而战》的系列片。 G.卡宁和英国的 C.里德合作导演的《真正的光荣》(1945)被誉为长纪录片的顶峰。
第二次世界大战期间出现了许多优秀的故事片,有柯蒂斯的 《胜利之歌》(1942)、《卡萨布兰卡》(1943)和《出使莫斯科》(1943); 顾柯的《费城的故事》(1940);霍克斯的《约克军曹》(1941);希区柯克的《破坏者》(1942)、《疑影》(1943)和《救生船》(1944);W.休斯登 的《马耳他之鹰》(1941);H.金的《皇家空军中一名美国佬》(1941); 朗格的《刽子手也死亡》(1943);李洛埃的《魂断蓝桥》(1940)和《东京上空三十秒》(1944);刘别谦的《生死问题》(1942)和《天堂可以等待》(1943);L.麦卡里的《与我同行》(1944);迈尔斯东的《鼠与 人》(1940)、《北极星》(1943);L.匹查尔的《月落乌啼霜满天》 (1943);O.普雷明格的《劳拉》(1944);G.拉托夫的《俄罗斯之歌》 (1944);H.舒姆林的《守望莱茵河》(1943);华尔许的《目的地缅甸!》(1945);W.A.惠尔曼的《黄牛惨案》(1943)和《大兵乔的故事》 (1945);B.怀尔德的《通向开罗的五座坟墓》(1943)和《失去的周末》(1945);S.伍德的《战地钟声》(1943)和《金石盟》(1942);惠勒 的《小狐狸》(1941)和《忠勇之家》(1942)等。L.褒曼、B.克罗斯贝、 J.迦伦、R.海华丝、B.霍普、G.佩克、L.透纳和J.韦恩等演员在这 一时期加入了美国电影明星的行列。
从战后开始直至50年代初期,是好莱坞“黄金时代”的最后一 段繁荣时期。这一时期最突出的影片有:卓别林的《凡尔杜先生》 (1947);S.多南和G.凯利的《雨中曲》(1952);福特的《亲爱的克莱 蒙丁》(1946);霍克斯的《红河》(1948);休斯敦的《宝石岭》(1948)、 《柏油丛林》(1950)和《非洲女王》(1951);H.金的《正午十二点》 (1949)和《枪手》(1950);E.卡善的《君子协定》(1947)、《漂亮的混 血姑娘》(1949)和《欲望号街车》(1951);J.L.曼凯维支的《慧星美 人》(1950);V.米纳里的《一个美国人在巴黎》(1951)和《邪恶的和 美丽的》(1952);R.罗森的《当代奸雄》(1949);斯蒂文斯的《阳光照 耀之地》(1951)和《原野奇侠》(1953);维多的《太阳浴血记》 (1947);华尔许的《白热》(1949);怀尔德的《日落大道》(1950)和 《十七号战俘营》(1953);惠勒的《黄金时代》(1946)、《女继承人》 (1949)和《罗马假日》(1953);F.齐纳曼的《正午》(1952)和《走向永生》(1953)等。
美国电影自40年代末至50年代中,也经历了一系列的打击和挑战。首先,1948年5月美国最高法院根据反托拉斯法对拖延 多年的“派拉蒙案”作出裁决,判定大公司垄断为非法,要求制片公 司放弃发行和经营电影院的业务。这就切断了大公司的主要财源,迫使公司大幅度减少影片生产。其次,美国电视发展迅速,到1953年,电影观众人数与1946年相比减少了一半。为争夺观众,早在20年前即已发明出来的宽银幕电影此时开始成为与电视竞争的手段。
最甚者是自1947年起,“非美活动调查委员会”开始针对好莱坞进步人士进行政治迫害。1948年,华盛顿特区联邦法院判处好莱坞十人案,1951年又继续加深和扩大对电影界人士的迫害。许多人被指控为共产党,800余人被列入黑名单。这场迫害极大地损伤了美国电影的创作元气。但受迫害的电影界人士克服重重困难,摄制出描写锌矿工人罢工的影片《社会中坚》(1954,H.比伯曼导演),至今仍受到电影研究人员的重视。主要发生在40年代中期至50年代初期的美国“黑色电影”,如B.怀尔德的《加倍赔款》(1944)和《日落大道》(1950),T.加奈特的《邮差总是按两次铃》(1946)和N.雷伊的《以夜维生》(1949),亦是在这种政治气候的特殊条件下产生的,并随着50年代末政治迫害的消退而逐渐消逝。
美国当代电影状况
美国电影的黄金时代结束之后,各大公司从印年代中期开始解体或转产,海斯法典也被正式废除。随之出现了微型影院、艺术影院、汽车影院。独立制片及实验电影有了发展。
在“好莱坞之后”的年代里,一些经典题材和类型电影发生了变化。N,雷伊、V,米纳里和D,西尔克使美国情节电影前进了一步,出现了西尔克的《写在风中》(1957)、《被玷污的天使》(1958)和《生活的摹仿》(1959),米纳里的《邪恶的和美丽的》(1952)、《蛛网》(1955)和《家在山那边》(1960)等有代表性的影片。自《枪手》和《正午,开始,传统的西部片也发生了变化,在这种称之为“成人西部片”中,单枪匹马的主人公有些变成群体的主人公,并出现了福特的《搜索者》(1956)、G.R.希尔的《虎豹小霸王》(1969)和S.佩金珀的《野性的一群》(1969)等与过去不同的西部片。歌舞片中的佳作当推顾柯的《窈窕淑女》(1964)、R.怀斯的《西区故事》(1961)和《音乐之声》(1965)以及惠勒的《滑稽女郎》(1968)。
这一时期是美国青年思想最动荡的年代,相应出现的表现青年疑虑、反抗的所谓“反英雄”影片有:雷伊的《无因的反抗》(1955),卡善的《伊甸园东方》(1955),J.洛甘的《野餐》(1956)
以及后来的M.尼科尔斯的《毕业生》(1967),A.潘的《邦尼和克莱德》(1967),D.霍珀的《逍遥骑手》(1969),J.施莱辛格的《午夜牛郎》(1969),T.马里克的《荒原》(1973)等。
这一时期其他突出的影片还有:R.阿尔特曼的《陆军野战医院》(1970)和《纳什维尔》(1975);P.波格丹诺维奇的《最后一场电影》(1971);地密尔的《十诫》(1956);M.福尔曼的《飞越疯人院》(1975);A.希勒的《爱情故事》(1970);休斯登的《不合时宜的人》(1961);S.库勃里克的《光荣之路》(1957)、《斯巴达克斯》(1960)、《怪癖博士》(1964)、《2001年太空漫游记》(1968)和《发条橘子》(1971);尼科尔斯的《第二十二条军规》(1970);F.沙夫纳的《巴顿将军》(1970);G.西顿的《飞机场》(1970);斯蒂文斯的《巨人》(1956);怀尔德的《热情似火》(1959)和《公寓》(1960);惠勒的《宾虚传》(1959)。希区柯克在这一阶段拍摄了他最有影响的一批影片,如《后窗》(1954)、《眩晕》(1958)、《西北偏北》(1959)、《精神病患者》(1960)、《群鸟》(1963)和《玛尔妮》(1964)。
美国黑人演员过去在电影中只扮演次要的甚至是反面的角色,自S.波蒂埃开始,在《挣脱锁链》(1958)、《蓝斑》(1965)、《吾爱吾师》(1967)、《炎热的夜晚》(1967)和《猜猜谁来吃晚餐》(1967)中扮演了正面角色,并开始尝试由黑人自己编导关于黑人生活的影片。从L.斯特拉斯堡在纽约开设的演员讲习班培养出来的M.白兰度、M.克利夫特、P.纽曼和J.方达等加人了电影演员的行列。从大学电影系毕业的年轻导演亦开始崭露头角,如F.F.科波拉的《教父》(1972)、《教父》(续集,1974)和《对话》(1974),G.卢卡斯的《美国风情画》(1973),M.斯科西斯的《穷街陋巷》(1973)和《出租汽车司机》(1976)等影片显示出美国青年导演在承继美国电影传统基础上的创新精神,为70年代的复兴准备了条件。
美国电影的“复兴”是从S.斯皮尔伯格的《大白鲨》(1975)和卢卡斯的《星球大战》(1977)开始的。这两位导演都是南加利福尼亚大学电影学院的毕业生,他们运用当代工艺技巧制作的传统类型片(灾难片、科幻片)引起强烈的反应,并导致美国电影的制作和票房收入直线上升。受到美国青少年观众欢迎的科幻片发展为集灾难片、冒险片而成的场面壮观的影片的一个新片种,这些影片包括《第三类接触》(1977)、《异物》(1979)、《外星人》(1982)、《失去方舟的入侵者》(1981)、《金刚》(1976)、《超人》(1979)、《侏罗纪公园》(1993)以及这些影片的续集。
在70年代末以来的美国电影中,家庭和妇女以及普通人生活的影片又重新受到重视,如W.艾伦的《安妮.霍尔》(1977)和《汉娜姐妹》(1986);阿尔特曼的《三个女性》(1977);阿普特德的《矿工的女儿》(1980);R.本顿的《克莱默夫妇》(1979);J.L.布鲁克斯的《母女情深》(1983);P.马佐尔斯基的《一个未婚女人》(1978);M.雷德尔的《金色池塘》(1981);R.雷德福的《普通人》(1980);H.罗斯的《转折点》(1977);齐纳曼的《朱莉亚》(1977)等。关于越南战争的影片当推H.阿什比的《归家》(1978)、M.西米诺的《猎鹿人》(1978)和科波拉的《现代启示录》(1979)。其他突出的影片还有关于工人的如《诺玛.雷》(1979)、《洛奇》(1976)、《蓝领》(1978);表现青年的如《周末狂热》(1g77)、《油脂》(1978)、《毛发》(1979)和《闪光舞》(1983)等。
美国电影评论
长期以来,美国只把电影看作是娱乐手段,把好莱坞当成生产故事和幻想的工厂,因而首先注意影片的商业价值。70年代前后,美国电影学术研究有了很大发展。建立于1927年的美
国电影艺术与科学学院除颁发一年一度的“学院奖”(奥斯卡奖)外,也逐渐加强了它的学术工作。1967年,在华盛顿和洛杉矶两地成立了美国电影研究院。电影资料馆遍布全美,其中重要的有纽约现代艺术博物馆、罗切斯特的伊斯曼电影资料馆、华盛顿国会图书馆、伯克利太平洋电影资料馆等。
60年代后期以后,美国许多综合大学陆续设置了电影学院、电影系或专业,著名的有南加利福尼亚大学的电影学院,加利福尼亚大学(洛杉矶)的影剧系和纽约大学的电影制作、电影理论、影剧剧作3个系。只就电影理论学科来说,获得电影博士学位的人数由60年代中期的200人激增至2000人。各种理论研究机构和学会的发展,各种电影学术性刊物(如《美国电影》、《电影季刊》、《广角》、《电影杂志》)的繁荣,为美国电影研究提供了条件。
美国电影评奖活动中除影响最大、历史最久的电影艺术与科学学院的奥斯卡金像奖以外,重要的还有美国影评人学会奖和好莱坞外国新闻记者协会“金球奖”等。主要的国际性电影节有芝加哥国际电影节、洛杉矶国际电影展览、纽约国际电影节和旧金山国际电影节。
香**立电影发展史
香**立电影发展史大致可以分为三个时期,即60年代;70~80年代;90年代后。
香港最早有实验电影作公开式或半公开式放映的,始于1966年。然而那时还没有正式的组织筹办影展,放映的作品只是数位拍摄实验电影的制作人共同欣赏。
而正式有组织的影展应该是1968年由大学生电影会筹办的《大影会会员作品发表会》。由此直至70年代,大影会还举办了"业余电影展"及"业余电影展70",对推动独立电影不遗余力。因此,香港实验电影在60年代也称为"大影会时代"。
进入70年代,由于大影会主力份子分崩离析,1971年,卫影会创办人张键,粱良,李耀明继承了大影会志愿,继续为本地独立电影尽力。1972年、1973年卫影会举办了《8mm实验电影观摩影展及全港实验电影观摩展》,而香港专上学生会于1973年举办了全港实验电影比赛。此外,还有普及电影社,青影会,8mm电影会,香港电影会等等活动。
1974年,卫影会再次举办实验电影展,同年组成的火鸟电影会也开始举办半公开式的电影作品展。
1975年,卫影会与市政局首次合办实验电影展。
1976年,再次合作举办。
1977年,火鸟电影会加入举办。到了1978年,火鸟电影会正式接手与市政局合办,名称由实验电影展更改为香**立短片展。
香**立短片展由1978年办至1984年,之后停办,独立制作由此沉寂。
直至1992年市政局才再次举办香**立短片比赛;成为香港官方第一个主办的电影比赛。比赛分为叁个类别:最佳剧情片、最佳非剧情片、最佳动画。影片长度不能超过60分钟,录像作品不能参加。得奖作品安排在香港国际电影节中放映。叁组金奖及银奖各1名得主,分别可获3万元及2万元港币奖金。与此同时,香港艺术中心也宣布举办独立录象比赛。
两组织分别举办了两届短片及录象比赛。
1995年为了集中资源,遂决定合办,成为香**立短片及录象比赛。分为:剧情组、记录组、动画组、实验组、音乐录像组等五个类别,1995年的大奖奖金提高为10万港元,参赛影片的质与量均大大提高。
青年导演贾樟柯的故事片《小山回家》(录像,55分钟)获1996年香**立短片及录像比赛故事片金奖。此赛事举办至今。
中国电影发展史(1896-1949)
这个世界有了光,然后有了影。电影是一种能够将光影关系玩弄得最出神入化的现代发明。有人认为,如果要谈电影,就要上溯到我国汉代出现的灯影戏及之后出现的皮影戏。但是,真正有意义的电影,不是发明自中国,而是科技发达的近代欧洲。1895年12月28日,法国卢米尔兄弟在巴黎卡普辛路14号咖啡馆放映成功之后,正式标志着电影时代的来临。
既然中国与电影的发明无缘,那中国电影发展就由电影放映开始。1896年,卢米尔兄弟雇用了二十个助手前往五大洲去放映电影。就是这样,电影这种拥有艺术和商品双重价值的文化产品,在西方商人扩大市场商业策略推动下,传入了中国。随后,很多欧美商人见中国的放映业有利可图,纷纷来华投资。他们经营放映业,修建及发展连锁式影院,甚至在中国建立电影企业,摄制影片。
由1896年至二十世纪二十年代,虽然外商在中国电影市场占据了垄断地位,但亦阻止不了我国电影活动的开始。1903年,德国留学生林祝三携带影片和放映机回国,租借北京前门打磨厂天乐茶园放映电影。1905年,北京丰泰照相馆的任庆泰为了向京剧老旦谭鑫培祝寿,拍摄了一段由他主演的京剧《定军山》的部份场面。
中国电影一开始,就和中国传统的戏曲和说唱艺术结合起来,发展出一套独特的电影类型。但是最早尝试拍摄这种电影类型的丰泰照相馆只属小本经营,算不上是电影机构。直至商务印书局“活动电影部”的出现,才真正代表中国制片业的开始。在这段期间,除了“商务”之外,先后出现的电影制片机构还包括由美商投资“亚细亚影戏公司”、“幻仙”、“中国”、“上海”、“新亚”等,由于他们的成员多是来自戏剧舞台,所以当时的电影题材和内容大多源于中国戏曲和文明戏。此外,他们也开始拍摄剧情短片和长片,对电影这种艺术作最初步的探索和尝试。
中国电影诞生于1905年,历经了中国半封建、半殖民地时期,革命战争时期,新中国建设时期,**时期,改革开放时期和全面建设小康社会新时期等各个历史阶段;经历了从无声到有声,从黑白到彩色,从模拟到数字,从传统到现代的技术变革进程。在不同的发展阶段,中国电影都留下了优秀的代表作:20年代拓荒时期,有《孤儿救祖记》等关注社会改造的
进步电影;抗日救亡时期,有《狂流》《中华儿女》等鼓舞斗志、弘扬爱国主义的影片;抗战后,《八千里路云和月》《一江春水向东流》等又深刻揭示社会矛盾和本质,形成现实主义的创作潮流。
她说,1949年新中国成立后的17年间,涌现出《白毛女》《祝福》《林家铺子》等一大批现实主义和浪漫主义相结合的优秀作品,塑造了一大批具有浓郁民族风格的银幕形象,形成了新中国电影发展的第一次高潮;经历十年**浩劫,中国电影走出低潮,拍摄出《小花》《人到中年》等一大批反映改革实践、针砭社会时弊的优秀影片。尤其是八十年代末,九十年代初,《开国大典》《大决战》等重大革命历史题材影片和《焦裕禄》《凤凰琴》等现实题材影片,形成了第二次高潮。
进入二十世纪九十年代,赵实说,中国电影先后实施了影视合流改革、电影精品工程、农村电影放映工程、电影股份制、集团化改革等主要措施,艺术质量和形式都有崭新的突破和提高。除《孔繁森》《离开雷锋的日子》《喜莲》《那山那人那狗》等作品外,还出现了《不见不散》等贺岁片、喜剧片的新样式,涌现出一大批新生力量。进入新世纪,中国电影形成了国有、集体、民营多种所有制协调发展的新格局,电影发展走上了良性循环的轨道。《**》《可可西里》《台湾往事》等力作取得社会效益和经济效益的双丰收,《英雄》《神话》等国产大片共同占据了中国市场的主导地位,并在世界影坛创造了中国电影的票房奇迹。近三年来中国有30多部影片在40多个国际电影节上获奖,标志着第三次发展高潮的到来?
范文二:C++语言的发展史
C++语言的发展史
软件114 学号:0113478 姓名:叶涛
C++语言出现的历史背景
伟大的C++语言之父,Bjarne Stroustrup博士曾经说过:“一种程序设计思想要为人所用,不仅语言的特性必须是典雅的,而且它必须在真正的程序环境中能经得起考验。”面向对象程序设计方法的提出,以及它在编写大规模程序方面显示出的优越性,使人们开始重视面向对象程序设计语言的研究。在面向过程的ALGoL 、ADA 和MoDuLA —2等语言的基础上,逐步演变形成了面向对象的程序设计语言。20世纪60年代,美国国防部投入巨大的人力和物力,研制开发了ADA 语言。ADA 语言并非面向对象的程序设计语言,但它具有的模块化、信息隐藏、数据抽象和并发执行等特点对于面向对象程序设计方法和技术起到了积极的推动作用。人们普遍认为,ADA 语言是一种基于对象的程序设计语言。
1967年出现了simula67语言,它是面向对象程序设计语言的鼻祖,提出了对象的概念,并且支持类和继承。随后出现的Smalltalk 语言继续丰富和发展了面向对象程序设计的概念,并且提供了更加严格的信息隐藏机制。1980年问世的Smalltalk —80语言是Smalltalk 语言的改进版,开始向世人展现面向对象程序设计的魅力。
C++语言的诞生
1982年,美国AT&T公司贝尔实验室的Bjarne Stroustrup博士在c 语言的基础上引入并扩充了面向对象的概念,发明了—种新的程序语言。为了表达该语言与c 语言的渊源关系,它被命名为c++。此后C++语言历经了不断地完善,例如1990年c++语言引入模板和异常处理的概念,1993年引入运行时类型识别(RTTI)和名字空间(Name Space)的概念。1997年,c++语言成为美国国家标准(ANSI)。1998年,c++语言又成为了国际标准(ISO)。目前,c++语言已成为使用最广泛的面向对象程序设计语言之一。
c++语言是以c 语言为基础的,支持c 语言的所有语法和几乎所有的技术,因此也有人把c++语言看作是c 语言的超集。同时c++语言支持面向对象程序设计方法的所有概念,它是一种非常实用的、功能极为强大的程序语言,相对而言较难掌握。
C++语言发展的历程
(一) C++语言发展的三个阶段:
第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借著接近C 语言的效率,在工业界使用的开发语言中占据了相当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL )和后来的Boost 等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java 、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;第三阶段从2000年至今,由于以Loki 、MPL 等程序库为代表的产生
式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。 (二) C++发展史上的重要事件:
1983年8月, 第一个C++实现投入使用
1983年12月,Rick Mascitti建议命名为CPlusPlus ,即C++。
1985年2月, 第一个C++ Release E发布。
10月,CFront 的第一个商业发布,CFront Release 1.0。
10月,Bjarne 博士完成了经典巨著The C++ Programming Language第一版 1986年11月,C++第一个商业移植CFront 1.1,Glockenspiel。
1987年2月, CFront Release 1.2发布。
11月,第一个USENIX C++会议在新墨西哥州举行。
1988年10月,第一次USENIX C++实现者工作会议在科罗拉多州举行。 1989年12月,ANSI X3J16在华盛顿组织会议。
1990年3月, 第一次ANSI X3J16技术会议在新泽西州召开.
1990年5月, C++的又一个传世经典ARM 诞生。
1990年7月, 模板被加入。
1990年11月,异常被加入。
1991年6月, The C++ Programming Language第二版完成。
1991年6月, 第一次ISO WG21会议在瑞典召开。
1991年10月,CFront Release 3.0发布。
1993年3月, 运行时类型识别在俄勒冈州被加入。
1993年7月, 名字空间在德国慕尼黑被加入。
1994年8月, ANSI/ISO委员会草案登记。
1997年7月, The C++ Programming Language第三版完成。
1997年10月,ISO 标准通过表决被接受
1998年11月,ISO 标准被批准。
1985年10月,Cfront Release 1.0发布。
1987年12月,GNU C++发布。
1988年1 月,第一个Oregon Software C++发布。
1988年6 月,第一个Zortech C++发布。
1990年5 月,第一个Borland C++发布。
1992年2 月,第一个Dec C++发布。
1992年3 月,第一个Microsoft C++发布。
1992年5 月,第一个IBM C++发布。
C++语言的现状和前景
对于大多数一般开发人员而言,C++作为一门通用编程语言将很快从他们的编程语言中消失,但C++仍然会得到大量的使用,特别是操作系统层的工作和底层开发(如嵌入式设备和驱动开发) 、某些高性能应用程序和那些如果使用.Net 或Java 开发显得过于沉重的应用程序(如办公套件) 。有些开发人员将继续使用C++开发应用程序,但对于一般开发人员而言,C++确实很头痛。大多数开发人员都面临着性能问题,当你解决掉性能问题后,在大多数情况下,C++仍然是相当有吸引力的。
少部分C++开发人员对于在.Net 托管环境下使用C++对他们没有多少吸力,这样使得C++丧失了许多用于Web 开发的机会,但并不是说C++短时间内就会消失,看到C++正在加入传统的COBOL 和FORTRAN 语言,为那些使用超过50年的应用程序提供维护和扩展基础。此外,由于各种原因(熟悉程度、库支持、传统/习惯、文化等) 有些新的开发项目将会启动,所以它将会为这个即将死去的语言找回一点尊严。
C++开发人员还有很大的潜力可挖,如果你是一名C++开发人员,建议你坚持使用这门语言,就目前 的薪资结构而言,经验丰富的C++开发人员领到的薪水还是相当可观的,此外,由于C++的难度较高,并且学习它的人也比较少(目前高校也很少开设这门课程了) ,从长远来看,预计C++开发人员相对.Net 和Java 开发人员更有就业保障和更好的补偿。
虽然C++在Web 开发方面不可能很快成为主流,在桌面应用程序开发方面C++也不可能很快就销声匿迹, C++在云计算的某些方面可能具有许多机会,对于某些项目(想想那些适合超级计算机的项目) ,云给C++开发人员提供了一个方法获得与网格计算相同的好处,但它的灵活性却更好,因此,云计算可能会代替或作为网格及超级计算机的补充,并为C++创新提供了一个极好的机会。*Nix开发社区仍然热衷于使用C/C++,担心Windows 中C++开发机会逐渐变少的C++开发人员一定要看看*Nix开发。
C++会慢慢消失,但它不会死,也不会成为一点都不重要的语言,虽然现实生活中大多数开发人员都没有接触过C++,但许多开发人员肯定从学习它获得了许多受益。
范文三:C语言的发展史
C 语言的发展史
Dennis M. Ritchie
Bell Labs/Lucent Technologies
Murray Hill, NJ 07974 USA
dmr@bell-labs.com
概要
C 语言作为最初的 Unix 操作系统的系统实现语言,在 1970年早期诞生。它以无类型的 B 语 言为基础, 形成了一个类型结构; 它在小型机上被发明, 作为一个工具, 以改进贫乏的编程 环境。在今天,它已经成为一种占统治地位的语言。本文研究它的发展。
语言的发展史
简介
版权提示:版权所有 1993计算机协会公司。此电子版由作者授权发表。有关出版事宜,请 联系 ACM 或作者。 本文被用于一九九三年四月, 在马萨诸塞州剑桥的第二次编程语言历史会 议上的演讲。
之后被收录进会议记录:编程语言历史,第二版。 Thomas J. Bergin, Jr. and Richard G. Gibson, Jr. ACM Press (New York) and Addison-Wesley (Reading, Mass), 1996; ISBN 0-201-89502-1.
本文是关于 C 程序设计语言的发展、 它所受到的影响以及它诞生的条件。 为简洁起见, 我略 过了对 C 本身完整的描述、它的起源 B[Johnson 73]及更上一代 BCPL[Richards 79],相反 集中关注每一种语言的典型特性,以及他们如何发展变化。
C 在 1969—— 1973年间与 Unix 操作系统同时诞生;最富创造性的时期是 1972年。另一次 大的变化发生在 1977到 1979年间,当 Unix 系统的可移植性得到证明时。在后一段时期的 中间,这个语言的第一个被广为传播的描述出现了:C 程序设计语言,常常被称为白皮书或 K&R[Kernighan 78]。最后,在 1980年代中期,它被 ANSI X3J11委员会正式标准化,作了 进一步修改。直到 1980年代早期,尽管编译器已在多种机器结构及操作系统上出现,这个 语言几乎与 Unix 特别密切关联;更近一些,它的使用传播得更广,并且在今天它几乎是计 算机行业被使用最多的语言。
历史:环境
贝尔电话实验室的计算机系统研究在 1960代年晚期是乱糟糟的 [Ritchie 78] [Ritchie 84]。 贝尔电话实验室公司正从他和麻省理工学院、通用电气公司的合作项目 Multics[Organick 78]撤离。到 1969年,贝尔实验室管理层和研究人员认为, Multics 项目不能按期完成并且 代价高昂。在 GE-645 Multics机器被撤走之前, Ken Thompson领导一个非正式小组,开始 一些其它的研究。
Thompson 希望按自己的设计,使用一切有效的方式,创造一个适当的计算环境。他的计划, 回想起来是清晰的。 组合 Multics 中的许多创新特征, 包括一个作为控制场所的进程的清晰 概念、 一个树结构文件系统、 一个作为用户级程序的命令解释器、 文本文件的简单表示和访 问设备的通用化。 他们排除其余特性, 比如对内存和文件的统一访问。 开始, 他与我们其余 人推迟了 Multics 中的另一个先锋性(但非原创)特征,即只使用高级语言来编写。我对 Multics 实现所用的语言 PL/I,并无兴趣,但我们还使用其他语言,包括 BCPL ,我们对于 不能利用汇编之上的高级语言进行编程的优点, 比如容易编写、 易于理解, 感到遗憾。 当时 我们并未特别注重可移植性;到后来才有了这方面的兴趣。
Thompson 面临的是那个时代古怪和难缠的硬件:DEC PDP-7,他在 1968年开始使用时,只 有 8K 容量的 16位内存,并且没有可用的软件。当时他希望使用高级语言,但还是用 PDP-7汇编编写了最初的 Unix 系统。 开始, 他并未在 PDP-7上编码, 相反使用一套 GE-635机器上, 用于 GEMAP 汇编器的宏。一个后期处理器生成 PDP-7可读的纸带。
这些纸带从 GE 机器传送到 PDP-7进行测试, 直到一个原始的 Unix 内核、 一个编辑器、 一个 汇编器、一个简单的 shell (命令解析器),和其它工具(像 Unix rm, cat, cp命令)被 完成。此后,这个操作系统可以自我支撑:可以编写、测试程序勿需借助纸带,并且程序开 发可以在 PDP-7上继续进行。
Thompson 的 PDP-7汇编器在简明性上甚至优于 DEC 的;它对表达式求值并得到对应的数据 位。 没有库、 装载器或链接器:程序的全部源文件被送给汇编器, 输出文件——有一个固定 名字——产生后被直接执行 (这个名字, a.out , 解释了一点 Unix 的渊源; 它是汇编器的输 出。 甚至在系统有了链接器和显式指定另一个名字的方式之后, 它仍被保留作为编译的默认 可执行文件)。
在 Unix 首次在 PDP-7运行后不久, Doug McIlroy 在 1969年创造了新系统的第一个新语言:一个 McClure 的 TMG[McClure 65]实现。 TMG 是一种编写编译器(更普通来说, TransMoGrifiers ) 的语言, 通过在一个混合过程元素, 上下文无关的语法标记的自顶而下, 递归降解的风格。 McIlroy 和 Bob Morris使用 TMG 为 Multics 编写了早期的 PL/I编译器。 为了挑战 McIlroy 重新生成 TMG 的技巧, Thmopson 决定 Unix ——当时可能还没有取这个名 字——需要一种系统编程语言。 在很快用 Fortran 尝试一番后, 相反, 他创造了一种他自己 的语言,他命名为 B 。 B 可以认为是没有类型的 C 。更准确,它是被挤进了 8K 字节内存,经
过 Thompson 大脑过滤的 BCPL 。它的名字最有可能表示 BCPL 的缩写,尽管另一种理论认为 它继承自 Bon[Thompson 69],一个 Thompson 在 Multics 的那些日子创造的不相关的语言。 Bon 可能是以他妻子 Bonnie 的名字,或者(根据它的手册中的一个 encyclopedia 引用)以 一种具有咕隆咕隆发音的神奇仪式的宗教命名的。
起源:语言
BCPL 由 Martin Richards于 1960年代中期在访问麻省理工学院时设计,在 1970年代早期 被用在几个有趣的项目中,其中包括牛津大学的 OS6操作系统 [Stoy 72],和施乐公司 PARC 研究中心创造性的 Alto 上的部分工作 [Thacker 79]。 因为 Richards 工作过的麻省理工学院 的 CTSS 系统 [Corbato 62]被用于 Multics 开发,我们也熟悉该语言。最初的 BCPL 编译器被 Rudd Canaday 和贝尔实验室的一些人们迁移到 Multics 和 GE-635 GECOS 系统 [Canaday 69]; 在 Multics 的生命在贝尔实验室的最后痛苦挣扎中,它很快成了那些以后参与 Unix 的人们 选择的语言。
BCPL, B和 C 全都严格符合以 Fortran 和 Algol 60代表的传统过程类型语言。它们都面向 系统编程、小、定义简洁,以及可被简单编译器翻译。它们接近机器,它们引入的抽象以传 统计算机提供的具体数据类型和操作为基础, 它们依赖于输入输出库例程, 与操作系统的其 它交互。尽管并未成功,它们还使用库程序指定其他有趣的控制结构,如协程和过程关闭。 同时,它们的抽象层次足够高,足够用心的话,能达到机器间的可移植性。
BCPL, B 和 C 在语法上差异众多, 粗略地说, 它们是相似的。 程序由全局声明和函数 (过程) 声明组成。 BCPL 中的过程能够嵌套, 但不能引用包含过程中的非静态对象。 B 和 C 避免了这 个限制,通过强加一个更严格限制:完全没有嵌套过程。每一种语言(除了早期版本 B )都 认可分离编译,以及提供了包含指定文件文本的方式。
BCPL 中的几个语法和词法机制是优雅和常见的,甚于 B 和 C 中的那些。例如, BCPL 的过程 和数据声明有更一致的结构,并且它提供了一套更完整的循环构造。尽管 BCPL 程序在概念 上是由未被间隔的字符流,聪明的规则允许语句后的行分界处的大多数分号被忽略。 B 和 C 忽略了这种便利,并以分号来结束大多数语句。不管这些差异, BCPL 的大多数语句和操作 符直接对应 B 和 C 中的相应语句和操作符。
BCPL 和 B 之间的一些结构化的差异源于介质存储的限制。比如, BCPL 声明采用这样 的形式 let P1 be command
and P2 be command
and P3 be command
...
此处的命令表示的程序文本包含完整过程。关联的子声明同时出现,所以名字 P3在 guochengP1内可见。相似地, BCPL 能在一个求得一个值的表达式里包含一组声明和语句, 例如
E1 := valof ( declarations ; commands ; resultis E2 ) + 1
BCPL 编译器可以容易地处理此类构造,在产生输出前,通过存储和分析内存中一个完整程 序解析过的表示。 B 编译器的存储限制要求一个一步技术,通过它尽可能快生成输出,语法 上的重新设计,令这种可能迈进了 C 。
BCPL 中一些不令人满意的地方归因于它的技术问题, 在 B 的设计中它们被有意识的避免了。 例如, BCPL 使用一个“全局向量”(global vector )机制以在分离编译的程序间通信。在 这种模式中, 程序员使用一个全局向量的数值偏移量, 显式关联每个外部可见过程和数据对 象的名字。链接使用这些数值偏移量,在被编译过的代码上完成。 B 起初坚持,整个程序一 次性全部传递给编译器,来规避这个麻烦。 B 的后期实现,和 C 的全部实现,使用一个传统 的链接器, 来解决出现在分离编译文件中的外部名字, 而不是把指定偏移量的负担推给程序 员。
BCPL 到 B 的转换中引入的其它变化,大概是因为风格的缘故,一些仍是有争议的,例如赋 值使用单个字符 =代替 :=。类似地, B 使用 /**/来括起注释,而 B 使用 //注释直至行末的文 本。这显然是从 PL/I继承来的。 (C++重新启用了 BCPL 的注释惯例。) Fortran影响了声 明的语法:B 的声明以一个 auto, static 这样的类型指定符开始,跟着一列名字, C 不仅遵 循这种风格,还把它的类型关键字,加入这种声明的开始处。
在 Richards 的书中文档化的 BCPL 与 B 之间的差别, 并非都是经过深思熟虑的; 我们是从一 个 BCPL[Richards 79]的早期版本开始工作的。例如,用于跳离 switchon 语句的 endcase 在我们 1960年代开始学习该语言时, 并没有出现, 所以 B 和 C 中重复出现的, 用于跳离 switch 语句的关键字 break ,乃是一种背离的发展,而不是清醒的改变。
对比 B 产生过程中发生的普遍的语法变化, BCPL 的核心语义内容——类型结构和表达式求 值——保持不变。 它们两种语言都是无类型的, 或更恰当地说有一种单一的数据类型, “字” (word )或“单元” (cell ),一个固定长度的位模式。这些语言中的内存由此类单元的线 形数组组成, 每一个单元的内容的含义与应用的运算相关。 例如, 求和运算符使用机器的整 数加法指令, 简单相加其运算对象, 其它算术运算同样不清楚它们运算对象的含义。 因为内 存是一个线形数组,只可能解析单元的值为该数组的索引,并且 BCPL 为这个目的提供一个 运算符。在最初的语言中,它被拼写为 rv ,后来为 ! ,但是 B 使用一元 *。因此,如果 p 是 单元,包含另一个单元的索引(其地址,或指向的指针), *p引用被指向单元的内容,作 为表达式的值或赋值对象。
因为指针在 BCPL 和 B 中只不过是整型内存数组的索引,对它们进行算术运算是有意义的:如果 p 是一个单元的地址, 那么 p+1是下一个单元的地址。 这种约定是两种语言中数组语义 的基础。在 BCPL 中,一个人这样写
let V = vec 10
或在 B 中,
auto V[10];
效果是一样的:分配了一个名字为 V 的单元,然后保留另一组 10个连续单元,它们中第一 个的内村索引,被存放在 V 中。按照一般的规则,在 B 中的表达式
*(V+i)
把 V 和 i 相加,并指向 V 后第 i 个位置。 BCPL 和 B 都增加了特别的符号,使这种对数组的 访问更简洁;在 B 中的等价表达式是
V[i]
在 BCPL 中是
V!i
这种引用数组的方法甚至在当时仍是不常见的; C 后来同化它为一种更不常规的方式。 BCPL , B 或 C 都没有强烈支持字符数据;每一个都把字符串当作整型数组,并通过一些惯例 提供了一些一般规则。字符串字面值在 BCPL 和 B 中表示一个使用串内字符初始化的静态区 的地址,被包装成单元。在 BCPL 中,第一个被包装的单元包含串所拥有的字符个数;在 B 中,没有此计数,字符串以一个特别的字符终结,在 B 中杯拼写为“ *e”。这个改变部分是 为了避免把计数值放在一个 8位或 9位槽 (slot ) 产生的串长度限制, 部分是因为维护这个 计数,从我们的经验看来,不如使用一个终结符方便。
在 BCPL ,串中每个字符的使用,是通过被展开为另一个数组,一个字符对应一个单元,然 后进行再次包装; B 提供了对应的例程,但人们更多地使用,另外的访问或替换一个串内字 符的库函数。
更多历史
在 TMG 版本 B 工作后, Thompson 利用 B 重写了 B (编译器)(一个 bootstrapping 步骤)。 在开发中, 他不断与内存限制作斗争:每次语言版本使编译器膨胀令内存几乎不够使用, 但 每次重写利用语言特征的优点, 减少了它的尺寸。 例如, B 引入通用赋值运算符, 使用 x=+y来把 y 加入 x 。这个符号经过 McIlroy 引自 Algol 68[Wijngaarden 75],他将它合并到他实 现的一个 TMG 版本。 (在 B 和早期 C ,该运算符被拼作 =+而不是 +=;这个由 B 的词法分析的 第一种形式的迷惑捷径导致的错误,在 1967年被修复。)
Thompson 通过发明自增 ++和自减 --运算符,走出了更深远的一步;它们的前缀或后缀位置 决定变更是发生在计算运算对象值之前或之后。 它们没有出现在 B 的最早版本中, 而是随后 才出现的。 人们经常猜测, 它们被创造是为了使用, C 和 Unix 在其上首次流行的 DEC PDP-11提供的自增和自减地址模式。这在历史上来说是不可能的,因为 B 被发明的时候还没有 PDP-11。 PDP-7有一些“自增”内存单元,使用这种特性,一个间接内存引用通过它们来自 增单元。这些特征可能提示 Thompson 创造了那些自增运算符;他把前缀和后缀一般化。甚 至, 自增单元没有被直接用于实现这些运算符, 并且这种创新一个更强烈的动机可能是, 他 发觉 ++x的翻译在尺寸上小于 x=x+1。
PDP-7上的 B 编译器不产生机器指令,而是一个由编译器输出组成代码段地址序列,执行基 本运算的解释模式的 threaded 代码 [Bell 72]。这些操作——特别对 B ——典型地运行在一 个简单堆栈机器上。
在 PDP-7的 Unix 系统上,除了 B 本身只有几个东西是 B 写的,因为这个机器太小和太慢, 除了试验而不能做更多事情; 完全用 B 重写操作系统和其它应用程序, 是看起来不可行的代 价高昂的动作。 Thompson 在某些地方,通过提供一个利用换页解释器代码和数据,允许解 释超过 8K 字节的程序的“虚拟 B ”编译器,来释放地址空间,但它对通用程序来说太慢以 致不实用。尽管如此,一些用 B 写的工具还是出现了,包括一个早期版本的, Unix 用户熟 悉的可变精度计算器 dc[McIlroy 79]。我做的最有雄心壮志的工作,是一个把 B 翻译为 GE-635机器指令而非 threaded 代码的真正的交叉编译器。 它是一个精巧的绝技:一个用本 身语言写的,生成在一个,在有 4k 字长用户地址空间的 18位机器上运行的 36位大型机代 码,完全的 B 编译器。这个项目能实现,仅仅是因为 B 的简单性和它的运行时系统。
尽管我们抱有关于实现一个那时,像 Fortran, PL/I或 Algol 68的主要语言的偶然想法。 这样的项目对我们的显得绝望的大:需要更简单和小的工具。 所有这些语言都影响我们的工 作,但是凭我们自己之力来做这些事情则更有趣。
到 1970年时,我们看起来能在 Unix 项目上,获得一个新的 DEC PDP-11。处理器是 DEC 递 交的第一批产品,三个月后,磁盘才到达。通过 threaded 技巧,使 B 程序在其上运行只需 要为运算符重写代码段,和一个我用 B 写的简单的汇编器。很快, dc 成了在其它操作系统 之前,第一个在我们的 PDP-11上被测试的有趣的程序。几乎非常快,但仍需等待磁盘, Thompson 用 PDP-11汇编语言, 重写了 Unix 内核和一些基本命令。 最早的 PDP-11上的 Unix 把机器上 24K 内存中的 12K 给操作系统, 一个很小的空间给用户程序, 其余的作为 RAM 磁盘。 这一版本仅是用于测试,而不是实际的工作;这个机器通过枚举关闭的, knight 的不同尺 寸象棋板的路程,来标记时间。在磁盘到达后,我们把汇编语言转换为 PDP-11上的方言, 和移植一些 B 程序,很快移植到它上面去。
到 1971年时,我们的微型计算机中心开始有了用户。我们都希望更容易编写有趣的软件。 使用汇编显得沉闷, B 不管它的性能问题,已经有了一个小的包含有用服务例程的库,并且
被用于越来越多的新程序。这段时期的最著名的成果,是 Steve Johnson的 yacc 分析—— 生成器 [Johnson 79a]的第一个版本。
B 的问题
我们第一次使用 BCPL 然后是 B 的机器, 是按字寻址的, 这些语言的单一数据类型, “单元” , 能恰当与硬件机器字互相换算。 PDP-11的出现暴露了 B 的语义模型的一些不足。首先,它 从 BCPL 继承的几乎未作改变的字符处理机制是笨拙的:使用库方法把包装的字符串展开到 单个的单元, 然后再次包装, 或者访问或替换单个字符, 在一个面向字节的机器上, 开始变 得笨拙,甚至愚蠢。
其次,尽管最初的 PDP-11没有提供浮点算术运算,制造商承诺将很快提供。浮点运算通过 定义特别的运算符,被添加到我们的 Multics 和 GCOS 的 B 编译器,但是这种机制仅在相应 的机器上才可能,单个字长足够包含一个浮点数;这在 16位 PDP-11上是不成立的。
最后, B 和 BCPL 模型在处理指针时,暗中会做得更多:语言规则,通过定义一个指针作为 字数组的索引, 强迫指针被表示为字索引。 每个指针引用生成一个运行时, 从指针到硬件要 求的字节地址的度量转换。
因为这些理由, 看起来需要一个类型模式来处理字符和字节寻址, 以及为即将到来的浮点硬 件作准备。其它问题,特别是类型安全性和接口检查,看起来并没有变得像以后那样重要。 除了语言本身的问题, B 编译器的 threaded 代码技术得到的程序,比他们对应的汇编语言 版本慢很多,以至我们对用 B 纪录操作系统或它的中心工具的可能性打折扣。
到 1971年时, 我开始通过添加一个字符类型, 并重写它的编译器以生成 PDP-11机器指令而 非 threaded 代码,来扩展 B 语言。因此从 B 到 C 的转换,与创造一个同汇编语言竞争,能 产生足够快和小的程序的编译器, 是同时进行的。 我称这个轻微扩展的语言为 NB , 表示 “新 B ”(new B)。
C 萌芽
NB 只存在了很短时间,以至没有编写一个它的完整描述。它提供类型 int 和 char ,它们的 数组,指向它们的指针,用典型风格声明如下
int i, j;
char c, d;
int iarray[10];
int ipoint[];
char carray[10];
char cpoint[];
数组的语义与在 B 和 BCPL 中保持一样:iarray 和 carray 的声明产生的单元,被动态初始 化为分别指向十个整数和字符序列中的第一个的值。 ipointer 和 cpointer 的声明省略了尺 寸, 以表明没有存储被自动分配。 在过程内部, 语言对指针的解释与数组变量是一样的:一 个指针声明产生一个单元与数组声明的区别仅在, 程序员被期望给它赋值, 而不是让编译器 分配空间和初始化单元。
值存储在数组的单元中, 指针是按字节计算的, 对应存储区的机器地址。 因此通过指针间接 引用, 不意味着比按比例缩放指针从字到字节的偏移, 有更多运行时开销。 另一方面, 对应 数组取下标的机器代码和指针算术依赖于数组和指针的类型:计算 iarray[i]或 ipointer+i表示按比例缩放加数 i 与所指向对象的尺寸。
这些语义表示一个来自 B 的容易转换, 我在它们上面实验了几个月。 当我尝试扩展类型符号, 特别是添加结构化(纪录)类型时,问题变得明显。结构看起来,应该以一种直接的方式影 射到机器的内存,但一个结构包含一个数组,没有合适的地方隐藏包含数组基地址的指针, 也没有方便的方式安排被初始化的对象。例如,早期 unix 系统的目录条目,在 C 可以被描 述为
struct {
int inumber;
char name[14];
};
我希望结构不能仅仅是体现抽象对象的特征, 也要描述可能从目录读到的位集合。 编译器能 在哪里隐藏指向语义要求的 name 的指针呢?即使结构被想象的更抽象,指针的空间也能以 某种方式隐藏, 我如何处理在分配一个, 可能是一个结构包含数组再包含结构到任意深度的 复杂对象时,完全初始化这些指针的技术问题?
这个解决方案形成了一个,在无类型 BCPL 和类型化 C 之间进化链中的重要飞跃。它移除了 指针在内存的具体化。相反促成数组名出现在表达式中时生成指针。 C 语言的这个规则一直 存在至今, 就是数组类型的值当出现在表达式中时, 被转换成指向组成数组的对象中的第一 个对象的指针。
这个发明使现存的 B 代码能继续工作, 不管下层语言语义的改变。 仅有几个程序为了调整它 的起点,把新值赋给数组名——在 B 和 BCPL 中是可能的,在 C 中无意义——都被很容易修 改。更重要的是,新语言保持一致性和对数组有效的(如果并非常见)可解释性,开辟了通 往复杂类型结构的道路。
第二个创新, 极力明显地把 C 与它的前辈们区分开来, 那就是更完整的类型结构, 尤其是在 声明语法中的表达式, NB 提供基本的类型 int 和 char ,它们的数组,指向它们的指针,但
没有更进一步的组合。 通用化也被要求:给定一个任意类型对象, 描述一个包含它们的新对 象,从一个函数求得它,或一个指向它的指针,都是可能的。
对每一个此类复合类对象, 已经有了一种讨论下层对象的方式:索引数组, 调用函数, 间接 引用指针。类比推理导致了一种名字镜像声明语法,名字特征出现的表达式语法,因此,
int i, *pi, **ppi;
声明一个整数, 一个指向整数的指针, 一个指向指向整数的指针的指针。 这些声明的语法反 映 i , *pi和 **pi用于表达式时,都得到一个整数类型。类似地,
int f(), *f(), (*f)();
声明一个返回整型值的函数,一个返回整型指针的函数,一个指向返回整型函数的指针;
int *api[10], (*pai)[10];
声明一个整型指针数组, 一指向整型数组的指针。 在所有这些情况中, 一个变量的声明类似 它在表达式中的用法,它的类型是在声明中,置于开头的那个。
C 语言采用类型组合模式归功于 Algol 68, 尽管它或许没有以 Algol 追随者认可的模式出现。 我从 Algol 获取的主要概念,是一个基于原子类型的类型结构(包括结构),组合为数组, 指针(引用),和函数(过程)。 Algol 68关于 union 和转换的概念的影响,在后来也表 现出来。
创造类型系统之后,我认为这些相关的语法,新语言的编译器需要一个新名字。 NB 看起来 不够有自己的特点。我决定延用单字母风格并取名为 C ,而并没有肯定答复,关于名字是否 表示字母表或是 BCPL 中的字母顺序的问题。
C 初生
在语言取名之后,其它改变很快在进行,例如引入 ||和 &&操作符。在 BCPL 和 B 中,表达式 求值依赖于上下文:if 和其它条件语句内, 把一个表达式的值与零比较, 这些语言对与 (&) 和或(or )运算符会给与特别解释。在普通上下文中,它们进行按位运算,但在这个 B 语句 中
if (e1 & e2) ...
编译器必须对 e1求值并且如果它是非零值, 对 e2求值, 并且如果它也是非零, 则执行依赖 if 的语句。在 e1和 e2内的 &和 |运算符的求值要求,以此类推。此类真值上下文中的布尔 运算符的短路(short-circuit )语义被期望,但是运算符的过度使用,难以解释和运用。 在 Alan Snyder的建议下,我提出 &&和 ||运算符,以使这种机制更直接。
它们姗姗来迟的出现,说明了 C 语言中不合适的优先级规则。一个人在 B 中这样写
if (a==b & c) ...
来检测是否 a 和 a 相等并且 c 是否非零;在这样的条件表达式中, &比 ==的优先级低就好得 多。在从 B 转变为 C 时,一个人想在这中表达式中,用 &&代替 &;为了使这种转换不那么痛 苦, 我们决定保持 &运算符与 ==有相等的优先级, 仅仅把 &&的优先级与 &的做了细微区分。 今 天,看起来变动 &和 ==的相对优先级会更好,这样就能简化一个 C 通用的惯用法:为了测试 一个掩码值和另一个值,人们必须这样写
if ((a&mask) == b) ...
那个内层的圆括弧是需要的,但会被容易忘记。
许多其它改变发生在 1972-3年,但是最重要的是引入了预处理器,部分是因为 Alan Snyder[Snyder 74]的催促,但也是为了承认在 BCPL 和 PL/I中已存在的文件包含机制。它 的原始版本极之简单,仅提供文件包含和简单字符串替换:#include和参数化宏 #define。 之后很快对它进行了扩展,主要是 Mike Lesk的工作,后来是 John Reiser,合并了宏与参 数还有条件编译。 预处理原本是做为语言本身的一个辅助手段。 确实, 这么多年来, 它甚至 未被调用除非在源文件的开始处包含了一个特别信号。 这种看法一直持续, 解释了在早期参 考手册中,预处理器语法与语言其它部分的不完整整合,和对它的不精确描述。
可移植性
在 1973年早些时候, 现代 C 的基础部分已经完成。 在那年夏天, 语言和编译器已足够强壮, 以允许我们在 PDP-11上用 C 重写 Unix 内核。(Thompson 已用 C 的早期版本,作了一个生 成系统代码的简略尝试——在结构类型出现之前—— 1972年时, 但是放弃了那次努力。 ) 也 是在这段时期,编译器被转向了其它临近的机器,特别是 Honeywell 635和 IBM 360/370; 因为语言不能独自存在,现代库原型已被开发。特别是 Lesk 写了一个后来被修改成为 C 的 “标准 I/O”例程的“可移植 I/O包” [Lesk 72]。在 1978年, Brian Kernighan和我出版 了 C 程序设计语言 [Kernighan 78]。尽管这本书没有描述一些添加的,在后来变成通用的特 性, 它充当了语言标准, 直到一个正式的标准在十多年后被采纳。 尽管我们在本书上关系密 切,在工作中有着很明显的区别:Kernighan 编写几乎所有的解释性的内容,我负责参考手 册中包含的附录,和与 Unix 系统的接口的那一章。
在 1973-1980年间,语言又有了一些发展:类型结构有了 unsigned, long, union 和枚举类 型, 并且结构几乎成为第一类对象 (缺少一个字面值符号) 。 在它的环境和其它伴随技术中, 也产生了同等重要的发展。用 C 编写 Unix 内核,让我们对语言的有用性、效率有足够的信 心, 我们开始重新编码系统的应用程序和工具, 并且随后把其中最有趣的东西移到其它平台。 像在 [Johnson 78a]中描述的那样,我们发现传播 Unix 工具的最困难的问题,并不在 C 语言
和新硬件的接口,而是在适应其它操作系统上的现有软件。因此 Steve Johnson开始了在 pcc 上的工作, 一个可被容易移植到新机器上去的 C 编译器 [Johnson 78b], 在他, Thompson 和我开始把 Unix 系统移到 Interdata 8/32计算机的时候。
语言在这时期的改变, 特别是 1977年左右, 很大程度上集中在可移植性和类型安全的考虑, 是为了努力处理我们预见和观察到的,在相当多的代码移到新的 Interdate 平台产生的问 题。 C 在那时仍表现很强的无类型根源的迹象。例如,在早期语言手册或存在的代码中,指 针很少被与整型内存索引区分开来; 字符指针的算术特性和无符号整数的相似性, 使抵制识 别它们的尝试很难。 无符号类型被添加进来使无符号算术有效, 不让它与指针操作混淆在一 起。 类似地, 早期语言容许了整数与指针间的赋值, 但这个实践并未开始得到鼓励; 一个类 型转换的符号(在 Algol 68的例子中被称作“ casts ”)被发明,以更明显指示类型转换。 由于 PL/I例子的诱惑,早期 C 没有强烈绑定结构指针与它们所指向的结构,并且允许程序 员用 pointer->member而几乎不用考虑指针的类型; 这样的表达式未受批判地, 被当作到指 针代表的内存区的引用,成员名字仅表示一个偏移量和一个类型。
尽管 K&R第一版描述了, 把 C 的类型结构带到当前形式的大部分规则, 许多用旧式、 更松散 风格写的程序也被允许, 所以编译器也要忍受它们。 为了鼓励人们更多注意正式的语言规则, 为了发现合法但不可信任的写法, 以及帮助发现分离编译中, 简单机制没有察觉的不匹配的 接口, Steve Johnson改变他的 pcc 编译器产生了 lint[Johnson 79b],来扫描一批文件并 标记可疑的写法。
在使用中成长
我们在 interdata 8/32的可移植性试验的成功,很快导致了 Tom London和 John Reiser在 DEC VAX 11/780上的另一次成功。这种机器比 Interdata 变得更流行,并且 Unix 和 C 语言在 AT&T公司内部和外面都开始快速传播。尽管在 1970年代中期, Unix 已经被用于贝 尔系统和公司外的一小群以研究为目的的工业企业、 学院和政府机构的各种项目, 它的真正 成长是在达到可移植性之后才开始。特别是 AT&T的计算机系统部门基于其开发和研究小组 的 System III和 System V版本系统,和加州大学伯克利分校继承自 Bell 实验室研究组的 BSD 系列的出现。
在 1980年代, C 语言的使用广泛传播,并且编译器出现在几乎每一种机器体系结构和操作 系统; 特别是它变成一种个人计算机上流行的编程工具, 包括对这些机器的商业软件制造商 和对编程有兴趣的终端用户。 在那十年开始时, 几乎每一种编译器都是基于 Johnson 的 pcc ; 到 1985年,有了许多成型的独立的编译器产品。
标准化
到 1982年时, 形势很明显, C 需要正式的标准化。 K&R第一版最近似一个标准, 却不再反应 真实使用中的语言; 尤其是它都没有提及 viod 和 enum 类型。 但是它预示了通往结构的更新
的方法, 仅在语言对他们的赋值, 将他们传递给函数和从函数接受他们, 及将成员名字与包 含它们的结构或 union 严格关联的支持被发表后。 尽管 AT&T发布的编译器包含了这些修改, 大部分编译器供应商未基于 pcc 的编译器也加入了他们, 对语言仍没有完整、 权威性的描述。 K&R第一版在很多语言细节上也不够精确,对于 pcc 这个“参照编译器”来说,它日益显得 不切实际; K&R甚至没有很好表达它索要描述的语言,把后续扩展仍到了一边。最后, C 在 早期项目中的使用受商业和政府合同支配, 它意味着一个认可的正式标准是重要的。 因此 (在 M. D. McIlroy 的催促下), ANSI 于 1983年夏天,在 CBEMA 的领导下建立了 X3J11委员会, 目的是产生一个 C 标准。 X3J11在 1989年末提出了一个他们的报告 [ANSI 89],后来这个标 准被 ISO 接受为 ISO/IEC 9899-1990。
一开始, X3J11委员会在语言扩展上采取了谨慎、保守的态度。他们认真对待他们的目标:“完善一个清晰、 一致和无二义性的 C 程序设计语言标准, 它规范 C 通用、 现行的定义, 以 及促进用户程序在不同 C 语言环境的可移植性。” [ANSI 89] 委员会意识到,仅仅靠发布一 个标准并不会改变这个世界。这超出了我的期望。
X3J11只向语言本身引入了一个真正重要的改变:它使用从 C++[Stroustrup 86]借鉴的语法, 把形式参数类型添加到函数类型签名中。用以前的风格,外部函数是这样声明的:
double sin();
它仅提及 sin 是一个返回一个 double 类型 (即是 double 精度的浮点数) 值的函数。 在新的 风格中,这个更好的声明
double sin(double);
使参数类型明显化并鼓励更好的类型检查和适当的转换。 即使这个添加, 尽管它产生一个明 显更好的语言, 也引起了困难。 委员会有理由认为, 简单的不合法的旧式风格函数定义和声 明不可行, 然而仍然同意新式更好。 这种必然的妥协像它本应该的那样好, 尽管允许两种形 式使语言复杂化,并且可移植软件作者必须应付不符合标准的编译器。
X3J11也引入了一大堆较小的附加和修改, 例如, 类型限定词 const 和 volatile , 和稍微有 些不同的类型提升规则。然而,标准化过程没有改变语言的特征。特别是, C 标准没有尝试 在形式上指定语言语义, 所以在一些细微的地方上还可以存在争议; 而且, 它很好解释了自 最初描述以来,在使用中的改变,并且它对与一个它的基本实现是足够精确的。
因此核心 C 语言经过标准化过程几乎未受损害, 并且标准作为一个更好、 仔细的条文出现了, 而不是一次新发明。 更多重要的改变发生在语言的环境中:预处理器和库。 预处理器使用与 其余部分语言截然不同的惯例执行宏替换。它和编译器的交互从未被很好描述,并且 X3J11企图纠正这种情形。 这种结果明显好于 K&R第一版中的解释; 除了变得更加易于理解, 它提 供像标记串联的操作,以前只在偶尔的实现中可用。
X3J11正确理解了一个完整和仔细的标准 C 描述,和它在语言本身上的工作一样重要。 C 语 言本身没有提供输入——输出或任何其它与外界的交互,所以依赖一套标准方法。在出版 K&R时, C 主要是被当作 Unix 的系统编程语言; 尽管我们提供了可被其它操作系统容易转换 的库例程例子, Unix 的底层支持是被隐含默认的。 因此, X3J11委员会花了大量时间来设计 和归档一套,对所有符合标准的实现都可用的库例程。
通过标准过程, X3J11委员会的当前活动被限制出版对现存标准进行的解释。然而,由 Rex Jaeschke 召集的作为 NCEG (C 数值扩展小组)的一个非正式组织,被正式接受为附属组 X3J11.1,他们继续考虑对 C 的扩展。像这个名字隐含的那样,这些可能的扩展中的许多, 是为了是语言在数值上的使用更合适:例如,边界动态决定的多维数组,加入 IEEE 算术处 理方式, 及使语言在具有向量和其它高级结构特征的机器上更有效。 并非所有这些可能的扩 展都是数值相关的;他们添加了一个结构字面值符号。
后来者
C 和 B 有一些直接的后代,尽管他们不能与 Pascal 在产生后代上竞争。很早有发展了一个 分支。当 Steve Johnson在 1972年休假期间访问滑铁卢大学时,他带来了 B 。它在那儿的 Honeywell 机器上变得流行。 后来产生了 Eh 和 Zed (加拿大人对 “ B 之后是什么?” 的答案) 。 当 Johnson 在 1973年返回贝尔实验室时, 让他感到惊慌的是, 那个他在加拿大播种的语言, 在他回来后在家里得到了发展;甚至他自己的 yacc 程序已经由 Alan Snyder用 C 重写了。 更多近代的 C 的后代可能包括并发 C[Gehani 89]、对象 C[Cox 86]、 C*[Thinking 90]、尤 其是 C++[Stroustrup 86]。这个语言也被广泛用于各种各样编译器的中间表示(基本上是 当作一种可移植汇编语言) , 对直接后代 C++, 以及类似 Modula 3[Nelson 91]和 Eiffel[Meyer 88]的独立语言。
批评
C 在它那类语言中的两个最具特征的思想是:数组和指针的关系, 声明语法模拟表达式语法。 它们也列入它最为常受批评的特征中,并且也常成为初学者的绊脚石。历史的偶然和错误, 在这两种情形中, 更加剧了它的困难。 这些其中最重要的是 C 编译器对类型错误的容忍。 上 述历史中应该清楚的是, C 由无类型语言进化而来。它不是陡然以一个全新的语言,带着它 本身的规则, 出现在它最早期的用户和开发者的面前; 相反我不得不在语言发展的同时, 不 断地改变现有程序,并且容忍现有代码。(后来, ANSI X3J11委员会标准化 C 面临同样的 问题。)
在 1977年或之后的编译器,没有对整数和指针间的赋值,或使用错误类型的对象来引用结 构成员产生抱怨。 尽管 K&R第一版中的语言定义, 在处理它的类型规则上是相当 (尽管不完 整) 一致的, 那本书承认已存在的编译器不用坚持那些规则。 而且, 一些为了简化早期过渡 设计的规则,给以后带来了混乱。例如,函数声明中的空方括号
int f(a) int a[]; { ... }
是一个活化石,一个 NB 残余的声明指针的方式;在这个特殊的情况下, a 在 C 中被解释为 一个指针。 这种表示, 部分是应为兼容性而存活下来, 部分是它允许程序与于读者进行交流 的理由, 向 f 传递一个数组生成的指针, 而不是到一个整型的引用的企图。 不幸地是, 它所 起到的迷惑的作用和它带来的提醒一样多。
在 K&RC中,为函数调用提供正确类型的参数,是程序员的责任,而现有的编译器不检查类 型约定。 原始语言没有在函数类型签名包括参数类型, 是一个重大, 和真正需要 X3J11委员 会做出大胆和最痛苦革新的缺陷。 早期设计在我对技术问题的预防中被解释了, 尤其是分离 编译原文件交叉检查, 和我在对从无类型语言改进到类型语言的含义的不完整理解。 在上面 提及的 lint 程序,尝试缓解这个问题:作为 lint 的功能之一, lint 通过扫描一系列源文 件,比较调用时的函数参数类型和在他们的中的定义,检查整个程序的一致性。
对于已察觉到的语言的复杂性, 产生了一些意外的语法。 间接引用运算符, 在 C 中被写作 *, 在语法上是一个前缀运算符,正象在 BCPL 和 B 中一样。这在简单的表达式中很有效,但是 在更复杂的情况, 需要括号来指示分析。 例如, 为了区分对函数返回值的间接引用与通过指 针调用函数, 分别写作 *fp()和 (*pf)()。 表达式使用的风格贯彻到声明, 所以这些名字可以 声明为
int *fp();
int (*pf)();
在更过分但仍现实的例子中,事情变得更糟糕:
int *(*pfp)();
是一个到返回一个整型指针的函数的指针。出现了两个结果。最重要的是, C 有一个相当丰 富的类型描述(比如说跟 Pascal 比较)集合。比如在 C —— Algol 68描述对象,语言中声 明与表达式一样,很难理解,只是因为对象它们本身很复杂。第二个结果归因于语法细节。 声明在 C 中, 应该用一个从内到外的风格来阅读, 可能难以领会 [Anderson 80]。 Sethi[Sethi 81]发现,如果间接引用运算符被当作一个后缀而不是前缀运算符,许多嵌套的声明和表达 式会更简单,但这时改变已经太晚了。
不管它的困难, 我认为 C 声明的方式是合理的, 并且觉得它很合适; 它是一个有用的一致性 原则。
C 的其它特征,它对数组的处理,在实际中更令人疑惑,尽管它也有实在的优点。尽管指针 和数组间的关系并不通常, 它还是能被学会的。 而且, 语言在描述重要概念方面, 表现了相 当强大的功能,例如,仅仅使用几个基本规则和惯例,向量长度在运行时可变。特别是,字
符串处理被采用与其它数组一样的机制,附加上 null 字符终结一个串的惯例。把 C 的那个 方法与两个同时期的语言 Algol 68和 Pascal[Jensen 74]比较,是有趣的。数组在 Algol 68中有固定边界, 或可变的:很多机制被要求, 存在语言定义和编译器中, 为了提供灵活数组 (并非所有编译器都实现了它们)。原始 Pascal 只有固定尺寸数组和串,这已被证明是受 限制的 [Kernighan 81]。后来,它是部分固定,尽管最终的语言没有广泛运用。
C 把串当作在管理上用标记终结的字符数组。除了用串字面值初始化的特殊规则,串的语义 完全包含于更通常的控制数组的规则, 结果是语言比一个把串当作独立数据类型的语言, 更 易于描述和翻译。 它的方式产生了一些开销:某些串操作比在其它设计里需要更多开销, 因 为应用代码或库例程有时必须查找串尾, 因为几乎没有可用的内置运算, 也因为串的存储边 界管理极大转向了用户。而且, C 的串处理方法很有效。
另一方面, C 对数组的处理,通常(不仅指串)不幸在优化和以后的扩展有隐含意义。指针 在 C 程序里流行, 不论是显式声明或由数组形成, 意味优化器必须谨慎, 并必须使用小心的 数据流向技巧才能得到满意的结果。 复杂的编译器能理解大多数指针可能改变, 但一些重要 对于分析仍然显得困难。 例如, 带有从数组继承而来的指针参数的函数, 在向量机器上很难 编译生成有效代码,因为确定一个参数指针,没有重迭另一个参数指向的数据几乎不可能, 或者外部可访问。更重要的是, C 的定义如此明确描述了数组的语义,以致改变或扩展数组 为更基本对象, 以及允许把它们当作整体操作, 变得不能适用当前语言。 甚至允许声明和使 用动态决定尺寸的多维数组的扩展,也不是完全直接 [MacDonald 89] [Ritchie 90],尽管 它们使用 C 中编写数值库更容易。因此, C 通过一个统一和简单的机制,包含了实践中串和 数组的最重要使用,但是把问题留给了高效率实现和扩展。
除了上面讨论的,语言和其描述中存在许多更小的不适当地方。也有常见的批评可以提及, 但不是逐条表明。 其中首要的是语言和它的一般要求的环境, 没有为编写很大的系统提供帮 助。命名结构只提供了两个主要的级别:“ external ”(到处可见)和“ internal ” (在单 个过程内)。可见性的一个中间级别(在单个数据和过程文件内)与语言的关系很微弱。所 以,没有对模块化的直接支持,项目设计师不得不使用自己的约定。
类似, C 本身两种存储期:“ automatic ” 对象当控制流程存在或低于过程时存在, “ static ” 存在于程序的全部执行期。 动态分配仅由一个库例程提供, 并且管理它们的负担落在程序员 一方。 C 反对自动垃圾回收。
因此成功?
C 的成功远超出了早期的期望。哪些品质促进它得到广泛使用呢?
Unix 本身的成功无疑是最重要的因素; 它让这个语言可以被几十万人使用。 相反, C 在 Unix 中的使用和随之发生的到各种各样机器的可移植性, 自然对系统的成功非常重要。 但是, 语 言进入其它环境,提供了更重要的价值。
尽管某些方面对初学者甚至偶尔对老手都是神秘的, C 不失为一个简单和小的语言,可被简 单和小的编译器翻译。 它的类型和操作充分依据于真实机器, 让人们容易理解机器如何工作, 并学会生成时间和空间效率程序的惯用法也不困难。 同时, 语言充分抽象于机器细节, 程序 可移植性也可以达到。
同样重要的是, C 和它的主要库支持,总是保证能存在一个真实环境中。它不是被设计用来 孤立验证某一点, 或作为一个例子, 而是作为一个用来写有用程序的工具; 它总是意味着同 一个大型操作系统交互, 并用来创建更大工具。 一个节俭、 实际的方法影响了进入 C 中的事 物:它覆盖了多数程序员的基本需要,但不尝试提供太多东西。
最后, 不管自它第一次不正式、 不完整描述发布以来经受的变化,真实的 C 语言, 像几百万 使用许多不同编译器的用户见到的一样,与那些类似流行的语言,比如 Pascal 和 Fortran 比较, 保持着显著的稳定和一致性。 存在许多不同的 C 的方言——最显著的是那些由更古老 K&R和更新的标准 C 的描述——但基本上, C 比其它语言保持着更自由的属性扩展。或许最 重要的扩展,是用于处理某些 Intel 处理器的怪异之处的“ far ”和“ near ”指针限定符。 尽管可移植性不是 C 的原始设计中的一个主要目标, 它在从最小的个人计算机到最大的超级 计算机的不同机器上,编写程序、甚至操作系统方面取得了成功。
C 诡异重重、充满缺陷,却取得了极大成功。尽管历史的机缘的却起了帮助,它显然符合系 统实现语言的需要, 并足够有效以取代汇编语言, 仍然足够抽象和在广泛不同环境中流畅描 述算法和交互。
致谢
值得简要总结在今天的 C 的发展中, 那些直接贡献者们在语言发展史中的角色。 Ken Thompson 在 1969-70年创造了 B ; 它直接继承自 Martin Richards 的 BCPL 。 Dennis Ritchie 在 1971-73年把 B 转化为 C ,保持 B 的大部分语法,但添加了类型和许多其它改变,并编写了第一个编 译器。 Ritchie, Alan Snyder, Steven C. Johnson, Michael Lesk 和 Thompson 在 1972-1977年间贡献了语言设计思想, Johnson 的可移植编译器被广泛使用。在这段时期内,库例程集 合得到相当发展,感谢这些人们和贝尔实验室其它许多人。在 1978年, Brian Kernighan和 Ritchie 写作了多年被当作语言定义的那本书。在 1983年初, ANSI X3J11委员会标准化 了 C 语言。特别值得注意的是委员会官员 Jim Brodie, Tom Plum和 P. J. Plauger,和后 续草案标准编辑 Larry Rosler和 Dave Prosser的努力。
我感谢 Brian Kernighan, Doug McIlroy, Dave Prosser, Peter Nelson, Rob Pike, Ken Thompson 和编程语言历史会议负责人员对准备这篇文章的建议。
参考
[ANSI 89]
American National Standards Institute, American National Standard for Information
Systems — Programming Language C, X3.159-1989.
[Anderson 80]
B. Anderson, `Type syntax in the language C: an object lesson in syntactic innovation,' SIGPLAN Notices 15 (3), March, 1980, pp. 21-27.
[Bell 72]
J. R. Bell, `Threaded Code,' C. ACM 16 (6), pp. 370-372.
[Canaday 69]
R. H. Canaday and D. M. Ritchie, `Bell Laboratories BCPL,' AT&T Bell Laboratories internal memorandum, May, 1969.
[Corbato 62]
F. J. Corbato, M. Merwin-Dagget, R. C. Daley, `An Experimental Time-sharing System,' AFIPS Conf. Proc. SJCC, 1962, pp. 335-344.
[Cox 86]
B. J. Cox and A. J. Novobilski, Object-Oriented Programming: An Evolutionary Approach, Addison-Wesley: Reading, Mass., 1986. Second edition, 1991.
[Gehani 89]
N. H. Gehani and W. D. Roome, Concurrent C, Silicon Press: Summit, NJ, 1989. [Jensen 74]
K. Jensen and N. Wirth, Pascal User Manual and Report, Springer-Verlag: New York, Heidelberg, Berlin. Second Edition, 1974.
[Johnson 73]
S. C. Johnson and B. W. Kernighan, `The Programming Language B,' Comp. Sci. Tech. Report #8, AT&T Bell Laboratories (January 1973).
[Johnson 78a]
S. C. Johnson and D. M. Ritchie, `Portability of C Programs and the UNIX System,' Bell Sys. Tech. J. 57 (6) (part 2), July-Aug, 1978.
[Johnson 78b]
S. C. Johnson, `A Portable Compiler: Theory and Practice,' Proc. 5th ACM POPL Symposium (January 1978).
[Johnson 79a]
S. C. Johnson, `Yet another compiler-compiler,' in Unix Programmer's Manual, Seventh Edition, Vol. 2A, M. D. McIlroy and B. W. Kernighan, eds. AT&T Bell Laboratories: Murray Hill, NJ, 1979.
[Johnson 79b]
S. C. Johnson, `Lint, a Program Checker,' in Unix Programmer's Manual, Seventh Edition, Vol. 2B, M. D. McIlroy and B. W. Kernighan, eds. AT&T Bell Laboratories: Murray Hill, NJ, 1979.
[Kernighan 78]
B. W. Kernighan and D. M. Ritchie, The C Programming Language, Prentice-Hall: Englewood Cliffs, NJ, 1978. Second edition, 1988.
[Kernighan 81]
B. W. Kernighan, `Why Pascal is not my favorite programming language,' Comp. Sci. Tech. Rep. #100, AT&T Bell Laboratories, 1981.
[Lesk 73]
M. E. Lesk, `A Portable I/O Package,' AT&T Bell Laboratories internal memorandum ca. 1973.
[MacDonald 89]
T. MacDonald, `Arrays of variable length,' J. C Lang. Trans 1 (3), Dec. 1989, pp. 215-233.
[McClure 65]
R. M. McClure, `TMG— A Syntax Directed Compiler,' Proc. 20th ACM National Conf. (1965), pp. 262-274.
[McIlroy 60]
M. D. McIlroy, `Macro Instruction Extensions of Compiler Languages,' C. ACM 3 (4), pp. 214-220.
[McIlroy 79]
M. D. McIlroy and B. W. Kernighan, eds, Unix Programmer's Manual, Seventh Edition, Vol. I, AT&T Bell Laboratories: Murray Hill, NJ, 1979.
[Meyer 88]
B. Meyer, Object-oriented Software Construction, Prentice-Hall: Englewood Cliffs, NJ, 1988.
[Nelson 91]
G. Nelson, Systems Programming with Modula-3, Prentice-Hall: Englewood Cliffs, NJ, 1991.
[Organick 75]
E. I. Organick, The Multics System: An Examination of its Structure, MIT Press: Cambridge, Mass., 1975.
[Richards 67]
M. Richards, `The BCPL Reference Manual,' MIT Project MAC Memorandum M-352, July 1967.
[Richards 79]
M. Richards and C. Whitbey-Strevens, BCPL: The Language and its Compiler, Cambridge Univ. Press: Cambridge, 1979.
[Ritchie 78]
D. M. Ritchie, `UNIX: A Retrospective,' Bell Sys. Tech. J. 57 (6) (part 2), July-Aug, 1978.
[Ritchie 84]
D. M. Ritchie, `The Evolution of the UNIX Time-sharing System,' AT&T Bell Labs. Tech. J. 63 (8) (part 2), Oct. 1984.
[Ritchie 90]
D. M. Ritchie, `Variable-size arrays in C,' J. C Lang. Trans. 2 (2), Sept. 1990, pp. 81-86.
[Sethi 81]
R. Sethi, `Uniform syntax for type expressions and declarators,' Softw. Prac. and Exp. 11 (6), June 1981, pp. 623-628.
[Snyder 74]
A. Snyder, A Portable Compiler for the Language C, MIT: Cambridge, Mass., 1974. [Stoy 72]
J. E. Stoy and C. Strachey, `OS6— An experimental operating system for a small computer. Part I: General principles and structure,' Comp J. 15, (Aug. 1972), pp. 117-124.
[Stroustrup 86]
B. Stroustrup, The C++ Programming Language, Addison-Wesley: Reading, Mass., 1986. Second edition, 1991.
[Thacker 79]
C. P. Thacker, E. M. McCreight, B. W. Lampson, R. F. Sproull, D. R. Boggs, `Alto: A Personal Computer,' in Computer Structures: Principles and Examples, D. Sieworek, C. G. Bell, A. Newell, McGraw-Hill: New York, 1982.
[Thinking 90]
C* Programming Guide, Thinking Machines Corp.: Cambridge Mass., 1990.
[Thompson 69]
K. Thompson, `Bon— an Interactive Language,' undated AT&T Bell Laboratories internal memorandum (ca. 1969).
[Wijngaarden 75]
A. van Wijngaarden, B. J. Mailloux, J. E. Peck, C. H. Koster, M. Sintzoff, C. Lindsey, L. G. Meertens, R. G. Fisker, `Revised report on the algorithmic language Algol 68,' Acta Informatica 5, pp. 1-236.
Copyright ? 2003 Lucent Technologies Inc. All rights reserved.
Unix 历史与发展
3g 手机 ,2g 手机什么意思
终端 [1]通常是指那些与集中式主机系统 (例如 IBM 大型计算机 ) 相连的 “ 哑 ” 用户设 备。 终端从用户接收键盘输入, 并且将这些输入发送给主机系统。 主机系统处理 这个用户的键盘输入和命令,然后输出返回并显示在这个终端的屏幕上。
3G 手机可支持可视电话、手机音乐、手机高速上网、手机搜索、手机电视等多 媒体信息服务。
2G 手机支持通话、短信、手机上网(慢)等(山寨手机也支持手机看电视但不 是上网看而是手机本身自带的程序软件)
2G 手机少了 3G 手机所支持的多媒体信息服务
所谓 3G 手机通俗地说就是指第三代(The Third Generation)手机。随着科技 和经济的发展, 手机现在已不再是白领们的专利了, 而且, 目前的手机的品种和 型号也是多的让人目不暇接,从第一代模拟制式手机到第二代的 GSM 、 TDMA 等数字手机, 再到现在的第三代手机, 手机已经成了集语音通信和多媒体通信相 结合, 并且包括图像、 音乐、 网页浏览、 电话会议以及其它一些信息服务等增值 服务的新一代移动通信系统。
许多人和 3G 手机的第一次接触始于诺基亚的一个手机广告。 一个快乐的旅游者 手持 3G 手机徘徊在一个陌生的城市, 手机里显示的街道地图指引他顺利抵达了 目的地。 3G 手机的名称繁多,国际电联称之为
具备强大功能的基础是 3G 手机极高的数据传输速度,目前的 GSM 移动通信网 的传输速度为每秒 9. 6K 字节,而第三代手机最终可能达到的数据传输速度将 高达每秒 2兆字节。 而为此做支撑的则是互联网技术充分糅合到 3G 手机系统中, 其中最重要的就是数据打包技术。在现有 GSM 上应用数据打包技术发展出的 GPRS 目前已可达到每秒 384K 字节的传输速度,这相当于 D -ISDN 传输速度 的两倍。 3G 手机支持高质量的话音, 分组数据, 多媒体业务和多用户速率通讯, 将大大扩展手机通讯的内涵。
想知道什么是真正的 3G 生活吗?你的眼镜、手表、化妆盒、旅游鞋,任何一件 你能看到的物品都有可能成为 3G 终端。当带宽和技术具备时,这个集成许多功 能的终端使我们不仅可以随时随地通信, 更可以双向下载传递资料、 图画、 影像, 当然更可以和从未谋面的陌生人网上联线对打游戏。据专家介绍, 3G 时代的手 机除了能高质量的完成目前手机所做的语音通信外, 还能进行多媒体通信。 用户 可以在 3G 手机的触摸显示屏上直接写字、绘图,并将其传送给另一台手机,而 所需时间可能不到一秒。 当然, 也可以将这些信息传送给一台电脑, 或从电脑中 下载某些信息;用户可以用 3G 手机直接上网,查看电子邮件或浏览网页;将有 不少型号的 3G 手机自带摄像头,这将使用户可以利用手机进行电脑会议,甚至
使数字相机成为一种
范文四:中国电影的发展史
中国电影
中国电影的发展经历了艰难的历程,每个时代都有自己的产物,是突出当时那一社会文化的,每一次的发展伴随着每一次的改革,从起初的普通电影到现在的快播电影,让中国电影有了质的飞跃,每一次的发展都是当时的社会见证,更形象的表现了当时的社会情形.. 1903年中国人第一次放映电影;
1905年中国第一部电影诞生-------《定军山》;
1907年第一座电影院平安电影公司在北京长安街建成;
1930年12月中国第一部电影插曲《寻兄词》诞生;
1931年3月中国第一部有声电影公开上映;
1928年到1931年我国第一部电影长系列《火烧连云寺》出现;
1933年蝴蝶成为中国历史上第一位电影皇后;
1935年3月《渔光曲》在莫斯科国际电影展获奖。
中国电影的几个重要的历史时期:【1931-1937】左翼电影运动时期;代表作,《渔光曲》、《神女》、《马路天使》、《民族生存》等
【1937-1945】抗日战争时期;代表作《铁扇公主》、《胜利进行曲》、《青年中国》、《还我故乡》等
【1945-1949】解放战争时期;代表作《一江春水向东流》、《万家灯火》、《松花江上》、《还乡日记》、《小城之春》等
【1949-1966】新中国成立到**前期;代表作《白毛女》、《大闹天宫》、《小蝌蚪找妈妈》、《鸡毛信》、《五朵金花》等
【1966-1976】**时期;电影世界百花凋零,万马齐鸣改
革开放到20世纪90年代;代表作《人到中年》、《骆驼祥子》、《西安事变》、《红高粱》、《大话西游》等
21世纪以来代表作《英雄》、《风云》、《神话》、《满城尽在黄金甲》、《赤壁》、《夜宴》、《十
月围城》
范文五:中国电影的发展史
音乐的力量是非常强大的,音乐可以带动一个人的情绪调节一个人的心情,在生活中选择自己喜欢并且合适自己此时的音乐,而在各个专题配音或者是外语配音也是需要音乐的,专题背景音乐对专题文稿起到寸托作用更能牵动配音员的感情能使专题配音出来的效果更好。
如今科学技术更是迅猛发展。其中电子技术的飞速发展促进了电声乐器及电子合成器的出现,使得电影音乐的创作风格出现了多元化的倾向,流行音乐、摇滚音乐等风格各异的音乐,为电影音乐的创作带来了勃勃生机。
回顾中国电影的发展史,可以知道早期的中国电影故事内容是以戏曲表演为主的。从中刚日报的第一即电影东剧《走军山》 (1905年)的片断,到中同第一部有声电影《歌女红牡丹》(193I年),当时巾国电影中的吉乐创作主要是从丰富多彩的中国戏曲畜乐中吸取营养的?在相当长的一段时间内(中国电影个的音乐内容主要足由当时的流行歌曲和其他选配的伴奏畜乐共同构成的:
在个国电影发般的90多年历史长河中,各个朗的电影音乐创作都备具特色。力论是20世纪的30或40年代,还足新中国成介后的17牛间,都产生过许多优秀的电影音乐作品、如影片《大路》(1935午)中的夫题歇“大路歌”、影片《上计岭》 (1956年)的主题歌“我的报国”等。但遗憾的是这4b音乐的创作风格相对比较单一。直至“**”后“第五代”电影人的倔起,才仪小回电影的音乐创作真正复力;觉醒:而此时,我们的电影音乐创作已经与西方(尤其是问美网)产生门了相当大的差距。2(音乐创作风掐的特征
“音乐是时间的艺术。不管是 文二五分钟便能咽完的歌曲,还足一首得要,四十分钟不能演奏完的交响曲,只有通过时间,音乐才能展现出精心组合的乐章。音乐又是运动的艺术。音乐中,长短人等、扁低不同的音符每分每秒都在运动;不管是线性的旋律还是垂直的和声,都能要通过运动才能展开;即使足休止符,也只是台乐运动小的一种间隙:运动是音乐之所以表现情感的基础。”中国于电影也具局这样的叫间及运动特性,使得音乐进入电影创作之小成为可能。
为门进一步地分析电影中各种风格音乐的应用题,我们需要对育乐的某些基本特性进行了解。现在一般拉音乐的发展历程。将合乐分为古典音乐和现代音乐两大类。
(1)古典音乐
一胶意义上:的山典音乐,主要是指从“中世纪的格甲高利全咏直至19世纪末叶创作的音乐。
古典音乐包括:“巴洛克音乐”、。古典主义音乐”、“浪漫主义音乐”等不问时期、不问体裁的音乐;而狭义的古典音乐被人们理解为——种带有占典风格的畜乐。
占典音乐有着极其复杂的配器及和声走向,一般出庞大的交响乐队演奏。巨大的乐曲篇幅使得其他风格的音乐无法比拟。由于音乐大师们高超的演奏技艺和呕心创作,更使得古典音乐具有深刻的思想内容利艺术内油;
迄今为止,古致音压仍受到世人的欣赏和关注。
(2)现代音乐
现代音乐,已经成为当今除占典音乐外的行种风格音乐的化名词。
当今现代音乐的起始年代和范的已大大地扩展(—般认为是从20世纪至今),包括“布鲁斯音乐”、“爵上音乐”、“摇滚音乐”、“另类音乐”、“电子音乐”以及?新世纪音乐”等等在内的各种新流派、新风格音乐均属现代音乐的范畸。
现代者乐与古典音乐最明显的区别就是节奏与和声的变化。各种风格的现代台乐均有其独到之处。在爵士音乐中,土旋淬是飘忽不定的,使人如醉酒般恍炮;而新世纪音乐则给人种空灵、漂渺的感觉,带有浓厚的民族地域特性,被用来展现自然景象。如悔德湿的“女巫医”、科普兰的“大峡谷”等
: 由于舌只、风格是个很抽象的概念,而目前的音乐创作风格仍在不断地发展着,所以新的音乐风格也在不断地涌现。另外每个接触音乐的媒体和界面也不同,因而对音乐风格的理解和认识也不存在着或多或少的差异。
http://www.cnpyw.com/NewsShow.asp?id=11523