FreeBasic
Главная
Вход
Регистрация
Четверг, 28.03.2024, 20:51Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Freebasic » Вопросы по языку FreeBasic » Вопросы про компиляцию и компилятор
Вопросы про компиляцию и компилятор
ТесторДата: Понедельник, 26.03.2018, 17:23 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Offline
В общем возник интерес к фреебасику, хочу задать немного глупых вопросов, если вы не против.

1. Я там с гуглом транслитом напару чаво на офсайте почитал, вычитал примерно следующее:
Цитата
Могу ли я программировать приложения GUI в FB? Да, ты можешь. Заголовки, позволяющие вам вызывать GUI API для Windows и Linux, поставляются с соответствующими версиями, но программы, сделанные таким образом, не переносимы.
~
и т. д.

что означает эта непереносимость? Собраная на одном ПК программа не запустится на другом? Как такое может быть? В чём причина? Или о чём речь?

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

3. Он поддерживает наследование от пользовательских классов? Когда я могу выстраивать дерево (иерархию) классов, создавать разных потомков от базового класса?

4. Если фреебасик имеет объектноориентированную модель, почему во всех источниках написано что он является наследником кубасика, который если меня не сильно подводит склероз ничего подобного не имел?

5. Насколько геморойно в нём создать полноценный ГУИ (интересует под линукс)? Окно, табы, фреймы, динамическое создание/уничтожение?

6. Я там в примеры к компилятору заглянул, есть вроде даже какие то демки под ГТК3 (сейчас протестить не могу)... насколько он поддерживает данный тулкит?


Сообщение отредактировал Тестор - Понедельник, 26.03.2018, 17:26
 
haavДата: Понедельник, 26.03.2018, 18:42 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Привет!

Цитата
что означает эта непереносимость? Собраная на одном ПК программа не
запустится на другом? Как такое может быть? В чём причина? Или о чём
речь?

Это означает непереносимость кода программы с одной платформы на другую (например с Windows на Linux). Например используя функции WinAPI , программа будет работать на любой Windows , но не будет работать на Linux. Если необходим кроссплатформенный код, нужно использовать соотвествующие библиотеки (GTK , IUP , FLTK , WX-C)

Цитата
2. Как я понял фреебасик поддерживает написание классов. Могу ли я создать
своего рода библиотеку кода в отдельном файле/файлах, которые в
последствии буду подключать к пишушейся программе, создавать и
использовать объекты классов?

Да

Цитата Тестор ()
3. Он поддерживает наследование от пользовательских классов? Когда я могу выстраивать дерево (иерархию) классов, создавать разных потомков от базового класса?

Поддерживается простое наследование , множественное наследование не поддерживается

Цитата Тестор ()
4. Если фреебасик имеет объектноориентированную модель, почему во всех источниках написано что он является наследником кубасика, который если меня не сильно подводит склероз ничего подобного не имел?

freebasic изначально не имел ООП .  Она была внедрена несколько лет назад. Язык не заставляет писать в каких-то рамках. Хочешь пиши в стиле QBASIC (но там много ограничений), хочешь пиши в процедурном стиле (как в чистом СИ ), хочешь используй ООП

Цитата Тестор ()
5. Насколько геморойно в нём создать полноценный ГУИ (интересует под линукс)? Окно, табы, фреймы, динамическое создание/уничтожение?

В принципе используя GTK , IUP , FLTK писать несложно. Сразу скажу , что таких сред , как lazarus в freepascal у freebasic нет. То есть весь код придется прописывать вручную , мышкой формошлепничать не получится smile Конечно для каких-то тулкитов вроде wx-c есть что-то похожее на визуальную растановку виджетов , но у меня как-то не заладилось все это (не понравилось).
Цитата Тестор ()
6. Я там в примеры к компилятору заглянул, есть вроде даже какие то демки под ГТК3 (сейчас протестить не могу)... насколько он поддерживает данный тулкит?

