LINUX.ORG.RU

Gram 3.3.0

 , , ,


0

3

После почти месяца разработки состоялся выпуск 3.3.0 IDE и редактора кода Gram — форка Zed (linux.org.ru). Проект написан на языке Rust и распространяется по лицензии GNU GPL 3.

Проект начинался не с идеи создания идеального редактора, а как реакция на то, что происходило и происходит в мире разработки программного обеспечения, в мире в целом, а также в таких редакторах, как VS Code, Zed и Vim. Основная идея проекта заключается в том, что писать код от руки, тщательно следя за процессом, — это правильно и хорошо, и Gram стремится стать хорошим инструментом именно для этого.

Gram появился как сильно переработанный форк редактора Zed. Цель автора проекта — сделать так, чтобы Gram стал редактором, который сможет скачать, установить и использовать «из коробки» любой, кто впервые пробует себя в программировании. Не нужно будет настраивать редактор или устанавливать расширения, а сам редактор не должен предлагать пользователю что-то потенциально вредоносное, отвлекающее или сбивающее с толку.

Основные отличия от Zed:

  • открытость: отсутствие телеметрии, «искусственного интеллекта» и сторонних интеграций, нарушающих конфиденциальность;
  • производительность: основное внимание уделяется помощи в решении задач программирования, а не трате ресурсов центрального и графического процессоров на взаимодействие с сервисами «искусственного интеллекта», отправку нажатий клавиш на сервер компании в США или убеждение пользователя оформить подписку;
  • интеграция: документация Gram включена прямо в редактор. В долгосрочной перспективе планируется добавить поддержку большинства языков без использования расширений.

Почему автор создал форк? (более подробное объяснение / разглагольствования на эту тему см. в заявлении о миссии).

На этот вопрос можно ответить по-разному:

  • интересно было узнать больше о том, как использовать Rust для серьёзных проектов;
  • искал альтернативу VS Code для своих студентов;
  • не мог согласиться с условиями использования;
  • считает, что интеграция «искусственного интеллекта» в редактор кода — плохая идея;
  • «ИИ» его злит;
  • злость его мотивирует.

Основные изменения в этой версии:

  • добавлены действия Toggle во все боковые панели;
  • показ количества добавленных и удалённых строк и их общее количество на панели git, в зависимости от настройки git_panel.diff_stats;
  • добавлен фильтр выбора ветки git для отображения всех, локальных или удалённых веток;
  • добавлено действие git::ToggleFillCommitEditor для расширения редактора коммитов, чтобы он заполнял всю панель git. Выполняется при Alt-Shift-Esc;
  • добавлен просмотр истории git как для директорий, так и для текущего состояния;
  • добавлено действие git:show history;
  • добавлена поддержка загрузки системных расширений из GRAM_SYSTEM_EXTENSIONS_DIR;
  • частично убрана поддержка HTML в предварительном просмотре Markdown;
  • из git crate убрано получение аватаров;
  • убрано использование закрытых API MacOS и прекращена поддержка MacOS < 12;
  • использование cosmic-text вместо font-kit для выбора шрифта;
  • изменены цвета темы ferra;
  • добавлен просмотр истории при нажатии на последний коммит в панели git;
  • в историю коммитов добавлены открытие коммитов в соседнем сплите и открытие вкладки предварительного просмотра;
  • также исправлены многие ошибки.

>>> Документация
>>> Исходный код на codeberg.org

>>> Подробности на gram-editor.com

★★★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 6)

Основная идея проекта заключается в том, что писать код от руки, тщательно следя за процессом

Gram появился как форк редактора Zed

A code editor for humanoid apes and grumpy toads

Яснопонятно. Спасибо, заверните обратно.

Gonzo ★★★★★
()

«ИИ» его злит;

Понятно. Редактор для ИИ-фобов.

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

Ну, вообще-то телеметрия в приличном обществе подключается только при письменном согласии потребителя. Там не будет написано, что мол «напихаем тебе зондов по самые гланды», а что-то типа «сбор статистической обезличинной информации с целью улучшения качества продукции». А как ещё иначе понять, как улучшать UX/IU? Одних специалистов конторы может быть недостаточно, потому что они знают слишком много о системе и их мнение субъективно.

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

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

Вопрос риторический – никак

 тут, пожалуй, риторический уже ответ :o)

sunjob ★★★★★
()

Решил попробовать zed, теперь у меня вопрос — как отключить замену != на ≠ в редакторе? И кому вообще пришла в голову мысль, что такая замена это хорошая идея.

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

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

Shadow ★★★★★
()

Основная идея проекта заключается в том, что писать код от руки, тщательно следя за процессом, — это правильно и хорошо

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

Vit ★★★★★
()
Последнее исправление: Vit (всего исправлений: 1)

У нас в Linux когда-нибудь появится вменяемый консольный редактор, а не тот инопланетный зоопарк, который мы с вами 30 лет наблюдаем?

