2008-09-16 53 views

Trả lời

20

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ó là khá hoàn chỉnh và được trên cũng với mã biên dịch (bạn có thể tải các module để sử dụng trong các phiên dịch biên soạn ...)

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

+1

Tôi biết một số sinh viên sau đại học về vật lý làm phần lớn mã hóa của họ trong cint/root, và trong khi họ không luôn có những điều tốt đẹp để nói nó đáp ứng nhu cầu của họ về hiệu suất và tính linh hoạt. –

+0

Vâng, nó là c + + với một lớp thêm phức tạp từ cần phải xây dựng các từ điển mã nhị phân interperter <-->. Cộng với cây lớp gốc là một nỗi đau. Nhưng cint hoạt động. Nó hoạt động tốt hơn rất nhiều so với COMIS đã làm trong những ngày cernlib. – dmckee

+2

@littlenag Để nói gốc "đáp ứng [nhu cầu của chúng tôi]" là một chút hào phóng. Khuôn khổ này là thiếu sót khủng khiếp trên một số mức cơ bản, và chỉ tiếp tục thấy việc sử dụng rộng rãi bởi vì nó hoàn toàn không mô-đun và do đó gần như không thể loại bỏ. CINT là một ví dụ điển hình về thứ mà bạn _have to_ install khi tất cả những gì bạn muốn làm là đọc trong một tệp dữ liệu. – Shep

2

Cách đây lâu, tôi đã sử dụng trình thông dịch C++ có tên là CodeCenter. Nó khá đẹp, mặc dù nó không thể xử lý những thứ như bitfields hay mangling con trỏ ưa thích. 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++ khi đang chạy trong khi gỡ lỗi. Những ngày này, tôi nghĩ rằng một trình gỡ lỗi như GDB về cơ bản là tốt.

+0

Trình thông dịch sẽ làm gì khi gặp phải một cá thể mẫu? (hoặc các doanh nghiệp tiền xử lý khác). Có một số mức độ biên dịch trước/tiền xử lý để xử lý các mẫu hoặc bộ tiền xử lý không? –

+0

Có, tất cả các công cụ và mẫu CPP đều là một phần của ngôn ngữ đang được diễn giải. Khá đẹp. – jfm3

2

Cũng lâu rồi tôi đã sử dụng một cuộc gọi sản phẩm tức thì C nhưng tôi không biết rằng nó bao giờ phát triển hơn nữa

4

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

0

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

0

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 thành các thư viện được chia sẻ 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 the version trong kho lưu trữ của Ubuntu được viết bằng Ruby (không tính GCC tất nhiên), trong khi latest git là trong Haskell. :)

26

GHI CHÚ: nội dung sau đây là CINT cụ thể, nhưng với điều kiện phiên bản thông dịch nhất có lẽ là widely used C++ thì có thể hợp lệ cho tất cả.

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. Trong khi nó "làm việc", nó is in the process of being phased out, và những người chi tiêu nhiều hơn một năm trong vật lý hạt thường học cách tránh nó cho một vài lý do:

  1. Bởi vì rễ của nó như là một thông dịch C, nó không 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ứ làm cho C++ trở nên linh hoạt và có thể sử dụng được.

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

  3. Thông báo gỡ lỗi phức tạp hơn nhiều so với thông báo được tạo bởi g ++.

  4. phạm trù không phù hợp với biên dịch C++: nó khá phổ biến để xem mã của hình thức

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

    trong khi bất kỳ C++ làm việc sẽ phàn nàn rằng correcton đã đi ra khỏi phạm vi, CInt phép 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ó.

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

Thực tế là CINT vẫn được sử dụng ở tất cả có khả năng là một tai nạn lịch sử do sự bao gồm trong khung ROOT. Quay lại khi nó được viết (20 năm trước), đã có một nhu cầu thực sự cho một ngôn ngữ diễn giải cho tương tác âm mưu/phù hợp. Bây giờ có rất nhiều gói mà điền vào vai trò đó, nhiều trong đó có hàng trăm nhà phát triển hoạt động.

Không cái nào trong số này được viết bằng C++. Tại sao? Rất đơn giản, C++ không có nghĩa là để được giải thích. Đánh máy tĩnh, ví dụ, giúp bạn có được lợi ích tối ưu trong quá trình biên dịch, nhưng chủ yếu là để làm lộn xộn và hạn chế mã của bạn nếu máy tính chỉ được phép xem nó khi chạy. Nếu bạn có sự sang trọng của việc có thể sử dụng một ngôn ngữ thông dịch, hãy học Python hoặc Ruby, thời gian bạn cần học sẽ ít hơn là bạn bị 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 cũ làm việc với ROOT (gói bạn phải cài đặt để chạy CINT) sẽ biên dịch các thư viện ROOT thành các tệp thực thi C++ bình thường để tránh CINT. Những người trong thế hệ trẻ hoặc làm theo hướng dẫn này hoặc sử dụng Python cho 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ẽ không thành công với các phiên bản gcc mới hơn. Đó là một gói phục vụ cho một mục đích quan trọng từ nhiều năm trước, nhưng giờ đây nó đã thể hiện rõ ràng tuổi tác của nó. Nhìn vào mã nguồn, bạn sẽ tìm thấy hàng trăm phôi c-style không được chấp nhận, lỗ hổng lớn trong loại an toàn và sử dụng nhiều biến toàn cầu.

Nếu bạn định viết C++, hãy viết C++ để viết. Nếu bạn hoàn toàn phải có một người giải thích C++, CINT có lẽ là một cược tốt.

+2

Trong khi tất cả các khiếu nại của bạn về cint là hoàn toàn hợp lệ (và bạn bị mất một vài), bạn có thể mất từ ​​của tôi rằng thông dịch viên COMIS cho PAW là tồi tệ hơn nhiều. Ngoài ra, PAW cung cấp một môi trường đầy đủ của âm mưu tương tác --- nó chỉ có các vấn đề mở rộng quy mô mà bạn mong đợi từ một kiểu mã hóa fortran 77. – dmckee

+1

@dmckee Hãy tin tôi, tôi rất vui vì chúng tôi không làm việc với PAW. Quan điểm của tôi không phải là CINT tồi tệ hơn _everything_, chỉ có nhiều thứ sẽ tốt hơn. – Shep

+0

làm thế nào nó có thể chậm hơn? – Sergei

19

dự án cling Cern của của C++ phiên dịch dựa trên clang - đó là 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à khuyến cáo của Cern guys.

Ở đây là đẹp Google Talk: Introducing cling, a C++ Interpreter Based on clang/LLVM.

+10

Cling thực sự hoạt động bằng cách biên dịch tương tác, nó là một trình biên dịch JIT nhiều hơn một trình thông dịch. Ngoài ra, với tư cách là "anh chàng CERN", tôi cảm thấy có trách nhiệm bình luận về "những người CERN đề nghị": nhiều người trong chúng ta cho rằng bài học chính sau 20 năm của ROOT là phần mềm nguyên khối (ROOT) dựa trên một ngôn ngữ duy nhất (C++) là sự sai lầm. Cling là một cái nạng tốt cho những người tiếp tục chiến hạm C++ như là tất cả các ngôn ngữ, nhưng chúng ta không phải là tất cả cách xa CINT trên một trình thông dịch C++ khác: cho mã mở, bạn có thể làm tốt hơn nhiều so với C++ , sử dụng Python hoặc Ruby. – Shep

Các vấn đề liên quan