情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN,...

36
2 BF@C<J2015( )DGAFE%9!#,*:6,7J;&;>9:J"HI- 17,=2KBF@C:$?-+53:<J;'<":+?=2;8/.40,K 2016(J

Transcript of 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN,...

Page 1: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

2

�BF@C<J2015��(� � ��)DGAFE�%9!#,*:�6,7J� �;�&;>9:J�"�H��I-����17,=2K�BF@C:$?�-+53�:<J��;�'<�"�:+?=2;8/��.40,K

2016��(�J����

Page 2: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

",A<1=U����V

n ��B��A",K8D9-

n #�$�?��B��AF;:%+>F;:G2@� 4�+7JD9-

n 2019��U��V– ��BNRMP?W�B��QSTO3H>D9X– .D?EQSTO/U",�B7160:I)���VBB� 3H'L>UD:C�(VW 5?�1>9X

– D?EQSTOB� C��NRMPA0ID9X

�*NRMPPDFU��NRMP��A!&Vhttp://www-ikn.ist.hokudai.ac.jp/~arim/pub/proriron/

Page 3: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

!)��)��H��I

l BE4DCF4��)��' �J���JD?G871J@09F5600�

l ��)=:&"KH/�-( ($#-���&*%*,�I

l 5F>2D)�����[ALSU’09]A.V.Aho, M.S.Lam, R.Sethi, J.D. Ullman, “Compilers,” 2nd, Addison-Wesley, 2009.H�/+.�<D6FA;3�I

Page 4: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

���������

n 1940s-1950s ��: ��� �����

n 1960s: FORTRAN, LISP, ALGOL�PASCAL�

n 1970s: C�

n 1980s: C++, Objective C, SmallTalk

n 1990s: Java

n Perl, Python, Ruby, ... , Scala, Haskell

������ �� 6

Page 5: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

�����

n ���������– ����

•27)64"����!�― ������27)638)!�� ���� (�), ��+1-&(% (��)

• *8059,!/9.&'%�27)64!��$ #��� "���

n ��� �����

Page 6: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

���%�

� �n ������������$'!�+,�n )�������&(����n C#*!-*n ������������ "

– ���

• 6;-:8&#���%�― � !����6;-:7<-%�������� (�), �/51*,) (��)

• .<49=0%3=2*+)"6;-:8%��(�'���$&� ��

Page 7: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

��������n 1940s-1950s ��: ������ ��n 1960s: FORTRAN, LISP, ALGOL�PASCAL�n 1970s: C��n 1980s: C++, Objective C, SmallTalkn 1990s: Java�Scala�n Perl, Python, Ruby, ...

Page 8: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