Нафига писать очередной GUI редактор, их и так есть легион, и слава богу из них есть что выбрать.

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

У нас в Linux когда-нибудь появится вменяемый консольный редактор, а не тот инопланетный зоопарк, который мы с вами 30 лет наблюдаем?

нет. потому как «сообщество» в состоянии только развивать «пиписькометр» и поднимать вой и ор.

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

а как-же софт для измерения «пиписьек», базы данных, телеметрия, рассылка, собщестов фанатов... ?!!! (для продвижения этих самых «пиписьек»...) :о)

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от PPP328

Побуду вангой. Потому что авторы разучились делать интерфейсы в виде нативных контролов и там под капотом браузер, который рендерит весь UI.

Вот как-то решили мы быстренько мелкую приложушку на шарпе ~3-5мб сделать кросс-платформенной, взяли Авалонию и получилось сильно больше 100мб )))))))))

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

Это лигатуры ж, их можно отключить:

"buffer_font_features": {
    "calt": false // Disable ligatures
  },
Keleth
()

А я правильно помню, zed - это же такая хреновина, которую скачиваешь как бинарник, запускаешь, тыкаешься посмотреть, а потом обнаруживаешь в хомяке бегущую nodejs, обмазанную хрен знает чем в три слоя?

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

быстренько мелкую приложушку на шарпе ~3-5мб

Если не ныть «ататата коммитов 15 лет не было» и взять напильник, можно было wx.net прикрутить.

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

Причём, как я понимаю, там основная боль - собрать либу из wxwidgets (который свежий и вполне апстрим), остальное просто враппер для c#, и можно только на используемые виджеты актуализировать.

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

Если не ныть «ататата коммитов 15 лет не было» и взять напильник, можно было wx.net прикрутить.

Я уж и забыл про wxWidgets, а помнится в 2009-2011 я с ними игрался на С++, прикольная штука))))

Ночная сборка Code::Blocks у меня тогда стояла, и glut еще использовал, чтоб модельки порисовать не напрягаясь на опенгл, ностальгия))))

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

собрать либу из wxwidgets

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

