LINUX.ORG.RU

Читабельность Rust, C++ и Go

 , , , ,


0

7

Go:

    func typeList(arch *TFile,
      offset uint32, parseDecl bool) []BStr {

C++:

    std::vector<std::string> typeList(TFile* arch,
        off_t offset, bool parseDecl) {

Rust:

    fn typeList<'a>(arch: &'a TFile<'a>,
      offset: u32, parseDecl: bool) -> Vec<&'a bstr> {

как поддерживать код, если он не читаем?



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

Так в плюсах эти же все лайфтаймы присутствуют, только они записаны не в коде, а в лучшем случае в комментах.

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

Это ты убогий. Тип даёт информацию о том, с чем ты работаешь, на месте, без необходимости выводить этот тип самому, ползая по коду и читая тело функций auto f(auto a, auto &b).

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

и :-) GC :-) туда :-) добавили :-) чтобы :-) заменить :-) c++ :-) ?:-)

Представь себе, в том числе и поэтому :-) Потому что с GC лучше, чем без GC :-) Я уже давал ссылку, где объясняются причины возникновения Go :-) Дам ещё раз, мне не трудно :-) Там наличие GC рассматривается как преимущество: Go was designed and developed to make working in this environment more productive. Besides its better-known aspects such as built-in concurrency and garbage collection :-)

anonymous
()
Ответ на: комментарий от clover

и :-) GC :-) туда :-) добавили :-) чтобы :-) заменить :-) c++ :-) ?:-)

Ну и чтобы тебе было ещё более понятно, большинству задач нафиг не впёрлось ручное управление памятью, но требуется быстрая работа в рантайме :-) Думаю, таких задач в Гугле великое множество :-) Поэтому выгоднее взять и переписать их с цепепе на Go :-) Так что, таки заменить цепепе, да :-)

anonymous
()
Ответ на: комментарий от dzidzitop

Тип даёт информацию о том, с чем ты работаешь

Имхо, спор у вас с Manhunt'ом ни о чём: если речь о скриптовом языке, то автоматические типы и отсутствие обязательных описаний переменных однозначно удобнее, а если о нормальном, то нет. Конечно, и на скриптовых языках можно писать (и пишут) многомодульные программы с десятками модулей в тысячу строк каждый, и на си можно написать однострочник, но это неудобно. Каждый инструмент нужно использовать сообразно его назначению и отвёрткой закручивать шурупы, а молотком забивать гвозди, а не наоборот.

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

а как же лайфтаймы? без них-то более менее с этим не спорю

А с ними С++ код выглядел бы как

std::vector<LifePointer<std::string, A> > typeList(LifePointer<LifePointer<TFile, A>*, A> arch,
        off_t offset, bool parseDecl) {

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

Правильная запись тут

К полуночи растоманы таки нащупали приемлимую сигнатуру, лол. Ну теперь можно и спатки, а завтра можно и к самой функции подступиться. Выбрать для начала каким из 5-ю способов обрабатывать ошибки, потом продумать типы. Ой, опять солнце село. Твою ж мать, день такой короткий, а раст такой прекрасный. Ну ниче, до конца недели запилим эту функцию. Наверно...

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

(Будни разработчиков серво)

anonymous
()
Ответ на: комментарий от aureliano15

Ну правильно. Растишка идеально читаема и интуитивно понятно, пока в описаниях типов не появляются 'лайфтаймы. Тут-то код и <'a 'b 'c &'c превращается 'a <в 'a> &'b &'c кровавую &a кашу>.

Как только плюсовики до такого не додумались, они-то знают толк.

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

Ну ниче, до конца недели запилим эту функцию.

Подумаешь, неделя :-) Зато будет работать быстро, а за счёт отсутствия GC, в продакшене упущенное время наверстается с лихвой :-)

anonymous
()

У Go лучшая читаемость, так как в нём нет ни генериков, ни лайфтаймов.
На втором месте — Rust.
И, очевидно, C++, как всегда, хуже всех.

quantum-troll ★★★★★
()
Ответ на: комментарий от anonymous

Правильная запись тут

растоманы таки нащупали приемлимую сигнатуру

