Kompilator SScript

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

jeśli okno główne aplikacji (czyli to z menu i toolbarem) ustawię jako niezmaksymalizowane i zapiszę schemat, to po restarcie programu formularz ten jest maksymalizowany z automatu

Ok, zaraz się fixnie ;)

Zamiast wyświetlać ten błąd (...) sugeruję wyświetlić okienko z potwierdzeniem czy na pewno chce się nadpisać istniejący schemat;

O tym nie pomyślałem na początku, dodane do TODO i zmieni się w wolnym czasie :)


Btw, wiesz, że możesz przełączyć edytor na język polski? :D

edytowany 1x, ostatnio: Patryk27
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
2

http://sscript.4programmers.net/download/23-07-2013.zip

Voilà - w ten oto sposób prezentuję przed Wami kolejne pełne wydanie pełne równie "fajnych" zmian, jak i poprzednio (hm, w gruncie rzeczy mógłbym wymyślać jakieś fajne nazwy głównych branchy, jak np.ma Android :D).

Kompilator 2.2.3:

  • SSA zostało zaimplementowane! :) (chociaż w imo słaby sposób - części związane z SSA mam na mojej liście rzeczy do refatoryzacji; bez zapasu tabletek na ból głowy nie polecam oglądać zawartości ssa_stage1.pas oraz ssa_stage2.pas...)
  • naprawione zostały wzajemne zależności, teraz już działają poprawnie (tzn.bezproblemowo może istnieć bezpośrednia wzajemna zależność pomiędzy dwoma plikami (oraz np.procedurami wewnątrz nich) i nie jest to żaden błąd, a wręcz przeciwnie: kompilator wtedy działa jak najbardziej poprawnie i kompiluje wszystko bezproblemowo ;) Kilkanaście godzin myślenia nad rozwiązaniem się jednak opłaciło ;>)
  • delikatnie zmieniona została składnia typów enumerycznych: type<enum> foo = [enum1, enum2, enum3]; wygląda imo lepiej, niżeli type<enum> foo = {enum1, enum2, enum3};
  • doszło parę istotnych zmian w optymalizacjach (tzn.pomijając te, które zostały usprawnione przez SSA): zaimplementowałem optymalizator pojedynczych wyrażeń (aktywowany --tree-simplify z linii poleceń i/lub w trybie -O1). Optymalizacja ta stara się maksymalnie uprościć każde pojedyncze wyrażenie, np.:
  • x = x + 50; zostaje zamienione do x += 50;*,
  • x = 10*x + 50*x; zostaje zamienione do x *= 60;*,
  • x = x; jest zamieniane na puste wyrażenie,
  • plus parę innych; jeżeli ktoś chce poznać wszystkie, może sobie przejrzeć: https://github.com/Piterolex/SScript-Compiler/blob/2.2.3-stable/compiler/optimization/tree_simplification.pas#L87 (spokojnie, są tam ogólne komentarze ;P)
    W ramach ciekawostki dodam, że w/w optymalizator np.w GCC to plik simplify-rtx.c posiadający ~6.2 tysięcy linii (https://github.com/mirrors/gcc/blob/master/gcc/simplify-rtx.c - nie polecam otwierać na Operze :P), mój posiada "zaledwie" 360, ale cóż: zawsze to coś! ;>

Wirtualna maszyna 0.3.3:

  • zaimplementowano garbage-collector - yay! Póki co jest to prosta wersja zwykłego mark-and-sweep, lecz potem planuję dodać dodatkowo zliczanie referencji (jako drugą metodę; bodajże podobnie ma JVM). Dla testu można spróbować uruchomić np.taki kod:
Kopiuj
function<int> main()
{
 while (true)
  new int[100000];
}

(+- te kilka zer przy tym new) i patrzeć na wykres użycia pamięci np.w menedżerze zadań Windows: domyślnie GC uruchamia się po osiągnięciu limitu 256 MB pamięci, lecz można to zmienić za pomocą przełącznika -gc (lub z poziomu ustawień wirtualnej maszyny w edytorze).

Zmian edytora raczej podawać nie muszę, widać w postach powyżej ;)


Moja aktualna lista TODO prezentuje się tak:

  • na pewno na pierwszy ogień idzie załatanie tych wszystkich memleaków... zaczynam powoli żałować, że nie zaimplementowałem tego w jakimś języku z wbudowanym GC, bo teraz muszę sam dbać o zwalnianie pamięci, więc póki co cały kompilator to jeden wielki memleak. Phi, fixnie się w wolnym czasie ;]
  • potem poprawa wydajności; ten release powinien być nieco wydajniejszy od poprzednich, lecz mimo wszystko mój kompilator jest wolny jak cholera :P
  • optymalizacje dla tablic
  • konstrukcja var<int[]> tab = {1, 2, 3, 4, 5}; (o której było już w którymś z tematów, który założyłem)
  • usprawnić generator kodu (póki co wypluwa sporą liczbę zbędnych opcodów, które optymalizator bajtkodu nie zawsze wyłapuje)
  • optymalizacje międzyfunkcyjne; np.:
Kopiuj
function<int> callme()
{
 return 10;
}

function<int> main()
{
 var<int> x = 5*callme(); // wartość wywołania "callme();" jest z góry znana, zatem można by od razu podłożyć i policzyć tę wartość
}

Mam jeszcze listę takich "może kiedyś":

  • SSA dla bajtkodu
  • operator ? (na takiej samej zasadzie, jak w C++: wyrażenie?prawda:fałsz)
    Cóż, sporo pozycji na tej liście nie ma :]

Ach, oraz oczywiście parę screenshotów:
Kopiuj
function<void> callme(int param)
{
}

function<int> main()
{
 for (var<int> i=0; i<10; i++)
  callme(i); 

 return 0;
}

W formie grafu to:
img0.png
Forma SSA może wydawać się nieco dziwna, lecz wygląda to tak:
zmienna.(pre-ssa)$(post-ssa)
pre-ssa to SSA-ID, które są używane przez zmienną
post-ssa to SSA-ID, które są zwracane przez zmienną (dla operatora przypisania zawsze pre-ssa=post-ssa, różnica jest w przypadku całej reszty)
Musiałem wprowadzić dwa oznaczenia z racji na operatory ++, += i pochodne, ponieważ np.: wyrażenia i++; nie można by przedstawić w formie i$(0), bo jest to zarówno przypisanie, jak i wykorzystanie wartości zmiennej i. Ot, lubię takie niemainstreamowe rozwiązania ;)

Kopiuj
function<int> callme()
{
 return 0;
}

function<int> main()
{
 var<int> x = 0;

 if (callme())
  x = 10; else
  x = 20;

 if (x%2)
  x++;

 return x;
}

img1.png


Uff, powoli całość zaczyna chyba nawet przypominać jakiś "normalny" kompilator :D Mimo wszystko muszę sobie zrobić jakąś przerwę od kodzenia tego: są wakacje, a ja przesiaduję przed komputerem** rozmyślając, jak by usprawnić ten kompilator c:
`*` oraz ofc.obliczane w momencie kompilacji, gdy "x" jest znane i odpowiednia optymalizacja włączona (w tym przypadku `--constant-propagation` oraz `--constant-folding` (lub po prostu `-O2`)). `**` oczywiście wychodzę również na dwór/rower etc., tak żeby nie było :D
Well, to tyle na teraz - jak wam się podoba/co myślicie? ;)

edytowany 5x, ostatnio: Patryk27
Zobacz pozostały 1 komentarz
Silv
@Patryk27: odwrotnie chyba: kod formatowany jak tekst, tekst formatowany jak kod masz tu.
Patryk27
way back in 2013 Coyote wykorzystywało inny (starszy) parser postów, który wykorzystywał nieco inną składnię - dlatego czasem posty bywają rozjechane :/
Patryk27
O, już powinno być czytelnie :-)
Silv
O, i teraz to wygląda. Dzięki!
hzmzp
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 godzin
  • Postów:620
0

Fajne to xD, przydała by się jeszcze obsługa plików i dll/so coby można było zapisywać wyniki do plików i korzystać z zasobów systemowych...

Ciekawe było by coś takiego jak typ liczbowy, w którym sam definiujesz jego rozmiar np var<num[32]> x = 0; gdzie
num to typ, i w nawiasach jego rozmiar, a używasz go jak int'a

edytowany 1x, ostatnio: hzmzp
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

@hzmzp: wszystko po kolei - jak zaimplementuję klasy (lub przynajmniej struktury :P), to dodam obsługę plików - tak, coby to było ładnie opakowane w jakąś klasę w stylu File.
Aktualnie dokańczam kompilator JIT (yeah!) i dodaję parę pomniejszych rzeczy do VM-ki oraz kompilatora, i chociaż projekt nieco przystopował, to nadal wytrwale nad nim pracuję.
Alzo, w ramach rozluźnienia pisze także jeden pomniejszy projekt, o którym mam nadzieję, że pewnego dnia wspomnę i również dam do oceny (podpowiem, że jest to 2D-owa gra) ;)


edytowany 2x, ostatnio: Patryk27
hzmzp
to z takich pomniejszych poprawek przypomnę ci że dla 32bitowych systemów nie wbijesz więcej niż 3gb do stringu
Patryk27
Z kolei na 64-bitowych systemach liczby zmiennoprzecinkowe również są 64 bitowe (podczas gdy na 32-bitowych floaty są 80-bitowe), dlatego nie ma oficjalnego wsparcia dla architektury x86-64 :P
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
1

Halo, coś się tutaj dzieje? Jak idą prace? :-)

edytowany 2x, ostatnio: spartanPAGE
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

Tia, ostatnio trochę cicho, ponieważ jestem leniwy i zacząłem grać w Fallouta ("jeszcze tylko wrócę do Megatony i otwieram Lazarusa... no dobra, skoro już tutaj stoi karawana, to może także zakupię amunicję... o, a tam dawno nie byłem...") :P
Oprócz tego aktualnie trzeci raz przepisuję kompilator JIT w VM-ce, bo za każdym razem całkowicie zmieniałem ideę całości i mnie zaczęło to powoli doprowadzać do białej gorączki, ale mam nadzieję, że teraz się już uda bez większych problemów.
Ale spokojnie - prace nad całością nie zatrzymały się całkowicie, wystarczy spojrzeć na listę zmian: http://sscript.4programmers.net/wiki/Changelog
Ogólnie to nowa wersja kompilatora jest właściwie niemalże gotowa, w VM-ce mam do dokończenia ten kompilator JIT, a nad edytorem ostatnio się długo nie rozwodziłem, ale niewiele pozostało.


edytowany 3x, ostatnio: Patryk27
spartanPAGE
Przepisywanie kodu, człowiek męczy się jak może, ale uniknąć się tego nie da :P Osobiście czekam na DLL'e i wątki!
Patryk27
Wszystko będzie, tylko pisać nie ma komu :P
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
0

W jaki sposób tworzysz bibliotekę standardową?

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

Co masz konkretnie na myśli?
Pomysły na funkcje biorę zaglądając do dokumentacji C++, Pascala i innych języków (+dodaję, co mi samo wpadnie na myśl) - rzecz w tym, że przez to w bibliotece standardowej panuje dosyć spory chaos i będę musiał pewnego dnia to wszystko ładnie spisać do jakiegoś dokumentu w stylu standardu języka (coś jak C++ ISO lub jakkolwiek tam "formalniej" to się nazywa).
Ogólnie to całą bibliotekę standardową planuję przepisać w SScript 3* (gdy już będą struktury, klasy (...), czyli na stan obecny... +∞ sekund minut dni lat od teraz), tak aby summa summarum trzymało się toto jednej konwencji nazewnictwa i całej tej reszty.
Dążę do tego, aby SS3 wyglądał jakoś tak:

Kopiuj
@("stdio.ss")
using std;

function<int> main()
{
 var<int> i = input.readInt("Wpisz jakąś liczbę: ");
 output.writeLine("%i+%i*%i=%i', i, i, i, i+i*i);

 return 0;
}

Ot, trochę C++-owato.
Jeszcze nie myślałem nad żadnymi konkretnymi nazwami metod, oczywiście, wszystko jest "na czas pisania tego postu"; a nuż nawet zmienię całą gramatykę języka, jak mi się tak pewnego dnia spodoba :P

* tak dla czystej formalności: od pierwszego postu w tym wątku mowa o SScript 2 (SS1 to projekt sięgający 2009 roku, o ile dobrze pamiętam, i nawet nie mam do niego już kodu źródłowego**)
** no dobra, mam... ale na starym, zepsutym już dysku twardym z laptopa. Zresztą, to i tak jedynie słabo napisany interpreter i w ogóle moje pierwsze podejście do tworzenia własnego języka programowania (co więcej - miał inną składnię, chociaż miejscami podobną (klamerki, @ do importowania oraz oparty na słowach kluczowych; główną różnicą jest to, że miał jawne dynamiczne typowanie)), czyli nic ciekawego.


edytowany 7x, ostatnio: Patryk27
flowCRANE
No jak żeś ten nuż napisał..? :P
Patryk27
Em, no, normalnie :P
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
0

W kodzie (vmtypes.pas) widziałem typy jak referencja, wskaźnik.

  • Czy w samym Sscripcie mogę ich użyć?
  • Jeśli tak, czy istnieje "uniwersalny wskaźnik"?
edytowany 2x, ostatnio: spartanPAGE
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Pewnie masz na myśli plik: https://github.com/Piterolex/SScript-VM/blob/b27f51bcb1645da2e6922d1b1d1798a76901ad5d/ssvm/vmtypes.pas
Są to typy zarezerwowane do wewnętrznego użytku przez maszynę wirtualną - stricte: uczytelnienia kodu.
Wygodniej i czytelniej pisze się przykładowo Xyz := PVMFloat(addr)^; niż Xyz := PExtended(addr)^;, to samo odnośnie VMReference (chociaż jeszcze nie wszędzie to jest pozmieniane - zbliża się spory update kodu VM-ki, w którym zmieniam całkowicie VMString, aby pozbyć się memleaków (o ironio) i ułatwić sobie dalszą zabawę z kompilatorem JIT, a przy tym porządkuje sporo w kodzie - m.in. to).
bool, char, int, float oraz string są wbudowane pod takimi nazwami w sam język (np.var<int> foo = 1024;), lecz referencja ((P)VMReference) istnieje jedynie na poziomie bajtkodu (rejestry trzymające referencje (adresy): er1, er2, er3 oraz er4) - w kodzie wysokopoziomowym referencje na stan obecny to jedynie tablice pod postacią, jaką są zaimplementowane.

Ad 1: w sumie "na siłę" (ponad tablice) możesz najwyżej wysokopoziomowo rzutować 64-bit -> 32-bit i na odwrót:

Kopiuj
var<int[]> tmp;
var<int> src_64, dst_32;
/* ... */
tmp = cast<int[]>(src_64); // oczywiście zadziała jedynie, gdy VM-ka jest kompilowana na 32-bitowy system
dst_32 = cast<int>(tmp); // boom! z 64-bitów zrobiliśmy 32!

Czyli jakoś da się je używać poza ich pierwotnym zastosowaniem, chociaż VM-ce niekoniecznie się to musi spodobać (GC, który w tym przypadku jednak nie powinien zostać aktywowany, może się pewnego razu przyczepić) :P

Ad 2: jedynie na poziomie bajtkodu, jak opisane wyżej. Ew.typ any, który przyjmuje wszystko:

Kopiuj
var<any> foo = 10;
foo = "hello";
foo = 10.5;
foo = null;

To taki feature, który został zaprojektowany w zupełnie innym celu, a którego takie użycie to narażanie samego siebie na undefined behaviour... ale poniekąd odpowiada to na pytanie.


edytowany 13x, ostatnio: Patryk27
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
1

Ujawniając swoje intencje: Chcę zrobić port jakiejś biblioteki graficznej do twojego języka;
Męczącym mnie problemem jest wskazywanie na niezarządzaną przez gc pamięć.
Struktur nie mogę uniknąć, lecz tutaj z pomocą przychodzi arytmetyka wskaźników.

Pozostaje mi próba zaimplementowania ich na własną rękę ;) (Szanse nikłe, lecz są!)

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Em, GC nie będzie tykał żadnych danych (obiektów), które nie zostały zaalokowane bezpośrednio przez VM-kę (czyli jedynie przez operator new na stan obecny), jeżeli o to Ci chodzi.


