1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu ứng dụng ngôn ngữ f trong phát triển phần mềm

13 292 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 333,25 KB

Nội dung

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ VŨ QUANG HƯNG Nghiên cứu ứng dụng ngôn ngữ F* trong phát triển phần mềm LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội – 2015... TRƯỜNG ĐẠI HỌC CÔNG NGHỆ VŨ QU

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

VŨ QUANG HƯNG

Nghiên cứu ứng dụng ngôn ngữ F* trong

phát triển phần mềm

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

Hà Nội – 2015

Trang 2

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

VŨ QUANG HƯNG

Nghiên cứu ứng dụng ngôn ngữ F* trong

phát triển phần mềm

Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm

Mã số: 60480103

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS TS Trương Anh Hoàng NGƯỜI ĐỒNG HƯỚNG DẪN KHOA HỌC: TS Nguyễn Như Sơn

Hà Nội – 2015

Trang 3

LỜI CAM ĐOAN

Tôi xin cam đoan luận văn này là công trình nghiên cứu của cá nhân tôi, dưới sự hướng dẫn trực tiếp từ phía PGS.TS Trương Anh Hoàng và TS Nguyễn Như Sơn Các số liệu, nội dung tham khảo được trích dẫn có nguồn gốc rõ ràng, tuân thủ tôn trọng quyền tác giả Kết quả cuối cùng đạt được của luận văn là thành quả của quá trình nghiên cứu bản thân, chưa từng được công bố dưới bất kỳ hình thức nào

Tôi xin chịu trách nhiệm về nghiên cứu trong luận văn

Vũ Quang Hưng

Trang 4

LỜI CẢM ƠN

Để hoàn thành đề tài luâ ̣n văn này , bên ca ̣nh sự chủ đô ̣ng cố gắng của bản thân , tôi đã nhâ ̣n được sự ủng hô ̣ và giúp đỡ nhiê ̣t tình từ các tâ ̣p thể , cá nhân trong và ngoài trường

Qua đây , cho phép tôi được bày tỏ lòng cảm ơn sâu sắc tới thầy giáo

PGS.TS.Trương Anh Hoàng , giảng viên bộ môn Công nghệ phần mềm trường Đại học công nghê ̣ – Đa ̣i ho ̣c Quốc gia Hà Nô ̣i , người đã trự c tiếp đô ̣ng viên , đi ̣nh hướng và hướng dẫn tâ ̣n tình trong quá trình ho ̣c tâ ̣p và hoàn thành đề tài luâ ̣n văn này

Đồng kính gửi lời cảm ơn đến tập thể các thầy , cô giáo trong trường Đa ̣i ho ̣c Công Nghệ – Đa ̣i ho ̣c Quốc gia Hà Nô ̣i đã trau dồi kiến thức cho tôi , điều đó là nền tảng quí báu góp phần to lớn trong quá trình vận dụng vào hoàn thiện luận văn

Cuối cùng, tôi xin được gửi lòng biết ơn sâu sắc đến gia đình , bạn bè, đồng nghiê ̣p đã ta ̣o điều kiê ̣n về vâ ̣t chất cũng như tinh thần , luôn sát cánh bên tôi , đô ̣ng viên giúp tôi yên tâm ho ̣c tâ ̣p và kết thúc khóa ho ̣c

Xin chân thành cảm ơn!

Tác giả

Vũ Quang Hưng

Trang 5

MỤC LỤC

LỜI CAM ĐOAN 3

LỜI CẢM ƠN 4

MỤC LỤC 5

DANH MỤC CÁC KÝ HIỆU, THUẬT NGỮ, CHỮ VIẾT TẮT 7

DANH MỤC CÁC BẢNG 8

DANH MỤC CÁC HÌNH VẼ 9

PHẦN MỞ ĐẦU 10

Tính cấp thiết của đề tài 10

Mục tiêu của luận văn 10

Công cụ phần mềm 10

Phương pháp nghiên cứu Error! Bookmark not defined.

