LINUX.ORG.RU

Посоветуйте язык на замену QBasic

 


3

3

Ищу язык для написания простеньких программ и прототипов. Требования:

  • Низкий порог вхождения. Хочу в будущем показывать детям. Сам программирую с 11 лет.
  • Наличие ide. vi и emacs за ide не считаются.
  • Графика «из каробки». Чтобы программка «палка, палка, огуречик - вот и вышел человечик» помещалась на одном экране без гугления сторонних либ.
  • желательно наличие в репах ubuntu
  • желательно наличие под оф.топик

Ранее эту функцию для меня выполнял qbasic.

PS свободно владею: basic, c, c++, pascal, еще десяток языков «читаю со соварем».

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

Вот пример в сто строчек на реболе, в конце того туториала: http://sendvid.com/vi083hvl

REBOL [title: "3D Maze - Ray Casting Example (by Olivier Auverlot)"] 
px: 9 * 1024  py: 11 * 1024 stride: 2 heading: 0 turn: 5
laby: [ 
    [ 8 7 8 7 8 7 8 7 8 7 8 7 ] 
    [ 7 0 0 0 0 0 0 0 13 0 0 8 ] 
    [ 8 0 0 0 12 0 0 0 14 0 9 7 ] 
    [ 7 0 0 0 12 0 4 0 13 0 0 8 ] 
    [ 8 0 4 11 11 0 3 0 0 0 0 7 ] 
    [ 7 0 3 0 12 3 4 3 4 3 0 8 ] 
    [ 8 0 4 0 0 0 3 0 3 0 0 7 ] 
    [ 7 0 3 0 0 0 4 0 4 0 9 8 ] 
    [ 8 0 4 0 0 0 0 0 0 0 0 7 ] 
    [ 7 0 5 6 5 6 0 0 0 0 0 8 ] 
    [ 8 0 0 0 0 0 0 0 0 0 0 7 ] 
    [ 8 7 8 7 8 7 8 7 8 7 8 7 ] 
] 
ctable: [] 
for a 0 (718 + 180) 1 [ 
    append ctable to-integer (((cosine a ) * 1024) / 20) 
] 
palette: [ 
    0.0.128 0.128.0 0.128.128 
    0.0.128 128.0.128 128.128.0 192.192.192 
    128.128.128 0.0.255 0.255.0 255.255.0 
    0.0.255 255.0.255 0.255.255 255.255.255 
] 
get-angle: func [ v ] [ pick ctable (v + 1) ]
retrace: does [ 
    clear display/effect/draw 
    xy1: xy2: 0x0 
    angle: remainder (heading - 66) 720 
    if angle < 0 [ angle: angle + 720 ] 
    for a angle (angle + 89) 1 [ 
        xx: px 
        yy: py 
        stepx: get-angle a + 90
        stepy: get-angle a 
        l: 0 
        until [ 
            xx: xx - stepx 
            yy: yy - stepy 
            l: l + 1 
            column: make integer! (xx / 1024) 
            line: make integer! (yy / 1024) 
            laby/:line/:column <> 0
        ] 
        h: make integer! (1800 / l) 
        xy1/y: 200 - h 
        xy2/y: 200 + h 
        xy2/x: xy1/x + 6 
        color: pick palette laby/:line/:column 
        append display/effect/draw reduce [ 
            'pen color 
            'fill-pen color 
            'box xy1 xy2 
        ] 
        xy1/x: xy2/x + 2  ; set to 1 for smooth walls 
    ] 
] 
player-move: function [ /backwards ] [ mul ] [ 
    either backwards [ mul: -1 ] [ mul: 1 ] 
    newpx: px - ((get-angle (heading + 90)) * stride * mul) 
    newpy: py - ((get-angle heading) * stride * mul) 
    c: make integer! (newpx / 1024) 
    l: make integer! (newpy / 1024) 
    if laby/:l/:c = 0 [ 
        px: newpx 
        py: newpy 
        refresh-display 
    ] 
] 
evt-key: function [ f event ] [] [ 
    if (event/type = 'key) [ 
        switch event/key [ 
            up [ player-move ] 
            down [ player-move/backwards ] 
            left [ 
                heading: remainder (heading + (720 - turn)) 720 
                refresh-display 
            ] 
            right [ 
                heading: remainder (heading + turn) 720
                refresh-display 
            ] 
        ] 
    ] 
    event 
] 
insert-event-func :evt-key 
refresh-display: does [ 
    retrace 
    show display 
] 
screen: layout [ 
    display: box 720x400 effect [ 
        gradient 0x1 0.0.0 128.128.128 
        draw [] 
    ] 
    edge [ 
        size: 1x1 
        color: 255.255.255 
    ] 
] 
refresh-display 
view screen
loz ★★★★★
()