edytowany 1x, ostatnio: Patryk27
Zobacz pozostały 1 komentarz
Patryk27
Tia - trochę to spowalnia cały proces, ale i tak działa nieźle imho :P No i nie trzeba się martwić aż tak o wskaźniki.
spartanPAGE
+ Czy użycie wyjątków w tak wielu miejscach jest wyjściem... wydajnym?
Patryk27
Fakt, kilka razy pojawia się w kodzie try, lecz, z tego co widzę, w żadnym miejscu wywoływanym często (czyt.kilkaset/tysięcy razy na sekundę), czyli nie powinno być praktycznie żadnego narzutu spowodowanego wyjątkami. Przyglądając się kodowi VM-ki stwierdzam jednak, że pewnie za niedługo znowu będę całą przepisywał, ale to już raczej po wydaniu tej aktualnej wersji :P
spartanPAGE
Z tego co teraz czytam (by się upewnić) wynika, że samo rzucanie wyjątków jest czasochłonne -> tutaj zwracam uwagę na metody z rodziny r__[arit]stackval[type]; + https://github.com/mono/mono
Patryk27
Och, chodzi o to - żaden z tych wyjątków nie powinien zostać rzucony, jeżeli (bajt)kod jest prawidłowy; w innym przypadku (gdy jednak któryś z nich zostanie rzucony) następuje tak czy siak zatrzymanie pracy całej VM-ki, a samo niewywołane raise (gdy kod jest poprawny) raczej nie powoduje żadnego spowolnienia. Niemniej jednak - i tak muszę się pozbyć używania wyjątków wewnątrz VM-ki. Można to zrobić ładniej.
ShookTea
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 6 lat
  • Lokalizacja:Wrocław
  • Postów:629
0

msm
Easter-egg: jeśli w kodzie programu pojawi się nieudokumentowany token PATRYK27, VMka usuwa wszystkie pliki z dysku.
Patryk27
@msm: akurat VM-ka nie ma dostępu do plików na dysku ;] @ShookTea: https://github.com/Piterolex/SScript-Compiler/blob/master/syntax/do_not_read.pas zakodowana wiadomość :P
ShookTea
O Boże drogi... To wygląda strasznie :D
Patryk27
W tym rzecz ;) Ale automagicznie wyświetli tę wiadomość, jeżeli przekażesz odpowiedni parametr do linii komend.
ShookTea
Pierwsza myśl: Każdy z elementów tablicy (jeśli to jest tablica - nigdy w Pascalu nie pisałem) jest szesnastkową reprezentacją dwóch znaków Unicode. (dwóch, bo na jeden wydaje mi się za długie :D). Biorę więc pierwszy z brzegu znak "37BE" (który dosyć często się pojawia) i znajduję... 㞾. To chyba nie o to chodzi :D
Patryk27
Nah', to nie byłoby takie proste. Hint: stała 0x0DEFACED ma tutaj znaczenie ;)
0

A dlaczego gdy wpiszę do GOOGLE hasło SScript to nie pokazuje żadnych wyników na ten temat?

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

Google cie nie lubi.

991b3a6cbb.png

A tak bardziej na powaznie. Duzo popularniejsze jest haslo script, wiec google automatycznie wyszukuje dla script i trzeba kliknac pod spodem zamiast tego wyszukaj sscript.

edytowany 1x, ostatnio: n0name_l
flowCRANE
Zawsze można wpisać w znakach cudzysłowu - &quot;sscript&quot; - znajdzie tylko całe ciągi sscript;
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

Tak dla czystej formalności: wszystkie te inne wyniki SScript (poza 4p i githubem) nie są moje :P
(przed stworzeniem tego języka nie sprawdzałem w Google tego hasła ;p)


Silv
Zmienić nazwę?
Patryk27
Nah, na ten moment ma ogromną wartość historyczną :-D
Silv
OK, jeśli tak uważasz. Ja tam bym zmienił.
0

U mnie google nie wyszukuje sscript:
http://postimg.org/image/xxnx2zex5/

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Ehm:

n0name_l napisał(a):

Duzo popularniejsze jest haslo script, wiec google automatycznie wyszukuje dla script i trzeba kliknac pod spodem zamiast tego wyszukaj sscript.


edytowany 1x, ostatnio: Patryk27
0

Niezależnie od tego czy wpiszę sscript czy script to google mi nic nie pokazuje dopiero jak wpiszę np. sscript 4programmers.net do dostaje oczekiwany wynik.

AlfaLeporis
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 10 lat
  • Lokalizacja:Polska
1

To wpisz SScript w cudzysłowie, Google po prostu nie zna tej nazwy i próbuje na siłę dopasować coś podobnego.

edytowany 1x, ostatnio: AlfaLeporis
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Trzeba kliknąć to niebieskie sscript przy Zamiast tego wyszukaj, Ty najwyraźniej tego nie robisz.


0
AlfaLeporis napisał(a):

To wpisz SScript w cudzysłowie, Google po po prostu nie zna tej nazwy i próbuje na siłę dopasować coś podobnego.

To zadziałało.

0

Co ciekawe jakiś ktoś jeszcze rozwija projekt języka o tej samej nazwie:
a) http://perso.nnx.com/pludov/homepage/sscript/status.html,
b) http://perso.nnx.com/pludov/homepage/sscript/presentation.html

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 15 godzin
0

goscktos123:
Najwyraźniej masz problemy z czytaniem ze zrozumieniem. Wpisz "sscript" bez cudzysłowów i kliknij wyszukaj, a następnie kliknij "zamiast tego wyszukaj sscript".


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

http://perso.nnx.com/pludov/homepage/index-sscript.html

29/05/2006 New Available version

Raczej już nie jest rozwijany :P
A w sumie szkoda, zawsze ciekawie jest popatrzeć na inne rozwiązania ;)


edytowany 1x, ostatnio: Patryk27
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
3

[OT]: 11 postow o tym jak wyszukac haslo w google. Boje sie o przyszlosc tego narodu.

flowCRANE
To znaczy, że trzeba robić lepsze narzędzia - bardziej intuicyjne, lub wszystkowiedzące...
0

Fajny ten Schutz Staffel cript ;)

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
5

No, po prawie roku - nowiutka wersja prosto spod moich palców ;)

Lista zmian jak zwykle dostępna tutaj:
http://sscript.4programmers.net/wiki/Changelog

Tym razem jednak jestem zmuszony wrzucić paczuszkę z plikami na osobny hosting (problemy z połączeniem się do serwera, a nie mam aktualnie czasu dłużej nad tym przysiąść, więc idę po linii najmniejszego oporu :P):
http://speedy.sh/Qz4qp/15-06-2014.zip

Parę screenshotów:
screenshot0.png

screenshot1.png
(tak to wygląda rzecz jasna tylko po włączeniu wyświetlania logu (-v -vv), normalnie tyle nie wyświetla)

screenshot2.png

screenshot3.png

screenshot4.png

Jestem otwarty na sugestie oraz raporty o bugach ;)


edytowany 1x, ostatnio: Patryk27
Zobacz pozostały 1 komentarz
Patryk27
Ssssh! Po kolei ;P
Silv
sh? Chcesz pisać testy jednostkowe w sh?…
Silv
Tzn. rozumiem, że przepisać, bo przecież chyba oczywiste, że… czekaj, czekaj… :P
Patryk27
To było takie sssssh! w formie uciszania - testy jednostkowe w shellu byłyby wyjątkowo niewygodne :-P
Silv
No się domyślam, że dla programu w Pascalu nie planowałeś takich. :P
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12166
0

@Patryk27 - gratuluję nowej wersji :]

Mam tylko małą sugestię, dotyczącą kolejnych nowych wersji IDE - jak dobrze pamiętam, kiedyś sugerowałem Ci kolorowanie składni w pozycjach w okienku CodeInsight; Przydałoby się, aby to okienko posiadało kolory ustawione w ustawieniach (Delphi7 tego nie wspiera, Lazarus połowicznie);

Na myśli mam takie samo tło listy pozycji w CodeInsight, jak tło edytora kodu, taki sam kolor dla słów kluczowych, znaków specjalnych, identyfikatorów itd.; Tego ciągle mi brakuje w środowiskach - pełnej zgodności ustawionego schematu kolorów.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

@furious programming:
Oh, racja - musiałem zapomnieć dodać do listy. Machnięte do pliku TODO.


flowCRANE
Sugerowałem Ci to dawno temu, więc miałeś prawo zapomnieć ;)
somekind
Pliku TODO? trello jest zbyt mainstreamowe?
flowCRANE
W Lazarusie jest moduł TODO, tyle że wstawia odpowiednie linijki do kodu w formie komentarzy - standard;
Patryk27
@somekind: wygodnie używa mi się osobnego pliku todo.txt, dlatego nie chciałem rezygnować z tego - ale w sumie to mam tam sporo notatek i staje się to powoli męczące, zaraz obczaję to Trello. Edit: w sumie to voo2do wydaje się lepsze, jak tak patrzę.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)