0�������(,41

n !6*���.– ����/�-�

n &����.– char, int, large int, double,

n (,���.– )2�array��(,��struct�

n &�����(,– ����linked list�������stack��+��2�queue�

n %"����(,– '�35$�binary search tree��#735$�

balanced search tree���� � �hash table�

���������+C-Pascal,

��+����,

���+C++-Java, etc.,

�� �'�&�$�!* ���������

"(�%#)��������

Page 9: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

� ���������

B•• 6 / )• 0 1 2

• M (( 0

6 I0 1I )

From geek.com: Google server firmhttp://www.geek.com/articles/chips/up-next-for-google-enterprise-wars-2009078/

From http://www-06.ibm.com/ibm/jp/lead/ideasfromibm/watson/

��������������� ��������������

2015������� ��� ���11

����GCOE����, 2012 OCT

Page 10: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

���������

CPU

����

�����

Page 11: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

CPU

n CPU (Central Processing Unit):������– �������������– ��������

•� ���– �����…– �������– �������������

Page 12: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

����

n ��� ��– �����

•������������������ ����

n ������– ���������

n ���� ��– CD-ROM,DVD…– �����

Page 13: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

�� ����������

15 OS����

int A, B; A = 2; B = 3; C = A + B;

C�� ���

Page 14: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

�� ����������

16 OS����

int A, B; A = 2; B = 3; C = A + B;

C��

#address of A is 120#address of B is 121#address of C is 132MOVE 120 '2'MOVE 121 '3'MOVE R1 120MOVE R2 121ADD R3 R1 R2MOVE R3 132

���

Page 15: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

����������� �����

17 34�� �'.0#�/���#(

��������l ��l CPUl ��l ���l ����l ����

��������/%+0!���� "$.&-��

��X (=130�2

R1

.��! R1

��ADD R3 R1 R2

R2

R3

)*, 1����2

Page 16: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

ZcS�?@BgMn ZcS�?@B �qn�Y������'J�%�� )+�1-3�$�*`o��'r��&��m+� '$�– p"I�n[�1F91int = !���2VW��^��h :9./,N� DRAM�1?@B4C 1;68��

n <E0A> dT�f���eW�l*`o�'�#��?@Bkj*aP

n <E0A> �eW�\L�75�`o�(� '_U=-G5��KfOb*iQ��XR

n eW�\L=,9D2�eW�l�r�H�]VW

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Page 17: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

5�/37;0*+ �/3��#(�����&���&!%n245���/3

– �����On/Off�.1��1�0�6�)�� �����->

– 101 (245) = 5 (1045)

'�#" �/8,�$�#%n:2�5��1045�1645�845�245�9= /8 ��n1645���/3

– 0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F– < F0 (1645) = 240 (1045)

Page 18: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

��� ,&

n 3*�76�/'���1�– C-5 int �32bit=4byte)��

232!��������3= ����9 �40.) +�)��n �������-5������ 2$

– "0 �2$�3*�-5• C�

– ����� 4%8�#���( �2$• Lisp, Java, ...• Garbage Collection(�������������������������) �

Page 19: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

