于NMA观庞贝遗珍有感 “此外,海水忽然向后退去,大地频繁震颤,天空中也传来巨大的轰鸣。很多人举手向神祈祷,更多人则开始相信世界上根本不存在什么神明,以为永恒的黑夜降临了,这便是世界毁灭的终极时刻。” ——小普林尼《致塔西佗书》 爱与美庇佑之城 庞贝古城(Pompeii),爱与美之神维纳斯所庇佑的城市,维苏威火山脚下的明珠,那不勒斯湾的良港。公元前600年由希腊人与腓尼基人建成,公元前80年被罗马人占领并成为罗马帝国的重镇,公元79年被维苏威火山的怒火深埋于尘泥之下,又于1748年重见天日。 庞贝城在相当长的一段时间里都是罗马共和国以及后来罗马帝国的重要城市。维苏威火山肥沃的火山灰土以及第勒尼安海的水气使庞贝拥有了极佳的农业条件,庞贝城周围种植的小麦与橄榄除了满足城内公民的需要外也用于交易,供应了其周边庞大的市场。除了粮食作物外,火山灰土的肥力也供养了数不胜数的葡萄园,其中所蕴含的矿物质也给出产于此地的葡萄酒带来了特殊的风味。源源不断的商品从庞贝城运出,不仅填补了罗马城如黑洞般深不见底的欲望漩涡,也为庞贝城的居民带来了源源不断的财富。 美神庇护之城以市政建筑为核心,环绕以阿波罗神庙、朱庇特神庙等宗教建筑。会堂、竞技场、商场、浴场一应俱全,富裕的居民家中通常拥有花园,花园又以精美的壁画与立柱装饰。这些立柱通常雕饰精美,栩栩如生。正如上图,雕像描绘了希腊神话中森林之神西勒诺斯哺育幼年酒神巴克斯的场景,雕像上西勒诺斯长须飘飘,观之和蔼又不修边幅,眼目所致不一似为醉态,视怀中酒神又带有关切之色,做工之精良可见一斑。更何况这件还算不上是城内雕塑中最精美之作,笔者曾在杂志上看过另一座失落的雕塑“海中的维纳斯”于中国国家典籍博物馆展出,其神态之栩栩远胜此物。其衣衫正如刚出海水一般贴合微皱,更显工匠巧心。惜当时琐事缠身未能一观,实为憾事。 美之城亦为爱之城。罗马时代居民的性观念及其开放,庞贝城的遗址中拥有巨大量的情色主题壁画,甚至有很多富户以色情场景装饰自己的住宅,其中一部分文物大胆到当时的意大利国王在参观这些展品时大为震惊,认为会带坏意国内的猫猫狗狗,遂下令将其中的一部分文物锁到了密室之中。发掘出来的一部分画作直到2000年还要求未成年游客只能在成年游客的陪同下观赏。很可惜,NMA的展出是全年龄向的,笔者未能有机会一睹千年之前的涩图。时庞贝城中有大大小小妓院20多家,要知道当时城中的总人口也只有20000人而已。窥一管而见全貌,爱神庇护之城在“爱”这个方面可以说是“做”得相当充分。但是在庞贝居民皆流连于声色犬马之时,这爱神庇护之城又能有多少真正的爱呢?若舍私念之小爱观天下之大爱,那垒成山的金银本就是由城中的奴隶的血汗所铸,爱神之大爱,又几时能遍及他们呢?又是否是那城中居民耽于欲海,才失去了爱之女神的守护,使永恒黑暗降临的呢? 美也罢,情也罢;爱也罢,欲也罢;从前的一切总归是埋在了如山的砾石之下,爱与美之神庇护之城自此不见天日千余年,这又是否是维纳斯女神所预料的结局呢?可惜断壁残垣之间发掘出的雕像依旧巧夺天工,左腿处断裂经由修复并没有破坏雕像中女神整体身段的柔美协调,三个人物的发丝服饰依旧精细逼真,从此雕像也可以看出,城中的居民并没有忘记他们的守护女神。天火带来永恒的黑暗,也带来了永恒的平静,厚达6米的火山灰遮住了庞贝美轮美奂的壁画,亦挡住了蛮族劫掠的步伐。雕像中女神眉眼低垂,如悲如泣,也许她在为城中枯骨而悲吧!回首锁眉,亦有慈悲之相,千年已过而庞贝遗珍仍闪耀如新,逃过了百年黑暗愚昧时代之残损,示壮美于今人,思岁月之无常,此诚为大爱也。今人得一睹,岂亦爱与美女神之垂怜乎?痴人诳语,莫以为意。 是非转瞬成千年 火山灰遮住了庞贝的美,也挡住了千年岁月的侵蚀。罗马帝国衰亡导致整个欧洲陷入了漫长而黑暗的中世纪,捉襟见肘的帝国财政使得政府没有能力负担庞大且昂贵的公共工程,如大型竞技场和浴场等。与之相匹配的技术也随之退化,比如混凝土工艺以及穹顶建造技术。更令人痛心的是艺术上的退化,衰亡期的罗马人逐渐放弃了从前基于透视与人体解剖学的雕刻技术,致使帝国后期的雕像变得愈发抽象变形。经济上的崩溃也使得帝国无法承担精美大理石雕像的巨大负担,4世纪的君士坦丁凯旋门甚至需要搜刮古罗马时期公共建筑上的艺术品才得以完工。 庞贝于公元79年覆灭,前一年罗马皇帝韦斯帕西亚努斯染热病而崩,新帝提图斯方立。其时距暴君尼禄横死以逾十一年,韦斯巴芗为帝亦十年,其不拘于旧法,以强势手段重整了社会秩序,并恢复了遭受重创的经济,可谓之中兴。无奈其后二帝提图斯与图密善皆非贤君,中兴无以为继,直到20年后皇帝涅尔瓦继位开始五贤帝时期罗马方再度崛起。总体而言,庞贝城覆灭之时罗马正处在罗马治世时期,政局相对稳定,国力也较为强盛。从上图的小拱顶亦可一窥,其墙面饰有橄榄叶以及水禽图案,色彩明快,整体对称性亦上佳。间隔处以几何图案为装饰,配之以青蓝色壁画为底。若其不是放在博物馆中而是置于庭院之内,上有穹顶以挡骄阳,侧有小窗以观风景,再辅以桌凳美酒,千金难易。庞贝地处海滨,贝类螺类繁盛,小亭侧面便以贝壳为装饰,辅之以碎螺壳等物组成的几何图形,其工艺甚至与现代很多类似的工艺建筑有异曲同工之妙。可惜水火无情,小亭整体装饰保存并不完好,未能观其全貌,实在可惜。 装饰拱顶的马赛克多是彩色石块或是瓷砖陶器等,除了上图拱顶中所表现得较为日常和粗糙的表现形式外也用做更为精细的绘画,比如大名鼎鼎的《亚历山大马赛克》。只可惜此物太过珍贵,NMA并无财力将其自那不勒斯博物馆借展,笔者亦只在杂志与网站上看过图片,虽仍叹服于其工艺繁杂画技高明,但总归与亲眼所见相差甚远。彩色玻璃亦是古罗马镶嵌画材料中的重要一环,罗马人掌握了极其高明的玻璃制作技术,并将之用于生活的方方面面之中。下图即是笔者在展会中看到的玻璃器皿,其制其形与我们今天所用之物并无不同,每每看到它都感慨今人与古人并无不同,更生岁月蹉跎之感。 西罗马帝国于公元476年灭亡,西欧古代史亦至此终结,数不尽的典籍珍宝在战乱中被付之一炬,无数珍贵的技术亦自此亡佚。地中海沿岸土地自此屡遭蛮族蹂躏,昔日宏伟的建筑倒塌损毁,化为尘土。华丽的装饰与壮美的雕塑被土壤覆盖,最后归于农田。在2020年,意大利一酒庄在翻土时意外发现了古罗马时期的马赛克地砖,这块地砖保存非常完好,千年的岁月并没能在上面留下什么痕迹。其颜色历尽春秋依旧鲜艳,正如下图。它如同雨后之艳阳,破开乌云般的土壤,在观者眼中留下惊鸿似的背影,引起无限遐思。现代人观之都不免动容,更何况是在礼崩乐坏的中世纪呢?若是当时意大利王国的农夫碰巧挖掘到了类似的文物,又该是如何的震惊,以之为神迹呢? 不论千年前是谁在上面走过,是身份显赫的皇帝亦或是岌岌无名的奴隶,行者地位何等尊崇,千年之后皆归尘土,只剩下永恒且不朽的艺术珍宝。王侯将相、千秋功业,都不过是过眼云烟。当往事随风逝去,帝国繁华不再,又有谁会记得当年的荣光呢?空留庞贝城内精美绝伦的壁画无言地诉说着,诉说着千年前帝国的强盛。 凤生于烈火之间 一千九百多年前,维苏威火山的怒火吞噬了庞贝城,庞贝带着她永恒的欲望与美丽深眠于火山灰之下。六百多年前,奥斯曼苏丹起大军陷君士坦丁堡,罗马正朔自此断绝,无数知识至此失传。然而失落的智慧终将会回归,它们将由更加先进的知识找回。2022年,意大利政府重启了疫情之后停止的庞贝发掘计划,将以全新的技术更加全面细致的展示庞贝的美好。人类永恒不变的好奇是考古工作的最大推力,而这推力有时候过于强大,以至于考古工作会伤害到文物本身,尤其是在技术并不先进的时代。 火山灰的高温通常会彻底摧毁遇难者的遗骨,上图所示的这些遗骸多是通过重建火山灰中的空泡得到。在庞贝遗址最初被发掘的时候,负责相关工作的朱塞佩·菲奥勒利采用了一个相当简单粗暴的办法来重现遗骨——向空泡中填充石膏制作铸像。客观的说,这个方法确实相对准确地还原了遇难者生命的最后一刻,但是也同时破坏了可能残存的遗体,对其考古学价值造成了难以估量的巨大损失。不止如此,现代考古学先驱们所采取的发掘方式极其野蛮,对大量的古迹犯下了不可原谅的罪行。像是海因里希·施里曼发掘特洛伊城遗址时采取的爆破式考古方式,抑或是郭沫若(罪人)所主导的对明定陵的破坏性发掘,都是考古史上充满血泪的一笔。一想到无数珍宝随着炸药的轰鸣化为齑粉,又或是因为保存不当而小时的那些宝贵丝绸,笔者难免黯然神伤。 我们无法改变已经发生的遗憾,也无法倒转时间来保护那些无价的珍宝。大错已然铸下,不蹈覆辙才是重中之重。得幸,科技的进步给了考古学新的机会。上图是从庞贝遗址中的私人图书馆所获的古罗马文书残卷,极度的高温早已使之碳化成卷,而这样的文卷居!然!还!能!复!原!说复原可能言过其实,科学家只是做到了识别其上的部分文字。这些天才们采用了X光断层扫描的方式一层一层的识别书卷,并根据压痕与受力的不同提取出文字,至今已识别了超过140个不同的拉丁文字符。虽然就重现所有的奥秘而言还为时尚早,但是其成就已然斐然。庞贝遗体的发掘亦采用了破坏性更小的方式,现今通用的技术是激光扫描与3D建模,在不破坏任何遗骨的情况下复原庞贝居民的最后一天。笔者在查阅资料时感慨万千,如是早一些掌握这些技术,那些遗珍又何以被破坏呢?若是不困于心中之贪念,存功成不必为我之念,给过去以时间,将难以保存之物留给后世以发掘,又会多多少珍宝避开烟殒之下场,闪耀于今日呢?也许吧,也许总有一天,技术可以先进到能复原之前被破坏的文物,就像庞贝城内的莎草卷一般,亡于烈火焚天之日,又因知识之而复原,如凤飞翱翔于今日。
Category Archives: Uncategorized
The Result Type
The Result type is one of the main ways of handling errors in Rust. In Rust, the result of a function execution is usually encapsulated in the Result enumeration, which has two possible values: Ok and Err. Ok indicates that the function was successfully executed and returned the desired result, while Err indicates that anContinue reading “The Result Type”
Rust Data Types: Unveiling the Mystique
In the realm of Rust, data types are the magical elements that breathe life into your code. They define the nature of the data that can be stored and manipulated, each with its own unique properties and abilities. This blog post will take you on a journey through the mystical world of Rust data types,Continue reading “Rust Data Types: Unveiling the Mystique”
Multithreading in Rust
Imagine you’re organizing an expedition. You have a group of brave explorers ready and waiting for your command. In the world of Rust, these explorers are like threads, and you are the programmer using the std::thread module. Gathering the Explorers You can summon a new explorer (thread) using the std::thread::spawn function. Just give them a map (closure), and they’llContinue reading “Multithreading in Rust”
vitural machine design
Virtual machine (VM) executes bytecode instructions. The VM is designed to work with a turtle graphics system, where a “turtle” moves around the screen drawing lines. Here’s a detailed breakdown of what this code does: The cursor is currently on line 16, which is in the lib_forward function. This function is not complete in the provided code,Continue reading “vitural machine design”
Parase design
This Rust code defines a ParseProto struct and its associated methods for parsing a language into bytecode. The ParseProto struct has four fields: The load function takes a File object as input, creates a new ParseProto object, and calls the chunk method on it to parse the input file. The chunk method loops over the tokens produced by the lexer and calls different functions based on the type andContinue reading “Parase design”
lexer design
Straight to the code. First of all, a general statement: the main function of this lexer is to classify the messy input file into several different categories, such as Name, Integer, String, etc., to read in the form of Tonken. I wrote the rest when I was sick. A lexer is a program that takesContinue reading “lexer design”
LOGO Interpreter, High Dimensional Thought
Programming: more precisely, this project is a LOGO language interpreter written in RUST language instead of a compiler. So the name of the blog will be changed to LOGO Interpreter in the future. (I’m pretty strict about it.) Design Reference: “Implementing a LUA Interpreter Using Rust” Design reference URL: https://wubingzheng.github.io/build-lua-in-rust/zh/PREFACE.html Reference to the author’s githubContinue reading “LOGO Interpreter, High Dimensional Thought”
RUST项目实战——LOGO编译(DAY1)
程序设计:更准确地说,本项目是一个使用RUST语言编写的LOGO语言解释器而非编译器。所以以后的博客名称会更名为LOGO解释器。(大爷我可是相当严谨的) 设计参考:《使用Rust实现LUA解释器》 设计参考网址:https://wubingzheng.github.io/build-lua-in-rust/zh/PREFACE.html 参考作者github页面:https://github.com/WuBingzheng 解释器的主要任务是将源LOGO代码转换为可执行的Rust代码,原LOGO代码主要有以下部分组成: 先介绍两个基本概念:“字节码(bytecode)”与“值(value)” 字节码: 值: 直接开始项目,将项目分为几个大的部分: 程序入口已在start code中给出,具体代码和解释如下: 这里将源文件路径,生成图片的路径,图片的宽与高读取在一个struct中,后面两大段主要作用于生成图片的保存,并在保存不成功时抛出错误。这里能看到,该代码并没有包含文件的读取,需要我自己写(草泥马)。 先以一个非常简单的LOGO程序开始,然后再加上烦人的细节,LOGO代码如下: 可以构建一个stack结构来保存每一个token(命令、数值、变量名均为token),stack结构可以用下图表示: 我想到了一个简单的方法表示token:将整行语句读取为字符串,然后按照空格划分存入stack之中,在该简单示例中语法比较简单,可以根据读取的token数量将命令划分为不同的种类: 事实上我也是这么做的。为了说明进一步的设计,这里要再对字节码做一个分析。上文已经给出了字节码的定义,即一个转化源码与机器码的中介,虽说这里可以直接使用RUST作为字节码,可我才疏学浅还没能想到怎么直接转化,不妨自己重新定义一个字节码。以原LOGO文件中这一句为例: 要执行这一句,我们需要做如下的事情在上面的图示中表达的很清楚,其涉及三个不同的字节码: 代码的执行逻辑就是: 其中,语法树的定义如下: 虚拟机需要做的就是,构建一个HashMap,将经过整理的语法树所传入的命令函数(command)与Rust代码中执行相同任务的命令函数对应起来。可以构建如下结构来清晰表明结果: 然后遍历传入的语法树中所有的字节码,根据字节码采取不同的动作。这就是大体的思路,马上开始具体实现。
Rust项目实战——LOGO编译器(DAY0)
目标:使用rust语言编写一个读取logo语言的编译器,编译器需要能识别原logo语言的语法错误,并使用rust语言unsvg crate来实现按相关作图要求。 unsvg crate对应文档链接如下:https://docs.rs/unsvg/latest/unsvg/ 编译器需要识别的Logo语言基本命令如下: 1.Logo语言特色赋值语法:MALKE 命令 ADDASSIGN 相当于其它语言中的 ‘+=’, 程序要有识别该命令的能力。 2.Logo语言查询语句: 3.LOGO语言条件判断与循环: 4.LOGO语言中的函数定义,LOGO函数定义语法如下: 其中: 5.LOGO语言中的数学表达式:
