4P by GN⁺ | ★ favorite | 댓글 1개
  • Mathics Core 7.0.0은 Mathematica 호환 오픈소스 계산 시스템의 핵심 엔진을 정리하며, 향후 내장 함수 지연 로딩을 위한 기반을 마련함
  • 새 내장 함수로 ComplexExpand, ConjugateTranspose, LeviCivitaTensor 등 수식·선형대수·실수 판별 관련 기능이 추가됨
  • Range[], DirectedInfinity, Indeterminate, Graphics 오류 표시, $CharacterEncoding 변경 등 기존 호환성의 빈틈이 보완됨
  • 내장 함수 로딩은 암묵적 import 의존에서 벗어나 import_and_load_builtins() 를 명시적으로 호출하는 방식으로 바뀜
  • Python 3.11SymPy 1.12 지원을 포함하며, Quantity, SparseArray, Derivative, Exit[], BaseForm 관련 수정이 함께 들어감

릴리스 방향과 내부 정리

  • Mathics Core 7.0.0은 향후 내장 함수 지연 로딩을 지원하기 위한 내부 구조 정리를 포함함
  • Python 코드와 스타일을 현대화하고 타입 주석을 늘렸으며, 여러 철자 오류를 바로잡음
  • SymPyPython 의존성을 더 최신 버전으로 갱신함
  • 초기 로딩 속도를 높이고 초기 메모리 사용량을 줄이기 위한 작업도 진행됨

새 내장 함수

  • 이번 릴리스에서 추가된 내장 함수는 다음과 같음
    • $MaxLengthIntStringConversion
    • Elements
    • ComplexExpand
    • ConjugateTranspose
    • LeviCivitaTensor
    • RealAbs, RealSign
    • RealValuedNumberQ

문서와 테스트 생성 개선

  • PDF 문서의 서식 문제가 여러 곳에서 수정됨
    • 장과 절 목차에서 섹션 번호 간격이 늘어남
    • 내장 함수 정의 주변 여백이 늘어남
    • 문서 전반의 철자 오류가 정리됨
  • doctest 실행과 LaTeX 문서 생성 코드는 개정·리팩터링됨
    • 내장 함수의 증분 업데이트를 허용함
    • 중복 코드를 줄이는 방향으로 정리됨
  • “Expression Structure”에는 Section Head-Related Operations 절이 새로 추가됨
  • PDF 제목은 Mathics에서 Mathics3로 바뀌었고, 소개 문구도 업데이트됨
  • 오래된 형식의 비노출·비교육용 doctest는 pytest로 전환됨

호환성과 사용자-visible 동작 변화

  • *Plot은 평가 중 메시지를 표시하지 않음
  • Range[]는 음수 di를 처리함
  • DirectedInfinityIndeterminate 지원이 개선됨
  • GraphicsGraphics3D는 잘못된 primitive나 directive를 포함할 때 분홍색 배경으로 표시됨
    • Mathics-Django 인터페이스에서는 툴팁 오류 메시지도 함께 표시됨
  • $CharacterEncoding은 세션 내부에서 값을 변경할 수 있음

내부 구현과 API 변경

  • AbsSign에서 eval_abs, eval_sign이 분리되어 mathics.eval.arithmetic에 추가됨
  • 문자열에서 허용되는 최대 숫자 자릿수는 7000으로 설정됨
    • Python이 자동 조정하지 않는 pyston 같은 환경에서는 MATHICS_MAX_STR_DIGITS 환경 변수로 조정 가능함
  • 실수 비교 구현은 내부적으로 RealSign 구현에 들어감
  • Python 3.11에서는 $MaxLengthIntStringConversion이 큰 정수와 문자열 사이의 리터럴 변환 최대 크기를 제어함
  • 내장 코드 로딩은 암묵적 방식이 아니라 명시적 지시 방식으로 바뀜
    • 향후 내장 함수 지연 로딩이나 GNU Emacs autoload 방식의 “autoload”를 가능하게 하기 위한 변경임
  • 새 API로 import_and_load_builtins() 를 명시적으로 호출해야 함
    • 이전에는 import 순서에 따라 내장 함수 로딩 시점이 암묵적이고 불확정적이었음
  • mpmath에는 LRU 캐시가 추가됨