GTK3 поддерживается. Если дружишь с Linux , настроить работу freebasic и GTK думаю сможешь.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ТесторДата: Понедельник, 26.03.2018, 18:59 | Сообщение # 3
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Offline
Цитата haav ()
Цитата2. Как я понял фреебасик поддерживает написание классов. Могу ли я создать
своего рода библиотеку кода в отдельном файле/файлах, которые в
последствии буду подключать к пишушейся программе, создавать и
использовать объекты классов? Да.


А я тут дальше пока на оф сайте копаю... и наткнулся что классы ещё не реализованны:
https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgClass

Это как надо понимать? И если это уже есть, то где посмотреть синтаксис?

Цитата haav ()
Поддерживается простое наследование , множественное наследование не поддерживается

Поясни пожалуйста для чайника, что это значит?

Цитата haav ()
freebasic изначально не имел ООП . Она была внедрена несколько лет назад. Язык не заставляет писать в каких-то рамках. Хочешь пиши в стиле QBASIC (но там много ограничений), хочешь пиши в процедурном стиле (как в чистом СИ ), хочешь используй ООП

Писать что это идейный наследник кубасика плохо в маркетинговом плане, отталкивает если... то биш мы практически визуалбасик имеем (?), а информация (реклама) для некрофилов.

Цитата haav ()
То есть весь код придется прописывать вручную , мышкой формошлепничать не получится smile

Ну это я уже уловил.

Цитата haav ()
GTK3 поддерживается. Если дружишь с Linux , настроить работу freebasic и GTK думаю сможешь.

А чего настраивать надо? Я там так понил dev'ки используемых библиотек поставить надо..., что то ещё?

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

Признаюсь кубасик было очень давно и сейчас смотрю на на фреебасик как баран на новые ворота, что то даже структуру файла ничерта не понимаю, не понимаю откуда выполняется программа. И по справке лазию не отвечает она на мои вопросы... не дадите пару наводок, советов как после паскаля, въехать в базовые принципы?
 
haavДата: Понедельник, 26.03.2018, 19:19 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата Тестор ()
А я тут дальше пока на оф сайте копаю... и наткнулся что классы ещё не реализованны:https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgClass

Это как надо понимать? И если это уже есть, то где посмотреть синтаксис?

Ключевое слово Class не реализовано , вместо него используется ключевое слово Type . Вот здесь посмотри: http://users.freebasic-portal.de/freebasicru/simple_inheritance.html

Цитата
Поясни пожалуйста для чайника, что это значит?

цитата с вики:

Мно́жественное насле́дование — свойство, поддерживаемое частью объектно-ориентированных языков программирования, когда класс может иметь более одного суперкласса (непосредственного класса-родителя), интерфейсы поддерживают множественное наследование во многих языках программирования. Эта концепция является расширением «простого (или одиночного) наследования» (англ. single inheritance), при котором класс может наследоваться только от одного суперкласса.

Цитата
И по справке лазию не отвечает она на мои вопросы... не дадите пару
наводок, советов как после паскаля, въехать в базовые принципы?


справка , хоть и для не самой свежей версии , но в большинстве своем актуальна: http://users.freebasic-portal.de/freebasicru/helprus/00index.html

учебник: http://users.freebasic-portal.de/freebasicru/textbook.html


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
DarkDemonДата: Вторник, 27.03.2018, 09:12 | Сообщение # 5
Полковник
Группа: Друзья
Сообщений: 188
Репутация: -2
Статус: Offline
Цитата Тестор ()
Писать что это идейный наследник кубасика плохо в маркетинговом плане, отталкивает если... то биш мы практически визуалбасик имеем (?), а информация (реклама) для некрофилов.

Во-первых не QBasic, а QuickBasic, во времена DOS был QuickBasic Professional Development System (PDS)
В умелых руках(например демомейкерских) нагиб шёл по всем фронтам и этот ЯП уважали.
Во-вторых, как успел уже доказать всем пользователь the trick, Visual BASIC нагибает все ЯП, включая PB.
А в-третьих, кого это волнует, если ваш софт будет юзабелен. В рекламе нужно указывать свойства софта,
а не то, на чём он написан.