Bố cục luận văn Error! Bookmark not defined CHƯƠNG 1: TỔNG QUAN VỀ LẬP TRÌNH HÀM Error! Bookmark not defined 1.1 Giới thiệu chung về ngôn ngữ lập trình hàm Error! Bookmark not defined 1.2 Các đặc điểm nổi bật của ngôn ngữ lập trình hàm Error! Bookmark not defined 1.3 Sự phổ biến của ngôn ngữ lập trình hàm Error! Bookmark not defined 1.4 Giới thiệu tổng quan về ngôn ngữ lập trình hàm F# Error! Bookmark not defined CHƯƠNG 2: NGHIÊN CỨU LÝ THUYẾT VỀ NGÔN NGỮ F* Error! Bookmark not

defined.

2.1 Giới thiệu chung Error! Bookmark not defined 2.1.1 Giới thiệu về ngôn ngữ F* Error! Bookmark not defined.

2.1.2 Giới thiệu về kiểu phụ thuộc, hệ thống kiểu phụ thuộc Error! Bookmark not

defined.

2.2 Các đặc điểm nổi bật của ngôn ngữ F* Error! Bookmark not defined 2.2.1 Ngôn ngữ tự chứng thực F* Error! Bookmark not defined 2.2.2 Trình biên dịch từ F* sang mã JavaScript Error! Bookmark not defined 2.3 Các khái niệm cơ bản khi lập trình với F* Error! Bookmark not defined.

Trang 6

2.3.1 Các định nghĩa kiểu và loại thường dùng trong F* Error! Bookmark not

defined.

2.3.2 Các khái niệm chung về khai báo kiểu trong F* Error! Bookmark not defined 2.3.3 Lý thuyết về tập hợp: Error! Bookmark not defined 2.3.4 Định nghĩa, sử dụng mảng dữ liệu trong F* Error! Bookmark not defined 2.3.5 Kiểu của số tự nhiên (NAT) Error! Bookmark not defined 2.3.6 Chứng minh tính chất cơ bản trong F* Error! Bookmark not defined 2.3.7 Loại suy luận và các ảnh hưởng tới tính toán Error! Bookmark not defined 2.3.8 Sử dụng F* lập trình với các bài toán đơn giản Error! Bookmark not defined 2.3.9 Chứng minh bổ đề (Lemmas) Error! Bookmark not defined.

2.3.10 Chứng minh tính kết thúc của chương trình trong F* (Proving termination)

Error! Bookmark not defined.

2.4 Kết luận chương Error! Bookmark not defined CHƯƠNG 3: BÀI TOÁN ỨNG DỤNG Error! Bookmark not defined 3.1 Ứng dụng F* vào các bài toán lập trình Error! Bookmark not defined.

3.1.1 Ứng dụng trong bài toán sắp xếp mảng nổi bọt (Buble sort) Error! Bookmark

not defined.

3.1.2 Ứng dụng trong lập trình sắp xếp mảng nhanh (Quick sort) Error! Bookmark

not defined.

3.1.3 Ứng dụng trong cái bài toán làm việc với các tập tin, thư mục Error!

Bookmark not defined.

3.2 Ứng dụng F* trong bài toán tính tổng tài nguyên sử dụng chương trình Error!

Bookmark not defined.

3.2.1 Giới thiệu bài toán Error! Bookmark not defined 3.2.2 Giải quyết bài toán Error! Bookmark not defined.

3.2.3 Tính toán giá trị mức giới hạn trên tổng chi phí tài nguyên cho chương trình

Error! Bookmark not defined.

KẾT LUẬN Error! Bookmark not defined.

TÀI LIỆU THAM KHẢO 11

Trang 7

PHỤ LỤC CÁC CÔNG CỤ HỖ TRỢ CÀI ĐẶT THỰC NGHIỆM Error! Bookmark

not defined.

Trang 8

DANH MỤC CÁC KÝ HIỆU, THUẬT NGỮ, CHỮ VIẾT TẮT

CHỮ VIẾT TẮT

1 F* Ngôn ngữ lập trình Fstar

2 STM (Software

Transactional Memory)

Bộ nhớ giao tác phần mềm, một giải pháp viết các chương trình tương tranh, thay cho cơ chế đồng bộ dựa trên khóa

3 TFJ string Là một ngôn ngữ mở rộng của FJ tích hợp mô

hình bộ nhớ giao tác phần mềm

THUẬT NGỮ

1 Type System Hệ thống kiểu

2 Transaction Giao tác

3 Thread Luồng

4 Binary Mã nguồn chương trình

