Forum: Projeler Genel RSS
D Konsolu
Dört İşlemden (basitten) Geleceğe...
Sayfa:  1  2  3  sonraki 
Avatar
Salih Dinçer #1
Üye Ock 2012 tarihinden beri · 1880 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: D Konsolu
Merhaba,

Herkesin katkı sağlayabileceği bir projeye var mısınız? Bu çalışma bize çok şey (neredeyse D Dili'nin tüm kolaylıklarını!) öğretebilir ve neticesinde çıkan ürünü de kullanabiliriz. Çünkü D, aralıklarıyla (ranges) çok güçlü bir dil...

Belki bu çalışma yeni uygulamalar için fikir temeli de olabilir ki D konsolu fikri aklıma geldi. Buna %100 etken Ali Çehreli'dir!

Evet, evet...:)

Duyurulur, bu tohumu kafama O soktu! Aslında böyle bir hedefim yoktu! Bütün suç O'nundur, şu an nöronlarımda filizleniyor (sinapslarda hareketlenme var...) ve bütün beynimi ele geçiriyor... :nuts:

Ne dersiniz? Parmakları göreyim...

/*
    konsol.d (26.04.2012)
*/
import std.stdio, std.parallelism, std.range;
 
void main() {
    char oku;
 
    while (true) {
        write("=: ");
        do {
            readf("%s", &oku);
            // enter(10)'a basılana kadar okumaya devam et...
        } while (oku!=10);
    }
}
Örneğin şöyle bir komut verdiğimizde taskPool.reduce!"a + b"(iota(11)), bize Gauss'un toplamını ([n²+n]/2) yani 55'i versin. Verileri gerektiği şekilde bölmek için RegExp'i kullanabiliriz. Kabaca buradan 3 veri değerlendirilmeye alınacak. Biri komut, diğeri parametre ve üçüncüsü ise veri kaynağı. Belki bu Lisp'deki (string= "Ali" "Çehreli") şeklinde tanımlamalar da yapabiliriz.

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
zafer #2
Üye Tem 2009 tarihinden beri · 687 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
"D Konsolu" tam olarak nedir anlmadım Salih?

Ne yapacağız bir konsol mu yazacağız? Yani unix sistemlerindeki bash windowsdaki gibi dos konsolu gibi birşey mi?
https://github.com/zafer06 - depo
Avatar
Salih Dinçer #3
Üye Ock 2012 tarihinden beri · 1880 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet ama daha çok LISP görünümde (işlevinde değil) bir şey düşünüyorum...

Aslında verdiğim kod örneğindeki gibi bir şey olabilir. Klavyeden okuduğumuz değerler, anlamlı bir dizge (string) olduğunda ve/veya enter(10) tuşuna basıldığında üst döngüye geçecek. İşte burada, bilgi istiyorum işareti (=:) gelmeden evvel hesap yapılıp ekrana değer yazılacak.

Örneğin ilk başta iki sayıyı toplayabiliriz. Notasyonu bizim alışık olduğumuz, (3+4) gibi kullanabiliriz  ve enter'a basıldığında alt satırada şöyle bir sonuç almalıyız:

=: 3+4
(7)=:


Ekleme: Maksat başlamak çünkü iyi bir alt yapı oluşturabilirsek zamanla D'nin desteklediği tüm komutları kullanabiliriz. Zafer uygun görürse, aklımda yapacağımız şeyin hafif sürümünü konsolKutusu isminde Divid içinde kullanmak da var. Ama bunun için bir başlangıç yapmalıyız...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj Salih Dinçer tarafından değiştirildi; zaman: 2012-04-26, 03:10.
zafer #4
Üye Tem 2009 tarihinden beri · 687 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Salih Dinçer:
Zafer uygun görürse, aklımda yapacağımız şeyin hafif sürümünü konsolKutusu isminde Divid içinde kullanmak da var. Ama bunun için bir başlangıç yapmalıyız...:)

Hala kafamde tam olarak netleştiremesemde bence sorun yok, hatta böyle bir çalışma çok güzel olur diye düşünüyorum. Divide eklenebilirse divid içinde güzel bir eklenti olur :)
https://github.com/zafer06 - depo
Kadir Can #5
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Mantıklı görünüyor. Ben de elimden geldiğince katkı yapmaya çalışırım.
@Salih;
İlk aşama için dört işlem haricinde ne gibi şeyler düşünüyorsun?
Bu mesaj Kadir Can tarafından değiştirildi; zaman: 2012-04-26, 09:38.
Avatar
Salih Dinçer #6
Üye Ock 2012 tarihinden beri · 1880 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Tabi, henüz çalışan bir örnek vermediğim için ne yapmak istediğimi gösteremiyorum. Ama ümit ediyorum, bu yakında olabilir. Yine de dört işlemde bile zorlandım; hiç de göründüğü gibi değilmiş. Bir de Ali hocamın cevap vermesini bekliyorum...

