Không thể hôm qua, nhưng hôm nay là ngày hôm nay và tôi sẽ nhận được các thay đổi vào cây nguồn ngay sau khi khách hàng tiềm năng phê duyệt thay đổi.
Hai thay đổi nhỏ đối với nguồn trình biên dịch và - có thể được sử dụng để chỉ ra stdin.
prompt$ echo 'program-id. test. display "hello".' | cobc -free -frelax -x -o thing -
-: 1: Warning: PROCEDURE DIVISION header missing - assumed
prompt$ ls -l
-rwxrwxr-x. 1 btiffin btiffin 13192 Jul 31 17:27 thing
prompt$ ./thing
hello
này sau đó sẽ làm việc cho bất kỳ hệ điều hành, và không chỉ những người có/dev/hỗ trợ stdin (trong đó, cho bây giờ, khi paxdiablo viết, là một lựa chọn rất hợp lệ với GNU/Linux và các loại tương tự).
Và như một sang một bên; cobc có thể đã được sử dụng như một thông dịch viên POSIX.
#!/usr/local/bin/cobc -xvg
identification division.
program-id. SAMPLE.
procedure division.
display "scripted" end-display
goback.
end program SAMPLE.
với
prompt$ chmod +x interp.cob
prompt$ ./interp.cob
cho
Command line: /usr/local/bin/cobc -xvg ./interp.cob
Preprocessing: ./interp.cob -> interp.i
Return status: 0
Parsing: interp.i (./interp.cob)
Return status: 0
Translating: interp.i -> interp.c (./interp.cob)
Executing: gcc -std=gnu99 -c -I/usr/local/include -pipe -Wno-unused
-fsigned-char -Wno-pointer-sign -g -o "/tmp/cob25113_0.o"
"interp.c"
Return status: 0
Executing: gcc -std=gnu99 -Wl,--export-dynamic -o "interp"
"/tmp/cob25113_0.o" -L/usr/local/lib -lcob -lm -lgmp
-lncursesw -ldb -ldl
Return status: 0
Đáng buồn thay, đó là chỉ dành riêng cho việc xây dựng. Thực hiện đòi hỏi một bước bổ sung.
prompt$ ./interp
scripted
Không có tùy chọn trình biên dịch để "chạy mã ngay bây giờ", vì vậy tùy chọn -J (biểu mẫu cố định) và -j (biểu mẫu tự do) sẽ được thêm vào. Chạy công việc, trở thành một dạng mới của -x (tạo tệp thực thi) nhưng cũng sẽ thực thi nhị phân ở cuối quá trình xử lý. Sau đó, chúng ta sẽ có quyền truy cập vào các tập lệnh "lõi" trong POSIX. Hiện tại tất cả những gì được cho phép là xây dựng và chạy phải là một lệnh riêng biệt.
Và giới hạn cố hữu mà các dòng HashIX được giới hạn trong một đối số duy nhất, vì vậy -j -free sẽ không hoạt động, cũng như sẽ không -j-Xref, nhưng trong giới hạn, nó sẽ cho phép các tập lệnh cobc.
Đó là một thay đổi một dòng khác đối với trình biên dịch, và 400 dòng phân tích cú pháp tùy chọn và tài liệu. ;-)
Nên sẵn sàng để thử nghiệm sau vài giờ. Một lần nữa, những thay đổi này sẽ yêu cầu sự chấp thuận từ tất cả các trình bảo trì trình biên dịch khác, nhưng tôi không thấy bất kỳ lý do gì để không cho phép cải tiến. Hai cam kết, một cho - như stdin, và -J -j cho công việc chạy ở cuối biên dịch.
Bạn sẽ phải đặt tính năng này làm yêu cầu tính năng cho dự án GnuCOBOL. Hiện tại SourceForge, có thể sẽ sớm được chuyển sang. –
@BillWoodger Có thể bạn có thể làm điều đó và đăng câu trả lời? :) Tôi không thực sự quen thuộc với cách SourceForge hoạt động ... –
Để không có mã nguồn trong một tập tin mang một ý nghĩa lớn của "mã được tạo ra". Đó có phải là loại điều bạn đang nghĩ đến không? Bạn đã có một vài ví dụ mà nó sẽ có lợi cho đường ống thay vì sử dụng một tập tin? Nếu bạn có thể làm điều đó, tôi có thể gửi yêu cầu thực tế. –