5 Type checker Bộ kiểm tra kiểu

6 Strongly typed Kiểu mạnh

7 AST (Abstract Syntax Tree) Cây cú pháp trừu tượng

8 Onacid Trạng thái mở một giao tác

9 Commit Trạng thái kết thúc một giao tác

10 Lock-based synchronization Đồng bộ hóa dựa trên khóa

11 Nested transactions Các giao tác lồng

12 Multi-threaded Đa luồng

13 Join Hàm khử dấu trừ trong chuỗi có dấu chính tắc

14 Merge Hàm gộp 2 chuỗi có dấu chính tắc

15 Spawn Sinh luồng

16 Joint commits Các commit của các luồng song song đồng thời

thực hiện kết thúc một giao tác chung

17 Syntax Cú pháp

KÝ HIỆU

1 +m Mô tả thành phần + trong hệ thống kiểu dựa trên

chuỗi số có dấu, m thao tác onacid liên tiếp

2 −m Mô tả thành phần – trong hệ thống kiểu dựa trên

chuỗi số có dấu, m thao tác commit liên tiếp

3 #m Mô tả thành phần # trong hệ thống kiểu dựa trên

chuỗi số có dấu, m các giao tác lồng nhau

4 ¬m Mô tả thành phần ¬ thể hiện số lượng joint

commit trong hệ thống kiểu dựa trên chuỗi số có

Trang 9

dấu

DANH MỤC CÁC BẢNG

Bảng 2.1: Khai báo biểu thức, kiểu, loại trong ngôn ngữ F* Error! Bookmark not

defined.

Bảng 3.1 Bảng kết quả kiểm thử phép toán chính tắc chuỗi số có dấu Error! Bookmark

not defined.

Bảng 3.2 Bảng kết quả kiểm khử dấu “−” thành dấu “¬” Error! Bookmark not defined Bảng 3.3 Bảng kết quả kiểm khử hàm merge Error! Bookmark not defined Bảng 3.4 Bảng kết quả kiểm khử hàm joint commit Error! Bookmark not defined.

Trang 10

DANH MỤC CÁC HÌNH VẼ

Hình 2.1: Kết quả cho bài toán tính giai thừa Error! Bookmark not defined Hình 2.2: Các kiểu, loại dữ liệu đƣợc sử dụng trong F* [4] Error! Bookmark not

defined.

Hình 3.1: Kết quả cho bài toán sắp xếp nổi bọt Error! Bookmark not defined Hình 3.2: Kết quả cho bài toán sắp xếp nhanh Error! Bookmark not defined Hình 3.3: Ví dụ mô hình giao tác lồng, đa luồng và joint [13] Error! Bookmark not

defined.

Trang 11

PHẦN MỞ ĐẦU

Tính cấp thiết của đề tài

Hiện nay ngành công nghiệp phần mềm đang rất phát triển ở nhiều lĩnh vực Trên thực tế, tùy theo yêu cầu của mỗi lĩnh vực mà chúng ta có thể lựa chọn các ngôn ngữ lập trình sao cho phù hợp Chúng ta có thể thấy rất nhiều ngôn ngữ lập trình được sử dụng ngày nay, trong đó phải kể đến một số ngôn ngữ lập trình rất được phổ biến như là Java, C#, Objective-C, JavaScript, SQL, PHP Các ngôn ngữ lập trình hàm như OCaml, ML, F# cũng dần được phổ biến trong khoảng thời gian gần đây Ngôn ngữ lập trình hàm F# là

ngôn ngữ có kiểu mạnh (strongly-typed) và tự suy luận kiểu (không cần phải khai báo

kiểu cho các biến đầu vào), trình biên dịch có thể tự suy luận ra kiểu của các biến đầu vào

đó khi dịch chương trình Tuy nhiên các kiểu được sử dụng để gán cho các biến đầu vào của ngôn ngữ là có sẵn và được gán một cách tự động khiến người lập trình khó có thể tùy biến được trong F#

Từ nhu cầu này, ngôn ngữ F* đã ra đời Ngôn ngữ F* có hệ thống kiểu được xây dựng dựa trên nền tảng lý thuyết System Fω [1] nhưng được mở rộng hơn với hệ thống kiểu phụ thuộc, các kiểu được tùy chỉnh, cho phép người lập trình có thể làm mịn kiểu dữ liệu cho chặt hơn, phù hợp hơn với ý đồ Ngoài ra F* có thể kiểm chứng tính đúng đắn của chương trình theo kiểu dữ liệu mới được làm mịn này Tức là thông thường, chúng ta

