Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

컴파일 기능 #144

Merged
merged 18 commits into from
Feb 16, 2025
Merged

컴파일 기능 #144

merged 18 commits into from
Feb 16, 2025

Conversation

joonas-yoon
Copy link
Owner

연결된 이슈

아이디어 제안

  • @smartwe

내용

Base feature branch 입니다.

feature/compile 브랜치를 base로 해서 fork 한 후에 작업해주세요.

Pull Request 시에는 다시 "feature/compile <- forked repo branch" 형태로 요청해주시면 이 PR로 정리하겠습니다.

스크린샷

아래와 같이 버튼을 만들었고, 클릭 시 작성한 코드가 넘어갑니다.

image

다음 코드를 채워주시면 좋겠습니다.

function compile(text) {
// TODO: implement
console.log('Start compile:', text);
return 'Good';
}

@joonas-yoon joonas-yoon added the ✨ new feature New feature or request label Mar 7, 2023
@joonas-yoon
Copy link
Owner Author

https://github.com/AviFS/tio-api

async TIO.run(code, input, lang) -> Promise([stdout, stderr+timing, ?])

@joonas-yoon joonas-yoon force-pushed the feature/compile branch 2 times, most recently from fba8f90 to 240bf19 Compare April 8, 2023 08:40
@joonas-yoon
Copy link
Owner Author

아래 GIF처럼 기능은 어느정도 동작하도록 구현 완료하였는데, 몇 가지 불안정한 문제가 있습니다.

boj-compile

  • GIF처럼, BOJ 사이트 에디터에 있는 일부 공백 문자들로 추정되는 문자들이 TIO로 전송 시 깨지면서 문제 발생 (stray \342 in program 등등)
  • TIO는 컴파일이 아니라 실행을 직접 해야하는 구조로 보임. 그래서 TIO.run(code, input, lang)와 같이 input이 반드시 필요한데, 문제 입력에 따라 아래와 같은 케이스들이 발견됨
    • 입력이 없는 문제의 경우 -> 빈 문자열('')로 설정하면 문제 없음
    • 입력이 있는 경우
      • 빈 문자열('')로 설정할 경우, 입력을 받지 못해서 Segmentation Fault 가 발생하기도 함
      • 문제 입력 형식에 맞게 하려면, 문제의 예제 입력을 가져와야하는 로직이 필요함.

@smartwe 가능하시면 위 내용 중에서 TIO 전송 시 깨지는 문제와 나머지 항목들에 대해서 의견 부탁드립니다.

@ruk13xa
Copy link
Contributor

ruk13xa commented Apr 8, 2023

아 그리고 입력을 수동으로 입력받게하는건 어떤가요?

@joonas-yoon
Copy link
Owner Author

BOJ 에서 빌드하는 환경과 완전히 동일하게 세팅할수가 없어서 이슈가 종종 있을 것 같네요. 아쉽지만 closed 하겠습니다 😥

@joonas-yoon joonas-yoon closed this Mar 3, 2024
@joonas-yoon joonas-yoon mentioned this pull request Feb 14, 2025
joonas-yoon added a commit that referenced this pull request Feb 16, 2025
제출 페이지에서 코드를 컴파일할 수 있는 기능

- #143 
- #169 
- #144
@joonas-yoon joonas-yoon reopened this Feb 16, 2025
@joonas-yoon
Copy link
Owner Author

joonas-yoon commented Feb 16, 2025

@joonas-yoon joonas-yoon changed the base branch from main to dev February 16, 2025 05:03
@joonas-yoon
Copy link
Owner Author

boj-compile-2

@ruk13xa 덕분에 인코딩쪽 문제까지 해결하여 위처럼 통합했습니다. 감사합니다 :)

몇 가지 언어들을 테스트해봤는데, Ada 의 경우에는 BOJ 채점 환경과 버전이 달라서 결과가 다른 것 확인했습니다.
https://www.acmicpc.net/source/90139713
(BOJ는 정답, TIO는 컴파일 오류)
이거는 항상 보장할 수 없는 내용이므로, 별도로 info box 를 띄워서 안내하도록 하겠습니다.

그리고 이름은 컴파일보다는 예제 테스트가 목적이므로 '테스트'로 변경했습니다.

감사합니다.

@ruk13xa
Copy link
Contributor

ruk13xa commented Feb 16, 2025

boj-compile-2 boj-compile-2

@ruk13xa 덕분에 인코딩쪽 문제까지 해결하여 위처럼 통합했습니다. 감사합니다 :)

몇 가지 언어들을 테스트해봤는데, Ada 의 경우에는 BOJ 채점 환경과 버전이 달라서 결과가 다른 것 확인했습니다. https://www.acmicpc.net/source/90139713 (BOJ는 정답, TIO는 컴파일 오류) 이거는 항상 보장할 수 없는 내용이므로, 별도로 info box 를 띄워서 안내하도록 하겠습니다.

그리고 이름은 컴파일보다는 예제 테스트가 목적이므로 '테스트'로 변경했습니다.

감사합니다.

추가로 틀렸을시 어떻게 출력되었는지도 알려주면 좋을 것 같네요
수정해보겠습니다

@joonas-yoon
Copy link
Owner Author

@ruk13xa 우선 지금 main 브랜치에 작업하신 커밋들은 체리픽으로 여기 레포지토리의 feature/compile 브랜치로 합쳤습니다.
기존 코드를 rebase 하시기보다는 새로 커밋하시거나 최신 상태의 feature/compile을 베이스로 새로운 브랜치에서 작업하시는 것이 다음 PR 에서 충돌이 없으니 참고 부탁드립니다 :)

@ruk13xa
Copy link
Contributor

ruk13xa commented Feb 16, 2025

넵 :D

@joonas-yoon
Copy link
Owner Author

(메모) 프로그램이 -1 을 리턴하면서 종료하는 경우, 비정상 시그널이라 런타임 오류가 맞지만 단순 출력 비교로는 정답으로 표시됨

  • TIO 의 exit code 까지 확인해서 정답을 판단한다? => 시간초과, 메모리초과까지 판단해야 동일한 UX 제공
  • 기능을 전부 커버하는건 불가능하므로 표준출력에 대해서만 비교하는 게 최선일 것 같음

@joonas-yoon joonas-yoon merged commit c67521b into dev Feb 16, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ new feature New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants