Hyperflow A Visual Programming Language for Pen Computers
面向对象c语言参考书籍

面向对象c语言参考书籍C语言是一种广泛应用于软件开发领域的编程语言,它的灵活性和高性能使得它成为了许多计算机科学专业学生的首选编程语言。
在学习和应用C语言时,选择一本合适的参考书籍是非常重要的,因为它能够为你提供全面的基础知识和实践经验。
本文将推荐几本面向对象C语言参考书籍,帮助你快速入门并提高编程技能。
1. 《C Primer Plus》(Stephen Prata)《C Primer Plus》是一本经典的C语言入门参考书籍,适合零基础或初学者使用。
该书从基础概念开始讲解,详细介绍了C语言的语法、数据类型、指针、数组、函数等知识点,并通过大量的示例代码和练习题帮助读者巩固所学内容。
此外,该书还包含了面向对象编程的介绍,帮助读者了解C语言在对象思维方面的应用。
2. 《C Programming Language》(Brian W. Kernighan, Dennis M. Ritchie)《C Programming Language》是由C语言的创始人Dennis M. Ritchie 和Brian W. Kernighan合著的经典之作。
这本书详细介绍了C语言的语法和基本概念,语言简洁明了,适合有一定编程基础的读者学习。
尽管该书没有专门涵盖面向对象编程的内容,但它为读者提供了良好的C语言基础,为后续学习面向对象的扩展奠定了坚实的基础。
3. 《C: A Reference Manual》(Samuel P. Harbison, Guy L. Steele Jr.)《C: A Reference Manual》是一本权威的C语言手册,适合有一定编程经验的读者。
该书详细介绍了C语言的各种特性和用法,并提供了大量的示例代码。
此外,该书还介绍了C语言的扩展功能和一些高级编程技巧,对于想要深入了解C语言的读者来说是一本不可或缺的参考书籍。
4. 《C How to Program》(Paul Deitel, Harvey Deitel)《C How to Program》是一本广受好评的C语言教材,适合初学者和中级学习者。
c++ 学习路线与推荐书籍

3.API
这部分的话,其实是慢慢积累的,你去Google查一下什么是API就好了,学习Windows原理的时候你会理解到是个什么东西的,大概说起来就 是微软给我们提供了一些封装好了的函数,我们可以调用过来实现一些简单而且常用的功能,比如MessageBox是弹出一个窗口,你只要在他的参数里自己 设定大小啊和现实什么啊就是了。
我的看法是:如果你不理解其中的条款,记忆,并且照做;如果你理解其中的条款,我猜你一定会同意书中的观点。我认为这本书中的内容至少在2009年以前都不会过时,人们将广为传诵它制定的101条戒律。
还不知道他的简称,也许“101”会成为一个候选者?
提到《Effective C++》,那么另外三本书一一浮出水面:
你对C++不满吗?这本书可以部分地帮你完成抱怨的目标。也许它还可以让你不迷信C++。
最后,一份C++标准文档也是应该加以咀嚼的。
还有一些书籍,并不能简单的归于C++,也难以在纯粹的书本学习中加以掌握。《Design Patterns》/《设计模式》一书就归于此类。
所有上述的书籍,要么谈论C++语言本身,要么谈论STL的,要么兼而有之(当然严格讲STL也是C++语言非常重要的一部分)。偶尔,某些书中条目也会涉及实际工程。这些书并不是C++软件开发的全部,但是他们很重要。阅读这些书,未必需要化费太多的精力,有时候是会困难,但也有时候会很快速。
这本书及其中文版传言好坏都有,没有认真看过,不做评价,如果确有兴趣,不妨尝试一下该书。
C++初学者指南

《C++Beginner's Guide》C++初学者指南中英双语对照译本1.1---C++简史(下)C++Is BornC++的诞生C++was invented byBjarne Stroustrupin1979,at Bell Laboratories in Murray Hill,New Jersey.He initially called the new language"C with Classes".However in1983the name wan changed to C++. C++是1979年比亚尼·斯特鲁普在新泽西州的莫里山的贝尔实验室发明的。
最初他把这个新的语言命名为“C with Classes”。
到了1983年被重新命名为C++。
Stroustrup built C++on the foundation of C,including all of C’s features,attributes,and benefits. He also adhered to C’s underlying philosophy that the programmer,not the language,is in charge. At this point,it is critical to understand that Stroustrup did not create an entirely new programming language.Instead,he enhanced an already highly successful language.斯特鲁普在C语言的基础上创建了C++,包含全部C语言的特色、属性、和优点。
并且他追随着C语言的基础理念而不是追随C语言,这是很负责的。
在这点上,很明确的事情是,斯特鲁普没有创造出一个全新的编程语言,而是他增强了一个已经很成功了的编程语言。
计算机专业常用英语