Сообщение отредактировал DarkDemon - Вторник, 27.03.2018, 09:16
 
ТесторДата: Вторник, 27.03.2018, 11:10 | Сообщение # 6
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Offline
Так уж сложилось, не дома я сейчас обитаю и интернета в свободное время нет... тока на работе, но на работе нет моего ПК... только служебный с Виндовс. В общем засада до выходных по человечески потыкать палочкой фреебасик не выйдет.

Вчера вечерком на шару попробовал компильнуть что то из демок:

Код
uzver@S9p ~/fb/bin$ ./fbc /home/uzver/fb/examples/GUI/GTK+/Gtk-3/customgtkwidget.bas
ld: cannot find -lgobject-2.0
ld: cannot find -lglib-2.0
ld: cannot find -lgtk-3
ld: cannot find -lgdk-3
ld: cannot find -lgio-2.0
ld: cannot find -lgmodule-2.0
ld: cannot find -lpango-1.0
ld: cannot find -lcairo
ld: cannot find -lgdk_pixbuf-2.0
ld: cannot find -lpangocairo-1.0
ld: cannot find -latk-1.0
ld: cannot find -lncurses


Я так понимаю он не нашёл дев пакеты... а может и каких то пакетов не нашёл. Не хило он так использует. Что порадовало, этот пример для ГТК3 не просит пакетов  от икса, то биш я так понимаю на вяленом скомпилированная программа будет выполняться без прокладки иксвайланд?

Но что мне тут интересно, я не стал запускать скрипт установки... да и не хотелось бы мне вообще его ставить куда там предписано, но там в комплекте поставки есть папка "include" в которой находится нечто вроде библиотеки кода..., и как я могу предположить она необходима для компиляции/сборки программы. Это так или  нет? Могу ли я использовать компилятор расположив его в удобном для себя месте и нужна ли эта библиотека кода?

Ещё вопрос, на форуме есть кто то, кто юзал компилятор под линукс и может поделится опытом?

Цитата DarkDemon ()
Во-первых не QBasic, а QuickBasic, во времена DOS был QuickBasic Professional Development System (PDS)В умелых руках(например демомейкерских) нагиб шёл по всем фронтам и этот ЯП уважали.
Во-вторых, как успел уже доказать всем пользователь the trick, Visual BASIC нагибает все ЯП, включая PB.

О господи... давайте только без религиозного фанатизма, во первых всё это бред, во вторых я ей богу атеист...

Цитата DarkDemon ()
А в-третьих, кого это волнует, если ваш софт будет юзабелен. В рекламе нужно указывать свойства софта,а не то, на чём он написан.

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


Сообщение отредактировал Тестор - Вторник, 27.03.2018, 11:15
 
haavДата: Вторник, 27.03.2018, 15:50 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата Тестор ()
Я так понимаю он не нашёл дев пакеты... а может и каких то пакетов не нашёл. Не хило он так использует. Что порадовало, этот пример для ГТК3 не просит пакетов от икса, то биш я так понимаю на вяленом скомпилированная программа будет выполняться без прокладки иксвайланд?

Я сейчас уже точно не помню, но вроде ставишь там типа Libgtk2.0-dev , Libgtk3.0-dev и все должно компилироваться нормально.


Цитата
Но что мне тут интересно, я не стал запускать скрипт установки... да и не
хотелось бы мне вообще его ставить куда там предписано, но там в
комплекте поставки есть папка "include" в которой находится нечто вроде
библиотеки кода..., и как я могу предположить она необходима для
компиляции/сборки программы. Это так или  нет?

папка "include" для включаемых файлов , в большинстве заголовки для библиотек (определения функций, констант и пр. )
папка "lib"  - сами библиотеки

Папка "lib" я думаю всегда необходима компилятору , а вот папка "include" при подключении библиотек.


Цитата
Могу ли я использовать компилятор расположив его в удобном для себя месте и нужна ли эта библиотека кода?

