Perl – Making Developers Lives Better

Perl – Making Developers Lives Better

Pelabuhan VancouverFoto oleh Fred Rivett di Unsplash

Artikel ini merupakan lanjutan dari artikel saya sebelumnya yang berjudul Is z/OS ASCII atau EBCDIC? Ya! yang membahas pembuatan aplikasi bi-modal z/OS C.

Secara historis, banyak orang telah mem-porting aplikasi Open Source ke z/OS. Saya ingin mengusulkan perubahan halus dan berbicara tentang mengaktifkan aplikasi Open Source untuk z/OS. Bagi saya, porting menyiratkan upaya satu kali untuk menjalankan beberapa kode di z/OS. Ini berguna, tetapi yang lebih baik adalah bekerja dengan komunitas Open Source untuk aplikasi dan memungkinkan z/OS menjadi salah satu dari banyak platform yang dirancang untuk dijalankan oleh kode.

Mengaktifkan membutuhkan lebih dari satu port. Perubahan kode sumber tidak hanya perlu dilakukan, tetapi ini harus diumpankan kembali ke komunitas, didiskusikan, dimodifikasi, disetujui dan dimasukkan ke dalam jalur pengembangan. Kode tersebut kemudian harus dipelihara agar kode pengembangan terbaru berjalan dengan baik. Ada sejumlah manfaat untuk mengaktifkan daripada hanya porting:

komunitas dapat melihat kode pengaktifan z/OS, dan pengetahuan ini memudahkan aplikasi lain yang mengaktifkan, karena perubahan analog sering diperlukan untuk aplikasi lain. kode tidak perlu di-port ulang oleh banyak grup yang berbeda karena kode tersedia untuk digunakan semua orang. komunitas memperoleh kesadaran tentang z/OS, cara kerjanya, dan manfaat platform.

Mengaktifkan Perl untuk z/OS

Beberapa bulan yang lalu, saya melihat mengaktifkan zsh untuk z/OS. Seperti yang diharapkan, zsh sendiri menggunakan paket perangkat lunak Open Source lainnya, termasuk Perl. Saya menyusun proyek GitHub bernama ZOSOpenTools dan menyingsingkan lengan baju saya. Saya mulai mengerjakan m4, autoconf, automake, dan make. Ketika saya menekan make, saya menemukan bahwa harness pengujian ditulis dalam Perl, jadi saya mulai mengaktifkan Perl untuk z/OS.

Pengembangan Terbuka bukan hanya Sumber Terbuka

Dari awal pekerjaan ini sudah Open Development, bukan hanya Open Source. Tujuan saya adalah menggunakan kode pengembangan untuk paket Open Source, dan kemudian membuat tambalan untuk membuat kode berfungsi, semuanya terbuka. Hal ini memungkinkan orang lain untuk membantu juga, dan memudahkan untuk mengajukan pertanyaan dan mendapatkan saran dari komunitas Open Source. Template umum dari repositori pengaktifan GitHub adalah:

skrip pengaturan lingkungan (setenv.sh) untuk menunjuk ke alat yang tepat dan mengatur variabel lingkungan dengan benar untuk membangun skrip pembuatan kode (perlbuild.sh) yang menarik kode pengembangan dari repositori pengembangan, menerapkan tambalan, lalu mengonfigurasi, membangun, dan menguji direktori patch codea untuk perubahan kode sumber agar kode dapat dibuat dan dijalankan dengan benar di z/OS

Seiring waktu, tambalan akan dihilangkan, karena komunitas menerima perubahan ke jalur pengembangan resmi.

Ada alat managepatches.sh untuk membuat dan menerapkan tambalan. Ini harus difaktorkan ulang dan didorong ke dalam repo bersama untuk berbagai upaya pemberdayaan, tetapi belum dilakukan.

Mendapatkan Perl untuk membangun di z/OS

Saya mengalami beberapa masalah berbeda yang memungkinkan Perl untuk z/OS. Untungnya, Karl Williamson, seorang ahli dari komunitas Perl menawarkan untuk membimbing saya melalui proses mengaktifkan Perl di z/OS. Karl dan yang lainnya telah melakukan banyak pekerjaan untuk menjalankan Perl di EBCDIC pada z/OS. Proposal saya adalah untuk memperluas pekerjaan ini dan mengaktifkan dukungan 64-bit Bi-Modal (ASCII) untuk Perl juga.

Pertama-tama saya harus mempelajari makro uji fitur dan opsi kompiler yang tepat untuk digunakan untuk Perl. Saya ingin kode tersebut dapat mengeksploitasi semua kemampuan z/OS. Jadi daftar singkat makro uji fitur yang saya buat adalah:

_ALL_SOURCE
_XOPEN_SOURCE=600
_XOPEN_SOURCE_EXTENDED
_OPEN_THREADS=3
_UNIX03_SOURCE=1
_ENHANCED_ASCII_EXT=0xFFFFFFFF
_OPEN_SYS_FILE_EXT=1
_OPEN_SYS_SOCK_IPV6

Saya juga ingin membangun Perl menggunakan bi-modal/EBCDIC, Dynamic/Static, 31-bit/64-bit (dengan total 8 kombinasi). 31-bit statis, EBCDIC adalah cara Perl dibangun secara historis. Saya menginginkan build Perl 64-bit, dinamis, bi-modal. Opsi kompiler dan tautan utama yang bervariasi untuk kombinasi ini adalah:

64-bit: -Wc,lp64 -Wl,lp64: Kompilasi dan tautkan untuk 64-bit. Standarnya adalah 31-bit

Dinamis: -Wc,exportall -Wl,dll: Ekspor simbol global pada kompilasi dan tautan sebagai DLL.

Bi-modal: -qascii: Perlakukan string literal sebagai ASCII bukan EBCDIC. Standarnya adalah EBCDIC

Ada beberapa opsi minor lain yang saya gunakan seperti -qieee untuk memastikan floating point IEEE digunakan sebagai ganti floating point heksadesimal. Saya dapat melakukan upstream semua perubahan ini ke dalam hints/os390.sh. Saya terus menggunakan OEMVS sebagai makro untuk menunjukkan z/OS.

Mendapatkan opsi kompiler dan penaut dengan benar mungkin merupakan bagian yang paling memakan waktu dalam mengaktifkan Perl untuk z/OS karena setiap perubahan berarti saya harus mengonfigurasi ulang dan menguji ulang kode. Ketika saya semakin jauh, saya melakukan ini untuk semua 8 varian untuk memastikan saya tidak merusak satu build saat memperbaiki yang lain.

Menjalankan Perl bi-modal

Setelah saya membuat kode EBCDIC dalam 31-bit/64-bit dan statis/dinamis dan menghilangkan kegagalan kasus uji baru, saya mengerjakan kegagalan bi-modal. Ini jatuh ke dalam beberapa kategori umum di sekitar I/O:

Pipa atau file yang dibuat oleh Perl perlu diberi tag sebagai ISO8859-1: Saat menjalankan Perl bi-modal, idealnya adalah secara eksplisit tentang CCSID dari file teks, jadi kode di doio.c dan util.c telah ditambal sehingga pipa dan file yang dibuat akan ditandai sebagai ISO8859-1 (ASCII). Program yang disalin perlu mempertahankan sifatnya yang tidak ditandai: memberi tag pada file yang dapat dieksekusi sebagai ISO8859-1 menyebabkan shell menjadi bingung, jadi installperl harus menghapus tag file setelah program disalin. Skrip konfigurasi untuk Perl membaca header sistem errno.h untuk mengekstrak nilai errno. errno.h tidak ditandai dan Perl memperlakukan file yang tidak ditandai sebagai ISO8859-1. Sayangnya, errno.h adalah EBCDIC dan secara umum tidak dapat dimodifikasi oleh Perl, jadi perbaikannya adalah menyalin header ke file sementara terlebih dahulu, beri tag sebagai IBM-1047, sehingga dapat diproses dengan benar. Patch ini belum disetujui oleh tim Perl. File nostdio.h salah dikodekan bahwa sistem EBCDIC perlu menyertakan prototipe untuk fungsi sistem. Ini perlu diubah ke z/OS secara umum (karena membangun untuk EBCDIC dan bi-modal memerlukan prototipe fungsi sistem).

Perubahan ini menyoroti pembaruan penting untuk mengaktifkan Perl untuk z/OS yang menjalankan bi-modal. Bi-modal sebelum cabang menyoroti sebagian besar perubahan sebelum diterima ke dalam jalur pengembangan Perl.

Pekerjaan Pemberdayaan Perl z/OS belum selesai. Ada bug yang diketahui masih harus diperbaiki, tapi itu cukup bagus. Jika ada yang ingin membangun dan menjalankan kode, mengerjakan bug apa pun, atau memberikan masukan lain apa pun pada Perl untuk pemberdayaan z/OS, silakan hubungi. Demikian pula, jika Anda tertarik dengan pengaktifan Sumber Terbuka z/OS lainnya, silakan hubungi saya.

Untuk mulai membangun Perl di sistem z/OS Anda sendiri, mulailah dengan mengkloning perlport

dan membaca README untuk z/OS. z/OS direferensikan sebagai OS390 karena itu masih disebut sistem itu sendiri _(ツ)_/¯

Ucapan Terima Kasih

Terima kasih saya kepada Karl Williamson, Leon Timmermans, Graham Knop, Todd Rinaldo, Sawyer X atas umpan balik mereka tentang Perl. Terima kasih kepada Igor Todorovski, CW Cheung, Rajan Bhakta atas pengetahuan mendalam mereka tentang semua umpan balik kompiler Z mereka.

Ya – saya seharusnya menyebutnya perlenable dan bukan perlport. Saya ketahuan!

Seperti ini:Seperti Memuat…

Author: Douglas Hernandez