Ну раз уж рассусолили тему на 3 страницы, то влезу со своим велосипедом. Исполняемый файл 70 килобайт (!) (нужна джава, да), сразу открывается ИДЕ - оно же РЕПЛ, хочешь покомандно исполняй, хочешь текст программы пиши, хочешь из файла загружай. Единожды прописав в файл стандартной библиотеки (обычный текстовый) примерно такой кусок кота:

(def w-width 500 w-height 500 img (new-image w-width w-height))
(def img-gr (new-imageGraphics img))
(java img-gr "setBackground" (java (class "java.awt.Color") "new" 255 255 200))
(java img-gr "clearRect" 0 0 w-width w-height)
(java img-gr "setColor" (java (class "java.awt.Color") "new" 0 0 255))
(def w (new-window "FlowLayout"))
(add-image w img)
(java w "setLocationByPlatform" true)
(java w "setVisible" true)
(java w "setAlwaysOnTop" true)
(java w "setTitle" "Тест гуй - примитивов")
(java w "pack")

(defn line (a b c d)
    (java img-gr "drawLine" a b c d)
    (java w "repaint"))

(defn oval (x y rx ry)
    (java img-gr "drawOval" (- x rx) (- y ry) (* 2 rx)  (* 2 ry))
    (java w "repaint"))
получаем открытое гуевое окно, в котором можем прямо по ходу пьесы рисовать как отдельными командами, так и исполнением кода. Кто там хотел лайнов без скобок?
line 100 100 400 300
=> OK
oval 250 250 200 200
=> OK
.....

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

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

Другого мира у меня для вас нет. :) В конечном итоге всегда всё сводится именно к аллокации памяти и байтам.

что-то дико сложное внутри, но легко управляемое снаружи

А потом эти люди недоумевают, отчего же телефон сжирает батарейку за полдня, и тормозит на 8 ядрах и 16 гигах. :)

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

Любая реализация объектов возможна с текущей архитектурой компьютера

Например?

Объект - это не его реализация. Объект намного больше чем банальная структура.

Для человека, наслушавшегося всяких баззвордов типа «наследование», «инкапсуляция», «темплейты» и прочая - возможно. Для реальной машины, на которой это всё будет на самом деле работать - нет. Машине наплевать на человеческие фантазии и человеческое ЧСВ.

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

Например?

Например объекты на замыканиях.

Для человека, наслушавшегося всяких баззвордов типа «наследование», «инкапсуляция», «темплейты» и прочая - возможно

Баззворды тут ни при чем.

Для реальной машины, на которой это всё будет на самом деле работать - нет

Машина не важна, в этом суть абстракции.

Машине наплевать на человеческие фантазии и человеческое ЧСВ.

Машина не может ни наплевать ни не наплевать.

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

"." не означает принадлежность, а означает, что нужно совершить с объектом манипуляцию. А если коротко: «холст: провести линию в точку»

Бгг. :)

«Нужно совершить с объектом манипуляцию» пишется как

lineTo( canvas, .... )

А canvas.lineTo(...) это типа «передать параметры функции, адрес/ссылка на которую сохранена в поле lineTo структуры canvas»

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

Stanson, вот вы, например, вполне себе объект :) И даже реагируете на сообщения в этом топике. Пусть негарантированно и неадекватно - ну это другой разговор, такой объект значит, зато с ЧСВ :)

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