@Kadir
Dört işlem konusu sadece bir ısınma turu olabilir ve hatta bu turu bir çırpıda geçebiliriz. Ben daha çok D'nin gücünü ortaya çıkaran bir şeyler yapmak isterdim. Yani LISP/Scheme gibi dillerde bir defada (tek satırda) yapamayacağımız şeyleri hesaplatmayı becerebilseydik dikkat çekerdi diye düşünüyorum! Yukarıdaki reduce() örneğine benzer...

Yoksa üssü, karesi, logaritması gibi şeyleri yapmak en az dört işlem kadar kolay. Ama dikkat, dün gece ben küsüratlı sayılarda tosladım...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4391 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Python gibi yorumlamalı dillerde son derece kolay tabii çünkü herşey çalışma zamanında gerçekleşiyor.

Bu konudaki gibi dört işlem aslında bilgisayar bölümü öğrencilerinin yakından tanıdıkları bir konudur. Bir satır okunduktan sonra sözcükleme (lexing) ve ayrıştırma (parsing) adımları uygulanır.

Çünkü o satırda aslında belirli bir konuya özel bir dil vardır (domain specific language - DSL).

Sözcükleme ve ayrıştırma adımları kod içinde açıkça yapılabileceği gibi lex ve yacc gibi araçlarla da halledilebilir.

Dört işlem kolay. :) Peki taskPool.reduce!"a + b"(iota(11)) verildiğinde kullanıcının önce import etmesini de isteyecek miyiz? Bu gibi konulara dallandıkça aslında bir D derleyicisi yazılmaya başlanacak. Onunla ilgili bir konu yakın zaman önce açıldı:

  http://forum.dlang.org/post/jm8tat$24lg$1@digitalmars.com

Bir anlamda dmd'nin hizmetlerinin bir kütüphane olarak sunulması anlamına geliyor. Olsa, satırları dmd kütüphanesine verir ve derletiriz.

Dört işlemi ben halletmek istesem Stroustrup'un C++ kitabında kullandığı örneğe bakmak zorunda kalırdım çünkü şimdi hemen oturup yazamam. Ama onu uyguladıktan sonra istenen miktarda karmaşık ifadeler hallediliyor: ((1 + 2) * (3 + (4 - 5))) vs.

Bütün bunlara rağmen D'nin DSL'ler konusunda olağanüstü bir konumda olduğunu hatırlatmak isterim. CTFE (compile time function execution) olanağı ile Andrei'nin son sunumlarında da altını çizdiği süper hızlı işlemler gerçekleştirilebiliyor:

  http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/T…

Orada 'Slides'a tıklarsanız D'nin tam da bu gibi sorunları çözmek için nasıl derleme zamanında expression parser oluşturabildiğini 55 numaralı slayt'ta görüyorsunuz. Onu halleden kod da 51 numaralı slayt'ta...

60 numaralı slaytta'da derleme zamanında oluşturulan D regex motorunun nasıl bilinen en hızlı motor olduğu var.

Ali
Avatar
Salih Dinçer #8
Üye Ock 2012 tarihinden beri · 1880 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler Ali hocam, yazdıkların bize yol gösterecek ve mutlaka tek başına bile faydası olacak şeyler. Kaynakları araştıracağım ve mantığı kavrayacağım inşaallah. Ancak o kitap biz de yok ve nakletmende de sakınca yoksa rica edeceğim. Çok mu bedavacıyım neyim...:)

Neyse balık tutmaktan çok balık tutmayı öğretmekten yanayım. Öyleyse şu kod ile başlayalım mı?

/*
    hesapMakinesi.d (25.04.2012)
*/
import std.stdio;
 
