본문 바로가기

프로그래밍 언어 노트

(95)
[F#] F# Computation Expression 톺아보기 F# 의 Computation Expression 의 표현력은 세계 제일! 서론. 모나드와 Expression Haskell 이나 Scala 같은 타 함수형 언어의 경우 Monad 를 위한 문법으로 Do/For 와 같은 Expression 이 존재한다.C# 이나 Kotlin 또는 JS/TS 같은 경우는 Future Monad 에 대해서만 유효한 async / await 문법이 존재하고, Null(Optional) Monad 에 대한 ?. (옵셔널 체이닝) 문법이 존재한다.위 문법은 Syntax Sugar 이며, 없어도 대게 메서드 체이닝으로 쓸수는 있다.즉 함수형에 가까운 언어는 Do/For 와 같이 그냥 "Monad" 자체에 대한 문법을 제공해서 내가 모나드를 설계하면 동작하고,그렇지 않은 언어는 언어..
Behavioral Programming 라이브러리를 코틀린에서 구현해보자 feat Channel Clojureverse 는 지식의 원천Clojureverse를 돌아다니다가 Behavioral Programming이라는 작은 패러다임에 관한 포스팅을 발견했다. 이 글을 보고 Behavioral Programming에 대해 좀 더 찾아봤는데, 주류는 아니지만 개인적으로 흥미가 생겼다.BThread라는 독립적인 Behavioral을 작성하고, BThread들이 조합되면서 하나의 BProgram이 완성되는 구조다. 복잡하게 얽히고 설킨 소프트웨어의 레고 블록들을 sync라는 공통된 이벤트 기반 시스템으로 관리하여 완성시킨다는 이론이다.절차 지향부터 함수형에 이르기까지 모든 소프트웨어가 공통적으로 추구하는 방향성은 모듈화와 그로 인한 레고처럼 조립하는 시스템이다. Behavioral Programming의 ..
Kotlin DSL 에 다양한 제약사항을 적용해 보자 Feat [Contract] 필자는 Fluent API DSL 보다 Kotlin Type safe builder 를 활용한 DSL 을 좋아하는데, 보기에 좀더 깔끔하기 때문이다.Flunet API 는 Chaining 신경써야 하고 Depth 파악이 더 어렵기 때문그러나 Fluent API의 경우 Class Method Chaining 을 기반으로 하기 때문에 Class base 로 제약조건을 걸기가 좀더 쉽다. 예를들어, Name Age Email 을 받아서 User 를 만드는 Builder 를 설계한다고 해보자.제약 조건은 다음과 같다.1. age 는 Optional2. Name -> Email 순으로 받아야 하며, Required Field 이다 (일종의 Step)물론 해당 조건은 Compile Time 에 해당 제약 조건이 적..
[Ktor] + kts 활용해서 Dynamic Endpoint 만들기 Lee-WonJun/ktor-dynamic-endpoint-kts: Ktor-based server application sample that dynamically creates endpoints based on uploaded Kotlin script (.kts) files. (github.com) GitHub - Lee-WonJun/ktor-dynamic-endpoint-kts: Ktor-based server application sample that dynamically creates endpoints based onKtor-based server application sample that dynamically creates endpoints based on uploaded Kotlin scrip..
Kotlin 초기화 코드 제너레이터 Lee-WonJun/reverse-dummy-kt (github.com) GitHub - Lee-WonJun/reverse-dummy-ktContribute to Lee-WonJun/reverse-dummy-kt development by creating an account on GitHub.github.com예전에 dotnet 판을 만들었었는데, 이번에는 Kotlin 판.. 리플렉션 확인겸..사족) kotest 에서 string 이 컴파일 가능한지 확인하는 extension 이 있는데, 예전에는 잘됫는데.. extension 으로 분리되고부터 뭔가 잘안되서 그냥 string 비교로 검사함..
코틀린으로 살펴보는 Y 컴비네이터 (Feat Fixed Point) - Y-Combinator를 사용한 함수 고정점 소개  과 [Kotlin Pearls 8] Recursion, Tail Recursion and Y Combinator | by Uberto Barbini | ProAndroidDev 의 Y Combinator 부분 간단한 요약임 재귀함수간단한 재귀함수를 짜보자// 재귀 함수를 짜보자fun factorial (n: Int): Int { if (n == 0) return 1 return n * factorial(n - 1)}짜잔!재귀는 자기 자신을 호출하므로, factorial 내부에서 factorial 을 호출하면 된다. 람다로 짜보자val factorialLambda: (Int) -> Int = { n -> if (n == 0) 1 els..
Clojure 의 매크로 시스템의 튜링완전 (애매한) 증명 feat SKI 우리가 하는 일반적 (Generic)  프로그래밍 언어는 튜링완전하다.즉 튜링완전 관점에서 완전히 동치이고, 튜링완전한 언어 A 에서 가능한 일은 이론적으로 B 에서도 가능하다. Scala / Haskel / F# .... TypeScript 등 언어의 "타입 시스템" 구조 자체가 튜링 완전하며, Type System 만을 이용해서 모든 기능을 이론적으로 구현 할 수 있다. - 타입스크립트 타입 레벨 프로그래밍 (velog.io) 참고타입 레벨 프로그래밍이라고도 하는데, 정적타입언어에서 안전한 프로그래밍을 만들기 위하여 종종 쓰는 패턴이다 암튼, 튜링완전 조건은 다음과 같은데 (나무위키 피셜)- 조건 분기문이 있다. if (...) then goto (...). 또는 branch if zero 등. fo..
Hibernate Query Plan 으로 인한 OOM 방지 한 2년전에 발생한 문제인데, Query Plan  QueryPlanCache (Hibernate JavaDocs) (jboss.org) QueryPlanCache (Hibernate JavaDocs)Obtain the parameter metadata for given native-sql query. for native-sql queries, the param metadata is determined outside any relation to a query plan, because query plan creation and/or retrieval for a native-sql query depends on all of the return typesdocs.jboss.org 간단히 말하면SQL -> 쿼리..