83
1 Prototype-based scripting language

1 Prototype-basedPrototype-based scripting languagescripting language

Embed Size (px)

Citation preview

Page 2: 1 Prototype-basedPrototype-based scripting languagescripting language

Most browsers support a <SCRIPT> tag that is used to include executable content in an HTML document.

There are a number of scripting languages that are supported

2

Page 3: 1 Prototype-basedPrototype-based scripting languagescripting language

Netscape and others JavaScript

Internet Explorer Jscript (MS name for JavaScript) VBScript PerlScript

3

Page 4: 1 Prototype-basedPrototype-based scripting languagescripting language

Add content to a web page dynamically.

Alter a web page in response to user actions.

React to user events. Interact with frames. Manipulate HTTP cookies

4

Page 5: 1 Prototype-basedPrototype-based scripting languagescripting language

JavaScript is a very simple scripting language.

Syntax is similar to a subset of Java. Interpreted language. Uses objects, but doesn't really support

the creation of new object types*

*It almost does, but it's cumbersome.

5

Page 6: 1 Prototype-basedPrototype-based scripting languagescripting language

Imperative and structured Dynamic1.dynamic typing: As in most scripting

languages, types are associated with values, not with variables. For example, a variable x could be bound to a number, then later rebound to a string. JavaScript supports various ways to test the type of an object, including duck typing.

2.run-time evaluation: JavaScript includes an eval function that can execute statements provided as strings at run-time.

6

Page 7: 1 Prototype-basedPrototype-based scripting languagescripting language

Functionalclosures JavaScript allows nested functions

to be created, with the lexical scope in force at their definition, and has a () operator to invoke them now or later. This combination of code that can be executed outside the scope in which it is defined, with its own scope to use during that execution, is called a closure in computer science

7

Page 8: 1 Prototype-basedPrototype-based scripting languagescripting language

JavaScript and the DOM provide the potential for malicious authors to deliver scripts to run on a client computer via the web. Browser authors contain this risk using restrictions. scripts run in a sandbox in which they can only perform web-related actions, not general-purpose programming tasks like creating files.

Most JavaScript-related security bugs are breaches of either the same origin policy or the sandbox.

8

Page 9: 1 Prototype-basedPrototype-based scripting languagescripting language

Variables Literals Operators Control Structures Objects

9

Page 10: 1 Prototype-basedPrototype-based scripting languagescripting language

Untyped! Can be declared with var keyword:

var foo;

Can be created automatically by assigning a value:foo=1; blah="Hi Eve";

10

Page 11: 1 Prototype-basedPrototype-based scripting languagescripting language

Using var to declare a variable results in a local variable (inside a function).

If you don't use var – the variable is a global variable.

11

Page 12: 1 Prototype-basedPrototype-based scripting languagescripting language

The typical bunch: Numbers 17 123.45 Strings "Hello Eve" Boolean: true false Arrays: [1,"Hi Eve",17.234]

12

Arrays can hold anything!

Page 13: 1 Prototype-basedPrototype-based scripting languagescripting language

Arithmetic, comparison, assignment, bitwise, Boolean

+ - * / % ++ -- == != > <

&& || ! & | << >>

13

Page 14: 1 Prototype-basedPrototype-based scripting languagescripting language

if if-else ?: switch

for while do-while

And a few not in Cfor (var in object)

with (object)

14

Page 15: 1 Prototype-basedPrototype-based scripting languagescripting language

Objects have attributes and methods. Many pre-defined objects and object

types. Using objects follows the syntax of

C++/Java:objectname.attributename

objectname.methodname()

15

Page 16: 1 Prototype-basedPrototype-based scripting languagescripting language

Arrays are supported as objects.

Attribute length

Methods include:concat join pop push reverse sort

16

Page 17: 1 Prototype-basedPrototype-based scripting languagescripting language

var a = [8,7,6,5];

for (i=0;i<a.length;i++)

a[i] += 2;

b = a.reverse();

17

Page 18: 1 Prototype-basedPrototype-based scripting languagescripting language

String: manipulation methods Math: trig, log, random numbers Date: date conversions RegExp: regular expressions Number: limits, conversion to string

18

Page 19: 1 Prototype-basedPrototype-based scripting languagescripting language

JavaScript also includes some objects that are automatically created for you (always available). document navigator screen window

19

Page 20: 1 Prototype-basedPrototype-based scripting languagescripting language

Many attributes of the current document are available via the document object:

Title ReferrerURL ImagesForms LinksColors

20

Page 21: 1 Prototype-basedPrototype-based scripting languagescripting language

document.write() like a print statement – the output goes into the HTML document.

document.write("My title is" + document.title);

21

string concatenation!

Page 22: 1 Prototype-basedPrototype-based scripting languagescripting language

<HEAD>

<TITLE>JavaScript</TITLE>

</HEAD>

<BODY>

<H3>I am a web page and here is my name:</H3>

<SCRIPT>

document.write(document.title);

</SCRIPT>

<HR>

<HEAD>

<TITLE>JavaScript</TITLE>

</HEAD>

<BODY>

<H3>I am a web page and here is my name:</H3>

<SCRIPT>

document.write(document.title);

</SCRIPT>

<HR>

22

Page 23: 1 Prototype-basedPrototype-based scripting languagescripting language

<SCRIPT>

<!--

document.write("Hi Eve");

document.bgColor="BLUE";

-->

</SCRIPT>

23

HTML

com

men

t

Page 24: 1 Prototype-basedPrototype-based scripting languagescripting language

The keyword function used to define a function (subroutine):

function add(x,y) {return(x+y);

}

24

Page 25: 1 Prototype-basedPrototype-based scripting languagescripting language

JavaScript supports an event handling system. You can tell the browser to execute javascript

commands when some event occurs. Sometimes the resulting value of the

command determines the browser action.

25

Page 26: 1 Prototype-basedPrototype-based scripting languagescripting language

<BODY BGCOLOR=WHITE onUnload="restore()"><H5>Hello - I am a very small page!</H5><SCRIPT>savewidth = window.innerWidth;saveheight = window.innerHeight;function restore() { window.innerWidth=savewidth; window.innerHeight=saveheight;}// Change the window size to be smallwindow.innerWidth=300; window.innerHeight=50;document.bgColor='cyan';</SCRIPT>

<BODY BGCOLOR=WHITE onUnload="restore()"><H5>Hello - I am a very small page!</H5><SCRIPT>savewidth = window.innerWidth;saveheight = window.innerHeight;function restore() { window.innerWidth=savewidth; window.innerHeight=saveheight;}// Change the window size to be smallwindow.innerWidth=300; window.innerHeight=50;document.bgColor='cyan';</SCRIPT>

26

Page 27: 1 Prototype-basedPrototype-based scripting languagescripting language

You can associate buttons with JavaScript events (buttons in HTML forms)

27

<FORM>

<INPUT TYPE=BUTTON

VALUE="Don't Press Me"

onClick="alert('now you are in trouble!')“ >

</FORM>

<FORM>

<INPUT TYPE=BUTTON

VALUE="Don't Press Me"

onClick="alert('now you are in trouble!')“ >

</FORM>

Page 28: 1 Prototype-basedPrototype-based scripting languagescripting language

onUnLoad

onLoad

onClick

onMouseUp

onMouseDown

onDblClick

onMouseOver

28

Window events

Button events

Link events

Page 29: 1 Prototype-basedPrototype-based scripting languagescripting language

Naming hierarchy used to access individual elements of a HTML document.

Netscape D.O.M. is a little different than IE D.O.M.

Easy to use if you name all entities: Forms, fields, images, etc.

29

Things are getting better all the time – there are standard DOMs defined by The W3C

Page 30: 1 Prototype-basedPrototype-based scripting languagescripting language

<FORM ID=myform ACTION=…Please Enter Your Age:<INPUT TYPE=TEXT ID=age NAME=age><BR>And your weight:<INPUT TYPE=TEXT ID=weight NAME=weight><BR>

</FORM>

30

From javascript you can get at the age input field as: document.myform.age.value

Page 31: 1 Prototype-basedPrototype-based scripting languagescripting language

You can have JavaScript code that makes sure the user enters valid information.

When the submit button is pressed the script checks the values of all necessary fields: You can prevent the request from happening.

31

Page 32: 1 Prototype-basedPrototype-based scripting languagescripting language

function checkform() { if (document.myform.age.value == "") { alert("You need to specify an age"); return(false); } else { return(true); }}

function checkform() { if (document.myform.age.value == "") { alert("You need to specify an age"); return(false); } else { return(true); }}

32

Needs to return true or false!

Page 33: 1 Prototype-basedPrototype-based scripting languagescripting language

<FORM METHOD=GET ACTION=foo.cgi

NAME=myform

onSubmit="return(checkform())">

AGE: <INPUT TYPE=TEXT NAME=Age>

<INPUT TYPE=SUBMIT>

</FORM>

<FORM METHOD=GET ACTION=foo.cgi

NAME=myform

onSubmit="return(checkform())">

AGE: <INPUT TYPE=TEXT NAME=Age>

<INPUT TYPE=SUBMIT>

</FORM>

33

Needed to prevent the

browser from submitting!

Page 34: 1 Prototype-basedPrototype-based scripting languagescripting language

It's a good idea to make sure the user fills out the form before submitting.

Users can bypass your form – they can create requests manually (or their own forms).

Your CGI programs cannot rely (soley) on Client-Side JavaScript to validate form fields!

34

Page 35: 1 Prototype-basedPrototype-based scripting languagescripting language

Speed. Being client-side, JavaScript is very fast because any code functions can be run immediately instead of having to contact the server and wait for an answer.

Simplicity. JavaScript is relatively simple to learn and implement.

Versatility. JavaScript plays nicely with other languages and can be used in a huge variety of applications. Unlike PHP or SSI scripts, JavaScript can be inserted into any web page regardless of the file extension. JavaScript can also be used inside scripts written in other languages such as Perl and PHP.

Server Load. Being client-side reduces the demand on the website server.

35

Page 36: 1 Prototype-basedPrototype-based scripting languagescripting language

Security. Because the code executes on the users' computer, in some cases it can be exploited for malicious purposes. This is one reason some people choose to disable JavaScript.

Reliance on End User. JavaScript is sometimes interpreted differently by different browsers. Whereas server-side scripts will always produce the same output, client-side scripts can be a little unpredictable. Don't be overly concerned by this though - as long as you test your script in all the major browsers you should be safe.

36

Page 37: 1 Prototype-basedPrototype-based scripting languagescripting language

37

Page 38: 1 Prototype-basedPrototype-based scripting languagescripting language

Lua from Portuguese meaning " moon ") is a lightweight multi-paradigm programming language designed as a scripting language with extensible semantics as a primary goal. Lua has a relatively simple C API compared to other scripting languages

38

Page 39: 1 Prototype-basedPrototype-based scripting languagescripting language

Lua is a powerful, fast, lightweight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting byte code for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.

39

Page 40: 1 Prototype-basedPrototype-based scripting languagescripting language

Lua's historical 'father and mother' were data-description/configuration languages SOL (Simple Object Language) and DEL (data-entry language). They had been independently developed at Tecgraf in 1992-1993 to add some flexibility into two different projects (both were interactive graphical programs for engineering applications at Petro bras company).

40

Page 41: 1 Prototype-basedPrototype-based scripting languagescripting language

Multi-paradigm language does not contain explicit support for

inheritance easily with meta tables implement namespaces and classes first-class functions functional programming

41

Page 42: 1 Prototype-basedPrototype-based scripting languagescripting language

Lua is fastest language Lua is portable Lua is embeddable Lua is powerful (but simple) Lua is free open-source software

42

Page 43: 1 Prototype-basedPrototype-based scripting languagescripting language