Например объекты на замыканиях.

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

Машина не важна, в этом суть абстракции.

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

Машина не может ни наплевать ни не наплевать.

Не распарсил. «Машине наплевать на ... » - означет что у машины отсутствует какая-либо реакция на ... Машина не может не иметь никакой реакции на что-либо?

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

Stanson, вот вы, например, вполне себе объект :)

Да хрен-то там. Я вполне себе субъект. Разницу между объектом и субъектом разъяснять?

Stanson ★★★★★
()

FreePascal же.

Нет способа лучше объяснять детям как «думает» компьютер.

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

Даже если начинать изучать, то лишний раз мозги нагружать ООП не нужно. Нужно что-то такое на чем строить основание — понятия об алгоритмизации.

Я видел как некоторые мои одногруппники не зная этого сразу начали учить С++(программа такая, чо). Программирование мимоходом было в школе. Ну, в общем, эти бедолаги не спали ночами и методом тыка удалось сдать курсовые. Понимание пришло таки, но столько сил за короткое время истратить... не вижу в этом ничего хорошего.

a1batross ★★★★★
()

http://electron.atom.io/ возможно подходит, еще можно глянуть в сторону жабы и делать свои формочки под андроид, или не под андроид.

SjZ ★★★★★
()

Racket

* Низкий порог вхождения - есть
* Наличие ide - есть
* Графика «из каробки» - есть
* желательно наличие в репах ubuntu - есть
* желательно наличие под оф.топик - есть
* православный лисп - есть

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

Речь ведь об ООП идёт, там не говорят о субъектах. Да и потом, для меня, как наблюдателя, вы вполне себе объект.

Не стоит сводить всё к деталям реализации, их хорошо знать, но не нужно на них зацикливаться. Имея дело с ООП, мы, как программисты, имеем дело с объектами (абстракциями), но не с инструкциями процессора.

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

Имея дело с ООП, мы, как программисты, имеем дело с объектами (абстракциями), но не с инструкциями процессора.

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

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

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

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

Вовсе нет, тормозное и жрущее, как правило, из-за неудачных алгоритмов и/или структур данных. O(n^3) остаётся O(n^3) даже на ассемблере. Оптимизация под архитектуру редко даёт заметный выигрыш в производительности.

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

Чего именно «прочего»? Написать <div id=«canvas-container»></div> наверное очень сложно.

Сложно не написать, а сложно объяснить ребёнку для чего нужна эта отдельная сущность и почему она описывается не в том же Js, а в каком-то странном HTML сбоку, который пока «магия».

А в мире, где жизнь без вэба представить невозможно кричат «вэб технологии не нужны» - это религиозный фанатизм и ничего больше.

Современный Web — сборище костылей, архитектурно неправильных нагромождений и огромного числа лишних сущностей вроде изучения тех же HTML/CSS/JavaScript и связи между ними.

Что-что, а Web уж точно не подходит для изучения детям. Только вызовет у них отвращение к программированию и боязнь перед всякими там магическими <div id=«canvas-container»></div>, .canvas-container { font-family: Verdana, sans-serif } и прочим непотребствам. К вебу ребёнок должен сам придти (если захочет конечно). Дети должны получать радость от программирования, а не страдания.

Идеальным был бы тут QML/JavaScript, без всякой там вебни. Там есть доступ к канвасу изначально без всяких предподвывертов, как в Web.

import QtQuick 2.7
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Canvas {
        id: canvas
        anchors.fill: parent
        onPaint: {
            var ctx = getContext('2d');
            ctx.beginPath();
            ctx.moveTo(0, 0);
            ctx.lineTo(width, height);
            ctx.stroke();
        }
    }
}

Но он немного сложноват для понимания ребёнку, так как там тоже нужно понимать, что такое объекты (в терминологии QML — элементы) и уметь отличать блоки QML-кода от Js-кода.

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

В конечном счёте это выливается в ту же самую структуру с адресами функций

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

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

Нет, проблема в плохих и усложненных абстракциях.

