LINUX.ORG.RU

Неосилятор ищет язык.


0

4

Здравствуйте. Вообщем если быть кратким передо мной стоит задача отрисовать гую которая в реальном времени рисует график косинуса, скролл барами регулируется велечина переменных. Собственно ищу язык чтобы было проще организовать свою идею. Пробовал в С++ , но не осилил наследование, классы... буэ неужели просто функций и переменных мало? Есть ли такой язык в котором нету низкоуровневой мороки а только функции и переменные? Вот мне посоветовал знакомый javascript, это так? И еще получится ли javascript «скомпилировать» в исполняемый файл? Т.е. чтобы обычный пользователь видел просто .exe/.bin по нему тык и появилась окошко, прога) ну или на крайняк если вызов скрипта через исполняемый файл.

З.Ы. Хотелось бы что то нечто html/css только под «исполняемые файлы».



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

>> Он мог дать четкое определение с самого начала, но он его не дал - пусть отдыхает.

но он явно исключил из него С++

Это ничего не значит. Общепринятому определению ООП Си++ отвечает, а личное определение Кея опоздало лет на 30, чтобы стать общепринятым.

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

> сообщество C++ вообще гораздо называть какие-то свои сугубо внутренние конструкции общепринятыми терминами - одни функторы чего стоят

да-да, про функторы я тоже недавно вспоминал, еще немного map обескуражил, но это уж ладно, мелочь =)

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

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

Терминологические споры самые бессмысленные споры в мире. Напр, Вы знаете, что то, что физики называют «функцией распределения» математики называют «плотностью вероятности», а «функцией распределения» они называют интеграл от этой плотности? Но гауссоида как ее ни называй форму не меняет... ;-)

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

Ну тебе же уже говорили о глупости цитаты. Все равно что говорить «научись ставить клизмы и тогда таки будешь каждый день себе ставить и получать кайф»

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

Я пропустил слово, когда печатал. Следует читать так:

ООП в С++ есть только лишь по причине _отсутствия_ нормального определения понятия ООП вообще. А так он не далеко ушел от чистого С

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

>ООП в С++ есть только лишь по причине _отсутствия_ нормального определения понятия ООП вообще. А так он не далеко ушел от чистого С

Хренакс... ждем дня Х, когда какой нить злобный лиспер придумает и опубликует у себя в ЖЖ «нормальное определение ООП вообще» - и мгновенно все написанное на С++ перестанет работать... ;-)

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

CLные решения на шатауте какие-то идиоты-хелловорлдщики сабмиттили, вот тут http://swizard.livejournal.com/tag/shootout один труЪ лиспер всё переписывает.

уже обсасывали, он действительно неплохо улучшил результаты в двух задачах, но не более, и если ты пойдешь по ссылке, то увидишь за счет чего:

