{"id":27230650,"url":"https://github.com/coding-pelican/dasae-headers","last_synced_at":"2025-10-13T13:09:54.912Z","repository":{"id":284939148,"uuid":"914345941","full_name":"coding-pelican/dasae-headers","owner":"coding-pelican","description":"dasae-headers: A modern extension language for safer and more productive C programming","archived":false,"fork":false,"pushed_at":"2025-06-15T13:42:17.000Z","size":25719,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-15T15:03:56.874Z","etag":null,"topics":["c-extension","c-programming","c17","cross-platform","defer-pattern","error-handling","generic","memory-safety","modern-c","optional-type","rust-inspired","safe-c","transpiler","type-safety","zig-inspired","zig-inspired-testing-framework"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coding-pelican.png","metadata":{"files":{"readme":"README.ko.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-09T12:18:42.000Z","updated_at":"2025-06-08T14:16:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"c9cfe032-b3c1-490a-af94-834da35a93fd","html_url":"https://github.com/coding-pelican/dasae-headers","commit_stats":null,"previous_names":["coding-pelican/dasae-headers"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/coding-pelican/dasae-headers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-pelican%2Fdasae-headers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-pelican%2Fdasae-headers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-pelican%2Fdasae-headers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-pelican%2Fdasae-headers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coding-pelican","download_url":"https://codeload.github.com/coding-pelican/dasae-headers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coding-pelican%2Fdasae-headers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279015282,"owners_count":26085683,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-extension","c-programming","c17","cross-platform","defer-pattern","error-handling","generic","memory-safety","modern-c","optional-type","rust-inspired","safe-c","transpiler","type-safety","zig-inspired","zig-inspired-testing-framework"],"created_at":"2025-04-10T13:30:36.868Z","updated_at":"2025-10-13T13:09:54.904Z","avatar_url":"https://github.com/coding-pelican.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dasae-headers\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/coding-pelican/dasae-headers\"\u003e\n    \u003cimg src=\"./.github/logo-dasae_headers.svg\" alt=\"dasae-headers Logo\" width=\"150\"/\u003e\n  \u003c/a\u003e\n  \u003ch1\u003edasae-headers: C언어를 현대적이고 안전하게\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eC언어를 보다 안전하고 생산적으로 사용하기 위한 현대적인 확장 언어\u003c/strong\u003e\u003c/p\u003e\n\n  \u003cdiv\u003e\n    \u003ca href=\"./README.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/readme-en-red?style=flat-square\" alt=\"Language: English\"\u003e\u003c/a\u003e\n    \u003ca href=\"./README.ko.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/readme-ko-orange?style=flat-square\" alt=\"Language: Korean\"\u003e\u003c/a\u003e\n  \u003c/div\u003e\n\n  \u003cdiv style=\"margin-top: 8px;\"\u003e\n    \u003ca href=\"https://en.wikipedia.org/wiki/C17_(C_standard_revision)\"\u003e\u003cimg src=\"https://img.shields.io/badge/language-C17-blue?style=flat-square\" alt=\"Language: C17\"\u003e\u003c/a\u003e\n    \u003ca href=\"./dh/include/dh/builtin/plat_cfg.h\"\u003e\u003cimg src=\"https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-brightgreen?style=flat-square\" alt=\"Platform: Windows | Linux | macOS\"\u003e\u003c/a\u003e\n    \u003ca href=\"./LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-lightgrey?style=flat-square\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n## 📋 목차\n\n- [dasae-headers](#dasae-headers)\n  - [📋 목차](#-목차)\n  - [🌟 소개](#-소개)\n  - [🛡️ 주요 특징](#️-주요-특징)\n  - [🌐 플랫폼 지원](#-플랫폼-지원)\n  - [🚀 시작하기](#-시작하기)\n    - [💽 설치](#-설치)\n    - [🔨 빌드 및 실행](#-빌드-및-실행)\n  - [⚡ 코드 샘플](#-코드-샘플)\n    - [👋 Hello, world!](#-hello-world)\n    - [🔍 Optional Values 예제](#-optional-values-예제)\n    - [🔄 Error Results 예제](#-error-results-예제)\n    - [🤝 Pattern Matching 예제](#-pattern-matching-예제)\n    - [🧪 Testing 예제](#-testing-예제)\n  - [📚 문서](#-문서)\n  - [🚧 현재 상태](#-현재-상태)\n  - [🙏 기여](#-기여)\n  - [📧 연락처](#-연락처)\n  - [📜 라이센스](#-라이센스)\n\n## 🌟 소개\n\n\u003e \"Make C Great Again\"\n\ndasae-headers는 C언어에 현대적인 프로그래밍 패러다임을 적용하여 안전성, 표현력 및 생산성을 크게 향상시키는 것을 목표로 합니다. 메모리 안전성, 타입 안전성, 향상된 오류 처리 기능을 제공하면서도 C언어의 간결함을 유지합니다.\n\n현재 개발 초기 단계인 dasae-headers는 C의 전처리기를 트랜스파일러로서 사용하며, C 표준 라이브러리의 고질적인 문제들을 해결하는 동시에 점진적으로 독립적인 언어로 발전시키는 과정에 있습니다.\n\n## 🛡️ 주요 특징\n\ndasae-headers는 Zig와 Rust의 문법, 표준 라이브러리에서 영감을 받아 개발되었습니다:\n\n**메모리 안전성 및 리소스 관리**\n- 선택적 메모리 사용과 제어를 위한 커스텀 할당자(allocator)\n- 메모리 누수 및 관련 버그 감지를 위한 내장 메모리 추적 기능\n- 검사된 접근 메서드를 통한 배열 안전성\n- 안전한 메모리 조작을 위한 경계 검사된 슬라이스\n- `defer` 및 `errdefer`를 사용한 자동 리소스 관리\n\n**타입 시스템 강화**\n- 컴파일 타임 검사를 통한 향상된 타입 안전성\n- 패턴 매칭과 `match` 구문을 사용한 대수적 데이터 타입(union enum)\n- `some`/`none` 키워드와 `unwrap`/`orelse` 패턴을 사용한 옵셔널 타입을 통한 null 안전성\n\n**오류 처리 및 디버깅**\n- `ok`/`err` 키워드를 사용한 오류 래핑 타입을 통한 명시적 오류 처리\n- `try`, `catch` 패턴을 통한 구조화된 오류 전파\n- 디버깅을 위한 스택 추적이 포함된 포괄적인 오류 추적\n\n**현대적인 프로그래밍 패러다임**\n- `let`과 `var` 키워드를 통한 타입 추론\n- `fn` 선언을 사용한 현대적인 함수 구문\n- 람다 표현식 및 콜백 타입\n- 일관된 코드 스타일 및 명명 규칙\n- 코드 명확성 향상을 위한 표현력 있는 매크로\n\n**개발 도구**\n- 단위 및 통합 테스트를 위한 내장 테스트 프레임워크\n- 다양한 아키텍처에 대한 멀티 플랫폼 지원\n- 주요 컴파일러 호환성(clang, gcc, msvc)\n\n## 🌐 플랫폼 지원\n\n- **운영체제**: Windows, Unix, Linux, macOS, Android 등\n- **CPU 아키텍처**: 64/32비트 아키텍처 고려\n- **컴파일러 호환성**: clang(우선), gcc, msvc 등\n\n## 🚀 시작하기\n\n### 💽 설치\n\n\u003e 자세한 설치 및 빌드 가이드는 준비 중에 있습니다. 조금만 기다려주세요!\n\n1. 이 저장소를 클론합니다:\n\n```sh\ngit clone https://github.com/coding-pelican/dasae-headers.git\n```\n\n2. dh-c 빌드 도구 설치:\n\nWindows의 경우:\n\n```ps1\ncd dasae-headers\n.\\install-dh-c.ps1\n```\n\nLinux/macOS의 경우:\n\n```sh\ncd dasae-headers\nchmod +x install-dh-c.sh\n./install-dh-c.sh\n```\n\n3. 새 프로젝트 생성:\n\n```sh\ndh-c project myproject\ncd myproject\n```\n\n4. 필요한 헤더를 포함하여 코딩 시작:\n\n```c\n#include \"dh/main.h\"\n#include \"dh/opt.h\"\n#include \"dh/err_res.h\"\n// 필요한 기능에 따라 추가 헤더 포함\n```\n\n### 🔨 빌드 및 실행\n\n프로젝트 빌드:\n\n```sh\ndh-c build dev\n```\n\n프로젝트 실행:\n\n```sh\ndh-c run dev\n```\n\n테스트 실행:\n\n```sh\ndh-c test\n```\n\n더 자세한 내용은 [빠른 시작 가이드](./dh/docs/ko/quick-start.md)를 참조하세요.\n\n## ⚡ 코드 샘플\n\n### 👋 Hello, world!\n\n```c\n// 프로그램 진입점을 제공하는 메인 헤더 포함\n#include \"dh/main.h\"\n// 텍스트 작업을 위한 문자열 유틸리티 포함\n#include \"dh/Str.h\"\n\n// 확장 범위와 오류 처리를 갖는 메인 함수 정의\n// 명령줄 인수를 받고 void 페이로드가 있는 오류 결과 반환\nfn_(dh_main(Sli$Str_const args), Err$void, $scope) {\n    $ignore = args;\n\n    // Str_l로 문자열 리터럴 생성\n    let hello_world = Str_l(\"Hello, world!\");\n\n    // 문자열을 콘솔에 줄바꿈과 함께 출력\n    Str_println(hello_world);\n\n    // 성공 반환 (오류 없는 void 값)\n    return_ok({});\n} $unscoped; // 범위 블록 종료\n```\n\n### 🔍 Optional Values 예제\n\n```c\nfn_(findValueIndex(i32 value, Sli_const$i32 items), Opt$i32, $scope) {\n    for_slice_indexed (items, item, index) {\n        if (*item != value) { continue; }\n        return_some(index); // 값이 있음을 반환\n    }\n    return_none(); // 값이 없음을 반환\n} $unscoped;\n\nfn_(example(void), void) {\n    Arr$$(5, i32) nums = Arr_init({ 10, 20, 30, 40, 50 });\n\n    // Optional 값 생성\n    let opt_value = some$(Opt$i32, 42);\n    let opt_empty = none$(Opt$i32);\n\n    // 배열에서 값 찾기\n    let found = findValueIndex(30, Sli_arr$(Sli_const$i32, nums));\n\n    // Optional 값 확인\n    if_some(found, index) {\n        printf(\"찾은 위치: %d\\n\", index);\n    } else_none {\n        printf(\"찾지 못함\\n\");\n    }\n\n    // 기본값 설정\n    let value = orelse(found, -1); // 찾지 못한 경우 -1 사용\n\n    // 안전하지 않은 추출 (옵션이 none인 경우 assertion 발생)\n    let unsafe_value = unwrap(opt_value);\n}\n```\n\n### 🔄 Error Results 예제\n\n```c\nconfig_ErrSet(math_Err,\n    DivisionByZero,\n    Overflow,\n    Underflow\n);\n\nuse_ErrSet$(math_Err, i32); // 또는 일반적으로 `use_Err$(i32)`\nfn_(safeDivide(i32 lhs, i32 rhs), math_Err$i32, $scope) {\n    if (rhs == 0) {\n        return_err(math_Err_DivisionByZero()); // 오류를 반환\n    }\n    return_ok(lhs / rhs); // 값을 반환\n} $unscoped;\n\nfn_(example(void), Err$void, $guard) {\n    // 리소스 할당\n    var buffer = meta_cast$(Sli$i32,\n        try_(mem_Allocator_alloc(allocator, typeInfo$(i32), 100))\n    );\n    // 함수가 반환될 때 항상 정리됨\n    defer_(mem_Allocator_free(allocator, anySli(buffer)));\n    // 오류가 발생하고 전파될 때만 정리됨\n    errdefer_(log_error(\"오류 발생!\"));\n\n    // 오류 전파 (조기 반환)\n    let result_invalid = try_(safeDivide(10, 0));\n\n    // 기본값으로 오류 처리\n    let result_default = catch_(safeDivide(10, 0), 1);\n\n    // 오류 페이로드 캡처를 통한 오류 처리\n    let result_handling = catch_from(safeDivide(10, 0), err, eval({\n        Err_print(err);   // 오류 출력\n        ErrTrace_print(); // 오류 추적 출력\n        return_err(err);  // 오류를 반환\n    }));\n\n    // 정상 반환\n    return_ok({});\n} $unguarded;\n```\n\n### 🤝 Pattern Matching 예제\n\n```c\nconfig_UnionEnum(InputEvent,\n    (InputEvent_press_key,      struct { i32 key; }),\n    (InputEvent_release_button, struct { i8 button; })\n);\nuse_Opt$(InputEvent);\nfn_(pullInputEvent(void), Opt$InputEvent);\n\nfn_(example(void), void) {\n    if_some(pullInputEvent(), event) {\n        match_(event) {\n        pattern_(InputEvent_press_key, on_pressed) {\n            debug_assert_true_fmt(\n                -1 \u003c on_pressed-\u003ekey \u0026\u0026 on_pressed-\u003ekey \u003c= 255,\n                \"key is out of range\"\n            );\n        } break;\n        pattern_(InputEvent_release_button, on_released) {\n            debug_assert_true_fmt(\n                -1 \u003c on_released-\u003ebutton \u0026\u0026 on_released-\u003ebutton \u003c= 5,\n                \"button is out of range\"\n            );\n        } break;\n        fallback_()\n            claim_unreachable;\n        }\n    }\n}\n```\n\n### 🧪 Testing 예제\n\ndasae-headers는 간편하고 강력한 내장 테스트 프레임워크를 제공합니다. `TEST.h` 헤더를 통해 단위 테스트를 쉽게 작성하고 실행할 수 있습니다.\n\n```c\n#include \"dh/main.h\"\n#include \"dh/TEST.h\"\n\n// 테스트 대상 함수 정의\nfn_(mathAdd(i32 a, i32 b), i32) {\n    return a + b;\n}\n\nfn_(mathMultiply(i32 a, i32 b), i32) {\n    return a * b;\n}\n\n// 테스트 케이스 정의\nTEST_fn_(\"기본 수학 연산 테스트\", $scope) {\n    // 덧셈 테스트\n    let a = 5;\n    let b = 7;\n    let sum = mathAdd(a, b);\n\n    // 결과 검증\n    try_(TEST_expect(sum == 12));\n    try_(TEST_expectMsg(sum \u003e 10, \"합계는 10보다 커야 합니다\"));\n\n    // 곱셈 테스트\n    let product = mathMultiply(a, b);\n    try_(TEST_expect(product == 35));\n\n    // 실패하는 테스트 (의도적인 오류 발생)\n    // try_(TEST_expect(product == 30)); // 실패: 35 != 30\n} $unscoped_TEST;\n```\n\n## 📚 문서\n\n자세한 문서는 다음 위치에서 확인할 수 있습니다:\n\n- [위키 홈](./dh/docs/ko/home.md) - 메인 문서 포탈\n- [빠른 시작 가이드](./dh/docs/ko/quick-start.md) - 시작을 위한 상세 가이드\n- [API 참조](./dh/docs/ko/api/index.md) - 모듈 문서\n\n추가 자료:\n- [헤더 파일](https://github.com/coding-pelican/dasae-headers/tree/main/dh/include)\n- [소스 파일](https://github.com/coding-pelican/dasae-headers/tree/main/dh/src)\n- [예제 코드](https://github.com/coding-pelican/dasae-headers/tree/main/dh/samples)\n- [테스트](https://github.com/coding-pelican/dasae-headers/tree/main/dh/tests)\n\n## 🚧 현재 상태\n\n이 프로젝트는 적극적으로 개발 중이며 API는 아직 안정화되지 않았습니다. 실험적인 프로젝트에서 사용하고 피드백을 제공해 주시면 감사하겠습니다.\n프로젝트 개선에 관심이 있으시다면 [contribution.md](./dh/docs/ko/contributing.md)를 참조해 주세요.\n\n\"dasae-headers\"라는 이름은 자주 사용하는 C 유틸리티 코드를 모은 헤더 전용 라이브러리로 시작된 것에서 유래했습니다. 아직 확정된 이름은 아닙니다. 좋은 이름 제안이 있으시다면 알려주세요 :D\n\n## 🙏 기여\n\n이슈, 풀 리퀘스트, 그리고 피드백은 언제나 환영합니다!\n\n1. 이슈 보고: 버그 리포트 / 기능 요청\n2. 코드 기여: 기능 추가 / 버그 수정\n3. 문서화: 문서 개선 / 예제 코드 추가\n\n## 📧 연락처\n\n문의사항이 있으시다면 프로젝트 작성자에게 연락해 주세요:\n- 김경태(dev-dasae) \u003c\u003ccodingpelican@gmail.com\u003e\u003e\n\n## 📜 라이센스\n\n이 프로젝트는 MIT 라이센스를 따릅니다 - 자세한 내용은 [LICENSE](./LICENSE) 파일을 참조하세요.\n\nCopyright © 2024-2025 Gyeongtae Kim\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoding-pelican%2Fdasae-headers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoding-pelican%2Fdasae-headers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoding-pelican%2Fdasae-headers/lists"}