Это не ко мне. То была цитата pftBest. Сам я раста не знаю, поэтому ни защищать, ни нападать на него не могу.

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

Тут-то код и <'a 'b 'c &'c превращается 'a <в 'a> &'b &'c кровавую &a кашу>.

Ниче ты не понимаешь, это же старинный стиль пограмирования «Котэ на клавиатуре». Милота!

anonymous
()
Ответ на: комментарий от quantum-troll

У Go лучшая читаемость
И, очевидно, C++, как всегда, хуже всех.

А ниче, что плюсовая версия отличается от гошной только порядком в паре тип/идентификатор? В то время как в растишке с десяток дополнительных закорючек (аж лоровский парсер давится). Как там вам фанбойская шапочка, не жмет?

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

В то время как в растишке с десяток дополнительных закорючек (аж лоровский парсер давится)

Очевидно, что лоровский парсер убог. Я видел с десяток разных бложиков и форумов, в которых примеры растокода прекрасно валидно оформлены. Наверное, там парсеры написаны уберменшами.

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

Рад за тебя, но вырвиглазия от этого не убавится. Тут еще не было замечательных примеров объявлений на десяток строк с where. Читаешь будто забористый SQL запрос. Главное прикольно, что можно объвлять так, можно эдак. Будто вы там стихи пишете, а не указания машине.

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

Порядок имеет значение. В гошной или растовой версии сразу видишь: функция typeList параметры arch, offset и parseDecl. В С++ ты видишь std::vector<std::string> и какую кашу, где не различить где — параметры, а где — типы.

Как там вам фанбойская шапочка, не жмет?

Синтаксис С++ объективно плох. Синтаксис раста хоть и шумен, но его можно читать.

аж лоровский парсер давится

Очевидно, лоровский парсер написан какими-то быдлокодерами. Они, небось, и HTML регулярками парсят.

quantum-troll ★★★★★
()
Ответ на: комментарий от anonymous

where

Так делают, чтобы разгрузить сигнатуру, избавить от копипаста, примерно как аналог type. Да, громоздко.

Virtuos86 ★★★★★
()
Ответ на: комментарий от quantum-troll

Порядок имеет значение. В гошной или растовой версии сразу видишь: функция typeList параметры arch, offset и parseDecl.

Вы так говорите, будто типы в сигнатуре вам только мешают, и хочется их задвинуть куда подальше. В то время как для пользователя функции информация о типах гораздо важнее идентификаторов, которые вообще не относятся к интерфейсу.

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

Вы так говорите

Так говорят те, кому и лайфтаймы мешаются, а не мы. В растокоде больше информации за счёт тех же самых лайфтаймов.

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от quantum-troll

В С++ ты видишь std::vector<std::string> и какую кашу

Какую кашу? То есть закорючки лайфтаймов и аналогичный плюсовому синтаксис дженериков вы влегкую парсите, а поменяй местами тип и идентификатор, сразу ступор?

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

Никто не озвучил очевидную истину, что человеку легче читать и парсить то, что он привык читать. Можно и к лайфтаймам привыкнуть, и к смартпойнтерам n-ой вложенности, и достаточно быстро, если практиковаться, а не кричать: «спасите, помогите, глазки вытекают!»

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

Так говорят те, кому и лайфтаймы мешаются, а не мы.

Но ведь они действительно вырвиглазны. Сами по себе еще туда-сюда, но в комбинации с другими закорючками все это удручающее впечатление оставляет. Будто раст проектировала команда с разными заданиями: один лайфтаймы делал, другой дженерики, третий ссылки и т.д. В общем, «к пуговицам претензий нет». А костюмчик то угребищный.

anonymous
()
Ответ на: комментарий от Virtuos86

Человек - скотина живучая, и к плюсам привыкнет, и к фортрану-77. Деды привыкали.

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

Существование пёрла, APL (и иже с ним), лишпа, хачкеля, 1000 страничного современного стандарта C++ показывает, что не всех людей очень пугает сложный синтаксис и семантика языков программирования. А дислексики сразу отсеиваются, что даже полезно.