void main()
{
    enum işlem
    {
        çıkart,     // (-) = 0;
        topla,      // (+) = 1;
        böl,        // (÷) = 2;
        çarp,       // (x) = 3;
        üssü      // () = 4;     
        // (√) = 5;
    } işlem xF;
   
    int i, xSay;
    int rakamlar[9];
    int sayılar[10];   
    char oku;
 
    while (true)
    {
        writeln(sayılar);
        writefln("\trakamlar: %d", xSay);
        write("=: ");
        do {
            readf("%s", &oku);
            switch (oku) {
                case '-': xF = işlem.çıkart; goto sonraki;
                case '+': xF = işlem.topla; goto sonraki;
                case '/': xF = işlem.böl; goto sonraki;
                case '*': xF = işlem.çarp; goto sonraki;
                case 'k': xF = işlem.üssü; goto sonraki;
                case ' ':
                        break;
                case 10:
                        break;
                default:
                        xSay++;
                        break;
                sonraki:
                    xSay = 0;
                    writefln("%d - %s", ++i, xF);
            }                        
        } while (oku!=10);
    }
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
zafer #9
Üye Tem 2009 tarihinden beri · 687 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bu konu enterasan ve güzel bir alana doğru kayıyor bu çok güzel, sözcükleme (lexing) ve ayrıştırma (parsing) her zaman ilgi duyduğum ama yetersiz bilgimden dolayı bir türlü tam olarak üstüne gidemediğim konular. Umarım bu basit başlangıç daha karmaşık ve gelişmiş bir yapıya ilk adım olur.

Bu arada konu ile alakasız ama buraya sıkştırayım. Fatih projesine (http://fatihprojesi.meb.gov.tr/tr/index.php) bizimde D dili ile bir katkımız olabilir mi? Ne dersiniz?
https://github.com/zafer06 - depo
acehreli (Moderatör) #10
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4391 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Sanırım Stroustrup'un kitabından hatırladığım hesap makinesi, sitesinde de olan şu kod:

  http://www2.research.att.com/~bs/dc_command_line.c

D'ye de çevrilebilir herhalde.

Ali
Avatar
Salih Dinçer #11
Üye Ock 2012 tarihinden beri · 1880 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Kodu az önce derledim...

veee elbette, bu kod çok başarılı...:)

Değişkenleri eşitleyip birbiriyle işlem yapabiliyorsunuz bile. Bir de UTF'yi (Türkçe karakterli değişkenleri) destekleseydi. Gerçi bunu belki de D ile yapabilirdik. Kaynak koda fazla bakmadım ama çok sıkışırsam bakacağım. Dedim ya balık tutmayı seviyorum...

zafer:
Bu arada konu ile alakasız ama buraya sıkştırayım. Fatih projesine (http://fatihprojesi.meb.gov.tr/tr/index.php) bizimde D dili ile bir katkımız olabilir mi? Ne dersiniz?
Bizim D ile Android uygulamaları geliştirebilmemiz lazım. Belki bu cümle, bu dünyaya yabancı olduğum için Androidce oldu...:)

Ama bu tabletlerde, zannedersem mobile dünyanın yıldızları hüküm sürüyor. Elbette neden D'de olmasın?
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj Salih Dinçer tarafından değiştirildi; zaman: 2012-04-26, 23:31.
Avatar
huseyin #12
Üye Haz 2012 tarihinden beri · 355 mesaj · Konum: Isparta
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hmm bu projenin bir benzerini biryerden tanıyorum sanırım adı ironpython du aynı seklde calısıyordu
>> isareti ile giriş istiyordu
Huseyin
Avatar
Salih Dinçer #13
Üye Ock 2012 tarihinden beri · 1880 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aslında bir çok dilin konsol versiyonu ve/veya konsol ortamında pratik kullanımı var. Bunu büyük çoğunlukla Linux'da görmekteyiz. Bunun yanında MySQL gibi veri tabanı ortamlarında, hatta Quake gibi oyunlarda da var. Yine de o kadar basit değilmiş...:)

Benim burada yapmak istediğim D dilinin başka dillerde olmayan niteliklerini yazı yazar gibi deneyebilmekti.

Bir nevi interpreter...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Kadir Can #14
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bence bu projeye başlayalım.Açıkçası çok faydalı olacağını düşünüyorum.Özellikle konsoldan gelen girişleri ayrıştırmak ve işlemek çok öğretici olabilir.

İlk olarak bence konsolu D dilinin dışında tutarak girilen verilerin doğru ayrıştırılmasına odaklanmalıyız.İşleme kısmına daha sonra geçebiliriz.Belki de yeterli bilgiyi süreç dahilinde edinip yorumlayıcıya çevirebiliriz.Sonuçta yorumlayıcı yazmak o kadar da kolay olmayacaktır.

Gönüllü var mı? :)
canalpay (Moderatör) #15
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bende yorumlayıcı ya derleyiciye yakın bir şeyler yazmaya çalışmıştım.Bu iş sanıldığından çok daha zor. Gelen akımı ayırıp tokenlara ayırmayı bile doğru düzgün başaramamıştım. Bence bunun için ilk önce düzenli ifadelere iyi bakmak gerekiyor.

Benim denemem şu idi : code.google.com/p/kavun  Örnek olarak SDC'ye bakılabilir. Ben ona bakacaktım.

Bence şuan yeni bir proje yerine olan projelere odaklanmak çok daha iyi olacaktır. Özellikle trileri. trileri ingilizceye çevirmede geliştirmede Ali Bey'e yardımcı olursak D dilide çok şey kazanmış olacaktır. Unicode davranışlarında diğer dillerin oldukça önüne geçecek dilin hem reklamı olacak hem de bir çok kişinin yararlanılmasına sağlayacaktır.  Bu sırada hem kendimizi geliştirmiş oluruz hemde bu proje için gerekli araştırmayı da yapmış oluruz.
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  1  2  3  sonraki 
Forum: Projeler Genel RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-04-30, 11:45:06 (UTC -07:00)