/"2(�:7n /"2(�5H� )( AQ����S�=JK4!+1'�– )(�OP�F���M,"*��NL�B6������

n /"2(�8?– &x : D9x�/"2(– *x : /"2(x�AQ�����)(

n ���– Java�'%0.*;Ipython, ruby��$-&#%*��C++�ERreference���<C3��5>�/"2(��@ �G��

a b c ¥0 3450 34505098

char short int int

1 2 3 4 7 9

Page 20: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

25���%����

n ��%��pointer– �"�+.�-����– )60#�"����"�1& ���– �$�! %������ �3�4('�,�/*���

Page 21: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

���� ���

n �����������

30

x

1 2 3 4 7 9

int x = 30;

int y = 20;

20

y

5 6

&x � 1�&y�5�*((int*) 1)�30� *((int*) 5)�20

30 = 0000001E (16��)���1,2,3�00, 4�1E���

Page 22: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

�������24

./�

�'+-%�, !#%)

(�,$ p

132 � x

5

C�����

² (�,$p������x��x = *p� ��

²�x���(�,$p�p = &x �������

+"#$+&*������

Page 23: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

)-"� �8 �'$�!#

n *'(1%'�)�7���� �10%')

n 'x�+�2 !#

x = S�B�2A

n ;6��[;6�][('�][:'�]���� – ;6�(sign) S (1���) : 0=>&�1=>/– ('�(expponent) A� a����;6.0'�: – :'�(fraction) B�b����;6��0'�:

•'�9�5���,4'3�� ���

��

Page 24: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

$'����.��" ���n IEEE�(�IEEE754�

– +)���(�C, Java�– � ��#"�����1��&!"(excess binary)����float: a - 127, double: a - 1023�

n �� (C�float): – a = 8���, b=23���– ���1������4���– ����223»23*106

n ������(C�double): – a=11���, b=52���– ���1������8���– ����252»22*1015

��

*-�.��" "�%"10�

x = Sign�Fraction�10Exp

n [0,�][#"�][/"�]– 0,�Sign (1���)– #"�Exp� a���)– /"�Fraction�b���)

Page 25: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

LB/04�k^/04

n k^/04�K�OS��CPUlG*!&#�9>�NZA/04����Q�EP�M_– <fe�`O�DT�j����K�/04UF– NZA/04Y���D������Xc�?g

n NZA/04�lG*!&#� #'&&,�+�100hH7[�– -5$3.�*�(NZA/047���;:�-5$3.�lG*!&#7���;:���WBaV6d�[�

– ����lG*!&#��i�8�C�"1)%2���=�*�(�]@�i�;:�� ����<b

– /04�SaRC�JF�\I

Page 26: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

���������

n ������ �����– Hello World

C#include<stdio.h>void main() {printf(“Hello World¥n”);}

Ruby#!/usr/bin/rubyprint("Hello World¥n")

Javapublic class Hello {public static void main(String args[]) {System.out.println("Hello World!");}}

Page 27: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

�������������� 2!#:������@UNIX��◆ 4;%87>C��?: cat&6</◆ ���8#389: char C = getc(stdin)

– #define BUFSIZE 1024– 1+2! char buf[BUFSIZE] – '(,7&=:����

◆ '(,7&=:: read(stdin, buf, BUFSIZE)◆ -1#(

◆ -=*��: SCSI◆ 0=/-"($&<.;=8=

◆ )$*����

◆ -"($���5+/ �(seek)

Page 28: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

C�$*"(%

n C�$*"(%� G=�;A�2,FB�C�$*"(%�HD6�0�$*"(%� ��7:���5@&#'�)�9�- �����>���$*"(%�?846�0�3<��� �

�I+�J!�3<�� �$*"(%� I+� ����$*"(%��./�1����J���KE

Page 29: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

�� ����� ��

n �� ������������

void �����(�) {=��(�);if(=||=�){

printf(“��� );return;

}if(�����(�)){

printf(“���");return;

}printf(������");

}

void �����(�) {=��(�);if(=||=�){

printf(“��� );return;

}if(��1�1){

printf(“���");return;

}if(��2�11){

printf(“���");return;

}… … … … … …printf(������");

}

Page 30: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

7�#&�%$

n �"� !�#&�%$– �����(.�18 �#&�%$– ,:46��� goto3�2������– 9'+0����;5– -/)* �������� ���0�����

Page 31: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

��'-�*(�@H

n KS9– 4:?�I:?�5E��– ).&����– �.%.&�/1�– <M� ��/1�C�for,�'�0�F���

n 60PJ– �,!+"(�AN�=8�– LT�>G� ����R:#�$��32�U:�#�$� ���

n B;79�QOKC9– �����OS�D�����

Page 32: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

���%�$����

n ����18l59)*l !$���l0+6@ �(',3l���&���-2<

n ���/=l!�"#$��Modularityl74.:81 Reusabilityl?���� Readabilityl;>���� Portabilityl ...

�������������� ��2016/04/07 36

Page 33: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

*,$%�3�#n *,$%� � �'2�40��!

– 1. � ����

– 2. ����!����

– 3. ).�/1��!����-

– 4. �������(+

– 5. "&���

2016/04/07 37

Page 34: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

E��"� ��@5�(,

n �"� ��:�)�6=�<24– &+��K��"� ��JC�K�– $�1�����M8��"� ���DO4�G��A904�G�

n ����!.�-7– 3L���N>�F/�� ����/?���A904�'�

n IB*��"� �#��;H�%,– Design Patterm

• 48+759+������ ��%2-:9��� – UML (Unified Modeling Language)

• ,3/()&"�����– XP eXtreme Programing

• 3':01.*%�� �#�48+76%���!��� �#���$��

Page 35: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

�"�!��-)&'

n #$-��"�!��1���������.���

n %+��(*&'– ,2�0�– 3�0�– /4���(pseudo code)– �"�� ����� �

•���������� ������

Page 36: 情報知識ネットワーク研究室arim/pub/proriron/program2.pdfn1940s-1950s : n1960s: FORTRAN, LISP, ALGOL PASCAL n1970s: C n1980s: C++, Objective C, SmallTalk n1990s: Java Scala

���

n �������������&� ���– ��������%��� � #���

n $�������!����"