Trang 1 trên tổng số 6 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 59 kết quả

Đề tài: Viết thư viện C++ chạy trên mọi hệ điều hành | Ý tưởng mới đầu năm

  1. #1
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định Viết thư viện C++ chạy trên mọi hệ điều hành | Ý tưởng mới đầu năm

    Mình có một mục tiêu muốn dành thời gian thực hiện trong năm nay và mình sẽ xây dựng lại 1 hệ thống các class và làm nó với C++.

    - Ý tưởng của mình là 1 thư viện có thể sử dụng trên chạy trên mọi hệ điều hành và tất cả các trình biên dịch như Visual Studio lẫn Dev, NetBean, Free C++ hay cả GCC của Linux để có thể tự do thay đổi do vấn đề bản quyền vẫn chưa chính thức có hiệu lực ở Việt Nam.

    - Điều thôi thúc mình nghĩ tới ý tưởng này chính là một chữ "chuẩn" trong phần mềm. Ví dụ như FireFox, OpenOffice hay một số Game có thể chạy trên vi tính lẫn XBox, Playstation. Mình rất thích những ứng dụng dạng này vì người ta lập trình rất tốt và nó không phải phụ thuộc, gắn chặt vào Hệ Điều Hành.

    - Mình dự dịnh sẽ xây dựng 1 lại hệ thống class và namespace hơi giống C# vậy. Bao gồm các namespace hay sử dụng như Math, String, Form, Control, Generic , Graphics.... dựa trên các thư viện chuẩn của C++ và ứng dụng khi viết thì người ta phải chọn Project là Win32 Project.

    - Và ta sẽ lập trình trên nền tảng mà do ta làm ra với những đối tượng trừu tượng ở mức độ cao nhất. lớp dưới sẽ là các class tương ứng với Hệ Điều Hành.

    Ví dụ như:

    Lớp Interface (abstract) sẽ luôn được sử dụng trong ứng dụng.
    Code:
    * Form
       + Create(...)
       + Window_MoveWindow(..)
       + Window_SetCaption(..)
       + Event_AddKeyEvent(..)
       + Event_AddMouseEvent(...)
        ...
    Ví dụ ta sẽ tạo ra các lớp con ứng với hệ điều hành. Dĩ nhiên lúc này chỉ nên tập trung cho Windows (Call các hàm trong windows.h)
    Code:
       + MSForm
            + Create(..) => Gọi hàm Create hay CreateEx
            + Window_MoveWindow(..) => Gọi hàm MoveWindow 
            + Window_SetCaption(..)    => Gọi hàm SetWindowText 
               ....
            + Event_AddKeyEvent(...)
            + Event_AddMouseEvent(...)
       + LinuxForm
            + ..
            + ..
    Với nguyên tắc đa hình trong Object thì việc chúng ta thì chúng ta sẽ trỏ đúng chính xác các hàm cần thiết ứng với từng nền tảng.

    Không biết ý kiến của các bạn sẽ thế nào dưới ý tưởng này.
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 08-02-2008 lúc 07:07 PM.

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    không cần thiết (:|
    ...
    nói cho cùng Microsoft thiết kế ra để cho người dùng dễ sử dụng, rồi cậu lại muốn dùng cái đó để viết lại ..*_*..nói cho cùng cũng không để làm gì
    None!

  3. #3
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mình biết MS đã làm rất nhiều ở .NET rồi, nhưng đó là vấn đề mà mình muốn nói bởi lẽ chúng ta phải trả giá cho đúng với những gì mà MS đã làm theo về bản quyền. Nếu chúng ta làm việc theo nhóm tức là số tiền sẽ nhân lên theo số PC đồng thời phải đi với công nghệ của MS thì quá tốn kém.

    SUN đã làm điều này để tạo ra Java nhưng lại bị một nhược điểm lớn nhất là máy ảo ở Client và bị MS đánh vào điểm yếu này. Borland cũng có cách lập trình Form riêng theo nền tảng của mình với rất nhiều ngôn ngữ.

    Mình đúng là có vẽ lại những gì mà MS làm nhưng vẽ lại ở mức độ hệ thống cấp thấp WIN32 chứ không phải trên .NET. Sẽ làm trên các thư viện chuẩn như iostream, math.h, string.h... , các hàm API của hệ điều hành.

    Ví dụ như thế này

    Có thể mình xem nói thêm về phần sẽ làm:


    Code:
    #include <windows.h>
    
    #include "EXForm.h" // Thư viện mình dự định sẽ viết
    
    LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    Form *g_pForm;
    
    class MyEvent_FormKeyDown: public event_KeyHander {
             // event_KeyHander là Interface Class của chúng ta tạo ra sẽ được Form sử dụng
             
             int OnKeyDown(....){
                      ...
                      ...
             }
    
             int OnKeyUp(....){
                      ...
                      ...
             }
    };
    
    int WINAPI WinMain(
             HINSTANCE hInstance,
             HINSTANCE hPrevInstance,
             LPSTR lpCmdLine,
             int nCmdShow)
    {
       
       g_pForm = new MSForm();
       g_pForm->Create(...)
       
       // Thiet lap EVENT KEYDOWN
       MyEvent_FormKeyDown *Form_KeyDown = new MyEvent_FormKeyDown();
       g_pForm->event_AddKeyEvent(Form_KeyDown);
    
       g_pForm->Window_Show();
       
    
       MSG msg;
       while(GetMessage(&msg, 0, 0, 0) != FALSE)
       {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
       
       delete g_pForm;
       delete Form_KeyDown;
    
       return msg.wParam;
    }
    
    LRESULT CALLBACK WindowProc(HWND hWnd, UINT message,
             WPARAM wParam, LPARAM lParam)
    {
    
       switch(message)
       {
       case WM_DESTROY:
          PostQuitMessage(0);
          return 0;
       default: 
          // TRUYEN SU KIEN CHO FORM. 
          // DO DO NO CO THE XAC DINH DUNG SU KIEN DUOC GOI
          g_pForm->event_SendMSG(message);
          
          return DefWindowProc(hWnd, message, wParam, lParam);
       }
    }
    Mình thấy ứng dụng chạy trên XWindows của Linux cũng bám theo cấu trúc này. Do đó nên mình nghĩ để chuyển cho chtr chạy được trên Linux cũng không có gì khó. Chỉ thay đổi g_pForm = new LinuxForm()
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 08-02-2008 lúc 01:13 PM.

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    294

    .Net Framework cho free!
    Bạn thích viết lại cũng chẳng sao!Có điều là ... thừa.
    Nếu bạn có ý tưởng viết lại các hàm đó để hiểu cặn kẽ nó chạy thế nào thì hoan nghênh!Nhưng mà có lẽ bạn nên làm nó thành tut chứ ko phải là thư viện để dùng rộng rãi!
    Dark dám khẳng định cái thư viện của bạn sẽ tốn tài nguyên + chậm hơn M$.
    Is the moon rising...

  5. #5
    Ngày gia nhập
    10 2006
    Bài viết
    107

    Tự nhiên người khác phải dùng thêm một lớp thư viện của bạn ở bên trên nữa, thì tại sao người ta không dùng luôn cái gốc kia có phải nhanh hơn không. Hơi thừa !
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  6. #6
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Mặc định Viết thư viện C++ chạy trên mọi hệ điều hành | Ý tưởng mới đầu năm

    Ý tưởng hay ! Nhưng nhc nghĩ sẽ khó thực hiện. Việc viết lại từ đầu cả một thư viện là công việc chẳng dễ dàng gì.
    Keep moving forward!

    ... Retired ...

  7. #7
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Cám ơn vì bạn là người đầu tiên động viên mình.

    Thật ra thì mình không cảm thấy "thừa" khi làm điều này. Ít nhiều nó cũng tốt cho khả năng code của mình. Mình cũng thấy công việc làm cũng không đến nỗi khó vì mình chỉ call lại các hàm của HĐH.

    Tại sao phải làm thêm 1 class nữa ở cấp trên như vậy là vì mục tiêu chính của mình là để ứng dụng của mình không bị phụ thuộc vào hệ thống bất chấp hệ thống đó sẽ bị thay đổi như thế nào.

    Ví dụ đơn giản thế này đi. Bạn có thể thấy khi MS thay đổi từ WinXP sang Window Vista. Có rất nhiều phần mềm bị tê liệt do thay đổi hệ thống vì không tương thích. Nhưng chỉ cần 1 bản patch 1 vài fille DLL đơn giản là nó có thể chạy ổn định trở lại mà không cần phải cài lại 1 chương trình với phiên bản mới cho Vista. Đã có bao giờ bạn nghĩ tới mình có đủ trình độ để viết những ứng dụng này chưa?

    Thật tế thì vẫn luôn có những LIB thứ 3 chỉ đơn giản call lại các lib khác. Ví dụ như các GameEngine... Chúng cho phép ta tùy chỉnh Render bằng DirectX hay OpenGL dẫu rằng 2 thư viện này xài khác nhau rất nhiều. Do đó chúng ta có thể thấy được 1 số soft hay game có thể cho ta điều chỉnh vẽ hình = OGL hay DX. Bởi vì chương trình của họ chả thay đổi cái gì cả, cái thay đổi chỉ là GameEngine mà thôi.

    Viết SOFT là một chuyện nhưng mà SOFT đó sau khi thành công sẽ được bảo trì, nâng cấp như thế nào lại là một chuyện hoàn toàn khác. Vì vậy không phải theo hứng thú mà mình làm lại việc này. Mình muốn dốc sức vì 1 soft có thể chạy không phục thuộc vào nền tảng HDH, cả Windows, Linux... bởi vì Programer chỉ sử dụng lớp trừu tượng bên trên và lớp dưới sẽ thực thi (implement) những gì cần thiết ứng với hệ điều hành.

    Không giám chắc là nó nhanh nhưng hy vọng nó sẽ không rùa bò bởi vì mình không làm một Platforms như .NET hay Java mà chỉ là 1 LIB, vì thế nó sẽ được biên dịch ra mã máy.

    Xin cảm ơn đóng góp của các bạn. Nhưng dù thế nào thì mình mình vẫn sẽ làm vì đó là mục tiêu của mình. Hy vọng vài tháng nữa mình sẽ Demo một vài Compoments lên diễn đàn.

  8. #8
    Ngày gia nhập
    11 2006
    Bài viết
    633

    có dotNET thì cứ xài cho sướng, tự dưng bảo là phải chuẩn rồi chế ra thêm, ai cũng nghĩ như vậy thì thiên hạ mỗi người 1 chuẩn. MS đã tạo ra chuẩn rồi đó bạn, tại sao bạn ko nghĩ của MS là chuẩn mà lại tạo thêm 1 cái chuẩn mới, dotNET free hoàn toàn, ko có gì liên quan đến bản quyền ở đây cả.

  9. #9
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mình không phải không nói MS chuẩn. Thật sự là MS rất chuẩn nhưng họ chỉ chuẩn trên nền tảng hệ điều hành của họ.

    dotNET thì đúng Free thật nhưng Visual Studio thì còn nhiều vấn đề mà ta phải bàn:

    - Phiên bản Visual Studio 2008 Profession Edition thì MS bán với giá 700$/client
    - Trong khi cùng thời gian đó MS tung ra VS 2k8 Express thì lại Free cũng với các ngôn ngữ trên nhưng mang nghĩa là "limited edition for single language" (C#, VB.NET, C++).

    Như vậy cái giá 700$ ở đâu ra. Mình không thể suy đoán được vì chiến lược của MS thì khỏi phải nói rồi. Theo mình thì có lẽ C++/MFC trên nền tảng Win32 còn xót lại vì phiên bản Express không có Platforms này.

    Mình cũng là 1 fan của MS nhưng thật sự mình không thích chiến lược kinh doanh luôn mang tính độc quyền của MS. MS đã thắng trên thị trường máy tính để bàn nhưng không được suôn sẽ lắm trên thị trường máy Server. MS chiếm 1 số lượng rất nhỏ so với các hệ mã nguồn mở bởi vì nó FREE. Bằng chứng rằng hiện nay thị phần máy chủ Web Apache đã thắng so với IIS của MS. Cũng đơn giản thôi vì cái giá phải trả để chạy 1 máy chủ Windows thì gần như trên 3 ngàn USD, thay vì Free.

    Hiện nay bộ giáo dục Việt Nam đang khuyến khích chuyển sang xài OpenOffice, Unikey cùng FireFox... Dĩ nhiên đây là vấn đền sẽ làm không sớm thì muộn. 10 hay 20 năm nữa chắc chắn vấn đề bản quyền sẽ có hiệu lực vì chúng ta gia nhập WTO, phải chịu luật chơi chung của thương trường.

    Bạn phải xác định rõ đối tác của chúng ta sau này là ai. Chắc chắn là các công ty chứ không thể là từng cá nhân được bởi vì họ mới cần những phần mềm quản lý do chúng ta làm. Nếu bạn đứng đầu 1 công ty có số lượng PC khoảng 100 máy, bạn sẽ làm gì vào lúc này nếu luật bản quyền có giá trị, bạn có dám bỏ một khoảng tiền trên 30.000USD hay không chưa kể đến Server. Một cách tốt nhất là chuyển sang các hệ điều hành mã nguồn mở như Linux, OpenOffice để đáp ứng vấn đề văn phòng, mySQL (cơ sở dữ liệu), Apache + PHP (web) để giảm bớt chi phí.

    Lúc này họ sẽ phải cần đến những ứng dụng chạy được trên Linux hoặc bất cứ hệ điều hành nào nếu công ty đó yêu cầu và đó là mục tiêu của mình.

  10. #10
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Bạn Z có ý tưởng nghe qua thì thấy hay ^^!
    Dark muốn hỏi bạn mấy câu
    1 - Cái đoạn code demo form của bạn thì làm thế nào để nó tự động gọi đúng đối tượng linux form hay win form?Hay là bạn làm 2 bản cho *nix và win riêng?
    2 - Bạn nghĩ Apache là máy chủ?
    3 - Bạn nghĩ tận 10 -20 năm nữa thì bản quyền mới có hiệu lực?
    4 - Bạn nghĩ MySQL có thể thay thế hoàn toàn các db có bản quyền?
    5 - Bạn nghĩ Apache thắng IIS đơn giản chỉ là vấn đề giá thành?

    Vấn đề về bản quyền ko đơn giản như bạn nghĩ ^^!
    Đứng trên cương vị của người quản lý,bạn ko phải chỉ cần cân nhắc mỗi vấn đề mua bản quyền hết bao nhiêu tiền!

    Bạn dùng phần mềm để làm gì?
    Nếu bạn có dùng mã mở mà ko đáp ứng được yêu cầu làm việc thì mở hay free cũng có ý nghĩa gì hay ko?
    Đơn cử như trường hợp bạn nói dùng open office thay cho M$ Office.Bạn đã tính đến khả năng đào tạo nhân viên sử dụng thành thạo Open Office như nhân viên đó đã làm với M$ Office chưa?Chi phí đào tạo nhân viên đó so với việc mua bản quyền M$ Office thì cái nào tốn hơn?....
    Ví dụ dark đưa ra đây chỉ là cách đặt vấn đề bạn cần đánh giá trước khi bạn muốn thực hiện việc chuyển sang dùng mã nguồn mở.Khi bạn là người đứng đầu doanh nghiệp bạn phải quan tâm đến lợi ích của doanh nghiệp trước khi đi theo "trào lưu".
    Thực sự thì dark ko thích M$,thậm chí có thể nói là ghét,tuy nhiên dark vẫn phải thừa nhận sự thực là phần mềm của M$ hỗ trợ người dùng rất tốt.

    Ah,còn vấn đề Vista và XP của bạn dark thấy thực sự là hơi buồn cười! Nếu bạn chỉ call các lib khác thì bạn có làm cách nào thì phần mềm của bạn cũng ko thể chạy ngon lành trên Vis và XP.Cơ bản là nếu phần mềm của bạn ko thể chạy trên Vis là vì các hàm bạn gọi trong chương trình chạy trên XP ko có hàm giống như thế trên Vis. Còn nếu bạn đủ sức làm lại hẳn cái hàm của Win,ko cần thông qua API,gọi thẳng đến mã máy thì quả thật bạn là nhà phát minh vĩ đại. Dark nghĩ bạn có thể tương đương với Linux Torvalds! Lúc đó thì dark rất vui mừng ủng hộ bạn,CNTT của VN lại có một tài năng mới nổi!

    P/S: Quả thật dark chưa thấy doanh nghiệp nào sử dụng phần mềm quản lý mà viết bằng MFC hay C++.Bạn Z có thể giới thiệu cho dark vài công ty đang sử dụng những sản phẩm đó hay không?
    Đã được chỉnh sửa lần cuối bởi darkan : 08-02-2008 lúc 11:11 PM.
    Is the moon rising...

Các đề tài tương tự

  1. Trả lời: 8
    Bài viết cuối: 12-11-2013, 11:52 AM
  2. Lập trình C++ lỗi khi viết trên dev c, còn trên cfree chạy bình thường
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-10-2013, 03:34 PM
  3. Làm sao viết ứng dụng chạy trên tất cả các .net framework?
    Gửi bởi kingquy trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 08-03-2012, 10:14 PM
  4. Bài toán Nước đọng trên VNOI viết bằng C. Chạy không đúng...
    Gửi bởi minhtuan.a0 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 5
    Bài viết cuối: 22-11-2011, 01:42 PM
  5. Chạy chương trình viết bằng VS 9 trên win xp
    Gửi bởi sniper9195 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 06-07-2011, 05:27 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn