LINUX.ORG.RU
ФорумTalks

Go2 draft: generics, error handling & error values

 


0

5

Драфты generics и расширения системы обработки ошибок тут. Сейчас ещё можно повлиять на то, как это будет в итоге сделано.

Generics

contract Addable(t T) {
	t + t
}

func Sum(type T Addable)(x []T) T {
	var total T
	for _, v := range x {
		total += v
	}
	return total
}

Error handling

func CopyFile(src, dst string) error {
	handle err {
		return fmt.Errorf("copy %s %s: %v", src, dst, err)
	}

	r := check os.Open(src)
	defer r.Close()

	w := check os.Create(dst)
	handle err {
		w.Close()
		os.Remove(dst) // (only if a check fails)
	}

	check io.Copy(w, r)
	check w.Close()
	return nil
}

★★★★

Последнее исправление: Davidov (всего исправлений: 1)
Ответ на: комментарий от EXL

Через GraalVM есть два способа это сделать: http://www.graalvm.org/sdk/javadoc/overview-summary.html

Первый через org.graalvm.nativeimage.c, но поддерживается только при компиляции сырцов в нативный код.

Второй, через org.graalvm.polyglot https://www.reddit.com/r/java/comments/8s7sr8/interacting_with_c_using_graalvm/

foror ★★★★★
()
Ответ на: комментарий от foror

Выглядит интересно, спасибо.

GraalVM скоро попадёт куда-нибудь в релиз, чтобы можно было пощупать просто установив пакетик в любом дистре?

EXL ★★★★★
()
Ответ на: комментарий от EXL

GraalVM скоро попадёт куда-нибудь в релиз, чтобы можно было пощупать просто установив пакетик в любом дистре?

В википедии написано о релиз кандидате RC5, скорее всего в 12 джаве будет из коробки, в марте.

foror ★★★★★
()
Ответ на: комментарий от foror

Через GraalVM есть два способа это сделать

Особо не вникал, но неужели на полном серьезе предлагается использовать LLVM IR? Как в таком случае написать что-то серьезнее helloworld-а, использующее внешние библиотеки (mkl, cublas etc)?

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Как в таком случае написать что-то серьезнее helloworld-а, использующее внешние библиотеки (mkl, cublas etc)?

Как я понимаю это делается, чтобы собирать нативные приложения под iOS. Или запускать десктопные приложения без JVM и JIT-а. По поводу внешних либ с инлайнами ассемблера, я не в курсе. Настолько в тему не погружался.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от kawaii_neko

Как в таком случае написать что-то серьезнее helloworld-а, использующее внешние библиотеки (mkl, cublas etc)?

Сейчас глянул подробнее. Походу можно подключать такие либы, но только работать оно будет не на JVM, а на nativeimage, т.е. нужно джаву компилировать: https://cornerwings.github.io/2018/07/graal-native-methods/ Подключаешь библиотеку через https://www.graalvm.org/sdk/javadoc/org/graalvm/nativeimage/c/function/CLibra..., а дальше https://www.graalvm.org/sdk/javadoc/org/graalvm/nativeimage/c/function/CFunct...

foror ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.