LINUX.ORG.RU

Мои проги на PureBasic

 


4

5

Если у кого есть желание ознакомится можете скачать архив прог (53Мб), в комплекте общая справка по прогам в CHM со скриншотами. Можно посмотреть её в онлайн

В комплекте исходники и можно их скомпилировать. Для Linux собраны 3 варианта пакетов deb (Mint-x64 и MX-x86), rpm (Fedora), zst (Arch), и исполняемые для Raspberry-x32, и есть отдельно архив для Андроида Можете посмотреть видео о PureBasic на моём ютуб канале


Ответ на: комментарий от wandrien

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

MOPKOBKA ★★★★★
()

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

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

Спасибо.

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

Я же специально уточнил «для любого опытного Си-программиста».

Я Си-программист с нулевых.

Хотя, возможно, что-нить типа

Перловку уже изобрели, ты опоздал.

Я же прямым текстом расписал, что там непонятного то? Ещё раз напишу: экономлю свою память и своё внимание. Зрительный мусор их жрёт не принося взамен ничего.

Экономишь своё внимание тем, что переиспользуешь одно и то же имя в разных значениях? Ну оригинально.

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

Я Си-программист с нулевых.

Я и не про тебя писал. Или ты хочешь сказать что ты тоже запутаешься в этой одной строчке?

Перловку уже изобрели, ты опоздал.

По-моему не похоже.

Экономишь своё внимание тем, что переиспользуешь одно и то же имя в разных значениях? Ну оригинально.

Тем, что на экране видны концентрированно осмысленные символы без отвлекающих и засоряющих элементов.

Ладно, я допускаю идею что структура мыслительной деятельности при кодинге у людей бывают разная и кому-то удобнее детальный синтаксис а кому-то надо наоборот покороче. Хотя мне и сложно понять как может осознанно выбираться первое.

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

Хотя мне и сложно понять как может осознанно выбираться первое.

А мне легко.

Я тот человек, который писал херню типа

if (что-то) foo(), bar(), baz();

а потом понял, что это реально херня.

Поэтому «лаконичным кодом» меня не удивить, я повидал в жизни некоторое дерьмо.

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

Тем что когда ты смотришь на y = foo(x) то верхний int не засоряет поле зрения - он не часть алгоритма и для его анализа в целом не нужен. Хотя, изредка, бывают ситуации когда неправильный тип приводит к изменению работы проги, а ещё реже - всё это происходит без варнингов от компилятора про сомнительный автокаст, но это редко и польза от отсутствия лишних букв перевешивает.

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

Вот что я вижу когда смотрю 100 строку условно:

Твой вариант:

struct ns_some_struct *x = ns_get_err(A);
if (x) {
  return 0;
}

struct ns_some_struct *y = ns_get_err(B);
if (y) {
  return 0;
}
Мой вариант:
if ((x = ns_get_err(A)) || (y = ns_get_err(B))) {
  return 0;
}
Где то выше в моем варианте объявляются переменные, но когда я смотрю на строку 100 и ниже, я вижу только код.

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

Вот что я вижу когда смотрю 100 строку условно:

У тебя на последней строчке алгоритма x и y заведомо равны NULL, а следовательно переменные не нужны вовсе.

if (ns_get_err(A) || ns_get_err(B)) {
  return 0;
}
wandrien ★★★
()
Ответ на: комментарий от wandrien

Ну ладно, тогда переделаю и немного улучшу, что бы более наглядно показать разницу, вот твой подход как я понял:

const struct ns_some_struct_gnome_style *x = ns_get_err(A);

{
  int c;
  ns_get_level(A, &c);
  if (x == NULL && c == 10) 
    return 0;
}

const struct ns_some_struct_gnome_style *y = ns_get_err(B);

{
  int c;
  ns_get_level(B, &c);
  if (y == NULL && c == 15) 
    return 0;
}
А это мой «плохой подход» где переиспользуются переменные и все такое:
ns_get_level(A, &c);
if ((x = ns_get_err(A)) == NULL && c == 10) 
  return 0;

ns_get_level(B, &c);
if ((y = ns_get_err(B)) == NULL && c == 15) 
  return 0;

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

if (что-то) foo(), bar(), baz();

А я вот прям вчера испробовал новый приём - запятая внутри части логического выражения условия if-а

if(dirnotexist && (mkdirat(sdfd,"certs",0755),mkdirat(sdfd,dn,0755))<0) return -3;
и кажется он весьма удобный.

Просто запятая внутри if-а давно уже была в таком:

while(errno=0,de=readdir(dp))

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

И? Ты используешь эти x и y далее в коде?

Если да, то засовывать присваивание им значений внутрь условия if — дурной тон.

Первый вариант лучше читается, однозначно.

Здесь весь код очевиден в точке чтения и не требует себя расшифровывать. Тут написано «создаётся имя, которое обозначает вот такую штуку».

А второй вариант заставляет через себя продираться.

if, внутри которого &&, внутри которого сравнение, внутри которого присваивание.

Точно ли автор имел в виду присваивание? А точно ли он хотел присваивать x? А использовалось ли x ранее? Не требуется ли освободить память, занятую x?

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

Знания, которые знает только один человек не существуют. ?

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

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

Вот что там было, когда я говорил, что это лучше читается:

const struct ns_some_struct_gnome_style *x = ns_get_err(A);
if (x == NULL && c == 10) 
  return 0;

const struct ns_some_struct_gnome_style *y = ns_get_err(B);
if (y == NULL && c == 15) 
  return 0;
wandrien ★★★
()
Ответ на: комментарий от wandrien

И чем больше у тебя мусорных имён болтается в пространстве имён бесконтрольно

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

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

например, gettext.

Она оптимизировано работает?, Вроде как я уже где то это обсуждал, поиск перевода по всей строке в противовес индексу. Может когда-то дорасту.

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

СМЫСЛУ, потому что внезапно смысл одно и того же имени в разных точках функции РАЗНЫЙ

я в таких случаях даю имя переменной «tmp», что означает просто кеш, в котором временной хранится что-то не плодя новых имён переменных. При условии однопоточного кода.

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

На самом деле CHM отличная задумка. Там и поиск и навигация, жмёт отлично. И полноценной замены–то на самом деле нету. По крайней мере в среде Окон. Другое дело что пихать CHM линуксоидам это как минимум некрасиво.

На программах выложенных в Github тренируют нейронки? Может человек не хочет.

Сайт нормальный. Текст хорошо читается, картинки показываются. Работает даже в IE 8. Или нужны мегабайты скриптов и серые буквы на страницах с километровыми отступами?

BASIC не хуже многих и уж точно лучше некоторых.

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

Она оптимизировано работает?

А какая разница? Это не является горячей точкой программы, так что плевать, как оно работает.

Ни разу не видел, чтобы gettext() был горячей точкой в профилировщике и не представляю, как именно надо написать программу, чтобы такое получить.

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

выразил мнение о Qt - либо бесплатная прога, либо плати лицензию 300 тыс. в год.

Откуда вы такую чушь берёте? Почитай, что в LGPL написано хотя бы.

P.S. А программы по ссылке из ОП не бесплатные разве? :)))

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

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

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

например, gettext.

Она оптимизировано работает?

Она работает удобно для программиста и переводчика. А для пользователя работает незаметно.

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

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

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

Про «знания» расскажу немножко.

В тридцатые года во время коллективизации парней посылали на курсы трактористов.
На курсах изучали: устройство трактора, вождение, …
На экзаменах один из новоиспечённых трактористов, получивший пятёрку спрашивает экзаменатора.

  • Можно я вам вопрос задам?
  • Спрашивай.
  • Я всё ПОНЯЛ лишь одного не понял - «Куды в трактор кобылу впрягать?».

У большинства людей именно такие «знания».
Форум подтверждает это очень хорошо.

anonymous
()
Ответ на: комментарий от AZJIO
  1. Какой чел?

  2. Если он написал именно то, что ты, слово в слово — то он просто врёт. Но может, и ты что-то напутал.

  3. «Оскорбляющие эпитеты» — это «чушь», что ли? Так это характеристика высказывания, а не человека.

P.S. А вот выше по теме пишут, что PureBasic вообще имеет ограничение на количество строк кода в бесплатной версии. Это правда?

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

P.S. А вот выше по теме пишут, что PureBasic вообще имеет ограничение на количество строк кода в бесплатной версии. Это правда?

Ну, мнение AZJIO мы тут уже видели: Да, «ограничение 800 строк и запрет использования API и запрет компиляции библиотек в бесплатной версии.», а также «Цена вашей работы может стоить сотни тысяч, поэтому лучше отдать недельный зароботок <…> и потом не мучится».

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

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

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

Я сильно удержусь и промолчу.

Для меня стало открытием, что существуют такие языки в 2025, среды, и активное сообщество авторов, которые пилят на них велосипеды с квадратными колёсами, которые давно уже изобретены.

Спасибо ТС, расширил горизонты.

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

У меня только две версии. Либо есть какая-то область, где эти языки и платные компиляторы объективно удобнее (я таких областей не знаю). Либо просто чему и на чем учили в школе, тем и пользуются. Переучиваться на современный инструментарий лень «а зачем, работает же», «мне неудобно городить костыли, чтобы сделать поведение в других средах таким же, как в моем любимом динозавре».

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

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

А тут-то речь вроде как о полноценном использовании Бейсика, даже с какими-то мыслями о перспективах. Хотя какие могут быть перспективы у Бейсика. Он свое давно отжил.

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

Это коммерческая лицуха. Ты можешь или купить Qt, тогда его выдадут тебе под лицухой, что не имеет ограничений LGPL, или ты можешь бесплатно взять его под LGPL – двойное лицензирование. Как думаешь KDE появился? Они его не покупали.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от hobbit

Какой чел?

C++/Qt: пора валить?. - тут именно про 300 тыс. О лицензиях Qt (и немного о компании) - тут ещё о деталях. Не помню где ещё читал, специально, перед тем как кинуться в рутину, но сложилось устойчивое мнение, что они следят, чтобы их работа была оплачена.

«Оскорбляющие эпитеты» — это «чушь», что ли? Так это характеристика высказывания, а не человека.

Высказывание это и есть результат человека. Вы можете назвать это ложью, но не чушью. Могу ли я ограничивать кого-то в свободе слова, как это назвать? Но ведь у меня тоже возникает разнообразие эпитетов читая посты.

AZJIO
() автор топика
Ответ на: комментарий от u-235

HTML Help Workshop

Да, это точно, есть ещё htm2chm, который жмёт лучше, на 20%. Вы минусанули, поэтому отвечаю, конечно в Readme она (прога) упомянута, но я как всегда даю по максимому, готовые проекты (*.hhp), скрипты, из которых можно вытащить ком-строку, плюс скрипты обработки опечаток текста, плюс скрипты перевода в UTF-8 для сайта, плюс скрипты обработки кода, но последнее требует знания языка скриптов, так как там уже сложный парсинг. Также скрипты генератор Index.hhk из Table of Contents.hhc, генератор html аналога Index.hhk и аналога Table of Contents.hhc.

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

Для меня стало открытием, что существуют такие языки в 2025

А что мало языков где авторы требуют оплаты? Полно. Но если вы собираетесь писать движок GUI да ещё на разных ОС, может вы к концу жизни и напишите. Либо будете использовать чей-то модуль, который будет в ОС тащить 40 и более мегабайт. Помню кто-то автору PureBasic сказал про С++, он ему ответил, так там же несколько ключевых слов и функций, то есть по сути все функции писать надо самому. Допустим в PureBasic 3000 кроссплатформенных функций, вот их все надо писать самому, чтобы начать писать прогу.

Другой человек написал, спасибо автору что устраняет нам необходимость писать эти функции самому.

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

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

А по поводу кроссплатформенных гуев, уже несколько кальп существуют компактные библиотеки для отрисовки, гитхаб полнится ими. Начиная с того же tk.

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

Хорошо бы конечно приводить ссылки кто кому что сказал

Fred

Начиная с того же tk

Это Tkinter что ли? В 2014 году когда изучал питон, пробовал изучать этот движок GUI и он так плохо работал и так плохо выглядел, что …

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

… то есть по сути все функции писать надо самому. Допустим в PureBasic 3000 кроссплатформенных функций, вот их все надо писать самому, чтобы начать писать прогу.

Как-то разработал паучок для MSDN, который проанализировал всеразделы и для каждого из них сгенерировал хедеры и исходники
обвёрток (в т.ч. и для интерфейсов).
За пару недель управился (но не всю жизнь).
Здесь главное не ленится и не ждать от кого-то халявы.

anonymous
()