Quantity·SparseArray 등 버그 수정

  • Definitionspickle과 호환됨
  • Quantity 표현식 지원이 개선됨
    • 변환, 서식 지정, 산술 연산을 포함함
  • GraphicsGraphics3DBackground 옵션이 다시 동작함
  • String이 포함된 표현식에 대한 수치 비교 문제가 수정됨
    • 관련 이슈: #797
  • Infinity가 포함된 Switch[] 문제가 수정됨
    • 관련 이슈: #956
  • SparseArray에 대한 Outer[] 문제가 수정됨
    • 관련 이슈: #939
  • ArrayQ[]SparseArray를 감지함
  • BoxExpressionError 예외가 처리됨
  • DerivativeTrue, False, List[]를 평가하는 동작이 수정됨
  • Combinatorica 패키지 수정이 포함됨
  • 동작하지 않던 Exit[]가 수정됨
  • BaseForm$OutputForms에 포함됨

패키지 지원 버전

  • Python 3.11을 지원함
  • SymPy 1.12를 지원함

댓글과 토론

Hacker News 의견들
  • 이 프로젝트를 몇 년째 지켜봤는데 꾸준히 잘 발전하고 있음. 오픈소스 컴퓨터 대수 시스템에 관심이 있다면 GNU Octave나 Maxima 같은 고전적인 선택지부터 SAGEmath, Symbolics.jl, sympy 같은 현대적인 선택지까지 더 성숙한 해법이 많음
    GiNaC 같은 기호 연산 라이브러리부터 SAGEmath 같은 배터리 포함 IDE까지 폭이 넓고, 커뮤니티도 활발함. 예를 들어 SAGEmath는 웹 노트북 인터페이스를 사실상 개척했고, 오늘날 다양한 형태의 Jupyter로 이어졌다고 봄
    개인적으로 Mathematica(MMA)의 Lisp스러운 스타일을 좋아하지만, MMA를 강력하게 만드는 것은 코어만이 아니라 거대한 라이브러리임. 기호 적분, 2D/3D 그래픽, 유한 요소법 같은 기본 주제에서 업계 최고 수준의 해법이 있고, 생물정보학 같은 특수 분야도 많음
    Mathics는 코어 복제는 잘한 듯하지만 당연히 그 모든 라이브러리는 부족함. Matlab과 여러 “툴킷”을 numpy 클론과 비교할 때도 같은 논리인데, Python 흐름은 이제 Matlab에서 동작하지 않는 새로운 코드들을 numpy 세계로 많이 가져왔음

    • 진행 상황에 대한 말에 동의함. 이 프로젝트는 좋아하는 일을 조용히 꾸준히 파고드는 훌륭한 예시로 보임
      5년쯤 전 처음 나왔을 때 “기호 평가 엔진은 정말 잘 만들었네, 이제 어떻게 될지 보자”라고 생각했음. 앞으로 새 프로젝트를 시작하고 싶어질 때마다, 오래된 프로젝트를 계속 다듬는 이 사례를 떠올려야겠음
    • Lisp 쪽에서는 Maxima에서 Common Lisp로 쉽게 들어갈 수 있음. 성능 때문에 SBCL을 쓰면 더 좋음
    • 착각일 수도 있지만 Octave, Matlab, numpy는 컴퓨터 대수 시스템과 같은 영역이라고 보지 않음. 이들은 모두 수치 계산 중심의 언어나 라이브러리라서, 정확한 기호식보다는 문제의 수치 해를 구하는 데 쓰인다고 봄
      서로 보완 관계이고 함께 쓰이는 경우도 많음. Mathematica와 Mathics는 두 패러다임을 모두 지원하는 듯하지만, 같은 것은 아님
  • sympy 기반처럼 보임: https://www.sympy.org/en/index.html

  • 개인 용도만 원한다면 Wolfram Cloud는 무료로 쓸 수 있음. 파일은 30일쯤 지나면 삭제되는 것 같음. Wolfram Engine도 명령줄에서 Mathematica를 무료로 쓰는 방법임. 뭐, 없는 것보단 낫지

    • Mathematica 라이선스가 포함된 Raspberry Pi를 사도 됨
    • Wolfram Engine 위에 WLJS를 얹으면 꽤 즐겁게 쓸 수 있음
  • Mathics에 대한 더 간단한 소개는 여기 있음:
    https://mathics.org/

  • 왠지 이게 SageMath에 통합될 것 같다는 생각이 듦 :D

    • SageMath에 Mathics를 넣으려는 실제 움직임은 잘 모르겠음. 추측하자면 SageMath는 주로 연구 수학자와 암호학자들이 개발하기 때문에, 구성 요소를 포함할 때 성능이 핵심 관심사인 경우가 많아서일 듯함
      SageMath가 가장 큰 Cython 프로젝트인 이유 중 하나도, Cython이 Sage에서 빠른 C/C++ 라이브러리를 활용할 수 있게 해주기 때문임
      Mathics는 현재 성능을 심각하게 신경 쓰는 것 같지는 않음. 예를 들어 Mathics에서 "AbsoluteTiming[Sum[i, {i, 1, 100000}]]" 같은 작은 마이크로벤치마크를 돌려보거나 로드맵을 읽어보면 됨
      물론 이건 괜찮음. Mathematica 프로그래밍 언어에는 성능이 중요하지 않은 흥미로운 응용이 많고, 예를 들어 어떤 기호 연산을 식과 함께 조심스럽게 단계별로 따라가는 용도도 있음
      하지만 Sage 개발자들의 주된 동기는 최첨단 연구 수학이고, 거기서는 거의 항상 성능이 매우 중요함. Sage가 단순히 sympy를 쓰지 않고 비슷한 기능을 많이 직접 구현하는 이유도 성능 때문임. sympy는 설치 용이성을 우선시해서 상대적으로 느릴 수 있는데, SageMath에서는 설치 쉬움이 전혀 우선순위가 아님
      SageMath의 사명은 Mathematica, Matlab, Magma, Maple의 실행 가능한 대안이 되는 것이지만, 그게 클론이 된다는 뜻은 아니었음. 예를 들어 Mathematica 코드를 직접 실행한다는 의미가 아니라, 원래라면 그런 폐쇄 소스 프로그램으로 했을 연구를 오픈소스 수학 소프트웨어 위에서 지원할 수 있는 대안이라는 뜻임
  • 소프트웨어 엔지니어들은 소프트웨어 비용을 내지 않으려고 뭐든 함

    • Mathematica 라이선스가 있지만 이 프로젝트도 꽤 멋지다고 봄. 나도 소프트웨어 엔지니어임. Mathics 개발자들이 Mathematica 사용자가 아니라면 오히려 놀랄 것 같음
    • 가격이 아니라 자유의 문제임
    • 어떤 사람들은 자기 자신을 위해 소프트웨어를 만들고, 심지어 오픈소스로 공개하기까지 함
    • 예전에 Debian Sarge 3장짜리 DVD 케이스와 잡지 크기 핸드북에 20달러를 냈었음
  • Mathematica는 Raspberry Pi에서 무료로 제공되고[1], 대부분의 대학에는 사이트 전체 라이선스가 있음. “Home & Hobby” 라이선스도 그렇게 비싸지 않아서 구독은 연 195달러, 영구 라이선스는 390달러이고 갱신은 175달러뿐임[2]
    솔직히 tinkering에 관심은 있지만 그 가격을 감당하지 못하는 사람이라면, 크랙판도 찾기 어렵거나 설치하기 어렵지 않음
    개인적으로 Mathematica, 정확히는 “Wolfram Language”를 꽤 좋아하고 취미용 라이선스 비용을 내는 것도 만족함. 돈값을 한다고 생각할 뿐 아니라, 수학 소프트웨어를 지원하는 일은 돈을 쓸 만한 “좋은 명분”이라고 봄
    게다가 아마추어 사진가들은 Adobe CC 같은 도구에 많은 프로그래머들이 자기 도구 전체에 쓰는 돈보다 더 많이 쓰는 경우가 흔한데, 왜 그런지 이해가 안 됨. 여러 구독 서비스에는 월 20~40달러 이상 쓰면서 200~400달러 라이선스 비용에는 망설이는 것도 마찬가지임
    다만 내 경우 컴퓨터에 설치된 거의 어떤 프로그램보다 Mathematica에서 보내는 시간이 많음
    그래도 오픈소스 수학 소프트웨어에는 여전히 중요한 자리가 있음. Mathematica가 대체로 포괄적이지만 고급 수학에서는 여전히 큰 결함이 있음
    특히 더 “틈새” 수학 분야까지 충족하리라고 믿기 어려운 이유가 두 가지 있음. 첫째, 더 고급이거나 난해한 분야로 갈수록 투자 대비 수익이 급격히 떨어짐. 둘째, Wolfram Language에는 이미 6000개 이상의 내장 함수가 있으니, 군론 같은 분야를 포괄적으로 지원하려고 수백 개를 더 추가하는 것은 말이 잘 안 됨
    패키지로 지원할 수는 있겠지만, 커널에서 일급 지원을 받지 못해 성능 비용이 들고 사용자가 일부러 찾아 써야 하므로 사용성 비용도 생김
    그래서 GAP, M2, PARI/GP 같은 오픈소스 소프트웨어는 Wolfram Language의 빈틈을 메우는 데 중요한 역할을 함. 내 경우 Mathematica 라이선스에 쓰는 만큼 FOSS 프로젝트에도 기여함. 금전 기여가 간단하지 않은 프로젝트에는 시간과 기술을 들여 개선하려고 함
    솔직히 Mathematica 기능을 복제하려는 프로젝트에는 큰 관심이 없음. 물론 그런 프로젝트들도 계속 개발되고 개선될 것이고, 최소한 Wolfram Research가 기본 기능을 계속 개선하도록 압박은 줄 수 있음. 하지만 그런 프로젝트가 오늘날의 Mathematica/WL을 따라잡으려면 아마 10~20년은 걸릴 듯함
    [1]: https://www.wolfram.com/raspberry-pi/
    [2]: https://www.wolfram.com/mathematica/pricing/home-hobby/

    • Stephen Wolfram은 HN에서 꽤 미움을 받는 것 같지만, 실험적 수학, 퍼즐 풀이, 빠른 데이터 시각화 등에는 Wolfram이 깊이 있고 아름다운 언어임
      통합 노트북, 마우스 오버 문서, 그리고 놀랍게도 수천 개 함수가 들어 있는 단일 거대 이름공간이 somehow 결합되어, 내가 써본 것과는 다른 단순하고 생산적인 경험을 줌. 보통 “두꺼운” IDE를 좋아하는 편도 아닌데도 그렇음
  • Mathematica에서 짜증 나는 점 중 하나는 모든 함수가 같은 이름공간에 욱여넣어져 있고, 서로 다른 매개변수화 옵션에 따른 오버로딩이 없다는 것임

    • 오버로딩이 무슨 뜻인지 모르겠음. 함수는 인자 개수에 따라 쉽게 다른 동작을 할 수 있음. 예를 들어 2인자 Fold와 3인자 Fold가 그렇고, Graphics, Graphics3D, Solve, Import/Export처럼 옵션도 얼마든지 가질 수 있음
      떠오르는 큰 중복은 여러 Plot 함수들 정도임