마지막으로 조금 남은 기초 용어들에 대해서만 정리합니다. Lift 함수와 파라미터를 받아 함수에 파라미터를 적용한 결과를 반환하는 것. 이 때, LiftA2, Lift 가 있고 전자는 2개 인자를 받아 map, ap을 적용하고 후자는 map을 적용합니다. Equational Reasoning 응용 프로그램이 부수 효과가 없는 순수 함수(표현식)들로만 구성되었다면 최종 시스템은 부분들로부터 유도가 가능하다는 추론입니다. 두 표현식은 아래 조건의 경우 동등합니다 두 표현식이 같은 값을 평가하거나, 두 표현식이 모두 무한 루프를 돌거나, 두 표현식이 모두 같은 예외를 던지거나. 아래의 규칙에 의존할 수 있습니다. 반사성(reflexivity) : 어떤 표현식 e 에 대하여 e == e 입니다. 대칭성(symm..
람다 대수학에 대해 간단하게 고찰하고 넘어가고자 합니다. 람다 대수 역사와 개요 정의 연산 그리고 이를 이용한 하나의 고찰 그리고 0 이상의 정수와 관련된 람다 대수식 서술법 출처 https://www.inf.fu-berlin.de/lehre/WS03/alpi/lambda.pdf https://en.wikipedia.org/wiki/Lambda_calculus#Formal_definition http://nirvana-wiki.appspot.com/Lambda_calculus https://ko.wikipedia.org/wiki/%EB%9E%8C%EB%8B%A4_%EB%8C%80%EC%88%98 https://www.sangkon.com/haskell-study-part02/ http://ropas.sn..
Functor, Applicative, Monad. 함수형 패러다임에서 매우 잦게 수행되는 것들이 있다고 합니다. 함수 합성과 커링이 그 예 입니다. 여기서 일반적으로 사용되는 데이터 타입인 Char, Int, Double 을 그대로 사용하면서도 Null 동작에 대한 대비 및 Side-Effect 를 동반하는 함수를 순수하게 다루기 위한 방법 등이 같이 고려되어야 합니다. 그 중 알아낸 개념으로 Functor, Applicative, Monad 에 대해 약술합니다. Functor(함자) 맵핑 가능하거나 맵핑 되는 대상 조건 1. id 함수(identity function; 항등 함수)를 함자를 통해 맵핑하여 리턴된 함자는 원래의 함자와 동일해야 한다. fmap id = id 2. 두 함수를 합성한 함수를..
함수형 프로그래밍이란? 함수형 프로그래밍(functional programming)은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나. 상태, 가변 데이터를 지양. 상태의 변경이 아닌 함수의 응용을 통해 프로그래밍. 절차의 기술이 아닌 선언적으로 기술되는 선언형 프로그래밍 패러다임을 따름. 아래의 내용으로 보통 정의내림 FP is about pulling programs apart and reassembling them from the same parts, composing in functions together and that means we need to make the output of a function to serve as the input ..
순수 함수형 언어의 순수 함수로 이뤄진 프로그래밍에서 부수효과 Side Effect를 다루는데 어떻게 Monad가 접목되는지 간단한 개념을 짚어봅니다. 프로그램은 외부 저장소에서 데이터를 읽어 새로 기록하기 위해 존재한다고도 하였습니다. 프로그램 입장에서 기록이라 함은 쓰기(Write) 연산이며, 쓰기 대상은 메모리, 모니터, 프린터, 디스크, 테이프 등 다앙합니다. 이러한 요소들은 모두 외부 요소들이며 정의에 따라 이러한 요소들과 상호작용하는 메서드, 함수는 '부수 효과(Side effect)'를 발생시킨다고 부르고 이를 따로 리턴 타입이 없는 함수, 프로시저라 부르기도 합니다. 그리고 실제로 이런 부수 효과를 갖는 함수/메서드를 저희는 매우 자주 사용하고 있습니다. 지금까지의 컴퓨터 언어에서 이러한 ..
이럴수가 seekToBeginning 메서드를 써서 토픽의 맨 처음부터 데이터를 읽어오려는데 이것이 불가능한 상황이다. [상황] 1. KafkaRunner는 아래의 코드를 포함한다. @Log4j2 @Getter public class NewTemplateRunner implements DisposableBean, ConsumerSeekAware//, ConsumerAwareRebalanceListener { private final String topic; private final String groupId; private final String[] partitions; private volatile boolean isClosed = false; private boolean isOffsetLatest; ..
github.com/AdoptOpenJDK/openjdk-jdk11/blob/master/src/java.base/share/classes/java/lang/String.java AdoptOpenJDK/openjdk-jdk11 Mirror of the jdk/jdk11 Mercurial forest at OpenJDK - AdoptOpenJDK/openjdk-jdk11 github.com github.com/AdoptOpenJDK/openjdk-jdk16/blob/master/src/java.base/share/classes/java/lang/String.java AdoptOpenJDK/openjdk-jdk16 JDK16 mirror from https://github.com/openjdk/jdk16 -..
length() 메서드부터 이제 파악하기 시작한다. 보다가 느낀 게 있는데 JDK 8 버전의 코드와 JDK11 의 코드가 다르다는 점이다. 가령 regionMatch의 경우에는 8의 경우 그저 문자열 지역을 비교하지만 11에서는 latin1 인지와 UTF8의 여부를 체크하여 비교하는 로직이 존재한다. 메서드 중 ignoreCase 가 들어가는 경우 toLowerCase(char.toUppserCase()) 의 경우를 비교하는데 이는 uppderCase의 경우 아래와 같은 경고가 있어서 그 사유를 알 수 있다. // Unfortunately, conversion to uppercase does not work properly // for the Georgian alphabet, which has stran..
무려 613줄까지가(주석 포함) 새성자 관련 구문이다. 생성자는 매우 다양한데, 일반 char[], int[], byte[], StringBuffer, StringBuilder에 이르는 다양한 인자를 기반으로 생성된다. 각각은 배열인 만큼 offset, count 등의 추가 변수를 통한 오버라이딩을 통하여 다양한 변인이 존재한다. 이 때 int[] 를 받는 생성자는 BMP, Supplementary Character를 처리하기 위한 로직이 추가로 존재한다. 따라서 실제 리턴되는 문자열 즉 char[]의 길이는 적용된 부분 배열(subarray of int[])의 길이보다 길어질 수 있다. byte[] ascii를 받는 생성자는 Depreicated 되어 있는데 Charset 혹은 String charse..
진행하던 부분을 마저 살펴보자. 모였던 JSR-204 전문가 그룹은 여러 아이디어를 제언하였다고 한다. 그 중 어떤 그룹에서 supplementary character 를 지원하는 기법을 개발했고 이게 채택되었다고 한다. 이런 결과로 low level API 와 high level api 각각에 대하여 다른 대응을 지원하는 방향으로 결정되었다고 한다. The low-level APIs that were added fall into two broad categories: Methods that convert between various char and code point based representations, and methods that analyze or map code points. 저레벨 api는..