it-swarm-vi.tech

Bạn đã sử dụng bất kỳ trình thông dịch C++ nào (không phải trình biên dịch) chưa?

Tôi tò mò nếu có ai đã sử dụng UnderC, Cint, Cling, Ch hoặc bất kỳ trình thông dịch C++ nào khác và có thể chia sẻ kinh nghiệm của họ.

65
Allan Wind

LƯU Ý: những gì tiếp theo là khá cụ thể CINT, nhưng cho rằng đó có lẽ là trình thông dịch được sử dụng rộng rãi C++, nó có thể hợp lệ cho tất cả chúng.

Là một sinh viên tốt nghiệp ngành vật lý hạt đã sử dụng CINT rộng rãi, tôi nên cảnh báo bạn đi. Trong khi nó "hoạt động", nó đang trong quá trình loại bỏ và những người dành hơn một năm trong ngành vật lý hạt thường học cách tránh nó vì một vài lý do: 

  1. Do nguồn gốc của nó là một trình thông dịch C, nó không thể giải thích một số thành phần quan trọng nhất của C++. Ví dụ, các mẫu không phải lúc nào cũng hoạt động, vì vậy bạn sẽ không được khuyến khích sử dụng những thứ khiến C++ trở nên linh hoạt và có thể sử dụng được. 

  2. Nó chậm hơn (ít nhất là một hệ số 5) so với C++ được tối ưu hóa tối thiểu. 

  3. Các thông báo gỡ lỗi khó hiểu hơn nhiều so với các tin nhắn được tạo bởi g ++. 

  4. Phạm vi không phù hợp với C++ được biên dịch: khá phổ biến để xem mã của biểu mẫu 

    if (energy > 30) { 
        float correction = 2.4;
    }
    else {
        float correction = 6.3;
    }
    
    somevalue += correction; 
    

    trong khi bất kỳ trình biên dịch C++ đang hoạt động nào cũng sẽ phàn nàn rằng correcton đã vượt quá phạm vi, CINT cho phép điều này. Kết quả là mã CINT không thực sự là C++, chỉ là một cái gì đó trông giống như nó. 

Nói tóm lại, CINT không có ưu điểm nào của C++ và tất cả các nhược điểm cộng với một số. 

Việc CINT vẫn được sử dụng hoàn toàn có khả năng là một tai nạn lịch sử do việc đưa nó vào khung ROOT. Quay lại khi nó được viết (20 năm trước), có một nhu cầu thực sự về một ngôn ngữ được giải thích cho âm mưu/khớp nối tương tác. Bây giờ có nhiều gói chứa vai trò đó, nhiều gói có hàng trăm nhà phát triển đang hoạt động. 

Không ai trong số này được viết bằng C++. Tại sao? Nói một cách đơn giản, C++ không có nghĩa là được giải thích. Ví dụ, gõ tĩnh mua cho bạn những lợi ích lớn trong việc tối ưu hóa trong quá trình biên dịch, nhưng chủ yếu phục vụ cho việc lộn xộn và hạn chế mã của bạn nếu máy tính chỉ được phép nhìn thấy nó khi chạy. Nếu bạn có khả năng sử dụng ngôn ngữ được dịch, hãy học Python hoặc Ruby, thời gian bạn học sẽ ít hơn khi bạn vấp ngã trên CINT, ngay cả khi bạn đã biết C++. 

Theo kinh nghiệm của tôi, các nhà nghiên cứu lớn tuổi làm việc với ROOT (gói bạn phải cài đặt để chạy CINT) cuối cùng sẽ biên dịch các thư viện ROOT thành các tệp thực thi C++ thông thường để tránh CINT. Những người trong thế hệ trẻ đi theo hướng dẫn này hoặc sử dụng Python để viết kịch bản. 

Ngẫu nhiên, ROOT (và do đó CINT) mất khoảng nửa giờ để biên dịch trên một máy tính khá hiện đại và đôi khi sẽ thất bại với các phiên bản gcc mới hơn. Đó là một gói phục vụ một mục đích quan trọng nhiều năm trước, nhưng bây giờ nó rõ ràng cho thấy tuổi của nó. Nhìn vào mã nguồn, bạn sẽ thấy hàng trăm phôi kiểu c không dùng nữa, lỗ hổng lớn về an toàn kiểu và sử dụng nhiều biến toàn cục. 

Nếu bạn định viết C++, hãy viết C++ như được viết. Nếu bạn hoàn toàn phải có một trình thông dịch C++, CINT có lẽ là một lựa chọn tốt. 

29
Shep

cling dự án của Cern của trình thông dịch C++ dựa trên clang - it cách tiếp cận mới dựa trên 20 năm kinh nghiệm trong ROOT cint và nó khá ổn định và được đề nghị bởi những người Cern.

Đây là Nice Google Talk: Giới thiệu cling, Trình thông dịch C++ Dựa trên clang/LLVM .

23
Grzegorz Wierzowiecki

cint là bộ xử lý lệnh cho gói phân tích vật lý hạt ROOT . Tôi sử dụng nó thường xuyên, và nó hoạt động rất tốt cho tôi.

Nó khá hoàn chỉnh và hoạt động tốt với mã được biên dịch (bạn có thể tải các mô-đun đã biên dịch để sử dụng trong trình thông dịch ...)

late edit :: Sao chép từ bản sao sau này vì người đăng câu hỏi đó dường như không muốn đăng ở đây: igcc . Không bao giờ thử cá nhân, nhưng trang web có vẻ đầy hứa hẹn.

19
dmckee

Tôi đã (khoảng một năm trước) chơi xung quanh với Ch và thấy nó khá hay.

4
Alan

Từ lâu, tôi đã sử dụng một trình thông dịch C++ có tên CodeCenter. Nó khá đẹp, mặc dù nó không thể xử lý những thứ như bitfield hoặc con trỏ lạ mắt. Hai điều thú vị về nó là bạn có thể xem khi các biến thay đổi và bạn có thể đánh giá mã C/C++ một cách nhanh chóng trong khi gỡ lỗi. Những ngày này, tôi nghĩ rằng một trình sửa lỗi như GDB về cơ bản là tốt như vậy.

2
jfm3

Cũng từ lâu tôi đã sử dụng một sản phẩm gọi Instant C nhưng tôi không biết rằng nó đã phát triển hơn nữa

2
user11269

Có một chương trình được gọi là c-repl hoạt động bằng cách liên tục biên dịch mã của bạn vào các thư viện dùng chung bằng GCC, sau đó tải các đối tượng kết quả. Nó dường như đang phát triển nhanh chóng, xem xét phiên bản trong kho lưu trữ của Ubuntu được viết bằng Ruby (tất nhiên không tính GCC), trong khi git mới nhất là trong Haskell. :)

0
Matthew Flaschen

Tôi đã xem xét việc sử dụng ch một lúc để xem liệu tôi có thể sử dụng nó cho các DLL kiểm tra hộp đen mà tôi chịu trách nhiệm hay không. Thật không may, tôi không thể tìm ra cách tải nó và thực thi các chức năng từ DLL. Sau đó, một lần nữa, tôi không có động lực đó và cũng có thể có một cách. 

0
Jon Trauntvein