ivo@setyadi:~$ ivo.blogspot.com

# catatan teknis, sejak 2001

CWE-bench v2 Evaluasi Perbaikan Kerentanan LLM

Collinear AI merilis 100 tugas deterministik publik untuk menguji kemampuan LLM dalam menambal bug nyata. Setiap tugas mengharuskan model meng-clone repo open-source dan memperbaiki pola CWE spesifik tanpa merusak fitur yang ada. Sistem skor programatik dan lingkungan Docker memungkinkan reproduksi hasil secara lokal tanpa biaya API. Alat ini berguna untuk membandingkan open-weight models dengan API provider saat membangun defensive agents. Datanya bersifat gated di Hugging Face, sehingga pengguna wajib menerima akses sebelum memakai Harbor runner. Benchmark ini tidak bisa menggantikan full penetration testing karena hanya mencakup subset terbatas dari pola kelemahan yang sudah diketahui. sumber: huggingface.co/cwe-bench my other side: setyadi.com

Typedef

2006-03-28 · #Programming

Typedef

Meski sering dianggap sebagai storage class, typedef sebenarnya bukan. Ia memungkinkan kita memperkenalkan sinonim untuk tipe yang sebetulnya bisa dideklarasikan dengan cara lain. Nama baru itu menjadi setara dengan tipe yang kita inginkan, seperti contoh berikut.

typedef int aaa, bbb, ccc;
typedef int ar[15], arr[9][6];
typedef char c, *cp, carr[100];

/* now declare some objects */

/* all ints */
aaa     int1;
bbb     int2;
ccc     int3;

ar      yyy;    /* array of 15 ints */
arr     xxx;    /* 9*6 array of int */

c       ch;     /* a char */
cp      pnt;    /* pointer to char */
carr    chry;   /* array of 100 char */

Aturan umum memakai typedef: tulis dulu deklarasinya seolah-olah Anda sedang mendeklarasikan variabel bertipe yang diinginkan. Di tempat deklarasi itu tadinya memperkenalkan nama variabel, menambahkan typedef di depannya membuat yang lahir bukan variabel melainkan nama tipe baru. Nama tipe baru itu lalu bisa dipakai sebagai awalan deklarasi variabel bertipe tersebut.

Penggunaan typedef tidak terlalu sering terlihat di kebanyakan program; biasanya hanya muncul di header file dan jarang jadi urusan koding sehari-hari.

Ia kadang dipakai pada aplikasi yang menuntut portabilitas sangat tinggi: di sana tipe-tipe baru didefinisikan untuk variabel dasar program, lalu typedef yang sesuai dipakai untuk menyesuaikan program dengan mesin target. Kalau berlebihan, hasilnya adalah kode yang sulit dibaca programmer C dari lingkungan lain. Kira-kira begini rasanya:

/* file 'mytype.h' */
typedef short   SMALLINT        /* range *******30000 */
typedef int     BIGINT          /* range ******* 2E9 */

/* program */
#include "mytype.h"

SMALLINT        i;
BIGINT          loop_count;

Di sebagian mesin, jangkauan int tidak cukup untuk BIGINT, sehingga harus di-typedef ulang menjadi long.

Untuk memakai ulang nama yang sudah dideklarasikan sebagai typedef, deklarasinya harus memuat setidaknya satu type specifier supaya tidak ambigu:

typedef int new_thing;
func(new_thing x){
        float new_thing;
        new_thing = x;
}

Perlu diingat, typedef hanya bisa mendeklarasikan tipe nilai kembalian sebuah fungsi, bukan tipe fungsi secara keseluruhan. Tipe keseluruhan mencakup informasi parameter fungsi, bukan cuma tipe kembaliannya.

/*
* Using typedef, declare 'func' to have type
* 'function taking two int arguments, returning int'
*/
typedef int func(int, int);

/* ERROR */
func func_name{ /*....*/ }

/* Correct. Returns pointer to a type 'func' */
func *func_name(){ /*....*/ }

/*
* Correct if functions could return functions,
* but C can't.
*/
func func_name(){ /*....*/ }

Kalau sebuah typedef dengan identifier tertentu sedang berada dalam scope, identifier itu tidak boleh dipakai sebagai formal parameter fungsi. Sebabnya, deklarasi seperti berikut menimbulkan masalah:

typedef int i1_t, i2_t, i3_t, i4_t;

int f(i1_t, i2_t, i3_t, i4_t)/*THIS IS POINT 'X'*/

Compiler yang membaca deklarasi fungsi itu sampai di titik ‘X’ dan masih belum tahu apakah yang dilihatnya deklarasi fungsi, yang pada dasarnya mirip

int f(int, int, int, int) /* prototype */

atau

int f(a, b, c, d) /* not a prototype */

— persoalannya (dalam kasus terburuk) baru selesai setelah melihat apa yang ada sesudah titik ‘X’: kalau titik koma berarti tadi deklarasi, kalau { berarti tadi definisi. Aturan yang melarang nama typedef jadi formal parameter membuat compiler selalu bisa memastikan apakah ia sedang memproses deklarasi atau definisi, cukup dengan melihat identifier pertama sesudah nama fungsi.

Typedef juga berharga saat kita hendak mendeklarasikan sesuatu yang sintaksnya menyiksa, semisal ‘array sepuluh pointer ke array lima integer’, yang bikin panik bahkan orang yang sudah terlatih. Menyembunyikannya di balik typedef berarti Anda cukup membacanya sekali, sekaligus bisa memecahnya jadi potongan yang lebih mudah dicerna:

typedef int (*a10ptoa5i[10])[5];
/* or */
typedef int a5i[5];
typedef a5i *atenptoa5i[10];

Coba sendiri!

Sumber: The C Book – Typedef

my other side: setyadi.com/typedef

$ cd ~/

$ cat comments/ (0)