BASIC[ProjectYaga]Форум

Рождение (2 стр)

Страницы: 1 2 3 Следующая »
#15
10:27, 19 апр 2021

Спасибо, но Си - нет, я на плюсах
вставки всякие, ассеблерные, макросы(что упрощает кросскомпиляцию) - всё есть в плюсах
Режим совместимости с Qbasic. - изначально был не интересен

я выбрал свой подход ради именно тех плюшек что мне нужны)))
4. возможность использовать код, библиотеки и т.д. С++ (без мучительного перевода на свой язык, или создания библиотек "промежутков")

#16
10:29, 19 апр 2021

на текущий момент правлю код библиотеки команд (c++), а то делал его на скорую руку

Прошло более 9 месяцев
#17
11:02, 4 фев 2022

А, может быть реализована задаваемая  совместимость с какими то отдельными диалектами Бейсик?
Например c Basic-256, BBC Basic ...

P.S. Тогда можно было бы брать и запускать какие то примеры из разных  Бейсик проектов без переделки.
Хорошо бы иметь сравнительную таблицу отличий разрабатываемого бейсика Yaga от других.

На  https://rosettacode.org/ тоже есть решения предлагаемых алгоритмов на разных Бейсиках
и сравнивалась ли эффективность трансляции алгоритмов на  Бейсик в реализации C/С++ ?

Для и под Linux проект соберётся?

#18
12:31, 6 фев 2022

KPG
> А, может быть реализована задаваемая  совместимость с какими то отдельными
> диалектами Бейсик?
> Например c Basic-256, BBC Basic ...

Изначально нет, это отдельная ветка языка)

#19
12:32, 6 фев 2022

KPG
> P.S. Тогда можно было бы брать и запускать какие то примеры из разных  Бейсик
> проектов без переделки.

Такие проекты уже есть (qb64 и т.д.), да и зачем это?
Многие уже устарели, зачем их тянуть?

> Хорошо бы иметь сравнительную таблицу отличий разрабатываемого бейсика Yaga от
> других.

Не вижу смысла.

#20
12:33, 6 фев 2022

KPG
> Для и под Linux проект соберётся?
Да, есть уже примеры под линукс.

#21
12:41, 6 фев 2022

KPG
> На  https://rosettacode.org/ тоже есть решения предлагаемых алгоритмов на
> разных Бейсиках
> и сравнивалась ли эффективность трансляции алгоритмов на  Бейсик в реализации
> C/С++ ?

Трансляция будет 1 к 1 (логика)
а вот тонкости с/с++ естественно использоваться не будут! (хотя везде пишут что эти тонкости использовать вообще нельзя (тут у каждого свое мнение))

но самый плюс моего подхода, это то - что можно использовать алгоритм написанный на C/С++ без перевода на бейсик!
Читай 0 пост!!!
>4. возможность использовать код, библиотеки и т.д. С++ (без мучительного перевода на свой язык, или создания библиотек "промежутков")

#22
19:20, 6 фев 2022

NeoGuru
> но самый плюс моего подхода, это то - что можно использовать алгоритм
> написанный на C/С++ без перевода на бейсик!
> Читай 0 пост!!!
Так вопрос не в том как оставить доступ к С++ коду, а как в рамках использования Бейсик вообще от него отказаться.
Иначе какой тогда смысл в предлагаемом решении?

#23
21:25, 6 фев 2022

KPG
> Так вопрос не в том как оставить доступ к С++ коду, а как в рамках
> использования Бейсик вообще от него отказаться.
> Иначе какой тогда смысл в предлагаемом решении?

В том и дело, я отказываться не собираюсь!!!  (даже мысли такой не было, а даже наоборот - оставить полную совместимость с с++)
А смысл, это - надстройка над с++ позволяющая комфортно писать на с++ используя синтаксис любимого языка Basic

на текущий момент уже сделал несколько демок и проектов (участвовал в конкурсе платформеров), и пока прибегать к с++ не пришлось!

#24
8:25, 7 фев 2022

А почему именно синтаксис бэйсика ? - если пишешь на сяпп то удобнее было бы сделать скриптер/компилятор C кода. По сути получается тот же бейсик но упрощенный в плане лишних FUNCTION <name>... END FUNCTION. Проще и понятней будет void <name> {...}. Логика не поменяется а читаемость улучшится.

#25
9:41, 7 фев 2022

gambit_oz
> А почему именно синтаксис бэйсика ? - если пишешь на сяпп то удобнее было бы
> сделать скриптер/компилятор C кода. По сути получается тот же бейсик но
> упрощенный в плане лишних FUNCTION <name>... END FUNCTION. Проще и понятней
> будет void <name> {...}. Логика не поменяется а читаемость улучшится.

Мне синтаксис Бейсика больше нравится!

#26
21:47, 14 фев 2022

Что тут сказать - начинание хорошее.

Все же если позволите, выскажу свое мнение по поводу этой темы.

Во первых: FreeBasic, BaCon, BCX и прочие - не являются лучшими представителями этой ниши.

Поэтому советую посмотреть на эти проекты :

1) BlitzMAX NG - https://blitzmax.org/ - Это кроссплатформенный ООП Basic. Его код транслируется в С.

2) Monkey2 - https://github.com/blitz-research/monkey2 - Тоже кроссплатформенный ООП Basic. Его код транслируется в С++.

3) Monkey - https://github.com/blitz-research/monkey - И снова кроссплатформенный ООП Basic. Вот только у него трансляторов около десятка. И он может собрать проект и под PSP и под Switch и кучу других платформ.

Насчет самого диалекта. Диалект того же FreeBasic - жутко устаревший! Неудобный и вырвиглазный! Я всегда недоумевал от верхних регистров ключевых слов классического бейсика. А объявление переменных через ключевое слово "AS" или массива через "DIM" - меня просто убивало!

Современные бейсики от такого давно уже отошли.

Вот вам пример кода BlitzMAX NG

SuperStrict

Framework GLFW.Window

Import "../include/Dialog.bmx"

Type TMyWindow Extends TWindow Implements IEventListener Final
  
  Method New( title:String,width:Int,height:Int )
    Super.New( title,width,height )
  End Method
  
  Method OnUpdate() Override
    If Key.hit( Key.O ) Then dialog.Load( "test.xml" )
    dialog.Loop()
  End Method
  
  Method OnDrop( files:String[] ) Override
    WriteStdout( "DROP::"+files.Length+"~n" )
    For Local file:String=EachIn files
      WriteStdout( file+"~n" )
    Next
  End Method
  
  Method OnEvent() Override 
    If Event.name="GetMoney"
      Event.Create( "fail",event.source,Null )
    End If
  End Method
  
  Method OnRender( canvas:TCanvas ) Override
    canvas.color(.3,.3,.3,1)
    canvas.DrawRect( 0,0,1000,1000 )
    dialog.Draw( canvas )
  End Method
End Type

Или как вам код Monkey2->:

Namespace std.stream

Using libc