Машина не может не иметь никакой реакции на что-либо?

Наплевать - это реакция. Отсутствие реакции это отсутствие реакции.

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

передать параметры функции, адрес/ссылка на которую сохранена в поле lineTo структуры canvas

Даже в крестах никакого «поля lineTo» не будет. Оптимизатор, мля.

Esper
()

Наличие ide. vi и emacs за ide не считаются.

Дальше не читал.

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

В конечном счёте это выливается в ту же самую структуру с адресами функций.

Датычо. А про реализацию объектов на мапе мы не слышали, да?

Esper
()

Альтернативы языку не подошли?
PureBasic, wxBasic, FreeBasic.
В крайнем случае qBasic в DOSbox.

TechnoMag ★★
()

JavaScript или JavaScript в Processing

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

А про реализацию объектов на мапе мы не слышали, да?

Читал даже - сразу после главы процессорных инструкций по работе с мапами :)

yyk ★★★★★
()
Ответ на: комментарий от loz
$ ./red-25oct16-e80f0f4 
Compiling compression library...
Compiling Red console...
/home/data/.red/console-2016-10-25-64210: error while loading shared libraries: libcurl.so.4: wrong ELF class: ELFCLASS64

дефолтная убунта, только что слитый red.

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

Что-что, а Web уж точно не подходит для изучения детям. Только вызовет у них отвращение к программированию и боязнь перед всякими там магическими <div id=«canvas-container»></div>, .canvas-container { font-family: Verdana, sans-serif }

Так ты так и не ответил, что мешает писать только на js, без языков разметки и стилей?

Скудоумие, такое скудоумие.

int64
()

Низкий порог вхождения. Хочу в будущем показывать детям.

PascalABC.NET © (для стандартного вхождения).

BB © (для развития гибкости мышления).

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

Поставь libcurl 32х битный, Red пока собирается только под x32.

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

И главное - ни одного аргумента, чем js плох

Целый интернет этих аргументов. И вообще, луз тайпинг для лузеров.

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

У канваса много радиальных координат, что тоже усложняет.

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

Скудоумие — писать на JS, когда есть нормальные ЯП. Одни на баш дрочат, другие на JS, в то время, когда есть языки, которые не стреляют тебе в ногу просто потому что могут.

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

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

хотя на самом деле

во всем виноват лишь ты, заткнись и запомни - мир самый обычный, а ты - в нем самый виновный.

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

Это всё баззворды.

Базворды - это то, чего ты нахватался прогуливая школу. У тебя и таблица менделеева - баззворды.

И никак иначе ты это не реализуешь.

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

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

Да хрен-то там. Я вполне себе субъект.

Это надо доказать.

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

Молоток не виноват в том, что человек бьет себе по пальцам.

Молоток не виноват, да. Виноваты создатели, спроектировавшие его через задний проход.

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

Даже в крестах никакого «поля lineTo» не будет. Оптимизатор, мля.

Дампик памяти занятой объектом в студию. И чтоб там никаких адресов lineTo не было. Абстракционист, мля.

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

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

Бумага всё стерпит. :) Китайцы тоже. А на компе будет тормозное говнище в полгига размером.

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

Датычо. А про реализацию объектов на мапе мы не слышали, да?

Чо, хипстер, без баззвордов никак, да? :)

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

Нет, проблема в плохих и усложненных абстракциях.

Именно.

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

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

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

Так что проблема скорее в том, что пользуясь высотой абстракции сегодня, люди просто не знают и не стремятся узнать\понять, как это работает ниже. Отсюда и вытекают все обвинения всего вокруг, в том, что криво\медленно\через задний проход.

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

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

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

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

Бумага всё стерпит. :) Китайцы тоже. А на компе будет тормозное говнище в полгига размером.

А докажи. А то вякать шибко мастак.

anonymous
()

QBasic

Фигасе, вот это криокамера!

Требования ...

Есть такой язык. JavaScript. Палки и огуречики можно рисовать в canvas совершенно бесплатно парой строчек, прям как в бейсике.

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