An inherent is that it’s a fairly rarely-used language.

An implementation is that it currently dependent on an external Lua binary installation

43

Page 44: 1 Prototype-basedPrototype-based scripting languagescripting language

Data Types Boolean values numbers (double-precision floating point by

default) strings.Typical data: Arrays, sets, lists, and records can be

represented using Lua’s single native data structure, the table, which is essentially a heterogeneous associative array Data Type

44

Page 45: 1 Prototype-basedPrototype-based scripting languagescripting language

Literals and output in Luaprint ('1: Hello World')print ("2: Hello

World")

The Result: 1: Hello World2: Hello World

45

Page 46: 1 Prototype-basedPrototype-based scripting languagescripting language

A simple array of stringsarray = { "a", "b", "c", "d" } print(array[2]) print(#array) array[0] = "z" print(#array) An array of objects:function Point(x, y) return { x = x, y = y } end array = { Point(10, 20), Point(30, 40), Point(50,

60) } print(array[2].y)

46

Page 47: 1 Prototype-basedPrototype-based scripting languagescripting language

Vector = {} the class methods function Vector:new(x, y, z local object = { x = x, y = y, z = z }

setmetatable(object, { __index = Vector }) return object Endfunction Vector:magnitude() return math.sqrt(self.x^2 + self.y^2 + self.z^2) end vec = Vector:new(0, 1, 0) print(vec:magnitude()) print(vec.x)

47

Page 48: 1 Prototype-basedPrototype-based scripting languagescripting language

For-loopfor variable = 0, 10, 2 do print ( variable ) end Loops: While-loop: i = 1while i <= 5 do print (i) i = i + 1 end

48

Page 49: 1 Prototype-basedPrototype-based scripting languagescripting language

A very simple configuration file:

width = 420 height = width*3/2 -- ensures 3/2 aspect ratio

color = "blue

49

Page 50: 1 Prototype-basedPrototype-based scripting languagescripting language

A configuration file using Functions:function Bound (w, h)

if w < 20 then w = 20elseif w > 500 then w = 500endlocal minH = w*3/2 -- local variable

if h < minH then h = minH endreturn w, h

end width, height = Bound(420, 500) if monochrome then color = "black" else

color = "blue" end 50

Page 51: 1 Prototype-basedPrototype-based scripting languagescripting language

Tollgrade’s DigiTest (telephony network testing)

Performance Technologies’ command line interface of CPC4400 (a hot swappable Ethernet switch)

LucasArts’ Escape from Monkey Island and Grim Fandango

51

Page 52: 1 Prototype-basedPrototype-based scripting languagescripting language

How does Lua apply the new configurations to the original program / application?

Ans. There are two phases in Lua programming: compilation time (that is when all Lua functions and program lines are compiled) and runtime (that is when C and C++ functions of the original program are called by Lua to apply the new configurations the user has specified)

52

Page 53: 1 Prototype-basedPrototype-based scripting languagescripting language

Extend the meaning of many syntactical constructions

e.g. fallbacks can be used to implement different kinds of inheritance, a feature not present in Lua

53

Page 54: 1 Prototype-basedPrototype-based scripting languagescripting language

54

Page 55: 1 Prototype-basedPrototype-based scripting languagescripting language

1985 Language Development Began Developed by Bertrand Meyer of Interactive

Software Engineering 1986 First Compiler Delivered 1987 Commercial Applications Developed 1991 NICE Founded (Non-Profit International

Consortium for Eiffel) NICE controls evolution, standardization and

basic class definitions for Eiffel 1996 Commercial Eiffel based development

system becomes available (iss-base). Decendent of Algol and ADA

55

Page 56: 1 Prototype-basedPrototype-based scripting languagescripting language

Pure object oriented language Strong statically typed Automatic memory management/Garbage

collection Supports ADTs Supports Generic Classes Supports By Value and By reference semantics Promotes simplicity (Readable, not Writeable) Non-Object Oriented Capabilities/Low Level

Functionality (C-Lang) Some Compilers only generate C source code Design By Contract (Reliability) Exception Handling Supports separate library compilation Supports In-Class Documentation Root class starts execution

56

Page 57: 1 Prototype-basedPrototype-based scripting languagescripting language

indexing description: “Basic Hello World author : “Jim Developer” class HELLO_WORLDcreation makefeature make is do io.put_string ("Hello, world!%N") endend

57

Page 58: 1 Prototype-basedPrototype-based scripting languagescripting language

Assignment Object Creation Routine Call Conditional Iteration Choice/Switch/Case

58

Page 59: 1 Prototype-basedPrototype-based scripting languagescripting language

i := i + 1 Assignments cannot happen directly to

class attributes. Methods/Routines must be used.

Shortcut Assignments don’t exist

59

Page 60: 1 Prototype-basedPrototype-based scripting languagescripting language

Declaration acc:ACCOUNT acc is “void” when declared At runtime acc obtains an object by calling create acc Which creates a new instance of ACCOUNT

and attaches acc acc can now be used: acc.open(“John”) acc.deposit(5000)

60

Page 61: 1 Prototype-basedPrototype-based scripting languagescripting language

The following data types exist, the initialization of variables of these types is automatically initialized

INTEGER initializes to zero REAL and DOUBLE initialize to 0.0 BOOLEAN initializes to false CHARACTER initializes to null Reference types initialize to a null reference INTEGER, REAL, DOUBLE, BOOLEAN and

CHARACTER are all considered Expanded types

61

Page 62: 1 Prototype-basedPrototype-based scripting languagescripting language

A reference is the default object type, when an instance of a class is created it is called a reference, this is created by either calling “create” or using “!!”

62

Page 63: 1 Prototype-basedPrototype-based scripting languagescripting language

An expanded type is one that is already initialized

INTEGER, REAL, DOUBLE, BOOLEAN and CHARACTER are all considered Expanded types

Expanded types don’t require calling “create” or “!!”

If the class is not defined with the keyword “expanded” then it will be a reference type.

expanded class INTEGER feature ... end -- INTEGER

63

Page 64: 1 Prototype-basedPrototype-based scripting languagescripting language

acc.open ("Jill")

acc.deposit (5000)

if acc.may_withdraw(3000) then

acc.withdraw(3000);print(acc.balance)

end

64

Page 65: 1 Prototype-basedPrototype-based scripting languagescripting language

if x > 10 then

... statements ...

elseif x > 5 then

... elsif statements ...

elseif x > 0 then

... more elsif statements ...

else

... else statements ...

end

65

Page 66: 1 Prototype-basedPrototype-based scripting languagescripting language

Only one looping statement exists, but it could be used to emulate other types of loops.

For Loop

from i := 1 until i = 10 loop io.put_int (i); io.new_line; i := i + 1; end

66

Page 67: 1 Prototype-basedPrototype-based scripting languagescripting language

While Loopfrom

node := first;

until

node = Void;

loop

io.put_string (node.text);

node := node.next;

end;

67

Page 68: 1 Prototype-basedPrototype-based scripting languagescripting language

Repeat Loopfrom done := False until done and pages = 10; loop done := True; printer.output_next; pages := pages + 1; end

68

Page 69: 1 Prototype-basedPrototype-based scripting languagescripting language

The inspected value must be enumerableState : INTEGER;State_1, State_2, State_3 : INTEGER is unique;... statements ...inspect State when State_1 then ... statements ...when State_2 then ... statements ...when State_3 then ... statements ...else ... statements ...end;

69

Page 70: 1 Prototype-basedPrototype-based scripting languagescripting language

Exceptions can be thrown in few cases: Design by contract failures Low level functions Rescue (Catch) Retry (can only exist within a rescue

clause) Retry starts execution of the routine

again without the variable initialization

70

Page 71: 1 Prototype-basedPrototype-based scripting languagescripting language

read_next_character (f: FILE) is -- Make next character available in last_character ; -- if impossible, set failed to True. require readable: file . readable local impossible: BOOLEAN do if impossible then failed := True else last_character := low_level_read_function ( f ) end rescue impossible := True retry end

71

Page 72: 1 Prototype-basedPrototype-based scripting languagescripting language

Facilitates more reliable techniques Defines correct usage Assertions (Boolean Expression): Precondition (require) Post condition (ensure) Class invariants (invariant) Class invariant must be satisfied upon

exit of the creation procedure (constructor)

72

Page 73: 1 Prototype-basedPrototype-based scripting languagescripting language

Assertion monitoring levels are set at compile time

The levels vary from no monitoring to monitoring all require/ensure/invariant

Exceptions will be thrown if assertions are being monitored

If the exception isn’t handled, a run-time error will result

73

Page 74: 1 Prototype-basedPrototype-based scripting languagescripting language

Purely Object Oriented Everything is an object Information Hiding Encapsulation Polymorphism/Dynamic Binding Inheritance (Including Multiple)

74

Page 75: 1 Prototype-basedPrototype-based scripting languagescripting language

Supports information hiding/encapsulation

No attributes of a class are allowed to be modified directly. All modifications must happen within a subroutine

No global variables are allowed No static functions are allowed Secret attributes/routines are equivalent

to private variables/methods

75

Page 76: 1 Prototype-basedPrototype-based scripting languagescripting language

Dynamic binding allows polymorphic object to call the appropriate versioned routine

acc : ACCOUNT ; sav : SAVINGS_ACCOUNT

acc := sav

acc.deposit( 1000 )

76

Page 77: 1 Prototype-basedPrototype-based scripting languagescripting language

Inheritance is supported Multiple inheritance is supported Routine can be overridden (redefine) Parent is known as a precursor Keyword precursor can be used to

reference the parent Renaming allows conflicts with multiple

inheritance to be resolved

77

Page 78: 1 Prototype-basedPrototype-based scripting languagescripting language

indexing description: "Savings accounts" class SAVINGS_ACCOUNT inherit ACCOUNT redefine deposit end feature -- Element change deposit ( sum : INTEGER ) is -- Add sum to account. do precursor (sum) … end … Other features … end -- class SAVINGS_ACCOUNT

78

Page 79: 1 Prototype-basedPrototype-based scripting languagescripting language

The implementation of inheritance supplies many keywords to define how the parents members are recognized

Rename allows renaming of a parent attribute/routine

Export allows changing protection of a parent attribute/routine

Redefine allows overriding a routine Undefine allows removing a routine

79

Page 80: 1 Prototype-basedPrototype-based scripting languagescripting language

The best page for a language overview is probably Eiffel on Wikipedia

It is very different to other languages but also very simple (there are only a small amount of keywords to learn)

Eiffel code is long compared to C (or similar languages). I. e. you have more words than symbols (end instead of }; from-until-loop-do instead of for(...; ...; ...) {...}). You can love or hate it.

80

Page 81: 1 Prototype-basedPrototype-based scripting languagescripting language

Every part of the language is defined as much as possible (i. e. there is a BNF for the whole syntax).

Design by Contract (DbC) is part of the language (preconditions, post conditions, class invariants, state-checks, exception handling deeply connected to DbC, etc.).

Garbage Collected (GC) or not - you can choose

81

Page 82: 1 Prototype-basedPrototype-based scripting languagescripting language

Apart from different compilers there is an IDE called Eiffel Studio with a lot of integrated tools (UML / BON diagrams, eiffel doc (similar to java doc), debugger, etc.). The IDE should run fine on Windows and platforms that support GTK

There are compilers that target .Net (Eiffel Software), Java (Smart Eiffel), interpreted (Beta, TE Comp) and C (which is compiled to native code)

82

Page 83: 1 Prototype-basedPrototype-based scripting languagescripting language

There are the commercial ones from Eiffel.com

Free, active ones like: Gobo and EWLC A lot of dead ones :( , yeah, that is a BIG

disadvantage of eiffel

83