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

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

Đ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

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ VŨ QUANG HƢNG Nghiên cứu ứng dụng ngôn ngữ F* 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 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ VŨ QUANG HƢNG Nghiên cứu ứng dụng ngôn ngữ F* phát triển phần mềm Ngành: Chuyên ngành: Mã số: Công nghệ thông tin Kỹ thuật phần mềm 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 LỜI CAM ĐOAN Tôi xin cam đoan luận văn công trình nghiên cứu cá nhân tôi, dƣới hƣớng dẫn trực tiếp từ phía PGS.TS Trƣơng Anh Hoàng 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 cuối đạt đƣợc luận văn thành trình nghiên cứu thân, chƣa đƣợc công bố dƣới hình thức Tôi xin chịu trách nhiệm nghiên cứu luận văn Hà Nội, ngày 28 tháng năm 2015 Tác giả Vũ Quang Hƣng 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 , đã nhâ ̣n đƣơ ̣c sƣ̣ ủng hô ̣ và giúp đỡ nhiê ̣t tin , cá nhân ̀ h tƣ̀ các tâ ̣p thể trƣờng Qua , cho phép đƣơ ̣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 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 , đinh ̣ hƣớng và hƣớng dẫn tâ ̣n tiǹ h quá trin ̀ h 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ể thầy , cô giáo 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 , điề u đó là nề n tảng quí báu góp phần to lớn trình vận dụng vào hoàn thiện luận văn Cuố i cùng, xin đƣơ ̣c gƣ̉i lòng biế t ơn sâu sắ c đế n gia đin ̀ h , bạn bè, đồ ng nghiê ̣p đã ta ̣o điề u kiê ̣n về vâ ̣t chấ t cũng nhƣ tinh thầ n , sát cánh bên , đô ̣ng viên giúp 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 MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN MỤC LỤC DANH MỤC CÁC KÝ HIỆU, THUẬT NGỮ, CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG DANH MỤC CÁC HÌNH VẼ PHẦN MỞ ĐẦU 10 Tính cấp thiết đề tài 10 Mục tiêu 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 ngôn ngữ lập trình hàm Error! Bookmark not defined 1.2 Các đặc điểm bật ngôn ngữ lập trình hàm Error! Bookmark not defined 1.3 Sự phổ biến ngôn ngữ lập trình hàm Error! Bookmark not defined 1.4 Giới thiệu tổng quan 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 ngôn ngữ F* Error! Bookmark not defined 2.1.2 Giới thiệu kiểu phụ thuộc, hệ thống kiểu phụ thuộc Error! Bookmark not defined 2.2 Các đặc điểm bật 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 lập trình với F* Error! Bookmark not defined 6 2.3.1 Các định nghĩa kiểu loại thƣờng dùng F* Error! Bookmark not defined 2.3.2 Các khái niệm chung khai báo kiểu F* Error! Bookmark not defined 2.3.3 Lý thuyết tập hợp: Error! Bookmark not defined 2.3.4 Định nghĩa, sử dụng mảng liệu F* Error! Bookmark not defined 2.3.5 Kiểu số tự nhiên (NAT) Error! Bookmark not defined 2.3.6 Chứng minh tính chất F* Error! Bookmark not defined 2.3.7 Loại suy luận ả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 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 chƣơng trình 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 toán lập trình Error! Bookmark not defined 3.1.1 Ứng dụng toán xếp mảng bọt (Buble sort) Error! Bookmark not defined 3.1.2 Ứng dụng lập trình xếp mảng nhanh (Quick sort) Error! Bookmark not defined 3.1.3 Ứng dụng toán làm việc với tập tin, thƣ mục Error! Bookmark not defined 3.2 Ứng dụng F* 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 toán Error! Bookmark not defined 3.2.2 Giải toán Error! Bookmark not defined 3.2.3 Tính toán giá trị mức giới hạ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 PHỤ LỤC CÁC CÔNG CỤ HỖ TRỢ CÀI ĐẶT THỰC NGHIỆM .Error! Bookmark not defined 8 DANH MỤC CÁC KÝ HIỆU, THUẬT NGỮ, CHỮ VIẾT TẮT CHỮ VIẾT TẮT, THUẬT NGỮ, KÝ HIỆU STT GIẢI NGHĨA CHỮ VIẾT TẮT F* STM (Software Transactional Memory) TFJ string Ngôn ngữ lập trình Fstar Bộ nhớ giao tác phần mềm, giải pháp viết chƣơng trình tƣơng tranh, thay cho chế đồng dựa khóa Là ngôn ngữ mở rộng FJ tích hợp mô hình nhớ giao tác phần mềm THUẬT NGỮ 10 11 12 13 14 15 Type System Transaction Thread Binary Type checker Strongly typed AST (Abstract Syntax Tree) Onacid Commit Lock-based synchronization Nested transactions Multi-threaded Join Merge Spawn 16 Joint commits 17 Syntax Hệ thống kiểu Giao tác Luồng Mã nguồn chƣơng trình Bộ kiểm tra kiểu Kiểu mạnh Cây cú pháp trừu tƣợng Trạng thái mở giao tác Trạng thái kết thúc giao tác Đồng hóa dựa khóa Các giao tác lồng Đa luồng Hàm khử dấu trừ chuỗi có dấu tắc Hàm gộp chuỗi có dấu tắc Sinh luồng Các commit luồng song song đồng thời thực kết thúc giao tác chung Cú pháp KÝ HIỆU + m − m # m ¬ m Mô tả thành phần + hệ thống kiểu dựa chuỗi số có dấu, m thao tác onacid liên tiếp Mô tả thành phần – hệ thống kiểu dựa chuỗi số có dấu, m thao tác commit liên tiếp Mô tả thành phần # hệ thống kiểu dựa chuỗi số có dấu, m giao tác lồng Mô tả thành phần ¬ thể số lƣợng joint commit hệ thống kiểu dựa chuỗi số có dấu DANH MỤC CÁC BẢNG Bảng 2.1: Khai báo biểu thức, kiểu, loại ngôn ngữ F* Error! Bookmark not defined Bảng 3.1 Bảng kết kiểm thử phép toán tắc chuỗi số có dấu Error! Bookmark not defined Bảng 3.2 Bảng kết kiểm khử dấu “−” thành dấu “¬” Error! Bookmark not defined Bảng 3.3 Bảng kết kiểm khử hàm merge Error! Bookmark not defined Bảng 3.4 Bảng kết kiểm khử hàm joint commit Error! Bookmark not defined 10 DANH MỤC CÁC HÌNH VẼ Hình 2.1: Kết cho toán tính giai thừa Error! Bookmark not defined Hình 2.2: Các kiểu, loại liệu đƣợc sử dụng F* [4] .Error! Bookmark not defined Hình 3.1: Kết cho toán xếp bọt Error! Bookmark not defined Hình 3.2: Kết cho toán xếp nhanh Error! Bookmark not defined Hình 3.3: Ví dụ mô hình giao tác lồng, đa luồng joint [13] Error! Bookmark not defined 11 PHẦN MỞ ĐẦU Tính cấp thiết đề tài Hiện ngành công nghiệp phần mềm phát triển nhiều lĩnh vực Trên thực tế, tùy theo yêu cầu lĩnh vực mà có thể lựa chọn ngôn ngữ lập trình cho phù hợp Chúng ta có thể thấy nhiều ngôn ngữ lập trình đƣợc sử dụng ngày nay, phải kể đến số ngôn ngữ lập trình đƣợc phổ biến nhƣ Java, C#, Objective-C, JavaScript, SQL, PHP Các ngôn ngữ lập trình hàm nhƣ OCaml, ML, F# dần đƣợc phổ biến khoảng thời gian gần Ngôn ngữ lập trình hàm F# ngôn ngữ có kiểu mạnh (strongly-typed) tự suy luận kiểu (không cần phải khai báo kiểu cho biến đầu vào), trình biên dịch có thể tự suy luận kiểu biến đầu vào dịch chƣơng trình Tuy nhiên kiểu đƣợc sử dụng để gán cho biến đầu vào ngôn ngữ có sẵn đƣợc gán cách tự động khiến ngƣời lập trình khó có thể tùy biến đƣợc F# Từ nhu cầu này, ngôn ngữ F* đời Ngôn ngữ F* có hệ thống kiểu đƣợc xây dựng dựa tảng lý thuyết System Fω [1] nhƣng đƣợc mở rộng với hệ thống kiểu phụ thuộ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 liệu cho chặt hơn, phù hợp với ý đồ Ngoài F* có thể kiểm chứng tính đắn chƣơng trình theo kiểu liệu đƣợc làm mịn Tức thông thƣờng, có kiểu số nguyên (int) nhƣng với ngôn ngữ F* có thể khai báo kiểu số nguyên nằm khoảng đến 10, hay gồm số chẵn có số lẻ Hơn ngôn ngữ F* có thể đƣợc dịch sang ngôn ngữ khác nhƣ OCaml, F# JavaScript để thực thi Những vấn đề sở khoa học thực tiễn để thực đề tài “Nghiên cứu ứng dụng ngôn ngữ F* phát triển phần mềm” Mục tiêu luận văn Trên sở nghiên cứu lý thuyết, cài đặt, thử xây dựng chƣơng trình 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 chƣơng trình đa luồng có dùng nhớ giao dịch, theo báo nghiên cứu thầy hƣớng dẫn Công cụ phần mềm Trong luận văn, có sử dụng mã nguồn F* để cài đặt thuật toán chƣơng trình Ngoài số công cụ hỗ trợ nhƣ Cygwin, OCaml Visual Studio (C#, F#) 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 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, MSRINRIA, 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 MSRINRIA, 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 13 [...]... 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. .. 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 MSRINRIA, 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... 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...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... 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. .. 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... 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... C Fournet, P.-Y Strub, K Bhargavan and J Yang, "Secure Distributed Programming with Value-Dependent Types," Microsoft Research, MSRINRIA, 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... 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# ) 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... 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 13

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