Virtuos86 ★★★★★
()

как поддерживать код, если он не читаем?

Я так понял, смущает то, что в C++ возвращаемый тип функции стоит перед её именем, а не после как в других языках? Так это легко исправить!

auto typeList(TFile* arch, off_t offset, bool parseDecl)
    -> std::vector<std::string>
{
rupert ★★★★★
()
Ответ на: комментарий от clover

Ясно, не осиливай дальше, мой юный толстячок.

Deleted
()
Ответ на: комментарий от rupert

Я так понял, смущает то, что в C++ возвращаемый тип функции стоит перед её именем, а не после как в других языках? Так это легко исправить!

Теперь код неконсистентный: у аргументов тип указан перед идентификатором, а у самой функции после скобок. В жопу бы такие исправления).

Virtuos86 ★★★★★
()

Как гошечка мочит си и цпп:

  • regular syntax (don't need a symbol table to parse)
  • garbage collection (only)
  • no header files
  • explicit dependencies
  • no circular dependencies
  • constants are just numbers
  • int and int32 are distinct types
  • letter case sets visibility
  • methods for any type (no classes)
  • no subtype inheritance (no subclasses)
  • package-level initialization and well-defined order of initialization
  • files compiled together in a package
  • package-level globals presented in any order
  • no arithmetic conversions (constants help)
  • interfaces are implicit (no «implements» declaration)
  • embedding (no promotion to superclass)
  • methods are declared as functions (no special location)
  • methods are just functions
  • interfaces are just methods (no data)
  • methods match by name only (not by type)
  • no constructors or destructors
  • postincrement and postdecrement are statements, not expressions
  • no preincrement or predecrement
  • assignment is not an expression
  • evaluation order defined in assignment, function call (no «sequence point»)
  • no pointer arithmetic
  • memory is always zeroed
  • legal to take address of local variable
  • no «this» in methods
  • segmented stacks
  • no const or other type annotations
  • no templates
  • no exceptions
  • builtin string, slice, map
  • array bounds checking
anonymous
()
Ответ на: комментарий от anonymous

молчи чмошник си плюс плюсный, твоё время прошло :-) :-) :-)

Раздался вскукарек со стороны лиспопараши.

anonymous
()

Вот это та самая причина, почему раст не популярен. И почему я его не осилил :( (Хотя, и скорее всего, я его не осилил потому что тупой).

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

Нахрен этот список не нужен. У жабаскрипта тоже сможешь наваять уберсписок киллерфич, которые наконец-то закопают C++.

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

1000 страничного современного стандарта C++

2000 страничного :-)

anonymous
()

как поддерживать код, если он не читаем?

Снабжать его комментариями. Ну, прям как дети малые.

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

а стоп, это не C++, я не знаю как там в Python это работает, не разу не пробовал. Сорри

в целом, функция которая просто останавливает приложение, не обрабатывая ошибку - это рак. Как минимум, ассерт в одном из потоков приложения тут же положит все остальные 100500 потоков. И из-за какой-то милипиздрической ошибки, все 100500 людей ожидающих ответа на свой запрос, обломаются. А если эти треды там что-то писали на жесткий диск - то данные покорраптятся. А если общались с оборудованием - оно можно повиснуть или сгореть. За ассерты в C++ коде нужно сразу же увольнять

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

В Питоне, емнип, бросается исключение AssertError (или что-то подобное). В Расте есть макры (assert_eq популярен), но их в основном для тестов используют.

За ассерты в C++ коде нужно сразу же увольнять

Сурово. Можно же просто побить, пряником.

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

За ассерты в C++ коде нужно сразу же увольнять

Ой, пошла народная забава: выбери единственно верное подмножество цепепе. За исключения нужно сразу увольнять, атата! За голые указатели нужно сразу увольнять, бубубу! И далее 100500 фич, которые есть в цепепе, но юзать низзя. Вот это именно делает цепепе говном, а не какой-то там синтаксис.

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

Вы так говорите, будто типы в сигнатуре вам только мешают

Они не мешают, но уточняют. И определённо я хочу увидеть название функции раньше, чем std::vector<std::string>.

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