10. local a. 局部;本地[机]
localhost 本(主)机
比较 remote a. 远程 remote access 远程访问 remote communications 远程通信 remote terminal 远程终端
11. ring network 环形网络 ring topology 环形拓扑
4
比较 model 模型 module 模块 modulo 模(运算)
11. opcode 操作码( operation code ) 12. decode v. 译码
decoder 译码器,解码器,翻译程序
5
2.2 Microprocessor And Microcomputer
1. integrated circuit 集成电路
8. library (程序)库,库
16
9. single threading 单线程处理方式
Within a program, the running of a single process at a time. 在程序中,一次运行一个进程的方式。
single-precision 单精度 single-user computer 单用户计算机 thread 线程;线索 threaded tree 线索树 threading 线程技术
11
16. idle a. 空闲,等待
Operational but not in use. 用来说明处在可操作状态但不在使用。 idle state 空闲状态
12
18. launch v. 启动,激活 19. prototyping 原型法 20. project n. 投影运算 21. workstation 工作站
常见的高级程序设计语言

常见的高级程序设计语言程序设计语言是计算机程序员用来编写和开发软件应用程序的工具。
随着计算机技术的不断发展,出现了许多种高级程序设计语言,这些语言在编程效率、代码可读性和灵活性方面都有所不同。
本文将介绍几种常见的高级程序设计语言。
一、C语言C语言是一种广泛应用的高级编程语言,它具有简洁、高效和可移植性的特点。
C语言最初由贝尔实验室的丹尼斯·里奇在1972年开发,目的是用于开发UNIX操作系统。
C语言被广泛应用于系统软件开发、嵌入式系统、游戏开发等领域。
C语言具有丰富的库函数和强大的指针操作能力,可以直接访问底层硬件,因此它在性能要求较高的项目中得到广泛应用。
二、Java语言Java语言是一种跨平台的高级编程语言,由Sun Microsystems(现为Oracle)公司于1995年推出。
Java语言具有简单、面向对象和可移植的特点。
Java程序可以在不同的操作系统上运行,这得益于Java虚拟机(JVM)的存在。
Java语言广泛用于企业级应用开发、手机应用程序开发和Web应用程序开发。
Java具有丰富的类库和强大的异常处理机制,使得开发人员能够更加高效地编写可靠的软件。
三、Python语言Python语言是一种简单、易学且功能强大的高级编程语言。
Guido van Rossum于1989年开始设计Python,并在1991年发布了第一个版本。
Python语言具有清晰、优雅的语法风格,被广泛应用于Web开发、数据科学和人工智能等领域。
Python拥有大量的第三方库和工具,使得开发人员可以快速构建各种应用程序。
Python语言还支持面向对象编程、函数式编程和模块化编程,具有良好的代码可读性和可维护性。
四、C++语言C++语言是一种扩展的C语言,由比雅尼·斯特劳斯特鲁普于1983年首次提出。
C++语言融合了面向对象编程和通用编程,并在C语言的基础上增加了许多新特性。
C++语言被广泛应用于游戏开发、图形界面开发和高性能应用程序开发。
the c programming language 英文版

the c programming language 英文版摘要:1.介绍C 编程语言2.C 编程语言的发展历程3.C 编程语言的特点4.C 编程语言的应用领域5.C 编程语言的未来发展正文:C 编程语言是一种广泛应用于计算机领域的编程语言。
它的英文版名为"The C Programming Language"。
C 语言最初由丹尼斯·里奇(Dennis Ritchie)在20 世纪70 年代初在贝尔实验室开发,作为Unix 操作系统的一种高级编程语言。
自那时以来,C 语言已经成为全球最流行的编程语言之一,为计算机科学的发展做出了巨大贡献。
C 编程语言的发展历程可以追溯到20 世纪60 年代末期,当时丹尼斯·里奇在贝尔实验室工作,为了改进Unix 操作系统的性能,他开始着手开发一种新的编程语言,即C 语言。
C 语言的命名来源于它之前的一个编程语言B,C 语言被设计成是一种高级编程语言,同时也具有底层访问能力,这使得它非常适合编写系统级别的软件。
C 编程语言具有许多特点,例如它的跨平台性、简洁性、高效性和强大的控制结构。
C 语言支持结构体、函数、指针等编程概念,使得程序员可以编写出高质量的代码。
C 语言的跨平台性意味着编写的程序可以在不同的操作系统和硬件平台上运行,这使得C 语言成为一个广泛应用的编程语言。
C 编程语言在计算机科学领域有着广泛的应用。
它被广泛应用于操作系统、嵌入式系统、硬件驱动、游戏开发等领域。
许多著名的软件和操作系统都是用C 语言编写的,例如Windows、Linux、Unix 等。
C 语言在计算机科学领域的重要性使得学习C 语言成为了许多程序员的必修课。
随着计算机科学的不断发展,C 编程语言也在不断更新和演进。
现代C 语言的版本,如C11、C17 等,已经支持了许多新的特性,例如多线程编程、函数对象等,这使得C 语言在面对新的编程挑战时仍然具有强大的生命力。
学习C从入门到精通的十本最经典书籍
学习C++从入门到精通的十本最经典书籍学习C++并从入门到精通需要深入理解和实践经验的积累。
以下十本经典书籍,将为你在学习C++的旅程中提供全面、深入的指导:1.《C++ Primer Plus》: 这是学习C++的经典入门教材,适合初学者。
它详细介绍了C++的基础知识,包括变量、数据类型、运算符、控制结构等。
2.《C++编程思想》: 这本书将带你深入了解C++编程的核心概念,如面向对象编程、模板、异常处理等。
通过阅读此书,你将更加熟练地运用C++进行编程。
3.《Effective C++》: 这本书是C++程序员必读之作,它介绍了C++编程中的50个关键技巧和陷阱。
它将帮助你更深入地理解C++编程语言。
4.《深入理解C++》: 这本书是C++进阶的经典之作,适合有一定基础的开发者。
它将带你深入探讨C++的高级特性,如模板、STL、多线程等。
5.《C++设计模式》: 这本书是C++程序设计的经典之作,它介绍了23种常见的软件设计模式。
通过学习这些模式,你将能够更好地设计高效的C++程序。
6.《C++标准库》: 这本书详细介绍了C++标准库的功能和使用方法,包括STL、算法、字符串等。
它将帮助你更熟练地使用C++标准库。
7.《C++模板编程》: 这本书详细介绍了C++模板编程的技巧和最佳实践,它将帮助你更深入地理解C++模板编程。
8.《C++并发编程》: 这本书详细介绍了C++并发编程的原理和实现方法,包括线程、互斥锁、条件变量等。
通过学习这本书,你将能够更好地利用多核处理器提高程序性能。
9.《C++网络编程》: 这本书详细介绍了C++网络编程的基础知识和实现技术,包括socket编程、协议、网络安全等。
通过学习这本书,你将能够更好地开发网络应用程序。
10.《C++实践应用》: 这本书介绍了C++在实际应用中的案例,包括游戏开发、图形学、嵌入式系统等。
通过学习这本书,你将能够更好地将C++应用于实际项目中。
编程英语中英文对照
编程英语中英文对照Data Structures 基本数据结构Dictionaries 字典Priority Queues 堆Graph Data Structures 图Set Data Structures 集合Kd-Trees 线段树Numerical Problems 数值问题Solving Linear Equations 线性方程组Bandwidth Reduction 带宽压缩Matrix Multiplication 矩阵乘法Determinants and Permanents 行列式Constrained and Unconstrained Optimization 最值问题Linear Programming 线性规划Random Number Generation 随机数生成Factoring and Primality Testing 因子分解/质数判定Arbitrary Precision Arithmetic 高精度计算Knapsack Problem 背包问题Discrete Fourier Transform 离散Fourier变换Combinatorial Problems 组合问题Sorting 排序Searching 查找Median and Selection 中位数Generating Permutations 排列生成Generating Subsets 子集生成Generating Partitions 划分生成Generating Graphs 图的生成Calendrical Calculations 日期Job Scheduling 工程安排Satisfiability 可满足性Graph Problems -- polynomial 图论-多项式算法Connected Components 连通分支Topological Sorting 拓扑排序Minimum Spanning Tree 最小生成树Shortest Path 最短路径Transitive Closure and Reduction 传递闭包Matching 匹配Eulerian Cycle / Chinese Postman Euler回路/中国邮路Edge and Vertex Connectivity 割边/割点Network Flow 网络流Drawing Graphs Nicely 图的描绘Drawing Trees 树的描绘Planarity Detection and Embedding 平面性检测和嵌入Graph Problems -- hard 图论-NP问题Clique 最大团Independent Set 独立集Vertex Cover 点覆盖Traveling Salesman Problem 旅行商问题Hamiltonian Cycle Hamilton回路Graph Partition 图的划分Vertex Coloring 点染色Edge Coloring 边染色Graph Isomorphism 同构Steiner Tree Steiner树Feedback Edge/Vertex Set 最大无环子图Computational Geometry 计算几何Convex Hull 凸包Triangulation 三角剖分Voronoi Diagrams Voronoi图Nearest Neighbor Search 最近点对查询Range Search 范围查询Point Location 位置查询Intersection Detection 碰撞测试Bin Packing 装箱问题Medial-Axis Transformation 中轴变换Polygon Partitioning 多边形分割Simplifying Polygons 多边形化简Shape Similarity 相似多边形Motion Planning 运动规划Maintaining Line Arrangements 平面分割Minkowski Sum Minkowski和Set and String Problems 集合与串的问题Set Cover 集合覆盖Set Packing 集合配置String Matching 模式匹配Approximate String Matching 模糊匹配Text Compression 压缩Cryptography 密码Finite State Machine Minimization 有穷自动机简化Longest Common Substring 最长公共子串Shortest Common Superstring 最短公共父串DP——Dynamic Programming——动态规划recursion —— 递归编程词汇A2A integration A2A整合abstract 抽象的abstract base class (ABC)抽象基类abstract class 抽象类abstraction 抽象、抽象物、抽象性access 存取、访问access level访问级别access function 访问函数account 账户action 动作activate 激活active 活动的actual parameter 实参adapter 适配器add-in 插件address 地址address space 地址空间address-of operator 取地址操作符ADL (argument-dependent lookup)ADO(ActiveX Data Object)ActiveX数据对象advanced 高级的aggregation 聚合、聚集algorithm 算法alias 别名align 排列、对齐allocate 分配、配置allocator分配器、配置器angle bracket 尖括号annotation 注解、评注API (Application Programming Interface) 应用(程序)编程接口app domain (application domain)应用域application 应用、应用程序application framework 应用程序框架appearance 外观append 附加architecture 架构、体系结构archive file 归档文件、存档文件argument引数(传给函式的值)。
programming-like languages
programming-like languages编程语言是计算机科学中的一种形式化语言,它用于描述计算机程序的行为。
随着计算机科技的不断发展,出现了许多不同的编程语言,每一种都有其特定的用途和优点。
本文将重点讨论编程语言的分类、常见的编程语言以及选择适合自己的编程语言的因素。
首先,我们来讨论编程语言的分类。
编程语言可以根据其抽象级别、用途和语法特性等方面进行分类。
根据抽象级别,编程语言可以分为高级语言和低级语言。
高级语言(如Python、Java、C#)更接近自然语言,使用起来更容易学习和理解,能够提高开发效率。
低级语言(如汇编语言、机器语言)更接近计算机的硬件,可以更精确地控制计算机的行为,但相对而言较难学习和使用。
根据用途,编程语言可以分为通用编程语言和特定领域编程语言。
通用编程语言(如Python、C++、Ruby)可以用于开发各种类型的应用程序,涵盖广泛的领域。
特定领域编程语言(如R语言、Matlab)则针对特定的应用领域提供特定的功能和工具,使开发更加高效。
根据语法特性,编程语言可以分为面向过程的语言、面向对象的语言和函数式语言等。
面向过程的语言(如C语言)以过程或函数为基本单位,强调操作和状态变化。
面向对象的语言(如Java、C#)以对象为基本单位,强调封装、继承和多态等概念。
函数式语言(如Haskell、Clojure)则强调函数的使用和组合,能够更好地处理并发和并行计算。
接下来,我们来介绍一些常见的编程语言。
Python是一种高级、通用、面向对象的编程语言,具有简洁的语法和强大的标准库,适用于数据分析、机器学习、Web开发等多个领域。
Java是一种高级、通用、面向对象的编程语言,具有丰富的库和跨平台性,适用于企业应用开发、Android开发等。
C++是一种高级、通用、面向对象的编程语言,与C语言兼容,能够直接操作计算机的底层硬件,适用于系统编程、游戏开发等。
JavaScript 是一种脚本语言,主要用于Web开发,能够为网页添加动态交互效果。
第二章 高级程序设计语言描述
周开来 西南林业大学计算机与信息科学系
内容简介:
本章概述程序设计语言的结构 和主 要的共同特征,并介绍程序设计语言主要 语句的文法描述与形式定义。
2.1 程序语言的定义
任何语言实现的基础是语言定义。 语言的定义决定了该语言 具有什么样 的语言功能、什么样的数据结构、 什么 样的程序结构、 以及具体的使用形式 等细节问题。
获得计算机图灵奖统计:
程序设计语言(10) Alan J. Perlis (1966) -- ALGOL Edsger Wybe Dijkstra (1972) -- ALGOL John W. Backus (1977) -- FORTRAN Kenneth Eugene Iverson (1979) -- APL程序语言 Niklaus Wirth (1984) -- PASCAL John Cocke (1987) -- RISC & 编译优化 Ole-Johan Dahl,Kristen Nygaard (2001) -- Simula语言和 面向对象概念 Alan Kay(2003) -- SmallTalk语言和面向对象程序设计 Peter Naur(2005) -- ALGOL60以及编译设计 形式语言, 程序语言语义 (4) Robert W. Floyd (1978) -- 编程语言语义,自动程序验证 C. Antony R. Hoare (1980) -- Hoare Logic, CSP Robin Milner (1991) -- LCF,ML,CCS,PI-calculus Amir Pnueli (1996) -- 时序逻辑和系统验证
二. 语义
语义:一组规则,用它可以定义一个程序 的意义。 描述方法:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Hyperflow: A Visual Programming Language for Pen Computers1Takayuki Dan KimuraDepartment of Computer ScienceWashington University in St. Louis(314) 935-6122 tdk@AbstractThis paper presents the design philosophy of the Hyperflow visual programming language. It also gives an overview of its semantic model. The primary purpose of the language is to provide a user interface for a pen-based multimedia computer system designed for school children. Yet it isversatile enough to be used as a system programming language. The concept of visuallyinteractive process, vip in short, is introduced as the fundamental element of the semantics. Vips communicate with each other through exchange of signals, either discrete or continuous. Each vip communicates with the user through its own interface box by displaying on the box information about the vip and by receiving information pen-scribed on the box. There are four differentcommunication modes: mailing, posting, channeling, and broadcasting. Mailing and posting are for discrete signals and channeling and broadcasting are for continuous signals. Simple Hyperflow programs are given for the purpose of illustration, including a Hyperflow specification for the Line-Clock device driver.1. IntroductionThis is a progress report on Hyperflow. Development of the Hyperflow (HF in short) visualprogramming language is a part of the research project in progress since January 1991 to develop a pen-based multimedia computer system. The pen computer is to be used for teaching mathematics to children from the pre-school level up to the 12th grade. The project is expected to be completed in 1995. The project also involves development of MC68030-based hardware and toolkitfirmware with the pen user interface. The silicon paper technology, our term for the pen computer technology, is discussed in [6] and [7]. An overview of the project is given in [8].HF is an extension of Show and Tell [5]. From the Show and Tell project we have learned two major lessons: that the mouse/CRT is not adequate for visual programming, and that entirelypictorial visual programming is not practical. We use the pen instead of the mouse and combine texts with icons in HF. As in Show and Tell, the syntax consists of boxes and arrows, a boxrepresenting a process and an arrow representing a data flow between processes. While data types in Show and Tell are limited to discrete types, continuous data types such as audio signals and animations are available in HF. Continuous data types are necessary not only for multimediaprocessing but also for processing pen-strokes.HF is an user interface framework as well as a visual programming language. The two aspects of HF are inseparable. As an interface framework, HF is an extension of various window systems with a dataflow architecture and more independent computation power for each window. A HF1To appear in the Proceedings of 1992 IEEE Workshop on Visual Languages, Seattle, Washington.This research is partially supported by the Kumon Machine Project.window, called the interface box, communicates not only with the user but also with other windows through visually specifiable dataflow. The user controls the activities of a window by scribing a gestic command on it. Each window has a separate set of commands to be activated by the user’s gestures. As in X Windows[10], buttons, menu items, scroll bars and their ’thumbs’, are all windows in HF. Each HF widget can respond to a large variety of gestic commands if necessary, in contrast with the mouse-based widgets that can respond to only clicking and dragging.In the remaining part of this section, we discuss the purposes and goals of HF and a new software engineering approach incorporated in the HF design that we propose for the construction of interactive application software. In Section 2, we present an overview of the conceptual (semantic) model of HF. Due to space limitations our presentation will be limited to the communication aspects of the model. In Section 3, we introduce some syntactic components with sample programs. A complete definition of the HF syntax would be premature because we are still experimenting with different syntactic representations of semantic concepts.1.1 PurposesThe purpose of HF are presented in the following three tiers, listed in order of sophistication:Level-1:Pen user interface. End-users, both school children and math instructors, interface with the pen computer through handwritten characters, numbers, and geometric shapes. The traditional mouse-based interface tools, (e.g. widgets of X Windows,) are not appropriate for pen computers. The pen interface requires a new paradigm in which gesturing and handwriting, instead of pointing and dragging, play a prominent role. By a single gesture, instead of two steps necessary in the menu-based interface, the user can select both an object and an operation. If the menu is to be eliminated from the user interface framework, what should be its replacement? HF offers a visually interactive process (vip in short) as the fundamental element of the pen user interface (replacing menus). The user communicates with a vip via gestures. The vip is described in Section 3.Level-2:Visual shell language. The power of the UNIX operating system comes partly from its shell language. The end users of the graphic user interface are deprived of such a shell language. The philosophy of direct object manipulation and WYSIWYG makes design of a graphic shell language very challenging. Our conjecture is that a visual shell language is a natural application of visual programming languages where the control structures of procedure definition, selection, and iteration are available. HF has these capabilities.Level-3:Visual system programming. It is commonly believed that visual programming languages are good for novice users but not for system programmers. However, recent software development tools, such as symbolic debuggers of various types [1] and Interface Builders [3], are becoming more graphics-oriented. This suggests that visual interfaces are also useful for system programmers, and a visual language for system programming should not be considered unsound, if an efficient compiler can be constructed. Is it possible to design a visual language in which a compiler and an operating system can be implemented? For example, how can we specify an interrupt driven device driver in visual form? HF is our proposal for such a visual system programming language.1.2 GoalsHF has been designed as a programming language to achieve the following four goals:Understandability. A computer system for school children needs an easy to understand programming language. In order to make HF programs easier to construct and easier to understand, three properties are incorporated: First, it is a visual language. A two dimensional arrangement of iconic modules manifests inter-relationships better than a linear textual specification. Secondly, it is dataflow based. Our experience with the Show and Tell language proved that the concept of dataflow is easier for school children to learn than the concept of control flow. Finally, it is parsimonious. A HF program specifies an ensemble of homogeneous communicating processes. There are no other constructs such as functions and procedures. We presume that the parsimony enhances the understandability.Responsiveness. It is a common misconception that novice computer users do not demand instantaneous response from the computer. On the contrary, the less familiar the user is with computer technology, the more he expects rapid responses from the computer. The run-time support system (kernel) of HF includes real-time tasking based on preemptive scheduling. Processing the user entry of pen gestures has the highest scheduling priority.Universality. A general goal of programming language design is to offer the most expressive power with the least variety of constructs. HF demonstrates its universality in four areas: First, it can emulate most of the traditional graphic user interfaces such as X widgets. Second, it can represent not only conventional discrete data types but also continuous data types. Thus, it is equipped to deal with multimedia applications. Third, it is capable of integrating computation, database, and communication applications into a single paradigm. This is the same goal we set and achieved successfully for the Show and Tell language. Finally, it is a system programming language as well as an end user programming language. This goal requires the capability of concurrent processing with adequate synchronization primitives, a rich set of abstraction mechanisms, and the development of an optimizing compiler.Extensibility. As a system programming language, HF has to provide a set of tools to manage orderly growth of software complexity. There are three aspects of HF that will contribute to its extensibility: First, it is object-oriented to encourage modular programming. A vip is an encapsulation mechanism. It can interact with another vip only through the exchange of signals. Secondly, it is prototype based [12]. Vips can be copied and pasted individually or in groups. There is no need to artificially define a virtual class. Inheritance of attributes from a prototype to a copy can be controlled by designating each attribute in the prototype as private or public. Finally, it allows multi-lingual programming. Programming of a vip can be done visually in HF, or textually in C, in Assembly Language, or in any other language whose compiler is made available to the HF system. This makes importing programming modules from other environments easier. It also serves to improve the performance of critical vips by hand-coding them in traditional textual programming languages.1.3 System DecompositionThe concept of communicative organization was introduced as a conceptual model of distributed computation in [4] and it is used as the foundation of HF semantics. A communicative organization is defined as a collection of active entities (processes), distributed over time and space, communicating with each other through exchange of passive entities (symbols) to achieve some common goal. A program specifies the social structure as well as the communication behavior of individual processes in the organization.In HF design, we consider that the user and the computer system form a communicative organization consisting of the user process, software processes, and hardware processes (Figure 1). The user and hardware processes are extrinsic, and the rest are intrinsic. The HF system is a software tool to specify and manage the intrinsic processes. Among the intrinsic processes, some of them interact directly with hardware processes. We call them device processes. All processes including device processes may directly interact with the user process.Figure 1: Communicating ProcessesIn the traditional development of application software for graphic workstations, the software system is decomposed into two parts, the interface and the application, e.g. the server-client model of the X Window System [10]. Each part is then decomposed into modules and sub-units. This approach presumes that the two parts are loosely coupled, and that infrequent subroutine calls and callbacks are sufficient to connect the two. However, in many applications the user interface modules require much tighter coupling, and there are some efforts to reduce the needs for call backs [9].We adopt an alternative approach to the software system decomposition (Figure 2). In our approach, the system is first decomposed into functional modules, (i.e., vips), then each module is divided into the interface part and the computation (application) part. This approach presumes that the user interface is as ubiquitous as the computation. The unification of user interface and application has been recently urged by van Dam in his keynote speech at the 4th UIST Symposium[13]. He observed that the the user interface needs more "semantic feedback" from the application and that there should be a single environment for development of user interface and application. Our approach is consonant with his observation. HF is designed to provide just suchFigure 2: System DecompositionWe go one step further in the efforts to integrate the user interface with computation. Some computational processes are system processes for managing various types of resources as a part of the operating system. Device processes are typical of such system processes. Traditional user interface management systems do not interact directly with system processes. It is our hypothesis, however, that all processes, system or application, need to have an interface with the user at one time or another. For example, a graphic symbolic debugger provides system programmers with a visual interface to system processes including device drivers. Therefore, all intrinsic processes are visually interactive in HF at the user’s option.2. The Semantic ModelAs stated earlier the semantic model of HF is based on the concept of communicative organization, a collection of active elements (which communicate), passive elements (which are communicated), and the environment (where communication takes place) [4]. In HF, the concept of visually interactive process (vip) is introduced as the active element, and the concept of signal as thepassive element of communication. Vip also provides the communication environment. Vip is an extension of the traditional concept of process and signal is an extension of data. Each vip has a set of commands to be activated directly by a user’s gesture or by a signal from another vip.2.1 SignalsThere are two categories of signals, discrete and continuous. The traditional data types, such as numbers, text, Boolean values and bitmaps, are all discrete signal (data) types. Continuous signals are timed data streams such as audio and video[2]. Pen-strokes are also examples of continuous signals. Each signal consists of a header and a body. The header specifies how to interpret the body. We call a signal with the empty header a datum. Signals can be hierarchically structured; i.e., a signal may contain another signal.2.2 Communication ModesHumans utilize different modes of communication under different circumstances. We use telephone (channeling) for private and continuous communication and letters (mailing) for private and discrete communication. The telephone is synchronous; mailing is asynchronous. Both modes can be used for global (long distance) communication. We also use bulletin board (posting) and TV (broadcasting) for public and local communication. Posting is discrete and asynchronous, and broadcasting is continuous and synchronous. In public communication, the receiver must know the identification of the sender, while in private communication the sender must know the identification of the receiver.In computation models, message passing which corresponds to mailing is the dominant mode of communication. Communication through a shared variable corresponds to posting. In general a memory cell can be considered a bulletin board which posts a datum received from mailing. Broadcasting and channeling have not been used in traditional software models due to the lack of capabilities for handling continuous data types.In HF vips can communicate in all four different modes: mailing, posting, channeling, and broadcasting. Each mode is represented by a different type of arrow in the HF syntax. They are summarized in Figure 3. Note that a vip is represented by a box.Figure 3: Communication ModesMailing is denoted by a regular arrow. Vip A sends a mail item (discrete signal) to vip B by executing the command sendmail. Vip B has a mailbox, which is a FIFO queue of discrete signals. If B’s mailbox is full, the sendmail operation is blocked. B has two options in its open-mailbox policy, automatic and manual. If the mailbox is set to automatic, the next mail will be opened automatically (as soon as possible) and its head will be interpreted as the name of command to be executed by B. If the mailbox is set to manual, the next mail will be opened when B execute the command openmail. If the mailbox is empty when openmail is executed, the operation will be blocked.Posting is denoted by a dotted arrow. Vip A has a bulletinboard on which A can post a note (discrete signal) by executing the command postnote. Any vip, B, in the same environment (locality) as A, can read the note on A by executing the command readnote. If there is no note posted on A, the readnote operation will be blocked. A has two options in its policy for removing notes from the bulletinboard (deposting), automatic and manual. If the bulletin board is set to automatic, whenever the note is read by some vip, it will be removed simultaneously; i.e., only one vip can consume the note. If the bulletinboard is set to manual, the note remains posted until A excutes the command depost or A posts a new note which replaces the old note.Channeling is denoted by a fat arrow. Vip A starts sending a continuous signal to vip B by executing the command startsend and stops the signal by the command stopsend. The signal will be sent to B regardless of whether B is ready to receive it . B has two options in the acceptance policy, automatic and manual. If the B’s channel is set to automatic, B starts receiving the signal as soon as it arrives. If the channel is set to manual, B starts receiving the signal when the command startreceive is executed and stops when stopreceive is executed. Both startsend and startreceive are non-blocking operations.Broadcasting is not denoted by any arrow. Instead, the sender, A, is identified by a dotted box. Any vip, B, in the same environment as A, can listen to the signal transmitted by A. A starts transmission of a continuous signal by the command startbroadcast and stops it with stopbroadcast. B has two options in its listening policy, automatic and manual. In manual listening B starts listening to A by executing the command startlisten and stops it by stoplisten. In automatic listening B starts listening preemptively as soon as A starts transmission. All four operations are non-blocking.2.3 VIP: Visually Interactive ProcessA vip is a concurrent process (task) with a user interface. It is the only unit of system decomposition in HF. There are no variables, functions, procedures, or packages. Computations are carried out by a homogeneous community of vips interacting with each other through the exchange of signals. We call such a community a vip ensemble. The user monitors and controls activities of the ensemble by directly communicating with the individual members. Every vip is visually accessible to the user unless the user chooses to hide it.A vip consists of two parts, the interfacing part and the processing part (Figure 4). The interfacing part is responsible for communication with the user through visual display of the vip’s internal states and through accepting and interpreting pen-strokes entered by the user. The processing part is responsible for the management of communication with other vips. A vip is either active orinactive. A vip is active when both the processing part and the interfacing part are ready to communicate. It is passive if only the interfacing part is ready to communicate. Note that the interface part is always active and therefore the visual representation of a vip is always responsive, the third level of liveness defined by [11], in other words, it can respond to a user’s pen-stroke at any time preemptively.Figure 4: VIP StructureThe processing part consists of the following elements (some vips may not have all elements): mailbox a bounded FIFO queue of discrete signals,bulletinboard a discrete signal,viewer a slice of a continuous signal,body an ensemble,commands a sequence of named ensembles.A vip has at most one mailbox and one bulletinboard. The viewer is a buffer for one slice of a continual signal, e.g., a video frame or an audio sample value. The body is the container of the main activities of the vip. It is static; i.e., whenever the vip is active so is the body. A command is a spontaneous source of activities. The vip has a set of commands, each of which has a textual name. A command is dynamic in the sense that the command (i.e. the named ensemble) becomes active only when its activation is requested by mail, by broadcasting, or by a user’s gesture. Only one command can be active at a time. The body is active concurrently with a command. Any member of an ensemble, the body or a command, can access the mailbox, the bulletin board, and the viewer. The vip provides the local communication environment for its ensemble members. Posting and broadcasting are effective only among the ensemble members owned by the same vip.The interfacing part consists of interface boxes (or simply boxes) and visual planes (Figure 4). An interface box corresponds to the (server) window in the traditional graphic user interfaces. It has a rendering on the two dimensional display screen. The user can change the size and location of the box by a simple gestic action. Through an interface box the user can inspect the content of any visual plane. Each visual plane is a two dimensional bitmap with its own coordinate system containing a visual representation of various information in the vip. This information includes the vip’s iconic name, textual name, the content of the bulletin board, and the contents of the mailbox. Other displayable items are the source and object codes of the body and commands, and their documentation. The user can create an arbitrary number of visual planes for each vip.There may be more than one interface box for a vip, each displaying a different aspect of the vip.Two boxes belonging to the same vip are connected by a line (not an arrow). The user can create a new box and delete an old box with gestures. The user can also select, with a gesture, a visual plane and its portion to be displayed as the content of an interface box. Two boxes may display two different sections of the same visual plane. When the last box is deleted by the user, the vip itself is also deleted.An interface box has the two parts, the frame and content. The frame of a box is a bitmap pattern of various width that borders the box. The content is the remaining internal part of the box. Different frame patterns are used for different types of contents. The user also can design the frame patterns. The content part displays a clipped portion of a visual plane. The user can select and edit a visual plane by entering an appropriate gesture command on the content part of the box.There are system defined commands innate to all vips. Some of them are listed below: start make the vip activestop make the vip inactiveduplicate create a copy of the vipdelete destroy the vipmove move the interface box to new locationresize change the size of the interface box.These commands can be activated either by mailing, by broadcasting, or with a gesture scribed on the interface box by the user.The body and commands of a vip can be encoded individually either in the two dimensional syntax of HF or in any textual programming language such as C, Pascal, or assembly language. A vip may have a multi-lingual specification for its processing part. When a vip ensemble becomes active (to be executed), if it is specified by a HF program using the graphical syntax, its execution will be simulated by the HF interpreter. If the HF program is already translated into machine code by the HF compiler, it will be executed directly. Textual programs must be compiled before execution. In textual programming each vip is referenced by its textual name. Communication protocols (e.g., how to access the mailbox of a vip and how to broadcast signals to other vips) are provided by a function library constructed for each textual language.A vip is a self-contained module in the sense that it contains all of its relevant information, including its identification, source codes, object codes, manuals, and graphic attributes. All of the information is visually accessible to the user, upon demand, through a set of interface boxes.Figure 5 gives an example of a vip that computes the Fibonacci sequence. Figure 5.2 presents a HF program to compute 10th Fibonacci number using the vip defined in Figure 5.1. The Fibonacci vip of Figure 5.1 is visualized through twelve interface boxes. Its body contains two memory cell vips, x and y, which are referenced in the command program. A memory cell posts whatever data it receives by mail, with the automatic open-mail policy and manual de-posting policy. The Fibonacci vip has two commands, init and next. The init command initializes the memory cells in the body. The next command computes the next Fibonacci number and the result of computation is posted at the bulletin board. The body and the commands are encoded in different languages, Pascal and HF, to illustrate the multi-lingual programming concept.viewercommand2Figure 5.2: Computing Fib(10)In the next command program, the character ’!’ in the HF syntax denotes the vip that readnotes and posts to the bulletin board. The fat horizontal line on the top edge of the command2 box denotes the vips in the box are to be activated sequentially from left to right, then top to the bottom, i.e., in this example, the execution order will be +, -, y, x, and !. The vip + reads two values from the bulletin boards of x and y, then sends the sum to y by mail. The vip - reads the values from y and then x, and send the difference to x by mail. The vip y posts the value received from + by mail. The vip x posts the value received from -. Then, the system defined vip ! posts the value (the bulletin board) of y onto the the bulletin board of the Fibonacci vip.In Figure 5.2, the doublely framed box represents the system defined iteration vip which sequentially iterates the execution of its body for the number of times specified by a mail. The empty box represents another system defined show vip which reads a value from the bulletin board of another vip and posts it on its own bulletin board.Every vip is visually accessible to the user. However, there are other modes of communication between the user and a vip. In general the user sends signals to vips through:scribing pen-strokes for gestures, texts, and shapes,scanning a bitmap,keyboarding text,speaking a voice, andtaping a video.A vip sends signals to the user through:printing text,drawing a bitmap,voicing speech,sounding sounds, andviewing video.The current hardware system does not support scanning, taping, and viewing.2.4 Prototyping and InheritanceThe Hyperflow language is an object-oriented language without classes. As in SELF [12], objects (vips) are created by duplicating other objects (prototypes). Every vip is potentially a prototype for another vip. When a vip is duplicated, its body and commands are duplicated independently, thus all the descendant vips will be recursively duplicated. Also, the user can select a set of vips (a part of an vip ensemble) as a group, then make a copy of the set in one gesture.The cloned vip inherits all the attributes of the prototype vip. The user can modify, (i.e., delete and augment) any attributes of the clone as long as the attributes are designated as public in the prototype vip. The HF system keeps track of the is-a-copy-of relation, and any change in the value of a private attribute will be automatically propagated through the descendant clones. In HF there is no mechanism for multiple inheritance.One technical problem associated with object-oriented programming without classes is the creation of large regular data structures, e.g., a 100 x 100 cell spread sheet. It would be tedious work to generate 10,000 copies of an object by repeated applications of a duplication operation, even with the power of group duplication. We propose to solve this problem in two ways. One way is to provide a system defined prototype vip with a unit size, e.g., a 1x1 spreadsheet, and to allow the user to change the size parameter as a public attribute. The other way is to provide the user with a special gesture command for multiple duplication with a particular layout arrangement. Our proposed gesture is illustrated in Figure 6. The latter method works only up to two dimensional structures. For higher dimensions we have to depend upon the first method.Figure 6: A Gesture for Multiple Copying。