chỉ có kiểu số nguyên (int) nhưng với ngôn ngữ F* chúng ta có thể khai báo kiểu số

nguyên nằm trong khoảng 0 đến 10, hay chỉ gồm các số chẵn hoặc chỉ có các số lẻ Hơn nữa ngôn ngữ F* có thể được dịch sang những ngôn ngữ khác như OCaml, F# hoặc JavaScript để thực thi Những vấn đề trên là cơ sở khoa học và thực tiễn để tôi thực hiện

đề tài “Nghiên cứu ứng dụng ngôn ngữ F* trong phát triển phần mềm”

Mục tiêu của luận văn

Trên cơ sở nghiên cứu lý thuyết, cài đặt, thử xây dựng các chương trình cơ bản, luận văn đã ứng dụng ngôn ngữ F* vào việc xây dựng công cụ tính tổng tài nguyên được sử dụng trong chương trình đa luồng có dùng bộ nhớ giao dịch, theo bài báo nghiên cứu của thầy hướng dẫn

Công cụ phần mềm

Trong luận văn, tôi có sử dụng mã nguồn F* để cài đặt thuật toán chương trình Ngoài ra còn một số công cụ hỗ trợ như Cygwin, OCaml và Visual Studio (C#, F#)

Trang 12

TÀI LIỆU THAM KHẢO Tiếng Anh

[1] Reynolds and John, "Towards a Theory of Type Structure," Carnegie Mellon

University, 1974

[2] P Hudak, Conception, evolution, and application of functional programming

languages, ACM Computing Surveys, 1989

[3] P.-Y Strub, N Swamy, C Fournet and J Chen, "Self-Certification, Bootstrapping Certified Typecheckers in F* with Coq," Microsoft Research, 2012

[4] U N a J Chapman, "Dependently Typed Programming in Agda," Chalmers

University, Gothenburg, 2013

[5] P H Khanh, Lập Trình Hàm và Lập Trình Logic, Đà Nẵng, 2009

[6] N Swamy, C Hritcu, C Keller, P.-Y Strub, A Rastogi, A Delignat-Lavaud, K Bhargavan and C Fourne, "Semantic Purity and Effects Reunited in F," ICFP, 2015 [7] H Geuvers, "Introduction to Type Theory," Radboud University Nijmegen; The Netherlands Technical University Eindhoven;, The Netherland, 2008

[8] P Castéran and M Sozeau, "A Gentle Introduction to Type Classes and Relations in Coq," CNRS; LaBRI; UMR 5800; F-33400 Talence, France, 2014

[9] R Harper, "Programming in Standard ML," Carnegie Mellon University, 2011 [10] N Swamy, J Chen, C Fournet, P.-Y Strub, K Bhargavan and J Yang, "Secure Distributed Programming with Value-Dependent Types," Microsoft Research, MSR-INRIA, MSR-INRIA, MIT, 2011

[11] J Condit, M Harren, Z Anderson, D Gay and G C Necula, "Dependent Types for Low-Level Programming," University of California, Berkeley, Intel Research, Berkeley, 2007

[12] A Bove and P Dybjer, "Dependent Types at Work," Chalmers University of

Technology, Sweden, 2008

[13] H Truong, "Type Systems for Guaranteeing Resource Bounds of Component

Software," 2006

[14] C Fournet, N Swamy, J Chen, Pierre-Evariste, D Pierre-Yves, Strub and B

Livshits, "Fully Abstract Compilation to JavaScript," Microsoft Research and MSR-INRIA, 2013

[15] J Bengtson, K Bhargavan, C Fournet, A D Gordon and S Maffeis, "Refinement Types for Secure Implementations," 2008

[16] H Truong, "A type and effect system for counting logs of multi-threaded nested transactional programs," Vietnam National Foundation for Science and Technology Development (NAFOSTED), 2014

[17] D Wahlstedt, "Dependent Type Theory with Parameterized First-Order Data Types and Well-Founded Recursion," 2007

Ngày đăng: 26/08/2016, 16:58

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w