Собирай автономную версию компилятора из исходников и можешь хоть куда устанавливать компилятор. Версия от разработчиков предполагает , что компилятор будет в строго определенных каталогах (там по моему usr\local\ и usr\) . Я не пробовал , но даже версию от разработчиков наверное можно юзать из любой папки , только при компиляции придется указывать пути для папок "include" и "lib"


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ТесторДата: Вторник, 27.03.2018, 15:56 | Сообщение # 8
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Offline
Цитата haav ()
но даже версию от разработчиков наверное можно юзать из любой папки , только при компиляции придется указывать пути для папок "include" и "lib"

Примерно что то подобное я и предполагал. А как их указать при компиляции?

 haav, а ты пользовался им под линукс? Я никогда не программировал ГТК напрямую, поэтому немного испытываю неуверенность в этом вопросе, был бы рад с кем то пообщаться по возможности.
 
haavДата: Вторник, 27.03.2018, 16:23 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата Тестор ()
Примерно что то подобное я и предполагал. А как их указать при компиляции?

При помощи ключей: http://users.freebasic-portal.de/freebas....ne.html

 
Цитата
haav, а ты пользовался им под линукс?

Я не знаток GTK . При помощи GTK 2.0 я написал только одну несложную программу (переводчик типа Dicter , только под Linux).

Я бы советовал вместо GTK , лучше брать IUP для окошек , виджетов и пр. , тем более на начальном этапе кодинга.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ТесторДата: Вторник, 27.03.2018, 16:50 | Сообщение # 10
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Offline
Н да, ступаю туда куда ранее не лазил )))


Цитата
-i < name >
Добавить путь для поиска включаемых файлов
 Я так понимаю так я указываю путь до include?


Цитата
-p < name >
Добавить путь для поиска библиотек

А так до lib?
Этих путей может быть более одного? Допустим для поиска подключаемых файлов я могу прописать несколько путей?

Ещё вот это заинтересовало:

Цитата
fbc foo.bas bar.bas baz.bas


В каких случаях возникает необходимость отправлять по несколько файлов на компилятор?

Цитата
Я бы советовал вместо GTK , лучше брать IUP для окошек , виджетов и пр. , тем более на начальном этапе кодинга.</a>


Нет, весь интерес в ГТК и именно в ГТК 3.


Сообщение отредактировал Тестор - Вторник, 27.03.2018, 17:03
 
haavДата: Вторник, 27.03.2018, 17:25 | Сообщение # 11
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата Тестор ()
Цитата-i < name >
Добавить путь для поиска включаемых файлов
Я так понимаю так я указываю путь до include?


Цитата
-p < name >
Добавить путь для поиска библиотек

А так до lib?

Да

Цитата Тестор ()
Этих путей может быть более одного? Допустим для поиска подключаемых файлов я могу прописать несколько путей?

Можешь. Для каждого пути указывай соответствующий ключ. Типа -i путь1 -i путь2...
Может быть можно как-то через запятую или через пробел (типа -i путь1 , путь2), но я не пробовал.

Цитата
В каких случаях возникает необходимость отправлять по несколько файлов на компилятор?

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


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ТесторДата: Вторник, 27.03.2018, 17:31 | Сообщение # 12
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Offline
Цитата haav ()
При компиляции модулей , если это тебе о чем нибудь говорит.


Я никогда терминологией особо не владел, я может и понимаю (предпологаю) о чём речь, но не уверен. Если у меня программа состоит из нескольких файлов (модулей?), то следовательно есть главный модуль, а остальные к нему подключаются... если я укажу в путях для подключаемых модулей путь к проекту... мне всё равно надо все модули списком отправить на компиляцию?


Сообщение отредактировал Тестор - Вторник, 27.03.2018, 17:37
 
haavДата: Вторник, 27.03.2018, 17:50 | Сообщение # 13
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата Тестор ()
Я никогда терминологией особо не владел, я может и понимаю (предпологаю) о чём речь, но уверен. Если у меня программа состоит из нескольких файлов (модулей?), то следовательно есть главный модуль, а остальные к нему подключаются... если я укажу в путях для подключаемых модулей путь к проекту... мне всё равно надо все модули списком отправить на компиляцию?