Потому видать сразу и не вспомнилось(((

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

Я для wx.net не собирал, просто помню, что сама wx достаточно простая объектная библиотека, поэтому врапперы под всё достаточно высокоуровневое есть, и сама она не сильно меняется.

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

10 килобайт

у меня даже на асм и c не получилось 10 кб на моей машине (минимум (или максимум?) 17кб), а ты от растишки такое просишь

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

у меня бинарник собранный также как и у вас весит 165kb, правда я под apple arm и zig у меня 0.16.0, может в мастер сборке поменьше будет

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

А что есть вменяемый консольный редактор? Есть vim, emacs...из последнего на что я наткунался hx(helix-editor) - последний мне кажется очень даже годным :)

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

А что есть вменяемый консольный редактор? Есть vim, emacs

Ну, вот. Сами всё знаете.

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

Удобство, и я им как основным пользуюсь с 2017 года, так бы на zed перешёл, но у него несколько проблем, это неудобный интерфейс (панели не так гибко настраиваются, супермелкие и слабо различимые кнопки, моменты по UI очень спорные, вроде поиска, интеграции гит), корявые jupyter ноутбуки, ИИ не все удобно встроены и их конфигурация это большая боль, не все полезные расширения есть. Есть и детские болячки вроде крашей, думаю через полгода-год будет в этом плане ок.

ac130kz ★★★
()
Последнее исправление: ac130kz (всего исправлений: 2)
Ответ на: комментарий от jsoncpp

покажи мне бинарник собраный растом весящий 10 килобайт

Размер бинарника Hello world https://github.com/johnthagen/min-sized-rust/tree/main/no_std/nix немного больше 4кб:

$ RUSTFLAGS="-Zlocation-detail=none" cargo +nightly build --release
$ stat --format=%s target/release/min-sized-no_std
4464
$ ./target/release/min-sized-no_std
Hello, world!
No ★★★
()
Ответ на: комментарий от No

у меня весит 14кб, но не важно. неплохо. хотя полезных программ таких много не напишешь

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

Я в недоумении. Вот, вы говорите,

Удобство

а ещё говорите:

неудобный интерфейс

корявые jupyter ноутбуки

конфигурация это большая боль

не все полезные расширения есть

детские болячки вроде крашей,

тормозной, кривой рендеринг шрифтов, жрет много ресурсов почем зря

По сравнению с чем вот это вот считается «удобством»? Вас предыдущий редактор током бил за опечатки или что? Иной раз выглядываешь из своего уютненького emacs-мирка, и прям не знаешь, что и сказать.

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

А что есть вменяемый консольный редактор? Есть vim

Который пищит, портит текст, а чтобы из него выйти надо читать книгу https://i.imgur.com/yqy3sJ2.png

emacs

Который перед работой нужно месяц настраивать и изучать язык конфигов

hx(helix-editor) - последний мне кажется очень даже годным

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

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

а ну и вобще эти 14 килобайт при динамической линковке, не считается

src/main.rs

#![no_std]
#![no_main]

#[macro_use]
extern crate sc;

const MSG: &'static str = "Hello, world!\n";

#[unsafe(no_mangle)]
fn main() {
    unsafe {
        syscall!(WRITE, 1, MSG.as_ptr(), MSG.len());
        syscall!(EXIT, 0);
    }
}

#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
    loop {}
}

Cargo.toml

[package]
name = "min-sized-no_std"
version = "0.1.0"
edition = "2024"
license = "MIT"

[dependencies]
sc = "0.2.7"

[profile.dev]
panic = "abort"

[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"
strip = true
$ RUSTFLAGS="-Z location-detail=none -C link-arg=-nostartfiles -C link-arg=--entry=main -C target-feature=+crt-static" cargo +nightly build --release
$ file target/release/min-sized-no_std
target/release/min-sized-no_std: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped
$ stat --format=%s target/release/min-sized-no_std
2048
$ ./target/release/min-sized-no_std
Hello, world!
No ★★★
()
Ответ на: комментарий от jsoncpp

не статика - не интересно

Вот еще вывод ldd, если вывода file было недостаточно:

$ ldd target/release/min-sized-no_std
        statically linked
No ★★★
()
Ответ на: комментарий от dataman

turbo

Я им пробовал пользоваться, но у него нет выхода из редактора по ESC.

Я даже влез в исходники, сделал выход по ESC, но после этого и закрытие окошечек, и отмена поиска стали вызывать закрытие программы. Чтобы этого не происходило, там всю подсистему обработки клавиш нужно перелопачивать, а это выше моего понимания.

Ну и плюс там есть глюк: выделение и копирование текста работает ровно до тех пор, пока ты это делаешь клавиатурой. Стоит тебе выделить текст в терминале мышкой и скопировать его, то все: копирование клавиатурой отрубается. Что они там понамудрили - для меня загадка.

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

у меня все равно не собралось

Для -Z location-detail=none нужна nightly-версия, но можно собирать и без этого флага:

RUSTFLAGS="-C link-arg=-nostartfiles -C link-arg=--entry=main -C target-feature=+crt-static" cargo build --release
No ★★★
()
Ответ на: комментарий от No
 nix RUSTFLAGS="-Z location-detail=none -C link-arg=-nostartfiles -C link-arg=--entry=main -C target-feature=+crt-static" cargo +nightly build --release
   Compiling libc v0.2.137
error: linking with `/usr/bin/clang` failed: exit status: 1
  |
  = note:  "/usr/bin/clang" "-m64" "/home/tho/dev/rs/min-sized-rust/no_std/nix/target/release/build/libc/68e373875b198acb/out/rustcM77u9l/symbols.o" "<2 object files omitted>" "-Wl,--as-needed" "-Wl,-Bstatic" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libstd-*,libpanic_unwind-*,libobject-*,libmemchr-*,libaddr2line-*,libgimli-*,libcfg_if-*,librustc_demangle-*,libstd_detect-*,libhashbrown-*,librustc_std_workspace_alloc-*,libminiz_oxide-*,libadler2-*,libunwind-*,liblibc-*}.rlib" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-lgcc_eh" "-lgcc" "-lc" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{librustc_std_workspace_core-*,liballoc-*,libcore-*,libcompiler_builtins-*}.rlib" "-L" "/home/tho/dev/rs/min-sized-rust/no_std/nix/target/release/build/libc/68e373875b198acb/out/rustcM77u9l/raw-dylibs" "-Wl,-Bdynamic" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/tho/dev/rs/min-sized-rust/no_std/nix/target/release/build/libc/68e373875b198acb/out/build_script_build" "-Wl,--gc-sections" "-static-pie" "-Wl,-z,relro,-z,now" "-Wl,--strip-all" "-nodefaultlibs" "-nostartfiles" "--entry=main"
  = note: some arguments are omitted. use `--verbose` to show all linker arguments
  = note: clang: error: unknown argument: '--entry=main'
          

error: could not compile `libc` (build script) due to 1 previous error
101 nix 
jsoncpp
()
Ответ на: комментарий от Xintrea

Ну и плюс там есть глюк: выделение и копирование текста работает ровно до тех пор, пока ты это делаешь клавиатурой. Стоит тебе выделить текст в терминале мышкой и скопировать его, то все: копирование клавиатурой отрубается.

На свежем не смог повторить. Но я обновил git-субмодули на самые последние.

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

Так это от многих факторов зависит: какое DE (у меня LXDE), какая консоль (у меня Konsole), как настроен терминал (у меня так (webhamster.ru)).

Xintrea ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.