defpackage #:smp-utils
  (:use :cl :sb-alien :sb-thread)
  (:export #:affinity #:apic-core-map))

(in-package :smp-utils)

(defun cpuset->list (cpuset)
  (loop :for i :from 0 :below 128
     :unless (zerop (ldb (byte 1 (mod i 8)) (elt cpuset (truncate i 8))))
     :collect i))

(defun list->cpuset (cpuset-list)
  (loop :with cpuset = (make-array 16 :element-type '(unsigned-byte 8))
     :for i :from 0 :below 128
     :when (find i cpuset-list :test #'=)
     :do (setf (ldb (byte 1 (mod i 8)) (elt cpuset (truncate i 8))) 1)
     :finally (return cpuset)))

(defun affinity (thread)
  (with-alien ((alien-cpuset (array unsigned-char 16)))
    (let ((retcode (alien-funcall (extern-alien "pthread_getaffinity_np" 
                                                (function int 
                                                          unsigned-long 
                                                          unsigned-long 
                                                          (* unsigned-char)))
                                  (sb-thread::thread-os-thread thread)
                                  16
                                  (cast alien-cpuset (* unsigned-char)))))
      (when (zerop retcode)
        (values t (loop :with cpuset = (make-array 16 :element-type '(unsigned-byte 8))
                     :for i :from 0 :below 16
                     :do (setf (elt cpuset i) (deref alien-cpuset i))
                     :finally (return (cpuset->list cpuset))))))))

(defun (setf affinity) (affinity thread)
  (with-alien ((alien-cpuset (array unsigned-char 16)))
    (loop :with cpuset = (list->cpuset affinity)
       :for i :from 0 :below 16
       :do (setf (deref alien-cpuset i) (elt cpuset i)))
    (zerop (alien-funcall (extern-alien "pthread_setaffinity_np" 
                                        (function int 
                                                  unsigned-long 
                                                  unsigned-long 
                                                  (* unsigned-char)))
                          (sb-thread::thread-os-thread thread)
                          16
                          (cast alien-cpuset (* unsigned-char))))))

(defun apic-core-map (cpuset-list)
  (let ((default-map (mapcar #'list cpuset-list cpuset-list)))
    (unless (probe-file #p"/proc/cpuinfo")
      (return-from apic-core-map default-map))
    (with-open-file (cpuinfo #p"/proc/cpuinfo")
      (flet ((parse-key-value (line key)
               (when (and (> (length line) (length key))
                          (string= line key :end1 (length key)))
                 (let ((value-offset (position #\: line :start (length key))))
                   (when value-offset
                     (parse-integer line :start (1+ value-offset) :junk-allowed t))))))
        (loop :with current-cpu = nil
           :for line = (read-line cpuinfo nil nil)
           :while line
           :do (multiple-value-bind (processor apicid)
                   (values (parse-key-value line "processor")
                           (parse-key-value line "apicid"))
                 (cond ((and current-cpu apicid) (setf (first (find current-cpu default-map :key #'second)) apicid
                                                       current-cpu nil))
                       (processor (setf current-cpu processor))))
           :finally (return (sort default-map #'< :key #'first)))))))

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

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

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

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

Ну тебе же уже говорили о глупости цитаты.

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

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

Да, эту глупую цитату я вижу уже второй раз :)

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

> Ну тебе же уже говорили о глупости цитаты. Все равно что говорить «научись ставить клизмы и тогда таки будешь каждый день себе ставить и получать кайф»

Ну нет, аналогия в корне неверна. Скорее похоже на:

Оппонет shty - «от спиртного башка трещит, нафига его потребляют»?
Shty - «На вкус приятно, вызывает эфйорию, полезно в умеренных дозах»
Оппонет - «Да какой вкус при ректальном введении?!?!?»
Shty - «А Вы его пить попробуйте?»
Оппонет - «Это вы глупости какие то предлагаете... »

AIv ★★★★★
()

Тупо, за 5 минут:

package require Tk

canvas .grph -height 200 -width 600

pack .grph

set a 1
set b 1

for {set rx 0} {$rx <= 600} {incr rx} {
    set x [expr {($rx - 300) / 50.0}]
    set ry [expr {-cos($x) * 50 + 100}]
    lappend coo $rx $ry
}

set line [.grph create line $coo]

scale .ascl -orient horizontal -from {-2} -to 2 -resolution 0.1 -variable a
pack .ascl

scale .bscl -orient horizontal -from {-2} -to 2 -resolution 0.1 -variable b
pack .bscl

proc redraw args {
    global a b line
    
    for {set rx 0} {$rx <= 600} {incr rx} {
        set x [expr {($rx - 300) / 50.0}]
        set ry [expr {-$b * cos($x * $a) * 50 + 100}]
        lappend coo $rx $ry
    }

    .grph coords $line $coo

    update
}

trace add variable a write redraw
trace add variable b write redraw

Координатные оси, лабел с функцией, прочие СиПы и как превратить в exe под виндой, надеюсь сам разберешься

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

а можно в одну строку:

gnuplot -persist -e «set term wxt;plot cos(x)»

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

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

[quote]а можно в одну строку:[/quote]

Можно, но цель ТСа найти ЯП для решения данной задачи. Судя по вопросу ТСа — это какая-то лаба в институте заборостроения, вот препод там однострочному решению обрадуется.

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

>С помощью интерфейсов.

А если нужно множественное наследование именно реализации? Аггрегирование в С++ возможно только через Ctrl+C/Ctrl+V. В Жабке та же история, но там хотябы авторефакторинг для этого можно поюзать.

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

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

Ты не понял, что такое DSL/eDSL и зачем они нужны. Перечитай пдф-ку ещё раз.

ky-san
()
Ответ на: комментарий от shty

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

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

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

тогда уж проще mono поставить, и кряк не придётся искать

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

> тогда уж проще mono поставить

если применительно к ТС - то наверное Gambas, RealBasic самое то

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

> но дистрибутив найти не составит труда

а работать-то он будет на современных дистрах? я в 2007-м как-то пробовал на мандриве: установилось, но запускаться отказалось, еще и иксы вроде вешало

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

Ну нет, аналогия в корне неверна. Скорее похоже на:

э не. ректальное употребление - это как раз подход C++. и все адепты радостно доказывают, как эти приятно и хорошо, и как все остальные просто не осилили

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

Бугагец. Это что, единственная статья по DSL? Или лучшая?

не худшая, кстати

jtootf ★★★★★
()
Ответ на: комментарий от ky-san

> Видимо, если бы я привёл ссылку сюда: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.19.1134 - то я бы увидел комментарий про другой тип дрочеров.

Ты бы увидел комментарий вида «ну и где тут DSL?».

Забавная тут компания собралась

Рад, что тебе здесь нравится.

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

Да это целый учебник, а по контексту вроде необходимо относительно краткое пояснение. И тут надо скорее ссылаться на «UNIX: универсальная среда программирования» Кернигана и Пайка.

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

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

Хм, первая ссылка на документ как раз и была кратким пояснением. Вот ещё одно, но уже не такое краткое: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.139.4027 (надеюсь, хоть для кого-то это будет интересно, особенно реализация на С++)

ky-san
()
Ответ на: комментарий от jtootf

> э не. ректальное употребление - это как раз подход C++.

У Вас видимо анатомия нестандартная.... Наск я помню, анус со ртом в процессе эволюции менялся несколько раз, ну и Вы то ли ушли вперед по сравнению с остальными, то ли отстали?;-)

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

У Вас видимо анатомия нестандартная

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

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

Забавно... троллящий лямбда-пингвин само по себе редкость, но обидичвый троллящий лямбда-пингвин растрогал меня просто до слез! Ути пусечка какая... ;-)

AIv ★★★★★
()
Ответ на: комментарий от ky-san

> Ты не понял, что такое DSL/eDSL и зачем они нужны

И правда не понял, точнее понял но не до конца, туплю. Т.е. любой парсер специфичного для задачи конфиг-файла можно считать DSL?

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

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

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

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

Нет. Чтобы игнорить идиотов и не читать их высеры.

да что Вы говорите, а со стороны выглядит так будто Вы «посрать в каментах» пришли, причём неумно

Уже двое в копилке.

школота гордится любыми достижениями, ведь это всё своим трудом, своими руками, да?

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

>но не до конца, туплю

Тупишь. Возьми любой код, использующий более-менее разлапистую ООП-библиотеку, посмотри на него в целом, и увидищь странные вещи. Оказывается, возникает некая семантика взаимодействия объектов между собой. Но:

1. Она не описана формально. Т.е. чтобы понять _как_ именно пользоваться библиотекой тебе придется читать разные туториалы.

2. Эта семантика эндогенна, она определяется архитектурой самой библиотеки. Т.е. она не отражает требования предметной области, или отражает требования некоей сферической предметной области в вакууме.

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

Короче говоря, имеет место кривой и тупой язык, которым все пользуются, даже не замечая. Все думают что программируют на C++/Java/C#, а на самом деле программируют на этом тупом языке.

DSL же, в первую очередь, исследование предметной области. Во вторую — программирование в терминах предметной области (а не в терминах языка/парадигмы/библиотеки). А потом уже и сами языки.

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

Macil ★★★★★
()

Эзотерики, как обычно:

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

- Да ни хрена, посмотри тесты.

- Ну может и не догоняет, но его производительности «вполне достаточно». Вообще сейчас железо дешевое слишком, чтобы задрачиваться. Зато там есть кое-что такое, что позволяет в ${COUNT} раз увеличить производительность разработчика. А в ваших плюсах такого нет, там одни сплошные костыли, писать нормально невозможно (тут пруф на авторитета или ресерч статью).

- Ну и где результаты этой бешеной производительности за все время существования языка?

- (Бешеное гугление и на публику, стряхивая пыль, выносится 2-3 страшных неюзабельных поделия) Да на! (гордости через край - человек и сам не ожидал, что хоть это-то найдется).

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

> DSL же, в первую очередь, исследование предметной области.

Любая нормальная библиотека - тоже. Да и под любым нетривильным DSL и лежит библиотека.

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