#rem monkeydoc FileStream class.
#end
Class FileStream Extends Stream

  #rem monkeydoc True if no more data can be read from the stream.
  
  You can still write to a filestream even if `Eof` is true - disk space permitting!
  
  #end
  Property Eof:Bool() Override
    Return _pos>=_end
  End

  #rem monkeydoc Current filestream position.
  
  The current file read/write position.
  
  #end
  Property Position:Int() Override
    Return _pos
  End

  #rem monkeydoc Current filestream length.
  
  The length of the filestream. This is the same as the length of the file.
  
  The file length can increase if you write past the end of the file.
  
  #end  
  Property Length:Int() Override
    Return _end
  End
  
  #rem monkeydoc Seeks to a position in the filestream.
  
  @param offset The position to seek to.
  
  #end
  Method Seek( position:Int ) Override
    DebugAssert( position>=0 And position<=_end )
  
    fseek( _file,position,SEEK_SET )
    _pos=position
    DebugAssert( ftell( _file )=_pos )  'Sanity check...
  End
  
  #rem monkeydoc Reads data from the filestream.
  
  @param buf A pointer to the memory to read the data into.
  
  @param count The number of bytes to read.
  
  @return The number of bytes actually read.
  
  #end
  Method Read:Int( buf:Void Ptr,count:Int ) Override
    count=Clamp( count,0,_end-_pos )
    count=fread( buf,1,count,_file )
    _pos+=count
    DebugAssert( ftell( _file )=_pos )  'Sanity check...
    Return count
  End
  
  #rem monkeydoc Writes data to the filestream.
  
  Writing past the end of the file will increase the length of a filestream.
  
  @param buf A pointer to the memory to write the data from.
  
  @param count The number of bytes to write.
  
  @return The number of bytes actually written.
  
  #end
  Method Write:Int( buf:Void Ptr,count:Int ) Override
    If count<=0 Return 0
    count=fwrite( buf,1,count,_file )
    _pos+=count
    _end=Max( _pos,_end )
    DebugAssert( ftell( _file )=_pos )  'Sanity check...
    Return count
  End
  
  #rem monkeydoc Opens a file and returns a new filestream.

  When opening a file using "r" or "rw", the file must already exist or the function will fail and null will be returned.
  
  When opening a file using "w", any existing file at the same path will be overwritten.
  
  @param path The path of the file to open.
  
  @param mode The mode to open the file in: "r", "w" or "rw".
  
  @return A new filestream, or null if the file could not be opened.
  
  #end
  Function Open:FileStream( path:String,mode:String )
  
    Select mode
    Case "r" mode="rb"
    Case "w" mode="wb"
    Case "rw" mode="r+b"
    Default
      Return Null
    End
    
    Local file:=OpenCFile( path,mode )
    If Not file Return Null
    
    Return New FileStream( file )
  End
  
  Protected
  
  Method OnDiscard() Override
    
    fclose( _file )
    _file=Null
    _pos=0
    _end=0
  end
  
  Method OnFinalize() Override
    
    fclose( _file )
  End
  
  Private
  
  Field _file:FILE Ptr
  Field _pos:Int
  Field _end:Int
  
  Method New( cfile:FILE Ptr )
    _file=cfile
    _pos=ftell( _file )
    fseek( _file,0,SEEK_END )
    _end=ftell( _file )
    fseek( _file,_pos,SEEK_SET )
    DebugAssert( ftell( _file )=_pos )  'Sanity check...
  End
  
End
#27
8:47, 15 фев 2022

mingw
> [i]Современные бейсики от такого давно уже отошли.[/i]
Основная ветка "Современные бейсики" это VB.NET  и там все есть, все это -
> [i]Насчет самого диалекта. Диалект того же FreeBasic - жутко устаревший! Неудобный и вырвиглазный! Я всегда недоумевал от верхних регистров ключевых слов классического бейсика. А объявление переменных через ключевое слово "AS" или массива через "DIM" - меня просто убивало![/i]

Все приведённые примеры это не классика а мутации от скрещивания с си языками,
... удобно если не заморачиваться при написании транслятора


p.s.  у меня тоже мутант, но надеюсь не на столько уродливый)

#28
8:55, 15 фев 2022

mingw
Да,... и спасибо что написал, полезно было узнать что жив BlitzMAX
и о Monkey

#29
18:12, 15 фев 2022

Да и все они для импорта Си-библиотек используют "файл-склейку". В этом смысле Ваш Бейсик выгодно отличается. Вот если бы ему синтаксис как в BlitzMAX или Monkey2... впрочем, это уже мечты))

Страницы: 1 2 3 Следующая »
BASIC[ProjectYaga]Форум