Для компиляторов (по крайней мере для большинства из них ) нет такого понятия как "проект". Этот термин и его осуществление берет на себя IDE. Пути ты можешь указать для включаемых файлов (.bi или любых других расширений) и бинарных библиотек (.a , .so , dll). Однако указав путь , надо указать с другим ключем еще и имена файлов.
Для модульных (.bas), объектных файлов (.o),  имя с путем или без пути указывается с помощью соответствующих ключей.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ТесторДата: Среда, 28.03.2018, 11:01 | Сообщение # 14
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Offline
haav, прости немного запутался. Давай попробуем на конкретном примере.

Допустим, в папке: /home/u/ - прямо в корне лежат сам компилятор, lib и include.
В папке : /home/u/d/ - лежит проект (хотя компилятор не знает, что это проект), который состоит допустим из файлов gm.bas, dop1.bas и dop2.bas, gm является основным модулем dop1 и 2 подключены к нему в коде.

Тогда команда на компиляцию "проекта" будет выглядеть:

Код
/home/u/fbc -m gm -i /home/u/include -p /home/u/lib /home/u/d/gm.bas /home/u/d/dop1.bas /home/u/d/dop2.bas


А команды:

Код
/home/u/fbc -m gm -i /home/u/include  -i /home/u/d/ -p /home/u/lib /home/u/d/gm.bas


будет недостаточно даже если файлы dop1.bas и dop2.bas прописаны в точке вхождения в файле gm.bas?

Цитата haav ()
Пути ты можешь указать для включаемых файлов (.bi или любых других расширений) и бинарных библиотек (.a , .so , dll). Однако указав путь , надо указать с другим ключем еще и имена файлов.Для модульных (.bas), объектных файлов (.o), имя с путем или без пути указывается с помощью соответствующих ключей.


Или компиляция этого проекта может иметь иной вид? О каких ключах идёт речь?


Сообщение отредактировал Тестор - Среда, 28.03.2018, 11:02
 
haavДата: Среда, 28.03.2018, 15:44 | Сообщение # 15
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата Тестор ()
haav, прости немного запутался. Давай попробуем на конкретном примере.Допустим, в папке: /home/u/ - прямо в корне лежат сам компилятор, lib и include.
В папке : /home/u/d/ - лежит проект (хотя компилятор не знает, что это проект), который состоит допустим из файлов gm.bas, dop1.bas и dop2.bas, gm является основным модулем dop1 и 2 подключены к нему в коде.

Как подключены? Если через оператор #INCLUDE с указанием пути , то будет работать вариант:


Код
/home/u/fbc -m gm -i /home/u/include  -i /home/u/d/ -p /home/u/lib /home/u/d/gm.bas

По сути подключая через #INCLUDE , ты просто разделяешь исходник , а компилятор перед компиляцией его соединит в одно целое (скопирует текст dop1.bas и dop2.bas и поместит его в gm.bas).

А если ты файлы dop1.bas и dop2.bas используешь как независимые модули , то только первый вариант:


Код
/home/u/fbc -m gm -i /home/u/include -p /home/u/lib /home/u/d/gm.bas /home/u/d/dop1.bas /home/u/d/dop2.bas


Цитата
Или компиляция этого проекта может иметь иной вид? О каких ключах идёт речь?

Вместо оператора #include в коде, можно использовать ключ -include в консоли\терминале. Тоже самое для библиотек , вместо подключения в коде с помощью #inclib , можно использовать ключик -l

P.S. Чтобы не заморачиваться со всей этой требухой с консолью , проще взять IDE (например poseidonFB) . Там есть возможность создавать проекты. Хотя изучить данный вопрос (компиляция в консоли\терминале) будет не лишним.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Freebasic » Вопросы по языку FreeBasic » Вопросы про компиляцию и компилятор
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: